openhands-agent-server 1.11.2__tar.gz → 1.11.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/PKG-INFO +1 -1
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/api.py +2 -0
- openhands_agent_server-1.11.4/openhands/agent_server/hooks_router.py +48 -0
- openhands_agent_server-1.11.4/openhands/agent_server/hooks_service.py +54 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands_agent_server.egg-info/PKG-INFO +1 -1
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands_agent_server.egg-info/SOURCES.txt +4 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/pyproject.toml +1 -1
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/__init__.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/__main__.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/bash_router.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/bash_service.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/config.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/conversation_router.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/conversation_service.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/dependencies.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/desktop_router.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/desktop_service.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/docker/Dockerfile +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/docker/build.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/docker/wallpaper.svg +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/env_parser.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/event_router.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/event_service.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/file_router.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/git_router.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/logging_config.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/middleware.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/models.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/openapi.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/pub_sub.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/py.typed +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/server_details_router.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/skills_router.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/skills_service.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/sockets.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/tool_preload_service.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/tool_router.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/utils.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/vscode_extensions/openhands-settings/extension.js +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/vscode_extensions/openhands-settings/package.json +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/vscode_router.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/vscode_service.py +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands_agent_server.egg-info/dependency_links.txt +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands_agent_server.egg-info/entry_points.txt +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands_agent_server.egg-info/requires.txt +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands_agent_server.egg-info/top_level.txt +0 -0
- {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openhands-agent-server
|
|
3
|
-
Version: 1.11.
|
|
3
|
+
Version: 1.11.4
|
|
4
4
|
Summary: OpenHands Agent Server - REST/WebSocket interface for OpenHands AI Agent
|
|
5
5
|
Project-URL: Source, https://github.com/OpenHands/software-agent-sdk
|
|
6
6
|
Project-URL: Homepage, https://github.com/OpenHands/software-agent-sdk
|
{openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/api.py
RENAMED
|
@@ -23,6 +23,7 @@ from openhands.agent_server.desktop_service import get_desktop_service
|
|
|
23
23
|
from openhands.agent_server.event_router import event_router
|
|
24
24
|
from openhands.agent_server.file_router import file_router
|
|
25
25
|
from openhands.agent_server.git_router import git_router
|
|
26
|
+
from openhands.agent_server.hooks_router import hooks_router
|
|
26
27
|
from openhands.agent_server.middleware import LocalhostCORSMiddleware
|
|
27
28
|
from openhands.agent_server.server_details_router import (
|
|
28
29
|
get_server_info,
|
|
@@ -194,6 +195,7 @@ def _add_api_routes(app: FastAPI, config: Config) -> None:
|
|
|
194
195
|
api_router.include_router(vscode_router)
|
|
195
196
|
api_router.include_router(desktop_router)
|
|
196
197
|
api_router.include_router(skills_router)
|
|
198
|
+
api_router.include_router(hooks_router)
|
|
197
199
|
app.include_router(api_router)
|
|
198
200
|
app.include_router(sockets_router)
|
|
199
201
|
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"""Hooks router for OpenHands Agent Server.
|
|
2
|
+
|
|
3
|
+
This module defines the HTTP API endpoints for hook operations.
|
|
4
|
+
Business logic is delegated to hooks_service.py.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from fastapi import APIRouter
|
|
8
|
+
from pydantic import BaseModel, Field
|
|
9
|
+
|
|
10
|
+
from openhands.agent_server.hooks_service import load_hooks_from_workspace
|
|
11
|
+
from openhands.sdk.hooks import HookConfig
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
hooks_router = APIRouter(prefix="/hooks", tags=["Hooks"])
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class HooksRequest(BaseModel):
|
|
18
|
+
"""Request body for loading hooks."""
|
|
19
|
+
|
|
20
|
+
project_dir: str | None = Field(
|
|
21
|
+
default=None, description="Workspace directory path for project hooks"
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class HooksResponse(BaseModel):
|
|
26
|
+
"""Response containing hooks configuration."""
|
|
27
|
+
|
|
28
|
+
hook_config: HookConfig | None = Field(
|
|
29
|
+
default=None,
|
|
30
|
+
description="Hook configuration loaded from the workspace, or None if not found", # noqa: E501
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@hooks_router.post("", response_model=HooksResponse)
|
|
35
|
+
def get_hooks(request: HooksRequest) -> HooksResponse:
|
|
36
|
+
"""Load hooks from the workspace .openhands/hooks.json file.
|
|
37
|
+
|
|
38
|
+
This endpoint reads the hooks configuration from the project's
|
|
39
|
+
.openhands/hooks.json file if it exists.
|
|
40
|
+
|
|
41
|
+
Args:
|
|
42
|
+
request: HooksRequest containing the project directory path.
|
|
43
|
+
|
|
44
|
+
Returns:
|
|
45
|
+
HooksResponse containing the hook configuration or None.
|
|
46
|
+
"""
|
|
47
|
+
hook_config = load_hooks_from_workspace(project_dir=request.project_dir)
|
|
48
|
+
return HooksResponse(hook_config=hook_config)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"""Hooks service for OpenHands Agent Server.
|
|
2
|
+
|
|
3
|
+
This module contains the business logic for loading hooks from the workspace,
|
|
4
|
+
keeping the router clean and focused on HTTP concerns.
|
|
5
|
+
|
|
6
|
+
Hook Sources:
|
|
7
|
+
- Project hooks: {workspace}/.openhands/hooks.json
|
|
8
|
+
- User hooks: ~/.openhands/hooks.json (future)
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
from openhands.sdk.hooks import HookConfig
|
|
14
|
+
from openhands.sdk.logger import get_logger
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
logger = get_logger(__name__)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def load_hooks_from_workspace(project_dir: str | None = None) -> HookConfig | None:
|
|
21
|
+
"""Load hooks from the workspace .openhands/hooks.json file.
|
|
22
|
+
|
|
23
|
+
This function reads the hooks configuration from the project's
|
|
24
|
+
.openhands/hooks.json file if it exists.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
project_dir: Workspace directory path for project hooks.
|
|
28
|
+
|
|
29
|
+
Returns:
|
|
30
|
+
HookConfig if hooks.json exists and is valid, None otherwise.
|
|
31
|
+
"""
|
|
32
|
+
if not project_dir:
|
|
33
|
+
logger.debug("No project_dir provided, skipping hooks loading")
|
|
34
|
+
return None
|
|
35
|
+
|
|
36
|
+
hooks_path = Path(project_dir) / ".openhands" / "hooks.json"
|
|
37
|
+
|
|
38
|
+
if not hooks_path.exists():
|
|
39
|
+
logger.debug(f"No hooks.json found at {hooks_path}")
|
|
40
|
+
return None
|
|
41
|
+
|
|
42
|
+
try:
|
|
43
|
+
hook_config = HookConfig.load(path=hooks_path)
|
|
44
|
+
|
|
45
|
+
if hook_config.is_empty():
|
|
46
|
+
logger.debug(f"hooks.json at {hooks_path} is empty")
|
|
47
|
+
return None
|
|
48
|
+
|
|
49
|
+
logger.info(f"Loaded hooks from {hooks_path}")
|
|
50
|
+
return hook_config
|
|
51
|
+
|
|
52
|
+
except Exception as e:
|
|
53
|
+
logger.warning(f"Failed to load hooks from {hooks_path}: {e}")
|
|
54
|
+
return None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openhands-agent-server
|
|
3
|
-
Version: 1.11.
|
|
3
|
+
Version: 1.11.4
|
|
4
4
|
Summary: OpenHands Agent Server - REST/WebSocket interface for OpenHands AI Agent
|
|
5
5
|
Project-URL: Source, https://github.com/OpenHands/software-agent-sdk
|
|
6
6
|
Project-URL: Homepage, https://github.com/OpenHands/software-agent-sdk
|
|
@@ -15,6 +15,8 @@ pyproject.toml
|
|
|
15
15
|
./openhands/agent_server/event_service.py
|
|
16
16
|
./openhands/agent_server/file_router.py
|
|
17
17
|
./openhands/agent_server/git_router.py
|
|
18
|
+
./openhands/agent_server/hooks_router.py
|
|
19
|
+
./openhands/agent_server/hooks_service.py
|
|
18
20
|
./openhands/agent_server/logging_config.py
|
|
19
21
|
./openhands/agent_server/middleware.py
|
|
20
22
|
./openhands/agent_server/models.py
|
|
@@ -51,6 +53,8 @@ openhands/agent_server/event_router.py
|
|
|
51
53
|
openhands/agent_server/event_service.py
|
|
52
54
|
openhands/agent_server/file_router.py
|
|
53
55
|
openhands/agent_server/git_router.py
|
|
56
|
+
openhands/agent_server/hooks_router.py
|
|
57
|
+
openhands/agent_server/hooks_service.py
|
|
54
58
|
openhands/agent_server/logging_config.py
|
|
55
59
|
openhands/agent_server/middleware.py
|
|
56
60
|
openhands/agent_server/models.py
|
{openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/__init__.py
RENAMED
|
File without changes
|
{openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/__main__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/env_parser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/git_router.py
RENAMED
|
File without changes
|
|
File without changes
|
{openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/middleware.py
RENAMED
|
File without changes
|
{openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/models.py
RENAMED
|
File without changes
|
{openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/openapi.py
RENAMED
|
File without changes
|
{openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/pub_sub.py
RENAMED
|
File without changes
|
{openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/py.typed
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/sockets.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|