openhands-agent-server 1.45.0__tar.gz → 1.46.0__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.45.0 → openhands_agent_server-1.46.0}/PKG-INFO +1 -1
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/canvas_extensions_router.py +24 -5
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/profiles_router.py +17 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands_agent_server.egg-info/PKG-INFO +1 -1
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/pyproject.toml +1 -1
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/__init__.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/__main__.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/_secret_redaction.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/_secrets_exposure.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/agent_profiles_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/api.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/auth_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/bash_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/bash_service.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/canvas_extensions/__init__.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/canvas_extensions/installed.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/canvas_extensions/manifest.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/config.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/conversation_lease.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/conversation_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/conversation_service.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/credential_binding.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/dependencies.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/desktop_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/docker/Dockerfile +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/docker/build.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/env_parser.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/event_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/event_service.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/file_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/git_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/hooks_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/hooks_service.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/init_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/llm_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/logging_config.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/mcp_oauth_store.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/mcp_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/middleware.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/models.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/openai/__init__.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/openai/models.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/openai/router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/openai/service.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/openapi.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/persistence/__init__.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/persistence/models.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/persistence/store.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/plugins_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/plugins_service.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/provider_connections_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/pub_sub.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/py.typed +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/server_details_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/session_protocol.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/session_socket.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/settings_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/skills_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/skills_service.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/sockets.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/sub_agents_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/telemetry/__init__.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/telemetry/factory.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/telemetry/http_exporter.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/telemetry/models.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/telemetry/policy.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/telemetry/posthog_exporter.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/telemetry/sanitizer.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/telemetry/service.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/telemetry/sink.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/telemetry/subscriber.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/telemetry_types.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/tool_preload_service.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/tool_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/utils.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/vscode_extensions/openhands-settings/extension.js +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/vscode_extensions/openhands-settings/package.json +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/vscode_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/vscode_service.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/workspace_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/workspaces_router.py +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands_agent_server.egg-info/SOURCES.txt +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands_agent_server.egg-info/dependency_links.txt +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands_agent_server.egg-info/entry_points.txt +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands_agent_server.egg-info/requires.txt +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands_agent_server.egg-info/top_level.txt +0 -0
- {openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openhands-agent-server
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.46.0
|
|
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
|
|
@@ -24,8 +24,12 @@ from openhands.agent_server.canvas_extensions.installed import (
|
|
|
24
24
|
list_installed_canvas_extensions,
|
|
25
25
|
uninstall_canvas_extension,
|
|
26
26
|
)
|
|
27
|
-
from openhands.agent_server.canvas_extensions.manifest import
|
|
27
|
+
from openhands.agent_server.canvas_extensions.manifest import (
|
|
28
|
+
MANIFEST_FILENAME,
|
|
29
|
+
CanvasExtensionManifest,
|
|
30
|
+
)
|
|
28
31
|
from openhands.sdk.extensions.fetch import ExtensionFetchError
|
|
32
|
+
from openhands.sdk.utils.redact import redact_url_credentials
|
|
29
33
|
|
|
30
34
|
|
|
31
35
|
canvas_extensions_router = APIRouter(
|
|
@@ -144,7 +148,7 @@ class UninstallCanvasExtensionResponse(BaseModel):
|
|
|
144
148
|
"/install",
|
|
145
149
|
response_model=InstalledCanvasExtensionResponse,
|
|
146
150
|
responses={
|
|
147
|
-
400: {"description": "
|
|
151
|
+
400: {"description": "Could not read canvas extension source"},
|
|
148
152
|
409: {"description": "Canvas extension already installed (use force=true)"},
|
|
149
153
|
422: {"description": "Invalid canvas extension (bad manifest, etc.)"},
|
|
150
154
|
},
|
|
@@ -173,12 +177,27 @@ def install_canvas_extension_endpoint(
|
|
|
173
177
|
status_code=409,
|
|
174
178
|
detail="Canvas extension already installed. Use force=true to overwrite.",
|
|
175
179
|
)
|
|
176
|
-
except ExtensionFetchError:
|
|
180
|
+
except ExtensionFetchError as e:
|
|
181
|
+
# Pass the specific reason through -- which of source/ref/repo_path is
|
|
182
|
+
# wrong is the whole diagnostic, and a generic message misattributes a
|
|
183
|
+
# bad repo_path to the source. Redacted in case a URL carried a token.
|
|
184
|
+
# Deliberately not worded "failed to fetch": the canvas client treats
|
|
185
|
+
# that phrase as a network outage and hides the reason behind a
|
|
186
|
+
# "Disconnected, check your network" toast.
|
|
177
187
|
raise HTTPException(
|
|
178
188
|
status_code=400,
|
|
179
189
|
detail=(
|
|
180
|
-
"
|
|
181
|
-
"
|
|
190
|
+
"Could not read canvas extension source: "
|
|
191
|
+
f"{redact_url_credentials(str(e))}"
|
|
192
|
+
),
|
|
193
|
+
)
|
|
194
|
+
except FileNotFoundError:
|
|
195
|
+
raise HTTPException(
|
|
196
|
+
status_code=422,
|
|
197
|
+
detail=(
|
|
198
|
+
f"No {MANIFEST_FILENAME} found at the resolved location. "
|
|
199
|
+
"Source plus Path must point at the extension's own "
|
|
200
|
+
"directory, not the repository root."
|
|
182
201
|
),
|
|
183
202
|
)
|
|
184
203
|
except (ValidationError, ValueError, OSError):
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"""HTTP endpoints for managing named LLM configurations (profiles)."""
|
|
2
2
|
|
|
3
|
+
import asyncio
|
|
3
4
|
from typing import Annotated, Any
|
|
4
5
|
|
|
5
6
|
from fastapi import APIRouter, HTTPException, Path, Request, status
|
|
@@ -305,6 +306,22 @@ async def validate_profile(
|
|
|
305
306
|
]
|
|
306
307
|
|
|
307
308
|
try:
|
|
309
|
+
# Restore runtime subscription credentials, mirroring ``from_persisted``.
|
|
310
|
+
# The frontend sends auth_type="subscription" but the OAuth access token
|
|
311
|
+
# lives in the credential store, not in the serialized LLM config. Without
|
|
312
|
+
# this, the pre-flight sends api_key=None and fails with
|
|
313
|
+
# "Incorrect API key provided: None".
|
|
314
|
+
#
|
|
315
|
+
# Run the synchronous factory (which may do a network token refresh)
|
|
316
|
+
# off the event loop and inside the handled path so credential errors
|
|
317
|
+
# surface as ``valid=False`` instead of a 500.
|
|
318
|
+
if getattr(llm, "auth_type", None) == "subscription":
|
|
319
|
+
from openhands.sdk.llm.auth.openai import (
|
|
320
|
+
create_subscription_llm_from_config,
|
|
321
|
+
)
|
|
322
|
+
|
|
323
|
+
llm = await asyncio.to_thread(create_subscription_llm_from_config, llm)
|
|
324
|
+
|
|
308
325
|
# Mirror the runtime dispatch (see ``amake_llm_completion``) and stay
|
|
309
326
|
# async so provider I/O doesn't pin the FastAPI event loop.
|
|
310
327
|
if llm.uses_responses_api():
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openhands-agent-server
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.46.0
|
|
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.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/__init__.py
RENAMED
|
File without changes
|
{openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/__main__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/api.py
RENAMED
|
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.45.0 → openhands_agent_server-1.46.0}/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.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/env_parser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/git_router.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/llm_router.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/mcp_router.py
RENAMED
|
File without changes
|
{openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/middleware.py
RENAMED
|
File without changes
|
{openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/openapi.py
RENAMED
|
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.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/pub_sub.py
RENAMED
|
File without changes
|
{openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/py.typed
RENAMED
|
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.45.0 → openhands_agent_server-1.46.0}/openhands/agent_server/sockets.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openhands_agent_server-1.45.0 → openhands_agent_server-1.46.0}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|