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.
Files changed (47) hide show
  1. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/PKG-INFO +1 -1
  2. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/api.py +2 -0
  3. openhands_agent_server-1.11.4/openhands/agent_server/hooks_router.py +48 -0
  4. openhands_agent_server-1.11.4/openhands/agent_server/hooks_service.py +54 -0
  5. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands_agent_server.egg-info/PKG-INFO +1 -1
  6. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands_agent_server.egg-info/SOURCES.txt +4 -0
  7. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/pyproject.toml +1 -1
  8. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/__init__.py +0 -0
  9. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/__main__.py +0 -0
  10. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/bash_router.py +0 -0
  11. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/bash_service.py +0 -0
  12. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/config.py +0 -0
  13. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/conversation_router.py +0 -0
  14. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/conversation_service.py +0 -0
  15. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/dependencies.py +0 -0
  16. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/desktop_router.py +0 -0
  17. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/desktop_service.py +0 -0
  18. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/docker/Dockerfile +0 -0
  19. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/docker/build.py +0 -0
  20. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/docker/wallpaper.svg +0 -0
  21. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/env_parser.py +0 -0
  22. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/event_router.py +0 -0
  23. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/event_service.py +0 -0
  24. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/file_router.py +0 -0
  25. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/git_router.py +0 -0
  26. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/logging_config.py +0 -0
  27. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/middleware.py +0 -0
  28. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/models.py +0 -0
  29. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/openapi.py +0 -0
  30. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/pub_sub.py +0 -0
  31. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/py.typed +0 -0
  32. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/server_details_router.py +0 -0
  33. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/skills_router.py +0 -0
  34. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/skills_service.py +0 -0
  35. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/sockets.py +0 -0
  36. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/tool_preload_service.py +0 -0
  37. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/tool_router.py +0 -0
  38. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/utils.py +0 -0
  39. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/vscode_extensions/openhands-settings/extension.js +0 -0
  40. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/vscode_extensions/openhands-settings/package.json +0 -0
  41. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/vscode_router.py +0 -0
  42. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands/agent_server/vscode_service.py +0 -0
  43. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands_agent_server.egg-info/dependency_links.txt +0 -0
  44. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands_agent_server.egg-info/entry_points.txt +0 -0
  45. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands_agent_server.egg-info/requires.txt +0 -0
  46. {openhands_agent_server-1.11.2 → openhands_agent_server-1.11.4}/openhands_agent_server.egg-info/top_level.txt +0 -0
  47. {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.2
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
@@ -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.2
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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "openhands-agent-server"
3
- version = "1.11.2"
3
+ version = "1.11.4"
4
4
  description = "OpenHands Agent Server - REST/WebSocket interface for OpenHands AI Agent"
5
5
 
6
6
  requires-python = ">=3.12"