@aws/nx-plugin 0.112.0 → 0.113.0
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.
- package/LICENSE-THIRD-PARTY +957 -429
- package/package.json +1 -1
- package/src/py/project/generator.js +4 -0
- package/src/py/project/generator.js.map +1 -1
- package/src/py/strands-agent/__snapshots__/generator.spec.ts.snap +42 -20
- package/src/py/strands-agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client.py.template +6 -13
- package/src/py/strands-agent/a2a-connection/generator.js +1 -1
- package/src/py/strands-agent/files/a2a/main.py.template +24 -3
- package/src/py/strands-agent/files/ag-ui/main.py.template +3 -2
- package/src/py/strands-agent/files/common/agent.py.template +1 -2
- package/src/py/strands-agent/files/http/main.py.template +32 -13
- package/src/py/strands-agent/generator.js +11 -0
- package/src/py/strands-agent/generator.js.map +1 -1
- package/src/py/strands-agent/mcp-connection/__snapshots__/generator.spec.ts.snap +66 -59
- package/src/py/strands-agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client.py.template +6 -14
- package/src/py/strands-agent/mcp-connection/generator.js +3 -3
- package/src/ts/strands-agent/__snapshots__/generator.spec.ts.snap +17 -7
- package/src/ts/strands-agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client.ts.template +6 -14
- package/src/ts/strands-agent/a2a-connection/generator.js +2 -3
- package/src/ts/strands-agent/a2a-connection/generator.js.map +1 -1
- package/src/ts/strands-agent/files/a2a/index.ts.template +12 -2
- package/src/ts/strands-agent/files/common/agent.ts.template +2 -4
- package/src/ts/strands-agent/files/http/init.ts.template +12 -1
- package/src/ts/strands-agent/files/http/router.ts.template +3 -2
- package/src/ts/strands-agent/generator.js +7 -0
- package/src/ts/strands-agent/generator.js.map +1 -1
- package/src/ts/strands-agent/mcp-connection/__snapshots__/generator.spec.ts.snap +46 -71
- package/src/ts/strands-agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client.ts.template +8 -19
- package/src/ts/strands-agent/mcp-connection/generator.js +1 -1
- package/src/ts/strands-agent/mcp-connection/generator.js.map +1 -1
- package/src/utils/agent-connection/agent-connection.js +22 -0
- package/src/utils/agent-connection/agent-connection.js.map +1 -1
- package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client.ts.template +46 -57
- package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-client.ts.template +35 -51
- package/src/utils/agent-connection/files/core-runtime-config/session-context.ts.template +21 -0
- package/src/utils/agent-connection/files/core-runtime-config/with-session-id.ts.template +27 -0
- package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client.py.template +44 -15
- package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_client.py.template +50 -43
- package/src/utils/agent-connection/files/py-core-runtime-config/session_context.py.template +22 -0
- package/src/utils/agent-connection/files/py-core-runtime-config/with_session_id.py.template +44 -0
- package/src/utils/bundle/bundle.js +1 -0
- package/src/utils/bundle/bundle.js.map +1 -1
|
@@ -6,10 +6,32 @@ from mcp.client.streamable_http import streamablehttp_client
|
|
|
6
6
|
from strands.tools.mcp.mcp_client import MCPClient
|
|
7
7
|
|
|
8
8
|
from .auth import SigV4HTTPXAuth
|
|
9
|
+
from .session_context import get_current_session_id
|
|
10
|
+
|
|
11
|
+
SESSION_HEADER = "X-Amzn-Bedrock-AgentCore-Runtime-Session-Id"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class _SessionHeaderAuth(httpx.Auth):
|
|
15
|
+
"""Stamps the AgentCore session header from the current async context."""
|
|
16
|
+
|
|
17
|
+
requires_request_body = True
|
|
18
|
+
requires_response_body = True
|
|
19
|
+
|
|
20
|
+
def __init__(self, inner: httpx.Auth | None = None):
|
|
21
|
+
self._inner = inner
|
|
22
|
+
|
|
23
|
+
def auth_flow(self, request: httpx.Request): # type: ignore[override]
|
|
24
|
+
sid = get_current_session_id()
|
|
25
|
+
if sid:
|
|
26
|
+
request.headers[SESSION_HEADER] = sid
|
|
27
|
+
if self._inner is None:
|
|
28
|
+
yield request
|
|
29
|
+
return
|
|
30
|
+
yield from self._inner.auth_flow(request)
|
|
9
31
|
|
|
10
32
|
|
|
11
33
|
class AgentCoreMCPClient:
|
|
12
|
-
"""Factory for clients
|
|
34
|
+
"""Factory for MCP clients that forward the current async-context session."""
|
|
13
35
|
|
|
14
36
|
@staticmethod
|
|
15
37
|
def _build_url(agent_runtime_arn: str) -> tuple[str, str]:
|
|
@@ -19,64 +41,49 @@ class AgentCoreMCPClient:
|
|
|
19
41
|
"""
|
|
20
42
|
region = agent_runtime_arn.split(":")[3]
|
|
21
43
|
encoded_arn = agent_runtime_arn.replace(":", "%3A").replace("/", "%2F")
|
|
22
|
-
url =
|
|
44
|
+
url = (
|
|
45
|
+
f"https://bedrock-agentcore.{region}.amazonaws.com/runtimes/"
|
|
46
|
+
f"{encoded_arn}/invocations?qualifier=DEFAULT"
|
|
47
|
+
)
|
|
23
48
|
return region, url
|
|
24
49
|
|
|
25
50
|
@staticmethod
|
|
26
|
-
def _create(
|
|
27
|
-
agent_runtime_arn: str,
|
|
28
|
-
session_id: str,
|
|
29
|
-
headers: dict | None = None,
|
|
30
|
-
auth_handler: httpx.Auth | None = None,
|
|
31
|
-
) -> MCPClient:
|
|
32
|
-
_, url = AgentCoreMCPClient._build_url(agent_runtime_arn)
|
|
51
|
+
def _create(url: str, auth: httpx.Auth | None = None) -> MCPClient:
|
|
33
52
|
return MCPClient(
|
|
34
53
|
lambda: streamablehttp_client(
|
|
35
54
|
url,
|
|
36
|
-
auth=
|
|
55
|
+
auth=_SessionHeaderAuth(auth),
|
|
37
56
|
timeout=120,
|
|
38
57
|
terminate_on_close=False,
|
|
39
|
-
headers={
|
|
40
|
-
"X-Amzn-Bedrock-AgentCore-Runtime-Session-Id": session_id,
|
|
41
|
-
**(headers if headers is not None else {}),
|
|
42
|
-
},
|
|
43
58
|
)
|
|
44
59
|
)
|
|
45
60
|
|
|
46
61
|
@staticmethod
|
|
47
|
-
def with_iam_auth(agent_runtime_arn: str
|
|
48
|
-
"""
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
and the default credential provider chain.
|
|
52
|
-
"""
|
|
53
|
-
region, _ = AgentCoreMCPClient._build_url(agent_runtime_arn)
|
|
54
|
-
boto_session = boto3.Session(region_name=region)
|
|
55
|
-
credentials = boto_session.get_credentials()
|
|
62
|
+
def with_iam_auth(agent_runtime_arn: str) -> MCPClient:
|
|
63
|
+
"""SigV4-authenticated client for a Bedrock AgentCore runtime."""
|
|
64
|
+
region, url = AgentCoreMCPClient._build_url(agent_runtime_arn)
|
|
65
|
+
credentials = boto3.Session(region_name=region).get_credentials()
|
|
56
66
|
return AgentCoreMCPClient._create(
|
|
57
|
-
|
|
58
|
-
session_id=session_id,
|
|
59
|
-
auth_handler=SigV4HTTPXAuth(credentials, "bedrock-agentcore", region),
|
|
67
|
+
url, SigV4HTTPXAuth(credentials, "bedrock-agentcore", region)
|
|
60
68
|
)
|
|
61
69
|
|
|
62
70
|
@staticmethod
|
|
63
71
|
def with_jwt_auth(
|
|
64
|
-
agent_runtime_arn: str,
|
|
65
|
-
access_token_provider: Callable[[], str],
|
|
66
|
-
session_id: str,
|
|
72
|
+
agent_runtime_arn: str, access_token_provider: Callable[[], str]
|
|
67
73
|
) -> MCPClient:
|
|
68
|
-
"""
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
session_id=session_id,
|
|
79
|
-
headers={
|
|
80
|
-
"Authorization": f"Bearer {access_token}",
|
|
81
|
-
},
|
|
74
|
+
"""Bearer-authenticated client for a Bedrock AgentCore runtime."""
|
|
75
|
+
_, url = AgentCoreMCPClient._build_url(agent_runtime_arn)
|
|
76
|
+
return MCPClient(
|
|
77
|
+
lambda: streamablehttp_client(
|
|
78
|
+
url,
|
|
79
|
+
auth=_SessionHeaderAuth(),
|
|
80
|
+
headers={"Authorization": f"Bearer {access_token_provider()}"},
|
|
81
|
+
timeout=120,
|
|
82
|
+
terminate_on_close=False,
|
|
83
|
+
)
|
|
82
84
|
)
|
|
85
|
+
|
|
86
|
+
@staticmethod
|
|
87
|
+
def without_auth(url: str) -> MCPClient:
|
|
88
|
+
"""Plain-HTTP client — for local dev."""
|
|
89
|
+
return AgentCoreMCPClient._create(url)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from collections.abc import Iterator
|
|
2
|
+
from contextlib import contextmanager
|
|
3
|
+
from contextvars import ContextVar
|
|
4
|
+
|
|
5
|
+
_session_id_var: ContextVar[str | None] = ContextVar(
|
|
6
|
+
"agentcore_session_id", default=None
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def get_current_session_id() -> str | None:
|
|
11
|
+
"""The session ID for the current async scope, or ``None``."""
|
|
12
|
+
return _session_id_var.get()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
@contextmanager
|
|
16
|
+
def session_id_context(session_id: str) -> Iterator[None]:
|
|
17
|
+
"""Bind *session_id* as the current session for the scope of the block."""
|
|
18
|
+
token = _session_id_var.set(session_id)
|
|
19
|
+
try:
|
|
20
|
+
yield
|
|
21
|
+
finally:
|
|
22
|
+
_session_id_var.reset(token)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
from collections.abc import Callable, Iterator
|
|
2
|
+
from contextlib import AbstractContextManager, ExitStack, contextmanager
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
from .session_context import get_current_session_id
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@contextmanager
|
|
9
|
+
def with_session_id(
|
|
10
|
+
agent_factory: Callable[[], AbstractContextManager[Any]],
|
|
11
|
+
*,
|
|
12
|
+
name: str,
|
|
13
|
+
description: str,
|
|
14
|
+
) -> Iterator[Any]:
|
|
15
|
+
"""Wrap an agent factory so each session gets its own cached Agent."""
|
|
16
|
+
stack = ExitStack()
|
|
17
|
+
agents: dict[str, Any] = {}
|
|
18
|
+
|
|
19
|
+
def _for_session() -> Any:
|
|
20
|
+
sid = get_current_session_id() or "default"
|
|
21
|
+
if sid not in agents:
|
|
22
|
+
agents[sid] = stack.enter_context(agent_factory())
|
|
23
|
+
return agents[sid]
|
|
24
|
+
|
|
25
|
+
proxy_name = name
|
|
26
|
+
proxy_description = description
|
|
27
|
+
|
|
28
|
+
class _SessionRoutingAgent:
|
|
29
|
+
name: str = proxy_name
|
|
30
|
+
description: str = proxy_description
|
|
31
|
+
|
|
32
|
+
def __getattr__(self, attr: str) -> Any:
|
|
33
|
+
return getattr(_for_session(), attr)
|
|
34
|
+
|
|
35
|
+
def stream_async(self, *args, **kwargs):
|
|
36
|
+
return _for_session().stream_async(*args, **kwargs)
|
|
37
|
+
|
|
38
|
+
def invoke_async(self, *args, **kwargs):
|
|
39
|
+
return _for_session().invoke_async(*args, **kwargs)
|
|
40
|
+
|
|
41
|
+
try:
|
|
42
|
+
yield _SessionRoutingAgent()
|
|
43
|
+
finally:
|
|
44
|
+
stack.close()
|
|
@@ -16,6 +16,7 @@ const nx_1 = require("../nx");
|
|
|
16
16
|
const createPythonBundleTarget = ({ packageName, pythonPlatform, bundleTargetName, }) => {
|
|
17
17
|
return {
|
|
18
18
|
cache: true,
|
|
19
|
+
inputs: ['default', '^production'],
|
|
19
20
|
executor: 'nx:run-commands',
|
|
20
21
|
outputs: [`{workspaceRoot}/dist/{projectRoot}/${bundleTargetName}`],
|
|
21
22
|
options: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/utils/bundle/bundle.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/utils/bundle/bundle.ts"],"names":[],"mappings":"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"}
|