diff --git a/docs/DOC_STYLE_GUIDE.md b/docs/DOC_STYLE_GUIDE.md deleted file mode 100644 index 213e857078ce2a3919ad0e575cc4f6f5766b8b41..0000000000000000000000000000000000000000 --- a/docs/DOC_STYLE_GUIDE.md +++ /dev/null @@ -1,67 +0,0 @@ -# Documentation Style Guide - -## General Writing Principles - -- **Clarity & Conciseness**: Always prioritize clarity and brevity. Avoid unnecessary jargon or overly complex explanations. -Keep sentences short and to the point. -- **Gradual Complexity**: Start with the simplest, most basic setup, and then gradually introduce more advanced -concepts and configurations. - -## Formatting Guidelines - -### Headers - -Use **Title Case** for the first and second level headers. - -Example: - - **Basic Usage** - - **Advanced Configuration Options** - -### Lists - -When listing items or options, use bullet points to enhance readability. - -Example: - - Option A - - Option B - - Option C - -### Procedures - -For instructions or processes that need to be followed in a specific order, use numbered steps. - -Example: - 1. Step one: Do this. - - First this sub step. - - Then this sub step. - 2. Step two: Complete this action. - 3. Step three: Verify the result. - -### Code Blocks - -* Use code blocks for multi-line inputs, outputs, commands and code samples. - -Example: -```bash -docker run -it \ - -e THIS=this \ - -e THAT=that - ... -``` - -### Use of Note and Warning - -When adding a note or warning, use the built-in note and warning syntax. - -Example: - -This section is for advanced users only. - - -### Referring to UI Elements - -When referencing UI elements, use ``. - -Example: -1. Toggle the `Advanced` option -2. Enter your model in the `Custom Model` textbox. diff --git a/docs/docs.json b/docs/docs.json deleted file mode 100644 index c91d7064ed5a2442a85b766877e7fe67a11fb6d9..0000000000000000000000000000000000000000 --- a/docs/docs.json +++ /dev/null @@ -1,204 +0,0 @@ -{ - "$schema": "https://mintlify.com/docs.json", - "theme": "mint", - "name": "All Hands Docs", - "colors": { - "primary": "#99873c", - "light": "#ffe165", - "dark": "#ffe165" - }, - "background": { - "color": { - "light": "#f7f3ee", - "dark": "#0B0D0E" - } - }, - "appearance": { - "default": "light" - }, - "favicon": "/logo-square.png", - "navigation": { - "tabs": [ - { - "tab": "Docs", - "pages": [ - "index", - "usage/installation", - "usage/getting-started", - "usage/key-features", - { - "group": "OpenHands Cloud", - "pages": [ - "usage/cloud/openhands-cloud", - { - "group": "Integrations", - "pages": [ - "usage/cloud/github-installation", - "usage/cloud/gitlab-installation" - ] - }, - "usage/cloud/cloud-ui", - "usage/cloud/cloud-api" - ] - }, - { - "group": "Running OpenHands Locally", - "pages": [ - "usage/local-setup", - "usage/how-to/gui-mode", - "usage/how-to/cli-mode", - "usage/how-to/headless-mode", - "usage/how-to/github-action" - ] - }, - { - "group": "Customization", - "pages": [ - "usage/prompting/prompting-best-practices", - "usage/prompting/repository", - { - "group": "Microagents", - "pages": [ - "usage/prompting/microagents-overview", - "usage/prompting/microagents-repo", - "usage/prompting/microagents-keyword", - "usage/prompting/microagents-org", - "usage/prompting/microagents-public" - ] - } - ] - }, - { - "group": "Advanced Configuration", - "pages": [ - { - "group": "LLM Configuration", - "pages": [ - "usage/llms/llms", - { - "group": "Providers", - "pages": [ - "usage/llms/azure-llms", - "usage/llms/google-llms", - "usage/llms/groq", - "usage/llms/local-llms", - "usage/llms/litellm-proxy", - "usage/llms/openai-llms", - "usage/llms/openrouter" - ] - } - ] - }, - { - "group": "Runtime Configuration", - "pages": [ - "usage/runtimes/overview", - { - "group": "Providers", - "pages": [ - "usage/runtimes/docker", - "usage/runtimes/remote", - "usage/runtimes/local", - { - "group": "Third-Party Providers", - "pages": [ - "usage/runtimes/modal", - "usage/runtimes/daytona", - "usage/runtimes/runloop", - "usage/runtimes/e2b" - ] - } - ] - } - ] - }, - "usage/configuration-options", - "usage/how-to/custom-sandbox-guide", - "usage/search-engine-setup", - "usage/mcp" - ] - }, - { - "group": "Troubleshooting & Feedback", - "pages": [ - "usage/troubleshooting/troubleshooting", - "usage/feedback" - ] - }, - { - "group": "OpenHands Developers", - "pages": [ - "usage/how-to/development-overview", - { - "group": "Architecture", - "pages": [ - "usage/architecture/backend", - "usage/architecture/runtime" - ] - }, - "usage/how-to/debugging", - "usage/how-to/evaluation-harness", - "usage/how-to/websocket-connection" - ] - } - ] - }, - { - "tab": "API Reference", - "openapi": "/openapi.json" - } - ], - "global": { - "anchors": [ - { - "anchor": "Company", - "href": "https://www.all-hands.dev/", - "icon": "house" - }, - { - "anchor": "Blog", - "href": "https://www.all-hands.dev/blog", - "icon": "newspaper" - }, - { - "anchor": "OpenHands Cloud", - "href": "https://app.all-hands.dev", - "icon": "cloud" - } - ] - } - }, - "logo": { - "light": "/logo/light.svg", - "dark": "/logo/dark.svg" - }, - "navbar": { - "links": [ - ], - "primary": { - "type": "github", - "href": "https://github.com/All-Hands-AI/OpenHands" - } - }, - "footer": { - "socials": { - "slack": "https://join.slack.com/t/openhands-ai/shared_invite/zt-34zm4j0gj-Qz5kRHoca8DFCbqXPS~f_A", - "github": "https://github.com/All-Hands-AI/OpenHands", - "discord": "https://discord.gg/ESHStjSjD4" - } - }, - "contextual": { - "options": [ - "copy", - "view", - "chatgpt", - "claude" - ] - }, - "redirects": [ - { - "source": "/modules/:slug*", - "destination": "/:slug*" - } - ] -} diff --git a/docs/favicon.svg b/docs/favicon.svg deleted file mode 100644 index b785c738bf178e7072e15ad6770e13ad1032d54b..0000000000000000000000000000000000000000 --- a/docs/favicon.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/docs/index.mdx b/docs/index.mdx deleted file mode 100644 index 4fb2874a0f5bf9abf4daabca40cd13cd6258e784..0000000000000000000000000000000000000000 --- a/docs/index.mdx +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Introduction -description: OpenHands - Code Less, Make More -icon: book-open -mode: wide ---- -Use AI to tackle the toil in your backlog. Our agents have all the same tools as a human developer: they can modify code, run commands, browse the web, call APIs, and yes-even copy code snippets from StackOverflow. - - diff --git a/docs/logo-square.png b/docs/logo-square.png deleted file mode 100644 index 624dad2fb22d4d2ac723d8e9f81ab56e0886c36d..0000000000000000000000000000000000000000 --- a/docs/logo-square.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:de58ad6132a9afb7d4924612c5e013695658af993a81a7611a6564f6a8063d59 -size 1189506 diff --git a/docs/logo/dark.svg b/docs/logo/dark.svg deleted file mode 100644 index 5632a89e4a7d2d7ce61c5c0e8fbf2859e26cc750..0000000000000000000000000000000000000000 --- a/docs/logo/dark.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/logo/light.svg b/docs/logo/light.svg deleted file mode 100644 index 80f4eccf394a0d90d9a1a16bd5ee44bfede63e14..0000000000000000000000000000000000000000 --- a/docs/logo/light.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/openapi.json b/docs/openapi.json deleted file mode 100644 index 954c28957810b9a7f30c0b34bd6caadbe00d2445..0000000000000000000000000000000000000000 --- a/docs/openapi.json +++ /dev/null @@ -1,2091 +0,0 @@ -{ - "openapi": "3.0.3", - "info": { - "title": "OpenHands API", - "description": "OpenHands: Code Less, Make More", - "version": "1.0.0" - }, - "servers": [ - { - "url": "https://app.all-hands.dev", - "description": "Production server" - }, - { - "url": "http://localhost:3000", - "description": "Local development server" - } - ], - "paths": { - "/health": { - "get": { - "summary": "Health check", - "description": "Check if the API is running", - "operationId": "health", - "responses": { - "200": { - "description": "API is running", - "content": { - "text/plain": { - "schema": { - "type": "string", - "example": "OK" - } - } - } - } - } - } - }, - "/api/conversations/{conversation_id}/config": { - "get": { - "summary": "Get runtime configuration", - "description": "Retrieve the runtime configuration (session ID and runtime ID)", - "operationId": "getRemoteRuntimeConfig", - "parameters": [ - { - "name": "conversation_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Conversation ID" - } - ], - "responses": { - "200": { - "description": "Runtime configuration", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "runtime_id": { - "type": "string", - "nullable": true - }, - "session_id": { - "type": "string", - "nullable": true - } - } - } - } - } - } - } - } - }, - "/api/conversations/{conversation_id}/vscode-url": { - "get": { - "summary": "Get VSCode URL", - "description": "Get the VSCode URL for the conversation", - "operationId": "getVscodeUrl", - "parameters": [ - { - "name": "conversation_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Conversation ID" - } - ], - "responses": { - "200": { - "description": "VSCode URL", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "vscode_url": { - "type": "string", - "nullable": true - } - } - } - } - } - }, - "500": { - "description": "Error getting VSCode URL", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "vscode_url": { - "type": "string", - "nullable": true - }, - "error": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "/api/conversations/{conversation_id}/web-hosts": { - "get": { - "summary": "Get runtime hosts", - "description": "Get the hosts used by the runtime", - "operationId": "getHosts", - "parameters": [ - { - "name": "conversation_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Conversation ID" - } - ], - "responses": { - "200": { - "description": "Runtime hosts", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "hosts": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - } - }, - "500": { - "description": "Error getting runtime hosts", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "hosts": { - "type": "array", - "items": { - "type": "string" - }, - "nullable": true - }, - "error": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "/api/conversations/{conversation_id}/submit-feedback": { - "post": { - "summary": "Submit feedback", - "description": "Submit user feedback for a conversation", - "operationId": "submitFeedback", - "parameters": [ - { - "name": "conversation_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Conversation ID" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "email": { - "type": "string", - "format": "email" - }, - "version": { - "type": "string" - }, - "permissions": { - "type": "string", - "default": "private" - }, - "polarity": { - "type": "string" - }, - "feedback": { - "type": "string" - } - } - } - } - } - }, - "responses": { - "200": { - "description": "Feedback submitted successfully", - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } - }, - "500": { - "description": "Error submitting feedback", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "/api/conversations/{conversation_id}/list-files": { - "get": { - "summary": "List files", - "description": "List files in the specified path", - "operationId": "listFiles", - "parameters": [ - { - "name": "conversation_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Conversation ID" - }, - { - "name": "path", - "in": "query", - "required": false, - "schema": { - "type": "string" - }, - "description": "Path to list files from" - } - ], - "responses": { - "200": { - "description": "List of files", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "404": { - "description": "Runtime not initialized", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } - } - } - } - }, - "500": { - "description": "Error listing files", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "/api/conversations/{conversation_id}/select-file": { - "get": { - "summary": "Get file content", - "description": "Retrieve the content of a specified file", - "operationId": "selectFile", - "parameters": [ - { - "name": "conversation_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Conversation ID" - }, - { - "name": "file", - "in": "query", - "required": true, - "schema": { - "type": "string" - }, - "description": "Path of the file to be retrieved" - } - ], - "responses": { - "200": { - "description": "File content", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "code": { - "type": "string" - } - } - } - } - } - }, - "415": { - "description": "Unable to open binary file", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } - } - } - } - }, - "500": { - "description": "Error opening file", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "/api/conversations/{conversation_id}/zip-directory": { - "get": { - "summary": "Download workspace as zip", - "description": "Download the current workspace as a zip file", - "operationId": "zipCurrentWorkspace", - "parameters": [ - { - "name": "conversation_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Conversation ID" - } - ], - "responses": { - "200": { - "description": "Workspace zip file", - "content": { - "application/zip": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - }, - "500": { - "description": "Error zipping workspace", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "/api/conversations/{conversation_id}/git/changes": { - "get": { - "summary": "Get git changes", - "description": "Get git changes in the workspace", - "operationId": "gitChanges", - "parameters": [ - { - "name": "conversation_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Conversation ID" - } - ], - "responses": { - "200": { - "description": "Git changes", - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } - }, - "500": { - "description": "Error getting git changes", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "/api/conversations/{conversation_id}/git/diff": { - "get": { - "summary": "Get git diff", - "description": "Get git diff for a specific file", - "operationId": "gitDiff", - "parameters": [ - { - "name": "conversation_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Conversation ID" - }, - { - "name": "path", - "in": "query", - "required": true, - "schema": { - "type": "string" - }, - "description": "Path of the file to get diff for" - } - ], - "responses": { - "200": { - "description": "Git diff", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "500": { - "description": "Error getting git diff", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "/api/conversations/{conversation_id}/trajectory": { - "get": { - "summary": "Get trajectory", - "description": "Get the conversation trajectory", - "operationId": "getTrajectory", - "parameters": [ - { - "name": "conversation_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Conversation ID" - } - ], - "responses": { - "200": { - "description": "Conversation trajectory", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "trajectory": { - "type": "array", - "items": { - "type": "object" - } - } - } - } - } - } - }, - "500": { - "description": "Error getting trajectory", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "trajectory": { - "type": "array", - "items": { - "type": "object" - }, - "nullable": true - }, - "error": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "/api/conversations/{conversation_id}/security/{path}": { - "get": { - "summary": "Security analyzer API (GET)", - "description": "Catch-all route for security analyzer API GET requests", - "operationId": "securityApiGet", - "parameters": [ - { - "name": "conversation_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Conversation ID" - }, - { - "name": "path", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Security analyzer API path" - } - ], - "responses": { - "200": { - "description": "Security analyzer response", - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } - }, - "404": { - "description": "Security analyzer not initialized", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "detail": { - "type": "string" - } - } - } - } - } - } - } - }, - "post": { - "summary": "Security analyzer API (POST)", - "description": "Catch-all route for security analyzer API POST requests", - "operationId": "securityApiPost", - "parameters": [ - { - "name": "conversation_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Conversation ID" - }, - { - "name": "path", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Security analyzer API path" - } - ], - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } - }, - "responses": { - "200": { - "description": "Security analyzer response", - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } - }, - "404": { - "description": "Security analyzer not initialized", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "detail": { - "type": "string" - } - } - } - } - } - } - } - }, - "put": { - "summary": "Security analyzer API (PUT)", - "description": "Catch-all route for security analyzer API PUT requests", - "operationId": "securityApiPut", - "parameters": [ - { - "name": "conversation_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Conversation ID" - }, - { - "name": "path", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Security analyzer API path" - } - ], - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } - }, - "responses": { - "200": { - "description": "Security analyzer response", - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } - }, - "404": { - "description": "Security analyzer not initialized", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "detail": { - "type": "string" - } - } - } - } - } - } - } - }, - "delete": { - "summary": "Security analyzer API (DELETE)", - "description": "Catch-all route for security analyzer API DELETE requests", - "operationId": "securityApiDelete", - "parameters": [ - { - "name": "conversation_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Conversation ID" - }, - { - "name": "path", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Security analyzer API path" - } - ], - "responses": { - "200": { - "description": "Security analyzer response", - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } - }, - "404": { - "description": "Security analyzer not initialized", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "detail": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "/api/conversations": { - "post": { - "summary": "Create new conversation", - "description": "Initialize a new conversation", - "operationId": "newConversation", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "repository": { - "type": "string", - "nullable": true, - "description": "Full name of the repository (e.g., owner/repo)" - }, - "git_provider": { - "type": "string", - "nullable": true, - "description": "The Git provider (e.g., github or gitlab). If omitted, all configured providers are checked for the repository." - }, - "selected_branch": { - "type": "string", - "nullable": true - }, - "initial_user_msg": { - "type": "string", - "nullable": true - }, - "conversation_instructions": { - "type": "string", - "nullable": true, - "description": "Optional instructions the agent must follow throughout the conversation while addressing the user's initial task" - }, - "image_urls": { - "type": "array", - "items": { - "type": "string" - }, - "nullable": true - }, - "replay_json": { - "type": "string", - "nullable": true - } - } - } - } - } - }, - "responses": { - "200": { - "description": "Conversation created successfully", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "status": { - "type": "string", - "example": "ok" - }, - "conversation_id": { - "type": "string" - } - } - } - } - } - }, - "400": { - "description": "Error creating conversation", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "status": { - "type": "string", - "example": "error" - }, - "message": { - "type": "string" - }, - "msg_id": { - "type": "string" - } - } - } - } - } - } - } - }, - "get": { - "summary": "Search conversations", - "description": "Search for conversations", - "operationId": "searchConversations", - "parameters": [ - { - "name": "page_id", - "in": "query", - "required": false, - "schema": { - "type": "string" - }, - "description": "Page ID for pagination" - }, - { - "name": "limit", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "default": 20 - }, - "description": "Number of conversations to return" - } - ], - "responses": { - "200": { - "description": "Conversations", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "type": "object", - "properties": { - "conversation_id": { - "type": "string" - }, - "title": { - "type": "string" - }, - "last_updated_at": { - "type": "string", - "format": "date-time" - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "selected_repository": { - "type": "string", - "nullable": true - }, - "status": { - "type": "string", - "enum": ["RUNNING", "STOPPED"] - }, - "trigger": { - "type": "string", - "enum": ["GUI", "API"] - } - } - } - }, - "next_page_id": { - "type": "string", - "nullable": true - } - } - } - } - } - } - } - } - }, - "/api/conversations/{conversation_id}": { - "get": { - "summary": "Get conversation", - "description": "Get conversation details", - "operationId": "getConversation", - "parameters": [ - { - "name": "conversation_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Conversation ID" - } - ], - "responses": { - "200": { - "description": "Conversation details", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "conversation_id": { - "type": "string" - }, - "title": { - "type": "string" - }, - "last_updated_at": { - "type": "string", - "format": "date-time" - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "selected_repository": { - "type": "string", - "nullable": true - }, - "status": { - "type": "string", - "enum": ["RUNNING", "STOPPED"] - }, - "trigger": { - "type": "string", - "enum": ["GUI", "API"] - } - } - } - } - } - }, - "404": { - "description": "Conversation not found", - "content": { - "application/json": { - "schema": { - "type": "object", - "nullable": true - } - } - } - } - } - }, - "patch": { - "summary": "Update conversation", - "description": "Update conversation details", - "operationId": "updateConversation", - "parameters": [ - { - "name": "conversation_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Conversation ID" - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "title": { - "type": "string" - } - } - } - } - } - }, - "responses": { - "200": { - "description": "Conversation updated successfully", - "content": { - "application/json": { - "schema": { - "type": "boolean" - } - } - } - } - } - }, - "delete": { - "summary": "Delete conversation", - "description": "Delete a conversation", - "operationId": "deleteConversation", - "parameters": [ - { - "name": "conversation_id", - "in": "path", - "required": true, - "schema": { - "type": "string" - }, - "description": "Conversation ID" - } - ], - "responses": { - "200": { - "description": "Conversation deleted successfully", - "content": { - "application/json": { - "schema": { - "type": "boolean" - } - } - } - } - } - } - }, - "/api/user/repositories": { - "get": { - "summary": "Get user repositories", - "description": "Get repositories for the authenticated user", - "operationId": "getUserRepositories", - "parameters": [ - { - "name": "sort", - "in": "query", - "required": false, - "schema": { - "type": "string", - "default": "pushed" - }, - "description": "Sort order for repositories" - } - ], - "responses": { - "200": { - "description": "User repositories", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "full_name": { - "type": "string" - }, - "description": { - "type": "string", - "nullable": true - }, - "html_url": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "updated_at": { - "type": "string", - "format": "date-time" - } - } - } - } - } - } - }, - "401": { - "description": "Authentication error", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "500": { - "description": "Unknown error", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - } - } - } - }, - "/api/user/info": { - "get": { - "summary": "Get user info", - "description": "Get information about the authenticated user", - "operationId": "getUser", - "responses": { - "200": { - "description": "User information", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "login": { - "type": "string" - }, - "name": { - "type": "string", - "nullable": true - }, - "email": { - "type": "string", - "nullable": true - }, - "avatar_url": { - "type": "string", - "nullable": true - } - } - } - } - } - }, - "401": { - "description": "Authentication error", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "500": { - "description": "Unknown error", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - } - } - } - }, - "/api/user/search/repositories": { - "get": { - "summary": "Search repositories", - "description": "Search for repositories", - "operationId": "searchRepositories", - "parameters": [ - { - "name": "query", - "in": "query", - "required": true, - "schema": { - "type": "string" - }, - "description": "Search query" - }, - { - "name": "per_page", - "in": "query", - "required": false, - "schema": { - "type": "integer", - "default": 5 - }, - "description": "Number of repositories to return per page" - }, - { - "name": "sort", - "in": "query", - "required": false, - "schema": { - "type": "string", - "default": "stars" - }, - "description": "Sort order for repositories" - }, - { - "name": "order", - "in": "query", - "required": false, - "schema": { - "type": "string", - "default": "desc" - }, - "description": "Sort direction" - } - ], - "responses": { - "200": { - "description": "Search results", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "full_name": { - "type": "string" - }, - "description": { - "type": "string", - "nullable": true - }, - "html_url": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "updated_at": { - "type": "string", - "format": "date-time" - } - } - } - } - } - } - }, - "401": { - "description": "Authentication error", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "500": { - "description": "Unknown error", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - } - } - } - }, - "/api/user/suggested-tasks": { - "get": { - "summary": "Get suggested tasks", - "description": "Get suggested tasks for the authenticated user across their most recently pushed repositories", - "operationId": "getSuggestedTasks", - "responses": { - "200": { - "description": "Suggested tasks", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "url": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "type": { - "type": "string" - }, - "created_at": { - "type": "string", - "format": "date-time" - } - } - } - } - } - } - }, - "401": { - "description": "Authentication error", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - }, - "500": { - "description": "Unknown error", - "content": { - "application/json": { - "schema": { - "type": "string" - } - } - } - } - } - } - }, - "/api/settings": { - "get": { - "summary": "Get settings", - "description": "Get user settings", - "operationId": "loadSettings", - "responses": { - "200": { - "description": "User settings", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "language": { - "type": "string" - }, - "agent": { - "type": "string" - }, - "security_analyzer": { - "type": "string" - }, - "confirmation_mode": { - "type": "boolean" - }, - "llm_model": { - "type": "string" - }, - "llm_api_key_set": { - "type": "boolean" - }, - "llm_base_url": { - "type": "string", - "nullable": true - }, - "remote_runtime_resource_factor": { - "type": "number" - }, - "enable_default_condenser": { - "type": "boolean" - }, - "enable_sound_notifications": { - "type": "boolean" - }, - "user_consents_to_analytics": { - "type": "boolean" - }, - "provider_tokens_set": { - "type": "object", - "additionalProperties": { - "type": "boolean" - } - } - } - } - } - } - }, - "401": { - "description": "Invalid token", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } - } - } - } - }, - "404": { - "description": "Settings not found", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } - } - } - } - } - } - }, - "post": { - "summary": "Store settings", - "description": "Store user settings", - "operationId": "storeSettings", - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "language": { - "type": "string" - }, - "agent": { - "type": "string" - }, - "security_analyzer": { - "type": "string" - }, - "confirmation_mode": { - "type": "boolean" - }, - "llm_model": { - "type": "string" - }, - "llm_api_key": { - "type": "string" - }, - "llm_base_url": { - "type": "string", - "nullable": true - }, - "remote_runtime_resource_factor": { - "type": "number" - }, - "enable_default_condenser": { - "type": "boolean" - }, - "enable_sound_notifications": { - "type": "boolean" - }, - "user_consents_to_analytics": { - "type": "boolean" - }, - "provider_tokens": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - } - } - } - }, - "responses": { - "200": { - "description": "Settings stored successfully", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "message": { - "type": "string" - } - } - } - } - } - }, - "401": { - "description": "Invalid token", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } - } - } - } - }, - "500": { - "description": "Error storing settings", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "/api/reset-settings": { - "post": { - "summary": "Reset settings (Deprecated)", - "description": "This endpoint is deprecated and will return a 410 Gone error. Reset functionality has been removed.", - "operationId": "resetSettings", - "deprecated": true, - "responses": { - "410": { - "description": "Feature removed", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": { - "type": "string", - "example": "Reset settings functionality has been removed." - } - } - } - } - } - } - } - } - }, - "/api/unset-settings-tokens": { - "post": { - "summary": "Unset settings tokens", - "description": "Unset provider tokens in settings", - "operationId": "unsetSettingsTokens", - "responses": { - "200": { - "description": "Tokens unset successfully", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "message": { - "type": "string" - } - } - } - } - } - }, - "500": { - "description": "Error unsetting tokens", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "/api/options/models": { - "get": { - "summary": "Get models", - "description": "Get all models supported by LiteLLM", - "operationId": "getLitellmModels", - "responses": { - "200": { - "description": "List of models", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - } - } - }, - "/api/options/agents": { - "get": { - "summary": "Get agents", - "description": "Get all agents supported by OpenHands", - "operationId": "getAgents", - "responses": { - "200": { - "description": "List of agents", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - } - } - }, - "/api/options/security-analyzers": { - "get": { - "summary": "Get security analyzers", - "description": "Get all supported security analyzers", - "operationId": "getSecurityAnalyzers", - "responses": { - "200": { - "description": "List of security analyzers", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - } - } - }, - "/api/options/config": { - "get": { - "summary": "Get config", - "description": "Get current server configuration", - "operationId": "getConfig", - "responses": { - "200": { - "description": "Server configuration", - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } - } - } - } - } - }, - "components": { - "schemas": { - "Repository": { - "type": "object", - "properties": { - "full_name": { - "type": "string" - }, - "description": { - "type": "string", - "nullable": true - }, - "html_url": { - "type": "string" - }, - "private": { - "type": "boolean" - }, - "fork": { - "type": "boolean" - }, - "updated_at": { - "type": "string", - "format": "date-time" - } - } - }, - "User": { - "type": "object", - "properties": { - "login": { - "type": "string" - }, - "name": { - "type": "string", - "nullable": true - }, - "email": { - "type": "string", - "nullable": true - }, - "avatar_url": { - "type": "string", - "nullable": true - } - } - }, - "SuggestedTask": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "url": { - "type": "string" - }, - "repository": { - "type": "string" - }, - "type": { - "type": "string" - }, - "created_at": { - "type": "string", - "format": "date-time" - } - } - }, - "ConversationInfo": { - "type": "object", - "properties": { - "conversation_id": { - "type": "string" - }, - "title": { - "type": "string" - }, - "last_updated_at": { - "type": "string", - "format": "date-time" - }, - "created_at": { - "type": "string", - "format": "date-time" - }, - "selected_repository": { - "type": "string", - "nullable": true - }, - "status": { - "type": "string", - "enum": ["RUNNING", "STOPPED"] - }, - "trigger": { - "type": "string", - "enum": ["GUI", "API"] - } - } - }, - "ConversationInfoResultSet": { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ConversationInfo" - } - }, - "next_page_id": { - "type": "string", - "nullable": true - } - } - }, - "FeedbackDataModel": { - "type": "object", - "properties": { - "email": { - "type": "string", - "format": "email" - }, - "version": { - "type": "string" - }, - "permissions": { - "type": "string", - "default": "private" - }, - "polarity": { - "type": "string" - }, - "feedback": { - "type": "string" - }, - "trajectory": { - "type": "array", - "items": { - "type": "object" - } - } - } - }, - "Settings": { - "type": "object", - "properties": { - "language": { - "type": "string" - }, - "agent": { - "type": "string" - }, - "security_analyzer": { - "type": "string" - }, - "confirmation_mode": { - "type": "boolean" - }, - "llm_model": { - "type": "string" - }, - "llm_api_key": { - "type": "string" - }, - "llm_base_url": { - "type": "string", - "nullable": true - }, - "remote_runtime_resource_factor": { - "type": "number" - }, - "enable_default_condenser": { - "type": "boolean" - }, - "enable_sound_notifications": { - "type": "boolean" - }, - "user_consents_to_analytics": { - "type": "boolean" - } - } - }, - "GETSettingsModel": { - "type": "object", - "properties": { - "language": { - "type": "string" - }, - "agent": { - "type": "string" - }, - "security_analyzer": { - "type": "string" - }, - "confirmation_mode": { - "type": "boolean" - }, - "llm_model": { - "type": "string" - }, - "llm_api_key_set": { - "type": "boolean" - }, - "llm_base_url": { - "type": "string", - "nullable": true - }, - "remote_runtime_resource_factor": { - "type": "number" - }, - "enable_default_condenser": { - "type": "boolean" - }, - "enable_sound_notifications": { - "type": "boolean" - }, - "user_consents_to_analytics": { - "type": "boolean" - }, - "provider_tokens_set": { - "type": "object", - "additionalProperties": { - "type": "boolean" - } - } - } - }, - "POSTSettingsModel": { - "type": "object", - "properties": { - "language": { - "type": "string" - }, - "agent": { - "type": "string" - }, - "security_analyzer": { - "type": "string" - }, - "confirmation_mode": { - "type": "boolean" - }, - "llm_model": { - "type": "string" - }, - "llm_api_key": { - "type": "string" - }, - "llm_base_url": { - "type": "string", - "nullable": true - }, - "remote_runtime_resource_factor": { - "type": "number" - }, - "enable_default_condenser": { - "type": "boolean" - }, - "enable_sound_notifications": { - "type": "boolean" - }, - "user_consents_to_analytics": { - "type": "boolean" - }, - "provider_tokens": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - } - } - }, - "securitySchemes": { - "bearerAuth": { - "type": "http", - "scheme": "bearer", - "bearerFormat": "JWT" - } - } - }, - "security": [ - { - "bearerAuth": [] - } - ] -} diff --git a/docs/static/img/backend_architecture.png b/docs/static/img/backend_architecture.png deleted file mode 100644 index c7eae5508960e41d90447bafadefa1284bb38232..0000000000000000000000000000000000000000 --- a/docs/static/img/backend_architecture.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ec7d7be3dc2240b7beefd169d9aadeb261a885ba036d48ee1c869f2f72c93cfe -size 273400 diff --git a/docs/static/img/backend_architecture.puml b/docs/static/img/backend_architecture.puml deleted file mode 100644 index c96651ab469baa827cd9f0a2ff59492191f22e17..0000000000000000000000000000000000000000 --- a/docs/static/img/backend_architecture.puml +++ /dev/null @@ -1,201 +0,0 @@ -@startuml openhands -!pragma useIntermediatePackages false - -class openhands.action.agent.AgentEchoAction { - content: str - runnable: bool - action: str -} -class openhands.action.agent.AgentFinishAction { - runnable: bool - action: str -} -class openhands.observation.AgentMessageObservation { - role: str - observation: str -} -class openhands.action.agent.AgentSummarizeAction { - summary: str - action: str -} -class openhands.action.agent.AgentThinkAction { - thought: str - runnable: bool - action: str -} -class openhands.action.base.ExecutableAction { -} -class openhands.action.base.NotExecutableAction { -} -class openhands.observation.Observation { - content: str -} -class openhands.action.base.Action { -} -class openhands.action.base.NullAction { - action: str -} -class openhands.action.bash.CmdRunAction { - command: str - action: str -} -class openhands.action.browse.BrowseURLAction { - url: str - action: str -} -class openhands.observation.BrowserOutputObservation { - url: str - status_code: int - error: bool - observation: str -} -class openhands.action.fileop.FileReadAction { - path: str - action: str -} -class openhands.observation.FileReadObservation { - path: str - observation: str -} -class openhands.action.fileop.FileWriteAction { - path: str - contents: str - action: str -} -class openhands.observation.FileWriteObservation { - path: str - observation: str -} -class openhands.action.tasks.AddTaskAction { - parent: str - goal: str - subtasks: list - action: str -} -class openhands.action.tasks.ModifyTaskAction { - id: str - state: str - action: str -} -abstract class openhands.agent.Agent { - _registry: Dict[str, Type[Agent]] {static} - llm: LLM - _complete: None -} -class openhands.llm.llm.LLM { - model: None - api_key: None - base_url: None - _debug_dir: None - _debug_idx: None - _debug_id: None - _completion: None -} -class openhands.controller.agent_controller.AgentController { - agent: Agent - max_iterations: int - workdir: str - command_manager: CommandManager - state: State - plan: Plan - callbacks: List[Callable] -} -class openhands.observation.AgentErrorObservation { - observation: str -} -class openhands.controller.command_manager.CommandManager { - directory: None - shell: None -} -class openhands.observation.NullObservation { - observation: str -} -class openhands.plan.Plan { - main_goal: str {static} - task: Task {static} - main_goal: str - task: None -} -class openhands.state.State { - plan: Plan - iteration: int - history: List[Tuple[Action, Observation]] - updated_info: List[Tuple[Action, Observation]] -} -class openhands.observation.CmdOutputObservation { - command: str - exit_code: int - observation: str -} -class openhands.sandbox.sandbox.DockerInteractive { - instance_id: None - instance_id: None - workspace_dir: None - workspace_dir: None - workspace_dir: None - timeout: int - base_container_image: None - container_name: None -} -class openhands.observation.UserMessageObservation { - role: str - observation: str -} -class openhands.plan.Task { - id: str {static} - goal: str {static} - parent: Task | None {static} - subtasks: List[Task] {static} - id: None - id: None - parent: None - goal: str - subtasks: None -} - -class openhands.server.session.Session { - websocket: None - controller: Optional[AgentController] - agent: Optional[Agent] - agent_task: None -} - -openhands.action.base.ExecutableAction <|-- openhands.action.agent.AgentEchoAction -openhands.action.base.NotExecutableAction <|-- openhands.action.agent.AgentFinishAction -openhands.observation.Observation <|-- openhands.observation.AgentMessageObservation -openhands.action.base.NotExecutableAction <|-- openhands.action.agent.AgentSummarizeAction -openhands.action.base.NotExecutableAction <|-- openhands.action.agent.AgentThinkAction -openhands.action.base.Action <|-- openhands.action.base.ExecutableAction -openhands.action.base.Action <|-- openhands.action.base.NotExecutableAction -openhands.action.base.NotExecutableAction <|-- openhands.action.base.NullAction -openhands.action.base.ExecutableAction <|-- openhands.action.bash.CmdRunAction -openhands.action.base.ExecutableAction <|-- openhands.action.browse.BrowseURLAction -openhands.observation.Observation <|-- openhands.observation.BrowserOutputObservation -openhands.action.base.ExecutableAction <|-- openhands.action.fileop.FileReadAction -openhands.observation.Observation <|-- openhands.observation.FileReadObservation -openhands.action.base.ExecutableAction <|-- openhands.action.fileop.FileWriteAction -openhands.observation.Observation <|-- openhands.observation.FileWriteObservation -openhands.action.base.NotExecutableAction <|-- openhands.action.tasks.AddTaskAction -openhands.action.base.NotExecutableAction <|-- openhands.action.tasks.ModifyTaskAction -openhands.agent.Agent *-- openhands.agent.Agent -openhands.agent.Agent *-- openhands.llm.llm.LLM -openhands.controller.agent_controller.AgentController *-- openhands.agent.Agent -openhands.observation.Observation <|-- openhands.observation.AgentErrorObservation -openhands.observation.Observation <|-- openhands.observation.NullObservation -openhands.plan.Plan *-- openhands.plan.Task -openhands.state.State *-- openhands.plan.Plan -openhands.state.State *-- openhands.observation.CmdOutputObservation -openhands.state.State *-- openhands.action.base.Action -openhands.state.State *-- openhands.observation.Observation -openhands.observation.Observation <|-- openhands.observation.CmdOutputObservation -openhands.observation.Observation <|-- openhands.observation.UserMessageObservation -openhands.plan.Task *-- openhands.plan.Task -openhands.server.session.Session *-- openhands.controller.agent_controller.AgentController -openhands.server.session.Session *-- openhands.agent.Agent -openhands.controller.agent_controller.AgentController -> openhands.state.State -openhands.controller.agent_controller.AgentController -> openhands.plan.Plan -openhands.controller.agent_controller.AgentController -> openhands.controller.command_manager.CommandManager -openhands.controller.command_manager.CommandManager -> openhands.sandbox.sandbox.DockerInteractive - -footer Based on f3fda42; Generated by //py2puml// -@enduml diff --git a/docs/static/img/backend_architecture.svg b/docs/static/img/backend_architecture.svg deleted file mode 100644 index a5fc173d5a844679f0a5f2089140fa80f1dd72b9..0000000000000000000000000000000000000000 --- a/docs/static/img/backend_architecture.svg +++ /dev/null @@ -1 +0,0 @@ -openhandsactionagentbasebashbrowsefileoptasksobservationagentllm.llmcontrolleragent_controllercommand_managerplanstatesandbox.sandboxserver.sessionAgentEchoActioncontent: strrunnable: boolaction: strAgentFinishActionrunnable: boolaction: strAgentRecallActionquery: straction: strAgentSummarizeActionsummary: straction: strAgentThinkActionthought: strrunnable: boolaction: strExecutableActionNotExecutableActionActionNullActionaction: strCmdKillActionid: intaction: strCmdRunActioncommand: strbackground: boolaction: strBrowseURLActionurl: straction: strFileReadActionpath: straction: strFileWriteActionpath: strcontents: straction: strAddTaskActionparent: strgoal: strsubtasks: listaction: strModifyTaskActionid: strstate: straction: strAgentMessageObservationrole: strobservation: strAgentRecallObservationmemories: List[str]role: strobservation: strObservationcontent: strBrowserOutputObservationurl: strstatus_code: interror: boolobservation: strFileReadObservationpath: strobservation: strFileWriteObservationpath: strobservation: strAgentErrorObservationobservation: strNullObservationobservation: strCmdOutputObservationcommand_id: intcommand: strexit_code: intobservation: strUserMessageObservationrole: strobservation: strAgent_registry: Dict[str, Type[Agent]]llm: LLM_complete: NoneLLMmodel: Noneapi_key: Nonebase_url: None_debug_dir: None_debug_idx: None_debug_id: None_completion: NoneAgentControlleragent: Agentmax_iterations: intworkdir: strcommand_manager: CommandManagerstate: Stateplan: Plancallbacks: List[Callable]CommandManagerdirectory: Noneshell: NonePlanmain_goal: strtask: Taskmain_goal: strtask: NoneTaskid: strgoal: strparent: Task | Nonesubtasks: List[Task]id: Noneid: Noneparent: Nonegoal: strsubtasks: NoneStateplan: Planiteration: intbackground_commands_obs: List[CmdOutputObservation]history: List[Tuple[Action, Observation]]updated_info: List[Tuple[Action, Observation]]DockerInteractivebackground_commands: Dict[int, BackgroundCommand]instance_id: Noneinstance_id: Noneworkspace_dir: Noneworkspace_dir: Noneworkspace_dir: Nonetimeout: intbase_container_image: Nonecontainer_name: NoneBackgroundCommandSessionwebsocket: Nonecontroller: Optional[AgentController]agent: Optional[Agent]agent_task: NoneBased on f3fda42; Generated bypy2puml diff --git a/docs/static/img/connect-repo.png b/docs/static/img/connect-repo.png deleted file mode 100644 index 9eb86dc79a41fe5a36513115b71f8ca34bcc8ec3..0000000000000000000000000000000000000000 Binary files a/docs/static/img/connect-repo.png and /dev/null differ diff --git a/docs/static/img/docs/api-key-generation.png b/docs/static/img/docs/api-key-generation.png deleted file mode 100644 index 713a4a79d43abc83d1b6834bd94e6892214c157b..0000000000000000000000000000000000000000 Binary files a/docs/static/img/docs/api-key-generation.png and /dev/null differ diff --git a/docs/static/img/logo-square.png b/docs/static/img/logo-square.png deleted file mode 100644 index 624dad2fb22d4d2ac723d8e9f81ab56e0886c36d..0000000000000000000000000000000000000000 --- a/docs/static/img/logo-square.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:de58ad6132a9afb7d4924612c5e013695658af993a81a7611a6564f6a8063d59 -size 1189506 diff --git a/docs/static/img/logo.png b/docs/static/img/logo.png deleted file mode 100644 index 799c7ee7392f97f50eb6b91a35aa6c74c6ba0ae9..0000000000000000000000000000000000000000 Binary files a/docs/static/img/logo.png and /dev/null differ diff --git a/docs/static/img/oh-features.png b/docs/static/img/oh-features.png deleted file mode 100644 index 376ef750e5baed2d874b9bd4ec0dc8c48f2f84af..0000000000000000000000000000000000000000 --- a/docs/static/img/oh-features.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e5022b7839f81b08e06b7b4f2f6e624259aa68ed6bfd95b47026cb940bacacb -size 147978 diff --git a/docs/static/img/results.png b/docs/static/img/results.png deleted file mode 100644 index 7fdb83affef90ccf017c7c484f97d50c3a8cf003..0000000000000000000000000000000000000000 --- a/docs/static/img/results.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:920040c9ef19e8bed163da4b2ba337f8108e8636f55ce0a1b6388d5cd9ab32c2 -size 323430 diff --git a/docs/static/img/screenshot.png b/docs/static/img/screenshot.png deleted file mode 100644 index 6976b12a044873c720d9e1ab4c98ddc64ce3b517..0000000000000000000000000000000000000000 --- a/docs/static/img/screenshot.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4bb621a61826a12dc8eea4fb2b8d270e8b6a12dcb77ac84665982452a48cb6c4 -size 679233 diff --git a/docs/static/img/system_architecture.png b/docs/static/img/system_architecture.png deleted file mode 100644 index 42c05b1d4a86d8fb15e54075bb5df962c6aea7c1..0000000000000000000000000000000000000000 Binary files a/docs/static/img/system_architecture.png and /dev/null differ diff --git a/docs/static/img/system_architecture.puml b/docs/static/img/system_architecture.puml deleted file mode 100644 index b1b9713ef45fb55eb1cd418dbd5ae7c0c434e187..0000000000000000000000000000000000000000 --- a/docs/static/img/system_architecture.puml +++ /dev/null @@ -1,67 +0,0 @@ -@startuml "System Architecture" - - -node frontend as frontend{ - - component App - - package components{ - - component Terminal - - component ChatInterface - - component BannerSettings - - } - - package services{ - component chatService - - component settingsService - - chatService -[hidden]u-> settingsService - } - - package socket - - App -> Terminal - App -> ChatInterface - App -> BannerSettings - ChatInterface -> chatService - BannerSettings -> settingsService - Terminal -> socket - chatService -d-> socket - settingsService -d-> socket - services -[hidden]d-> socket - - Terminal -[hidden]u-> ChatInterface - ChatInterface -[hidden]u-> BannerSettings - - - - interface "HTTP (:3001)" as HTTP - HTTP - App - -} - -node backend{ - package server as serverpackage{ - component Server - - 'defined in server/server.py, port is defined at startup with uvicorn - interface "Client WS\n(:3000/ws)" as client_socket - client_socket - Server - - - } - node AgentController{ - - } - Server -d-> AgentController -} - - -socket -d-> client_socket: connects to \n VITE_TERMINAL_WS_URL - -@enduml diff --git a/docs/static/img/system_architecture.svg b/docs/static/img/system_architecture.svg deleted file mode 100644 index d259a4ca3be652065ed67f11ec352fce9faee973..0000000000000000000000000000000000000000 --- a/docs/static/img/system_architecture.svg +++ /dev/null @@ -1 +0,0 @@ -frontendcomponentsservicesbackendserverAppsocketHTTP (:3001)TerminalChatInterfaceBannerSettingschatServicesettingsServiceServerClient WS(:3000/ws)AgentControllerconnects toVITE_TERMINAL_WS_URL diff --git a/docs/static/img/system_architecture_overview.png b/docs/static/img/system_architecture_overview.png deleted file mode 100644 index 290972eb78592d3d88b7016e67b551b41b8ae96d..0000000000000000000000000000000000000000 --- a/docs/static/img/system_architecture_overview.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8059e09a3a6cadda2f0e19eb6d16dc05b2179c56b6604998be70076bd6bd70a6 -size 175252 diff --git a/docs/static/img/teaser.mp4 b/docs/static/img/teaser.mp4 deleted file mode 100644 index 6e7891c85d296a11fee49cdffb02098c3da2094e..0000000000000000000000000000000000000000 --- a/docs/static/img/teaser.mp4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a2b9dfd699226a4e6d3e2bb0926941f954cc11c68024e011c861215bb81ff381 -size 36187951 diff --git a/docs/usage/about.mdx b/docs/usage/about.mdx deleted file mode 100644 index 0d52f410ba4ac1bcd9fdc7f07e63458e1fb1a33c..0000000000000000000000000000000000000000 --- a/docs/usage/about.mdx +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: About OpenHands ---- - -## Research Strategy - -Achieving full replication of production-grade applications with LLMs is a complex endeavor. Our strategy involves: - -- **Core Technical Research:** Focusing on foundational research to understand and improve the technical aspects of code generation and handling. -- **Task Planning:** Developing capabilities for bug detection, codebase management, and optimization. -- **Evaluation:** Establishing comprehensive evaluation metrics to better understand and improve our agents. - -## Default Agent - -Our default Agent is currently the [CodeActAgent](./agents), which is capable of generating code and handling files. - -## Built With - -OpenHands is built using a combination of powerful frameworks and libraries, providing a robust foundation for its -development. Here are the key technologies used in the project: - -![FastAPI](https://img.shields.io/badge/FastAPI-black?style=for-the-badge) ![uvicorn](https://img.shields.io/badge/uvicorn-black?style=for-the-badge) ![LiteLLM](https://img.shields.io/badge/LiteLLM-black?style=for-the-badge) ![Docker](https://img.shields.io/badge/Docker-black?style=for-the-badge) ![Ruff](https://img.shields.io/badge/Ruff-black?style=for-the-badge) ![MyPy](https://img.shields.io/badge/MyPy-black?style=for-the-badge) ![LlamaIndex](https://img.shields.io/badge/LlamaIndex-black?style=for-the-badge) ![React](https://img.shields.io/badge/React-black?style=for-the-badge) - -Please note that the selection of these technologies is in progress, and additional technologies may be added or -existing ones may be removed as the project evolves. We strive to adopt the most suitable and efficient tools to -enhance the capabilities of OpenHands. - -## License - -Distributed under MIT [License](https://github.com/All-Hands-AI/OpenHands/blob/main/LICENSE). diff --git a/docs/usage/agents.mdx b/docs/usage/agents.mdx deleted file mode 100644 index ec51228bcf1638a3289b5b56d5e7c65cf1b584ba..0000000000000000000000000000000000000000 --- a/docs/usage/agents.mdx +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Main Agent and Capabilities ---- - -## CodeActAgent - -### Description - -This agent implements the CodeAct idea ([paper](https://arxiv.org/abs/2402.01030), [tweet](https://twitter.com/xingyaow_/status/1754556835703751087)) that consolidates LLM agents’ **act**ions into a -unified **code** action space for both _simplicity_ and _performance_. - -The conceptual idea is illustrated below. At each turn, the agent can: - -1. **Converse**: Communicate with humans in natural language to ask for clarification, confirmation, etc. -2. **CodeAct**: Choose to perform the task by executing code - -- Execute any valid Linux `bash` command -- Execute any valid `Python` code with [an interactive Python interpreter](https://ipython.org/). This is simulated through `bash` command, see plugin system below for more details. - -![image](https://github.com/All-Hands-AI/OpenHands/assets/38853559/92b622e3-72ad-4a61-8f41-8c040b6d5fb3) - -### Demo - -https://github.com/All-Hands-AI/OpenHands/assets/38853559/f592a192-e86c-4f48-ad31-d69282d5f6ac - -_Example of CodeActAgent with `gpt-4-turbo-2024-04-09` performing a data science task (linear regression)_. diff --git a/docs/usage/architecture/backend.mdx b/docs/usage/architecture/backend.mdx deleted file mode 100644 index b49c5b45b250bf82cb46d46abbe666ec6872b2af..0000000000000000000000000000000000000000 --- a/docs/usage/architecture/backend.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Backend Architecture ---- - -
- OpenHands System Architecture Diagram Jul 4 2024 -

OpenHands System Architecture Diagram (July 4, 2024)

-
- -This is a high-level overview of the system architecture. The system is divided into two main components: the frontend and the backend. The frontend is responsible for handling user interactions and displaying the results. The backend is responsible for handling the business logic and executing the agents. - -# Frontend architecture - -![system_architecture.svg](/static/img/system_architecture.svg) - -This Overview is simplified to show the main components and their interactions. For a more detailed view of the backend architecture, see the Backend Architecture section below. - -# Backend Architecture - -_**Disclaimer**: The backend architecture is a work in progress and is subject to change. The following diagram shows the current architecture of the backend based on the commit that is shown in the footer of the diagram._ - -![backend_architecture.svg](/static/img/backend_architecture.svg) - -
- Updating this Diagram -
- The generation of the backend architecture diagram is partially automated. - The diagram is generated from the type hints in the code using the py2puml - tool. The diagram is then manually reviewed, adjusted and exported to PNG - and SVG. - - ## Prerequisites - - - Running python environment in which openhands is executable - (according to the instructions in the README.md file in the root of the repository) - - [py2puml](https://github.com/lucsorel/py2puml) installed - -## Steps - -1. Autogenerate the diagram by running the following command from the root of the repository: - `py2puml openhands openhands > docs/architecture/backend_architecture.puml` - -2. Open the generated file in a PlantUML editor, e.g. Visual Studio Code with the PlantUML extension or [PlantText](https://www.planttext.com/) - -3. Review the generated PUML and make all necessary adjustments to the diagram (add missing parts, fix mistakes, improve positioning). - _py2puml creates the diagram based on the type hints in the code, so missing or incorrect type hints may result in an incomplete or incorrect diagram._ - -4. Review the diff between the new and the previous diagram and manually check if the changes are correct. - _Make sure not to remove parts that were manually added to the diagram in the past and are still relevant._ - -5. Add the commit hash of the commit that was used to generate the diagram to the diagram footer. - -6. Export the diagram as PNG and SVG files and replace the existing diagrams in the `docs/architecture` directory. This can be done with (e.g. [PlantText](https://www.planttext.com/)) - -
-
diff --git a/docs/usage/architecture/runtime.mdx b/docs/usage/architecture/runtime.mdx deleted file mode 100644 index 5ebcf3bafc21348c88b86abb9b5088d5d2d3021c..0000000000000000000000000000000000000000 --- a/docs/usage/architecture/runtime.mdx +++ /dev/null @@ -1,136 +0,0 @@ ---- -title: Runtime Architecture ---- - -The OpenHands Docker Runtime is the core component that enables secure and flexible execution of AI agent's action. -It creates a sandboxed environment using Docker, where arbitrary code can be run safely without risking the host system. - -## Why do we need a sandboxed runtime? - -OpenHands needs to execute arbitrary code in a secure, isolated environment for several reasons: - -1. Security: Executing untrusted code can pose significant risks to the host system. A sandboxed environment prevents malicious code from accessing or modifying the host system's resources -2. Consistency: A sandboxed environment ensures that code execution is consistent across different machines and setups, eliminating "it works on my machine" issues -3. Resource Control: Sandboxing allows for better control over resource allocation and usage, preventing runaway processes from affecting the host system -4. Isolation: Different projects or users can work in isolated environments without interfering with each other or the host system -5. Reproducibility: Sandboxed environments make it easier to reproduce bugs and issues, as the execution environment is consistent and controllable - -## How does the Runtime work? - -The OpenHands Runtime system uses a client-server architecture implemented with Docker containers. Here's an overview of how it works: - -```mermaid -graph TD - A[User-provided Custom Docker Image] --> B[OpenHands Backend] - B -->|Builds| C[OH Runtime Image] - C -->|Launches| D[Action Executor] - D -->|Initializes| E[Browser] - D -->|Initializes| F[Bash Shell] - D -->|Initializes| G[Plugins] - G -->|Initializes| L[Jupyter Server] - - B -->|Spawn| H[Agent] - B -->|Spawn| I[EventStream] - I <--->|Execute Action to - Get Observation - via REST API - | D - - H -->|Generate Action| I - I -->|Obtain Observation| H - - subgraph "Docker Container" - D - E - F - G - L - end -``` - -1. User Input: The user provides a custom base Docker image -2. Image Building: OpenHands builds a new Docker image (the "OH runtime image") based on the user-provided image. This new image includes OpenHands-specific code, primarily the "runtime client" -3. Container Launch: When OpenHands starts, it launches a Docker container using the OH runtime image -4. Action Execution Server Initialization: The action execution server initializes an `ActionExecutor` inside the container, setting up necessary components like a bash shell and loading any specified plugins -5. Communication: The OpenHands backend (`openhands/runtime/impl/eventstream/eventstream_runtime.py`) communicates with the action execution server over RESTful API, sending actions and receiving observations -6. Action Execution: The runtime client receives actions from the backend, executes them in the sandboxed environment, and sends back observations -7. Observation Return: The action execution server sends execution results back to the OpenHands backend as observations - -The role of the client: - -- It acts as an intermediary between the OpenHands backend and the sandboxed environment -- It executes various types of actions (shell commands, file operations, Python code, etc.) safely within the container -- It manages the state of the sandboxed environment, including the current working directory and loaded plugins -- It formats and returns observations to the backend, ensuring a consistent interface for processing results - -## How OpenHands builds and maintains OH Runtime images - -OpenHands' approach to building and managing runtime images ensures efficiency, consistency, and flexibility in creating and maintaining Docker images for both production and development environments. - -Check out the [relevant code](https://github.com/All-Hands-AI/OpenHands/blob/main/openhands/runtime/utils/runtime_build.py) if you are interested in more details. - -### Image Tagging System - -OpenHands uses a three-tag system for its runtime images to balance reproducibility with flexibility. -Tags may be in one of 2 formats: - -- **Versioned Tag**: `oh_v{openhands_version}_{base_image}` (e.g.: `oh_v0.9.9_nikolaik_s_python-nodejs_t_python3.12-nodejs22`) -- **Lock Tag**: `oh_v{openhands_version}_{16_digit_lock_hash}` (e.g.: `oh_v0.9.9_1234567890abcdef`) -- **Source Tag**: `oh_v{openhands_version}_{16_digit_lock_hash}_{16_digit_source_hash}` - (e.g.: `oh_v0.9.9_1234567890abcdef_1234567890abcdef`) - -#### Source Tag - Most Specific - -This is the first 16 digits of the MD5 of the directory hash for the source directory. This gives a hash -for only the openhands source - -#### Lock Tag - -This hash is built from the first 16 digits of the MD5 of: - -- The name of the base image upon which the image was built (e.g.: `nikolaik/python-nodejs:python3.12-nodejs22`) -- The content of the `pyproject.toml` included in the image. -- The content of the `poetry.lock` included in the image. - -This effectively gives a hash for the dependencies of Openhands independent of the source code. - -#### Versioned Tag - Most Generic - -This tag is a concatenation of openhands version and the base image name (transformed to fit in tag standard). - -#### Build Process - -When generating an image... - -- **No re-build**: OpenHands first checks whether an image with the same **most specific source tag** exists. If there is such an image, - no build is performed - the existing image is used. -- **Fastest re-build**: OpenHands next checks whether an image with the **generic lock tag** exists. If there is such an image, - OpenHands builds a new image based upon it, bypassing all installation steps (like `poetry install` and - `apt-get`) except a final operation to copy the current source code. The new image is tagged with a - **source** tag only. -- **Ok-ish re-build**: If neither a **source** nor **lock** tag exists, an image will be built based upon the **versioned** tag image. - In versioned tag image, most dependencies should already been installed hence saving time. -- **Slowest re-build**: If all of the three tags don't exists, a brand new image is built based upon the base - image (Which is a slower operation). This new image is tagged with all the **source**, **lock**, and **versioned** tags. - -This tagging approach allows OpenHands to efficiently manage both development and production environments. - -1. Identical source code and Dockerfile always produce the same image (via hash-based tags) -2. The system can quickly rebuild images when minor changes occur (by leveraging recent compatible images) -3. The **lock** tag (e.g., `runtime:oh_v0.9.3_1234567890abcdef`) always points to the latest build for a particular base image, dependency, and OpenHands version combination - -## Runtime Plugin System - -The OpenHands Runtime supports a plugin system that allows for extending functionality and customizing the runtime environment. Plugins are initialized when the runtime client starts up. - -Check [an example of Jupyter plugin here](https://github.com/All-Hands-AI/OpenHands/blob/ecf4aed28b0cf7c18d4d8ff554883ba182fc6bdd/openhands/runtime/plugins/jupyter/__init__.py#L21-L55) if you want to implement your own plugin. - -*More details about the Plugin system are still under construction - contributions are welcomed!* - -Key aspects of the plugin system: - -1. Plugin Definition: Plugins are defined as Python classes that inherit from a base `Plugin` class -2. Plugin Registration: Available plugins are registered in an `ALL_PLUGINS` dictionary -3. Plugin Specification: Plugins are associated with `Agent.sandbox_plugins: list[PluginRequirement]`. Users can specify which plugins to load when initializing the runtime -4. Initialization: Plugins are initialized asynchronously when the runtime client starts -5. Usage: The runtime client can use initialized plugins to extend its capabilities (e.g., the JupyterPlugin for running IPython cells) diff --git a/docs/usage/cloud/cloud-api.mdx b/docs/usage/cloud/cloud-api.mdx deleted file mode 100644 index c4565cccaae831088deb9c6ae04a8c8b2096ffc9..0000000000000000000000000000000000000000 --- a/docs/usage/cloud/cloud-api.mdx +++ /dev/null @@ -1,176 +0,0 @@ ---- -title: Cloud API -description: OpenHands Cloud provides a REST API that allows you to programmatically interact with the service. This guide explains how to obtain an API key and use the API to start conversations. ---- - -For more detailed information about the API, refer to the [OpenHands API Reference](https://docs.all-hands.dev/swagger-ui/). - -## Obtaining an API Key - -To use the OpenHands Cloud API, you'll need to generate an API key: - -1. Log in to your [OpenHands Cloud](https://app.all-hands.dev) account. -2. Navigate to the [Settings page](https://app.all-hands.dev/settings). -3. Select the `API Keys` tab. -4. Click `Create API Key`. -5. Give your key a descriptive name (Example: "Development" or "Production") and select `Create`. -6. Copy the generated API key and store it securely. It will only be shown once. - -![API Key Generation](/static/img/docs/api-key-generation.png) - -## API Usage - -### Starting a New Conversation - -To start a new conversation with OpenHands to perform a task, you'll need to make a POST request to the conversation endpoint. - -#### Request Parameters - -| Parameter | Type | Required | Description | -|--------------------|----------|----------|------------------------------------------------------------------------------------------------------| -| `initial_user_msg` | string | Yes | The initial message to start the conversation. | -| `repository` | string | No | Git repository name to provide context in the format `owner/repo`. You must have access to the repo. | - -#### Examples - -
-cURL - -```bash -curl -X POST "https://app.all-hands.dev/api/conversations" \ - -H "Authorization: Bearer YOUR_API_KEY" \ - -H "Content-Type: application/json" \ - -d '{ - "initial_user_msg": "Check whether there is any incorrect information in the README.md file and send a PR to fix it if so.", - "repository": "yourusername/your-repo" - }' -``` -
- -
-Python (with requests) - -```python -import requests - -api_key = "YOUR_API_KEY" -url = "https://app.all-hands.dev/api/conversations" - -headers = { - "Authorization": f"Bearer {api_key}", - "Content-Type": "application/json" -} - -data = { - "initial_user_msg": "Check whether there is any incorrect information in the README.md file and send a PR to fix it if so.", - "repository": "yourusername/your-repo" -} - -response = requests.post(url, headers=headers, json=data) -conversation = response.json() - -print(f"Conversation Link: https://app.all-hands.dev/conversations/{conversation['conversation_id']}") -print(f"Status: {conversation['status']}") -``` -
- -
-TypeScript/JavaScript (with fetch) - -```typescript -const apiKey = "YOUR_API_KEY"; -const url = "https://app.all-hands.dev/api/conversations"; - -const headers = { - "Authorization": `Bearer ${apiKey}`, - "Content-Type": "application/json" -}; - -const data = { - initial_user_msg: "Check whether there is any incorrect information in the README.md file and send a PR to fix it if so.", - repository: "yourusername/your-repo" -}; - -async function startConversation() { - try { - const response = await fetch(url, { - method: "POST", - headers: headers, - body: JSON.stringify(data) - }); - - const conversation = await response.json(); - - console.log(`Conversation Link: https://app.all-hands.dev/conversations/${conversation.id}`); - console.log(`Status: ${conversation.status}`); - - return conversation; - } catch (error) { - console.error("Error starting conversation:", error); - } -} - -startConversation(); -``` - -
- -#### Response - -The API will return a JSON object with details about the created conversation: - -```json -{ - "status": "ok", - "conversation_id": "abc1234", -} -``` - -You may receive an `AuthenticationError` if: - -- You provided an invalid API key. -- You provided the wrong repository name. -- You don't have access to the repository. - - -### Retrieving Conversation Status - -You can check the status of a conversation by making a GET request to the conversation endpoint. - -#### Endpoint - -``` -GET https://app.all-hands.dev/api/conversations/{conversation_id} -``` - -#### Example - -
-cURL - -```bash -curl -X GET "https://app.all-hands.dev/api/conversations/{conversation_id}" \ - -H "Authorization: Bearer YOUR_API_KEY" -``` -
- -#### Response - -The response is formatted as follows: - -```json -{ - "conversation_id":"abc1234", - "title":"Update README.md", - "created_at":"2025-04-29T15:13:51.370706Z", - "last_updated_at":"2025-04-29T15:13:57.199210Z", - "status":"RUNNING", - "selected_repository":"yourusername/your-repo", - "trigger":"gui" -} -``` - -## Rate Limits - -If you have too many conversations running at once, older conversations will be paused to limit the number of concurrent conversations. -If you're running into issues and need a higher limit for your use case, please contact us at [contact@all-hands.dev](mailto:contact@all-hands.dev). diff --git a/docs/usage/cloud/cloud-ui.mdx b/docs/usage/cloud/cloud-ui.mdx deleted file mode 100644 index 8b6d7bcf9733d3b038f9670dc7595e5cb4288597..0000000000000000000000000000000000000000 --- a/docs/usage/cloud/cloud-ui.mdx +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Cloud UI -description: The Cloud UI provides a web interface for interacting with OpenHands. This page explains how to use the - OpenHands Cloud UI. ---- - -## Landing Page - -The landing page is where you can: - -- [Add GitHub repository access](/usage/cloud/github-installation#adding-github-repository-access) to OpenHands. -- [Select a GitHub repo](/usage/cloud/github-installation#working-with-github-repos-in-openhands-cloud) or - [a GitLab repo](/usage/cloud/gitlab-installation#working-with-gitlab-repos-in-openhands-cloud) to start working on. -- See `Suggested Tasks` for repositories that OpenHands has access to. -- Launch an empty conversation using `Launch from Scratch`. - -## Settings - -The Settings page allows you to: - -- [Configure GitHub repository access](/usage/cloud/github-installation#modifying-repository-access) for OpenHands. -- Set application settings like your preferred language, notifications and other preferences. -- Add credits to your account. -- Generate custom secrets. -- Create API keys to work with OpenHands programmatically. - -## Key Features - -For an overview of the key features available inside a conversation, please refer to the [Key Features](../key-features) -section of the documentation. - -## Next Steps - -- [Install GitHub Integration](/usage/cloud/github-installation) to use OpenHands with your GitHub repositories. -- [Install GitLab Integration](/usage/cloud/gitlab-installation) to use OpenHands with your GitLab repositories. -- [Use the Cloud API](/usage/cloud/cloud-api) to programmatically interact with OpenHands. diff --git a/docs/usage/cloud/github-installation.mdx b/docs/usage/cloud/github-installation.mdx deleted file mode 100644 index eb25cab10e4f9745e858696afd3f864f5f266287..0000000000000000000000000000000000000000 --- a/docs/usage/cloud/github-installation.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: GitHub Integration -description: This guide walks you through the process of installing OpenHands Cloud for your GitHub repositories. Once - set up, it will allow OpenHands to work with your GitHub repository through the Cloud UI or straight from GitHub! ---- - -## Prerequisites - -- Signed in to [OpenHands Cloud](https://app.all-hands.dev) with [a GitHub account](/usage/cloud/openhands-cloud). - -## Adding GitHub Repository Access - -You can grant OpenHands access to specific GitHub repositories: - -1. Click on `Add GitHub repos` on the landing page. -2. Select your organization and choose the specific repositories to grant OpenHands access to. - - - OpenHands requests short-lived tokens (8-hour expiration) with these permissions: - - Actions: Read and write - - Commit statuses: Read and write - - Contents: Read and write - - Issues: Read and write - - Metadata: Read-only - - Pull requests: Read and write - - Webhooks: Read and write - - Workflows: Read and write - - Repository access for a user is granted based on: - - Permission granted for the repository - - User's GitHub permissions (owner/collaborator) - - -3. Click `Install & Authorize`. - -## Modifying Repository Access - -You can modify GitHub repository access at any time by: -- Selecting `Add GitHub repos` on the landing page or -- Visiting the Settings page and selecting `Configure GitHub Repositories` under the `Git` tab - -## Working With GitHub Repos in Openhands Cloud - -Once you've granted GitHub repository access, you can start working with your GitHub repository. Use the `select a repo` -and `select a branch` dropdowns to select the appropriate repository and branch you'd like OpenHands to work on. Then -click on `Launch` to start the conversation! - -![Connect Repo](/static/img/connect-repo.png) - -## Working on Github Issues and Pull Requests Using Openhands - -Giving GitHub repository access to OpenHands also allows you to work on GitHub issues and pull requests directly. - -### Working with Issues - -On your repository, label an issue with `openhands` or add a message starting with -`@openhands`. OpenHands will: -1. Comment on the issue to let you know it is working on it. - - You can click on the link to track the progress on OpenHands Cloud. -2. Open a pull request if it determines that the issue has been successfully resolved. -3. Comment on the issue with a summary of the performed tasks and a link to the PR. - -### Working with Pull Requests - -To get OpenHands to work on pull requests, mention `@openhands` in the comments to: -- Ask questions -- Request updates -- Get code explanations - -## Next Steps - -- [Learn about the Cloud UI](/usage/cloud/cloud-ui). -- [Use the Cloud API](/usage/cloud/cloud-api) to programmatically interact with OpenHands. diff --git a/docs/usage/cloud/gitlab-installation.mdx b/docs/usage/cloud/gitlab-installation.mdx deleted file mode 100644 index 028b984facc23e10bf2902fc0380c62ec5ec0338..0000000000000000000000000000000000000000 --- a/docs/usage/cloud/gitlab-installation.mdx +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: GitLab Integration -description: This guide walks you through the process of installing OpenHands Cloud for your GitLab repositories. Once - set up, it will allow OpenHands to work with your GitLab repository. ---- - -## Prerequisites - -- Signed in to [OpenHands Cloud](https://app.all-hands.dev) with [a GitLab account](/usage/cloud/openhands-cloud). - -## Adding GitLab Repository Access - -Upon signing into OpenHands Cloud with a GitLab account, OpenHands will have access to your repositories. - -## Working With GitLab Repos in Openhands Cloud - -After signing in with a Gitlab account, use the `select a repo` and `select a branch` dropdowns to select the -appropriate repository and branch you'd like OpenHands to work on. Then click on `Launch` to start the conversation! - -![Connect Repo](/static/img/connect-repo.png) - -## Next Steps - -- [Learn about the Cloud UI](/usage/cloud/cloud-ui). -- [Use the Cloud API](/usage/cloud/cloud-api) to programmatically interact with OpenHands. diff --git a/docs/usage/cloud/openhands-cloud.mdx b/docs/usage/cloud/openhands-cloud.mdx deleted file mode 100644 index 053453afb2b6a4b6c52c07d764132f507b3f6d43..0000000000000000000000000000000000000000 --- a/docs/usage/cloud/openhands-cloud.mdx +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Getting Started -description: Getting started with OpenHands Cloud. ---- - -## Accessing OpenHands Cloud - -OpenHands Cloud is the hosted cloud version of All Hands AI's OpenHands. To get started with OpenHands Cloud, -visit [app.all-hands.dev](https://app.all-hands.dev). - -You'll be prompted to connect with your GitHub or GitLab account: - -1. Click `Log in with GitHub` or `Log in with GitLab`. -2. Review the permissions requested by OpenHands and authorize the application. - - OpenHands will require certain permissions from your account. To read more about these permissions, - you can click the `Learn more` link on the authorization page. -3. Review and accept the `terms of service` and select `Continue`. - -## Next Steps - -Once you've connected your account, you can: - -- [Install GitHub Integration](/usage/cloud/github-installation) to use OpenHands with your GitHub repositories. -- [Install GitLab Integration](/usage/cloud/gitlab-installation) to use OpenHands with your GitLab repositories. -- [Learn about the Cloud UI](/usage/cloud/cloud-ui). -- [Use the Cloud API](/usage/cloud/cloud-api) to programmatically interact with OpenHands. diff --git a/docs/usage/configuration-options.mdx b/docs/usage/configuration-options.mdx deleted file mode 100644 index e39c5eca958e03f8b986b47abd4fa3de6bd8f4a1..0000000000000000000000000000000000000000 --- a/docs/usage/configuration-options.mdx +++ /dev/null @@ -1,413 +0,0 @@ ---- -title: Configuration Options -description: This page outlines all available configuration options for OpenHands, allowing you to customize its behavior and integrate it with other services. In GUI Mode, any settings applied through the Settings UI will take precedence. ---- - -## Core Configuration - -The core configuration options are defined in the `[core]` section of the `config.toml` file. - -### API Keys -- `e2b_api_key` - - Type: `str` - - Default: `""` - - Description: API key for E2B - -- `modal_api_token_id` - - Type: `str` - - Default: `""` - - Description: API token ID for Modal - -- `modal_api_token_secret` - - Type: `str` - - Default: `""` - - Description: API token secret for Modal - -### Workspace -- `workspace_base` **(Deprecated)** - - Type: `str` - - Default: `"./workspace"` - - Description: Base path for the workspace. **Deprecated: Use `SANDBOX_VOLUMES` instead.** - -- `cache_dir` - - Type: `str` - - Default: `"/tmp/cache"` - - Description: Cache directory path - -### Debugging and Logging -- `debug` - - Type: `bool` - - Default: `false` - - Description: Enable debugging - -- `disable_color` - - Type: `bool` - - Default: `false` - - Description: Disable color in terminal output - -### Trajectories -- `save_trajectory_path` - - Type: `str` - - Default: `"./trajectories"` - - Description: Path to store trajectories (can be a folder or a file). If it's a folder, the trajectories will be saved in a file named with the session id name and .json extension, in that folder. - -- `replay_trajectory_path` - - Type: `str` - - Default: `""` - - Description: Path to load a trajectory and replay. If given, must be a path to the trajectory file in JSON format. The actions in the trajectory file would be replayed first before any user instruction is executed. - -### File Store -- `file_store_path` - - Type: `str` - - Default: `"/tmp/file_store"` - - Description: File store path - -- `file_store` - - Type: `str` - - Default: `"memory"` - - Description: File store type - -- `file_uploads_allowed_extensions` - - Type: `list of str` - - Default: `[".*"]` - - Description: List of allowed file extensions for uploads - -- `file_uploads_max_file_size_mb` - - Type: `int` - - Default: `0` - - Description: Maximum file size for uploads, in megabytes - -- `file_uploads_restrict_file_types` - - Type: `bool` - - Default: `false` - - Description: Restrict file types for file uploads - -- `file_uploads_allowed_extensions` - - Type: `list of str` - - Default: `[".*"]` - - Description: List of allowed file extensions for uploads - -### Task Management -- `max_budget_per_task` - - Type: `float` - - Default: `0.0` - - Description: Maximum budget per task (0.0 means no limit) - -- `max_iterations` - - Type: `int` - - Default: `100` - - Description: Maximum number of iterations - -### Sandbox Configuration -- `volumes` - - Type: `str` - - Default: `None` - - Description: Volume mounts in the format 'host_path:container_path[:mode]', e.g. '/my/host/dir:/workspace:rw'. Multiple mounts can be specified using commas, e.g. '/path1:/workspace/path1,/path2:/workspace/path2:ro' - -- `workspace_mount_path_in_sandbox` **(Deprecated)** - - Type: `str` - - Default: `"/workspace"` - - Description: Path to mount the workspace in the sandbox. **Deprecated: Use `SANDBOX_VOLUMES` instead.** - -- `workspace_mount_path` **(Deprecated)** - - Type: `str` - - Default: `""` - - Description: Path to mount the workspace. **Deprecated: Use `SANDBOX_VOLUMES` instead.** - -- `workspace_mount_rewrite` **(Deprecated)** - - Type: `str` - - Default: `""` - - Description: Path to rewrite the workspace mount path to. You can usually ignore this, it refers to special cases of running inside another container. **Deprecated: Use `SANDBOX_VOLUMES` instead.** - -### Miscellaneous -- `run_as_openhands` - - Type: `bool` - - Default: `true` - - Description: Run as OpenHands - -- `runtime` - - Type: `str` - - Default: `"docker"` - - Description: Runtime environment - -- `default_agent` - - Type: `str` - - Default: `"CodeActAgent"` - - Description: Name of the default agent - -- `jwt_secret` - - Type: `str` - - Default: `uuid.uuid4().hex` - - Description: JWT secret for authentication. Please set it to your own value. - -## LLM Configuration - -The LLM (Large Language Model) configuration options are defined in the `[llm]` section of the `config.toml` file. - -To use these with the docker command, pass in `-e LLM_