agentstack-sdk 0.6.0rc3__tar.gz → 0.6.1rc1__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.
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/PKG-INFO +2 -1
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/pyproject.toml +4 -3
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/__init__.py +1 -0
- agentstack_sdk-0.6.1rc1/src/agentstack_sdk/platform/provider_discovery.py +57 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/server/app.py +0 -7
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/server/middleware/platform_auth_backend.py +16 -3
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/server/server.py +5 -2
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/types.py +9 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/util/resource_context.py +9 -2
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/README.md +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/__init__.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/__init__.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/__init__.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/auth/__init__.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/auth/oauth/__init__.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/auth/oauth/oauth.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/auth/oauth/storage/__init__.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/auth/oauth/storage/base.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/auth/oauth/storage/memory.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/auth/secrets/__init__.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/auth/secrets/secrets.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/base.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/common/__init__.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/common/form.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/exceptions.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/interactions/__init__.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/interactions/approval.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/services/__init__.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/services/embedding.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/services/form.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/services/llm.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/services/mcp.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/services/platform.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/tools/__init__.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/tools/call.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/tools/exceptions.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/ui/__init__.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/ui/agent_detail.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/ui/canvas.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/ui/citation.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/ui/error.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/ui/form_request.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/ui/settings.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/ui/trajectory.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/types.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/client.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/common.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/configuration.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/connector.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/context.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/file.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/model_provider.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/provider.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/provider_build.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/types.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/user.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/user_feedback.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/variables.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/vector_store.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/py.typed +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/server/__init__.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/server/agent.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/server/constants.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/server/context.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/server/dependencies.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/server/exceptions.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/server/middleware/__init__.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/server/store/__init__.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/server/store/context_store.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/server/store/memory_context_store.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/server/store/platform_context_store.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/server/telemetry.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/server/utils.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/util/__init__.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/util/file.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/util/httpx.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/util/logging.py +0 -0
- {agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/util/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: agentstack-sdk
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.1rc1
|
|
4
4
|
Summary: Agent Stack SDK
|
|
5
5
|
Author: IBM Corp.
|
|
6
6
|
Requires-Dist: a2a-sdk==0.3.21
|
|
@@ -21,6 +21,7 @@ Requires-Dist: mcp>=1.12.3
|
|
|
21
21
|
Requires-Dist: fastapi>=0.116.1
|
|
22
22
|
Requires-Dist: authlib>=1.3.0
|
|
23
23
|
Requires-Dist: async-lru>=2.0.4
|
|
24
|
+
Requires-Dist: cachetools>=6.2.3
|
|
24
25
|
Requires-Python: >=3.11, <3.14
|
|
25
26
|
Description-Content-Type: text/markdown
|
|
26
27
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "agentstack-sdk"
|
|
3
|
-
version = "0.6.
|
|
3
|
+
version = "0.6.1-rc1"
|
|
4
4
|
description = "Agent Stack SDK"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
authors = [{ name = "IBM Corp." }]
|
|
@@ -19,16 +19,17 @@ dependencies = [
|
|
|
19
19
|
"opentelemetry-sdk>=1.35.0",
|
|
20
20
|
"tenacity>=9.1.2",
|
|
21
21
|
"janus>=2.0.0",
|
|
22
|
-
"httpx",
|
|
22
|
+
"httpx", # version determined by a2a-sdk
|
|
23
23
|
"mcp>=1.12.3",
|
|
24
24
|
"fastapi>=0.116.1",
|
|
25
25
|
"authlib>=1.3.0",
|
|
26
26
|
"async-lru>=2.0.4",
|
|
27
|
+
"cachetools>=6.2.3",
|
|
27
28
|
]
|
|
28
29
|
|
|
29
30
|
[dependency-groups]
|
|
30
31
|
dev = [
|
|
31
|
-
"beeai-framework[duckduckgo,wikipedia]>=0.1.
|
|
32
|
+
"beeai-framework[duckduckgo,wikipedia]>=0.1.76",
|
|
32
33
|
"pyright>=1.1.403",
|
|
33
34
|
"pytest>=8.4.1",
|
|
34
35
|
"pytest-asyncio>=1.1.0",
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Copyright 2025 © BeeAI a Series of LF Projects, LLC
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from enum import StrEnum
|
|
6
|
+
from uuid import UUID
|
|
7
|
+
|
|
8
|
+
import pydantic
|
|
9
|
+
from a2a.types import AgentCard
|
|
10
|
+
|
|
11
|
+
from agentstack_sdk.platform.client import PlatformClient, get_platform_client
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class DiscoveryState(StrEnum):
|
|
15
|
+
PENDING = "pending"
|
|
16
|
+
IN_PROGRESS = "in_progress"
|
|
17
|
+
COMPLETED = "completed"
|
|
18
|
+
FAILED = "failed"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ProviderDiscovery(pydantic.BaseModel):
|
|
22
|
+
id: UUID
|
|
23
|
+
created_at: pydantic.AwareDatetime
|
|
24
|
+
status: DiscoveryState
|
|
25
|
+
docker_image: str
|
|
26
|
+
created_by: UUID
|
|
27
|
+
agent_card: AgentCard | None = None
|
|
28
|
+
error_message: str | None = None
|
|
29
|
+
|
|
30
|
+
@staticmethod
|
|
31
|
+
async def create(
|
|
32
|
+
*,
|
|
33
|
+
docker_image: str,
|
|
34
|
+
client: PlatformClient | None = None,
|
|
35
|
+
) -> ProviderDiscovery:
|
|
36
|
+
async with client or get_platform_client() as client:
|
|
37
|
+
return pydantic.TypeAdapter(ProviderDiscovery).validate_python(
|
|
38
|
+
(
|
|
39
|
+
await client.post(
|
|
40
|
+
url="/api/v1/providers/discovery",
|
|
41
|
+
json={"docker_image": docker_image},
|
|
42
|
+
)
|
|
43
|
+
)
|
|
44
|
+
.raise_for_status()
|
|
45
|
+
.json()
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
async def get(self: ProviderDiscovery | str, *, client: PlatformClient | None = None) -> ProviderDiscovery:
|
|
49
|
+
discovery_id = self if isinstance(self, str) else str(self.id)
|
|
50
|
+
async with client or get_platform_client() as client:
|
|
51
|
+
result = pydantic.TypeAdapter(ProviderDiscovery).validate_json(
|
|
52
|
+
(await client.get(url=f"/api/v1/providers/discovery/{discovery_id}")).raise_for_status().content
|
|
53
|
+
)
|
|
54
|
+
if isinstance(self, ProviderDiscovery):
|
|
55
|
+
self.__dict__.update(result.__dict__)
|
|
56
|
+
return self
|
|
57
|
+
return result
|
|
@@ -18,8 +18,6 @@ from a2a.server.tasks import (
|
|
|
18
18
|
from a2a.types import AgentInterface, TransportProtocol
|
|
19
19
|
from fastapi import APIRouter, Depends, FastAPI
|
|
20
20
|
from fastapi.applications import AppType
|
|
21
|
-
from starlette.authentication import AuthenticationBackend
|
|
22
|
-
from starlette.middleware.authentication import AuthenticationMiddleware
|
|
23
21
|
from starlette.types import Lifespan
|
|
24
22
|
|
|
25
23
|
from agentstack_sdk.server.agent import Agent, Executor
|
|
@@ -39,7 +37,6 @@ def create_app(
|
|
|
39
37
|
dependencies: list[Depends] | None = None, # pyright: ignore [reportGeneralTypeIssues]
|
|
40
38
|
override_interfaces: bool = True,
|
|
41
39
|
task_timeout: timedelta = timedelta(minutes=10),
|
|
42
|
-
auth_backend: AuthenticationBackend | None = None,
|
|
43
40
|
**kwargs,
|
|
44
41
|
) -> FastAPI:
|
|
45
42
|
queue_manager = queue_manager or InMemoryQueueManager()
|
|
@@ -78,10 +75,6 @@ def create_app(
|
|
|
78
75
|
**kwargs,
|
|
79
76
|
)
|
|
80
77
|
|
|
81
|
-
if auth_backend:
|
|
82
|
-
rest_app.add_middleware(AuthenticationMiddleware, backend=auth_backend)
|
|
83
|
-
jsonrpc_app.add_middleware(AuthenticationMiddleware, backend=auth_backend)
|
|
84
|
-
|
|
85
78
|
rest_app.mount("/jsonrpc", jsonrpc_app)
|
|
86
79
|
rest_app.include_router(APIRouter(lifespan=lifespan))
|
|
87
80
|
return rest_app
|
|
@@ -7,6 +7,7 @@ from datetime import timedelta
|
|
|
7
7
|
from urllib.parse import urljoin
|
|
8
8
|
|
|
9
9
|
from a2a.auth.user import User
|
|
10
|
+
from a2a.types import AgentCard, HTTPAuthSecurityScheme, SecurityScheme
|
|
10
11
|
from async_lru import alru_cache
|
|
11
12
|
from authlib.jose import JsonWebKey, JWTClaims, KeySet, jwt
|
|
12
13
|
from authlib.jose.errors import JoseError
|
|
@@ -15,7 +16,6 @@ from fastapi.security import HTTPBearer
|
|
|
15
16
|
from pydantic import Secret
|
|
16
17
|
from starlette.authentication import (
|
|
17
18
|
AuthCredentials,
|
|
18
|
-
AuthenticationBackend,
|
|
19
19
|
AuthenticationError,
|
|
20
20
|
BaseUser,
|
|
21
21
|
)
|
|
@@ -23,7 +23,7 @@ from starlette.requests import HTTPConnection
|
|
|
23
23
|
from typing_extensions import override
|
|
24
24
|
|
|
25
25
|
from agentstack_sdk.platform import use_platform_client
|
|
26
|
-
from agentstack_sdk.types import JsonValue
|
|
26
|
+
from agentstack_sdk.types import JsonValue, SdkAuthenticationBackend
|
|
27
27
|
|
|
28
28
|
logger = logging.getLogger(__name__)
|
|
29
29
|
|
|
@@ -70,7 +70,7 @@ async def discover_jwks() -> KeySet:
|
|
|
70
70
|
raise RuntimeError(f"JWKS discovery failed for url {url}") from e
|
|
71
71
|
|
|
72
72
|
|
|
73
|
-
class PlatformAuthBackend(
|
|
73
|
+
class PlatformAuthBackend(SdkAuthenticationBackend):
|
|
74
74
|
def __init__(self, public_url: str | None = None, skip_audience_validation: bool | None = None) -> None:
|
|
75
75
|
self.skip_audience_validation: bool = (
|
|
76
76
|
skip_audience_validation
|
|
@@ -129,3 +129,16 @@ class PlatformAuthBackend(AuthenticationBackend):
|
|
|
129
129
|
except Exception as e:
|
|
130
130
|
logger.error(f"Authentication error: {e}")
|
|
131
131
|
raise AuthenticationError(f"Authentication failed: {e}") from e
|
|
132
|
+
|
|
133
|
+
@override
|
|
134
|
+
def update_card_security_schemes(self, agent_card: AgentCard) -> None:
|
|
135
|
+
agent_card.security_schemes = {
|
|
136
|
+
"platform_context_token": SecurityScheme(
|
|
137
|
+
HTTPAuthSecurityScheme(
|
|
138
|
+
scheme="bearer",
|
|
139
|
+
bearer_format="JWT",
|
|
140
|
+
description="Platform context token, issued by the AgentStack server using POST /api/v1/context/{context_id}/token.",
|
|
141
|
+
)
|
|
142
|
+
),
|
|
143
|
+
}
|
|
144
|
+
agent_card.security = [{"platform_context_token": []}]
|
|
@@ -24,7 +24,7 @@ from fastapi.applications import AppType
|
|
|
24
24
|
from fastapi.responses import PlainTextResponse
|
|
25
25
|
from httpx import HTTPError, HTTPStatusError
|
|
26
26
|
from pydantic import AnyUrl
|
|
27
|
-
from starlette.authentication import
|
|
27
|
+
from starlette.authentication import AuthenticationError
|
|
28
28
|
from starlette.middleware.authentication import AuthenticationMiddleware
|
|
29
29
|
from starlette.requests import HTTPConnection
|
|
30
30
|
from starlette.types import Lifespan
|
|
@@ -39,6 +39,7 @@ from agentstack_sdk.server.store.context_store import ContextStore
|
|
|
39
39
|
from agentstack_sdk.server.store.memory_context_store import InMemoryContextStore
|
|
40
40
|
from agentstack_sdk.server.telemetry import configure_telemetry as configure_telemetry_func
|
|
41
41
|
from agentstack_sdk.server.utils import cancel_task
|
|
42
|
+
from agentstack_sdk.types import SdkAuthenticationBackend
|
|
42
43
|
from agentstack_sdk.util.logging import configure_logger as configure_logger_func
|
|
43
44
|
from agentstack_sdk.util.logging import logger
|
|
44
45
|
|
|
@@ -131,7 +132,7 @@ class Server:
|
|
|
131
132
|
factory: bool = False,
|
|
132
133
|
h11_max_incomplete_event_size: int | None = None,
|
|
133
134
|
self_registration_client_factory: Callable[[], PlatformClient] | None = None,
|
|
134
|
-
auth_backend:
|
|
135
|
+
auth_backend: SdkAuthenticationBackend | None = None,
|
|
135
136
|
) -> None:
|
|
136
137
|
if self.server:
|
|
137
138
|
raise RuntimeError("The server is already running")
|
|
@@ -201,9 +202,11 @@ class Server:
|
|
|
201
202
|
push_sender=push_sender,
|
|
202
203
|
task_timeout=task_timeout,
|
|
203
204
|
request_context_builder=request_context_builder,
|
|
205
|
+
auth_backend=auth_backend,
|
|
204
206
|
)
|
|
205
207
|
|
|
206
208
|
if auth_backend:
|
|
209
|
+
auth_backend.update_card_security_schemes(self._agent.card)
|
|
207
210
|
|
|
208
211
|
def on_error(connection: HTTPConnection, error: AuthenticationError) -> PlainTextResponse:
|
|
209
212
|
return PlainTextResponse("Unauthorized", status_code=401)
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
# Copyright 2025 © BeeAI a Series of LF Projects, LLC
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
|
|
4
|
+
import abc
|
|
4
5
|
from typing import TYPE_CHECKING, TypeAlias
|
|
5
6
|
|
|
7
|
+
from a2a.types import AgentCard
|
|
8
|
+
from starlette.authentication import AuthenticationBackend
|
|
9
|
+
|
|
6
10
|
if TYPE_CHECKING:
|
|
7
11
|
JsonValue: TypeAlias = list["JsonValue"] | dict[str, "JsonValue"] | str | bool | int | float | None
|
|
8
12
|
JsonDict: TypeAlias = dict[str, JsonValue]
|
|
@@ -13,3 +17,8 @@ else:
|
|
|
13
17
|
|
|
14
18
|
JsonValue = TypeAliasType("JsonValue", "Union[dict[str, JsonValue], list[JsonValue], str, int, float, bool, None]") # noqa: UP007
|
|
15
19
|
JsonDict = TypeAliasType("JsonDict", "dict[str, JsonValue]")
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class SdkAuthenticationBackend(AuthenticationBackend, abc.ABC):
|
|
23
|
+
@abc.abstractmethod
|
|
24
|
+
def update_card_security_schemes(self, agent_card: AgentCard) -> None: ...
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/util/resource_context.py
RENAMED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Copyright 2025 © BeeAI a Series of LF Projects, LLC
|
|
2
2
|
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
-
|
|
4
3
|
import contextlib
|
|
5
4
|
import contextvars
|
|
5
|
+
import re
|
|
6
6
|
import typing
|
|
7
7
|
|
|
8
8
|
|
|
@@ -28,7 +28,14 @@ def resource_context(
|
|
|
28
28
|
try:
|
|
29
29
|
yield resource
|
|
30
30
|
finally:
|
|
31
|
-
|
|
31
|
+
try:
|
|
32
|
+
contextvar.reset(token)
|
|
33
|
+
except ValueError as e:
|
|
34
|
+
if re.match(r"<Token var=.+ was created in a different Context", str(e)):
|
|
35
|
+
# Ignore contextvar reset errors when the contextvar was created in a different Context
|
|
36
|
+
pass
|
|
37
|
+
else:
|
|
38
|
+
raise
|
|
32
39
|
|
|
33
40
|
return manager()
|
|
34
41
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/__init__.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
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/base.py
RENAMED
|
File without changes
|
|
File without changes
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/common/form.py
RENAMED
|
File without changes
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/exceptions.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
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/tools/call.py
RENAMED
|
File without changes
|
|
File without changes
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/ui/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/ui/canvas.py
RENAMED
|
File without changes
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/ui/citation.py
RENAMED
|
File without changes
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/ui/error.py
RENAMED
|
File without changes
|
|
File without changes
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/a2a/extensions/ui/settings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/configuration.py
RENAMED
|
File without changes
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/connector.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/model_provider.py
RENAMED
|
File without changes
|
|
File without changes
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/provider_build.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/user_feedback.py
RENAMED
|
File without changes
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/variables.py
RENAMED
|
File without changes
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/platform/vector_store.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/server/dependencies.py
RENAMED
|
File without changes
|
|
File without changes
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/server/middleware/__init__.py
RENAMED
|
File without changes
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/server/store/__init__.py
RENAMED
|
File without changes
|
{agentstack_sdk-0.6.0rc3 → agentstack_sdk-0.6.1rc1}/src/agentstack_sdk/server/store/context_store.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
|