@aws/nx-plugin 0.112.1 → 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.
Files changed (42) hide show
  1. package/LICENSE-THIRD-PARTY +957 -429
  2. package/package.json +1 -1
  3. package/src/py/project/generator.js +4 -0
  4. package/src/py/project/generator.js.map +1 -1
  5. package/src/py/strands-agent/__snapshots__/generator.spec.ts.snap +42 -20
  6. package/src/py/strands-agent/a2a-connection/files/agent-connection/app/__targetAgentSnakeCase___client.py.template +6 -13
  7. package/src/py/strands-agent/a2a-connection/generator.js +1 -1
  8. package/src/py/strands-agent/files/a2a/main.py.template +24 -3
  9. package/src/py/strands-agent/files/ag-ui/main.py.template +3 -2
  10. package/src/py/strands-agent/files/common/agent.py.template +1 -2
  11. package/src/py/strands-agent/files/http/main.py.template +32 -13
  12. package/src/py/strands-agent/generator.js +11 -0
  13. package/src/py/strands-agent/generator.js.map +1 -1
  14. package/src/py/strands-agent/mcp-connection/__snapshots__/generator.spec.ts.snap +66 -59
  15. package/src/py/strands-agent/mcp-connection/files/agent-connection/app/__mcpServerSnakeCase___client.py.template +6 -14
  16. package/src/py/strands-agent/mcp-connection/generator.js +3 -3
  17. package/src/ts/strands-agent/__snapshots__/generator.spec.ts.snap +17 -7
  18. package/src/ts/strands-agent/a2a-connection/files/agent-connection/app/__targetAgentKebabCase__-client.ts.template +6 -14
  19. package/src/ts/strands-agent/a2a-connection/generator.js +2 -3
  20. package/src/ts/strands-agent/a2a-connection/generator.js.map +1 -1
  21. package/src/ts/strands-agent/files/a2a/index.ts.template +12 -2
  22. package/src/ts/strands-agent/files/common/agent.ts.template +2 -4
  23. package/src/ts/strands-agent/files/http/init.ts.template +12 -1
  24. package/src/ts/strands-agent/files/http/router.ts.template +3 -2
  25. package/src/ts/strands-agent/generator.js +7 -0
  26. package/src/ts/strands-agent/generator.js.map +1 -1
  27. package/src/ts/strands-agent/mcp-connection/__snapshots__/generator.spec.ts.snap +46 -71
  28. package/src/ts/strands-agent/mcp-connection/files/agent-connection/app/__mcpServerKebabCase__-client.ts.template +8 -19
  29. package/src/ts/strands-agent/mcp-connection/generator.js +1 -1
  30. package/src/ts/strands-agent/mcp-connection/generator.js.map +1 -1
  31. package/src/utils/agent-connection/agent-connection.js +22 -0
  32. package/src/utils/agent-connection/agent-connection.js.map +1 -1
  33. package/src/utils/agent-connection/files/core-a2a/agentcore-a2a-client.ts.template +46 -57
  34. package/src/utils/agent-connection/files/core-mcp/agentcore-mcp-client.ts.template +35 -51
  35. package/src/utils/agent-connection/files/core-runtime-config/session-context.ts.template +21 -0
  36. package/src/utils/agent-connection/files/core-runtime-config/with-session-id.ts.template +27 -0
  37. package/src/utils/agent-connection/files/py-core-a2a/agentcore_a2a_client.py.template +44 -15
  38. package/src/utils/agent-connection/files/py-core-mcp/agentcore_mcp_client.py.template +50 -43
  39. package/src/utils/agent-connection/files/py-core-runtime-config/session_context.py.template +22 -0
  40. package/src/utils/agent-connection/files/py-core-runtime-config/with_session_id.py.template +44 -0
  41. package/src/utils/bundle/bundle.js +1 -0
  42. 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 to call MCP servers hosted on Bedrock AgentCore Runtime."""
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 = f"https://bedrock-agentcore.{region}.amazonaws.com/runtimes/{encoded_arn}/invocations?qualifier=DEFAULT"
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=auth_handler,
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, session_id: str) -> MCPClient:
48
- """Create an MCP client with IAM (SigV4) authentication.
49
-
50
- Region and credentials are derived automatically from the ARN
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
- agent_runtime_arn=agent_runtime_arn,
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
- """Create an MCP client with JWT authentication.
69
-
70
- Args:
71
- agent_runtime_arn: The ARN of the AgentCore runtime.
72
- access_token_provider: A callable that returns the JWT access token.
73
- session_id: Session ID for the connection.
74
- """
75
- access_token = access_token_provider()
76
- return AgentCoreMCPClient._create(
77
- agent_runtime_arn=agent_runtime_arn,
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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"}