@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
package/package.json
CHANGED
|
@@ -98,6 +98,7 @@ const pyProjectGenerator = async (tree, schema) => {
|
|
|
98
98
|
const buildTarget = projectConfiguration.targets.build;
|
|
99
99
|
projectConfiguration.targets.compile = {
|
|
100
100
|
...buildTarget,
|
|
101
|
+
inputs: ['default', '^production'],
|
|
101
102
|
outputs: [buildOutputPath],
|
|
102
103
|
options: {
|
|
103
104
|
...buildTarget.options,
|
|
@@ -106,6 +107,7 @@ const pyProjectGenerator = async (tree, schema) => {
|
|
|
106
107
|
};
|
|
107
108
|
projectConfiguration.targets.typecheck = {
|
|
108
109
|
cache: true,
|
|
110
|
+
inputs: ['default', '^production'],
|
|
109
111
|
executor: '@nxlv/python:run-commands',
|
|
110
112
|
options: {
|
|
111
113
|
command: 'uv run ty check',
|
|
@@ -113,6 +115,7 @@ const pyProjectGenerator = async (tree, schema) => {
|
|
|
113
115
|
},
|
|
114
116
|
};
|
|
115
117
|
projectConfiguration.targets.build = {
|
|
118
|
+
inputs: ['default', '^production'],
|
|
116
119
|
dependsOn: [
|
|
117
120
|
'lint',
|
|
118
121
|
'compile',
|
|
@@ -137,6 +140,7 @@ const pyProjectGenerator = async (tree, schema) => {
|
|
|
137
140
|
projectConfiguration.targets.lint = {
|
|
138
141
|
...projectConfiguration.targets.lint,
|
|
139
142
|
cache: true,
|
|
143
|
+
inputs: ['default', '^production'],
|
|
140
144
|
dependsOn: [
|
|
141
145
|
...(projectConfiguration.targets.lint?.dependsOn ?? []).filter((d) => d !== 'format'),
|
|
142
146
|
'format',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/project/generator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/project/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -635,14 +635,13 @@ from strands import Agent, tool
|
|
|
635
635
|
from strands_tools import current_time
|
|
636
636
|
|
|
637
637
|
|
|
638
|
-
# Define a custom tool
|
|
639
638
|
@tool
|
|
640
639
|
def subtract(a: int, b: int) -> int:
|
|
641
640
|
return a - b
|
|
642
641
|
|
|
643
642
|
|
|
644
643
|
@contextmanager
|
|
645
|
-
def get_agent(
|
|
644
|
+
def get_agent():
|
|
646
645
|
yield Agent(
|
|
647
646
|
name="SnapshotAgent",
|
|
648
647
|
description="SnapshotAgent Strands Agent",
|
|
@@ -663,12 +662,21 @@ import uvicorn
|
|
|
663
662
|
from bedrock_agentcore.runtime.models import PingStatus
|
|
664
663
|
from fastapi import Request
|
|
665
664
|
from pydantic import BaseModel
|
|
665
|
+
from starlette.middleware.base import BaseHTTPMiddleware
|
|
666
|
+
from proj_agent_connection import session_id_context, with_session_id
|
|
666
667
|
|
|
667
668
|
from .agent import get_agent
|
|
668
669
|
from .init import JsonStreamingResponse, app
|
|
669
670
|
|
|
670
671
|
SESSION_ID_HEADER = "x-amzn-bedrock-agentcore-runtime-session-id"
|
|
671
672
|
|
|
673
|
+
_agent_ctx = with_session_id(
|
|
674
|
+
get_agent,
|
|
675
|
+
name="SnapshotAgent",
|
|
676
|
+
description="A Strands Agent exposed via HTTP streaming.",
|
|
677
|
+
)
|
|
678
|
+
_agent = _agent_ctx.__enter__()
|
|
679
|
+
|
|
672
680
|
|
|
673
681
|
class InvokeInput(BaseModel):
|
|
674
682
|
message: str
|
|
@@ -678,22 +686,21 @@ class StreamChunk(BaseModel):
|
|
|
678
686
|
content: str
|
|
679
687
|
|
|
680
688
|
|
|
681
|
-
async def handle_invoke(input: InvokeInput
|
|
689
|
+
async def handle_invoke(input: InvokeInput):
|
|
682
690
|
"""Streaming handler for agent invocation"""
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
yield StreamChunk(content="\\n")
|
|
691
|
+
stream = _agent.stream_async(input.message)
|
|
692
|
+
async for event in stream:
|
|
693
|
+
print(event)
|
|
694
|
+
text = (
|
|
695
|
+
event.get("event", {})
|
|
696
|
+
.get("contentBlockDelta", {})
|
|
697
|
+
.get("delta", {})
|
|
698
|
+
.get("text")
|
|
699
|
+
)
|
|
700
|
+
if text is not None:
|
|
701
|
+
yield StreamChunk(content=text)
|
|
702
|
+
elif event.get("event", {}).get("messageStop") is not None:
|
|
703
|
+
yield StreamChunk(content="\\n")
|
|
697
704
|
|
|
698
705
|
|
|
699
706
|
@app.post(
|
|
@@ -705,10 +712,21 @@ async def handle_invoke(input: InvokeInput, session_id: str):
|
|
|
705
712
|
)
|
|
706
713
|
},
|
|
707
714
|
)
|
|
708
|
-
async def invoke(input: InvokeInput
|
|
715
|
+
async def invoke(input: InvokeInput) -> JsonStreamingResponse:
|
|
709
716
|
"""Entry point for agent invocation"""
|
|
710
|
-
|
|
711
|
-
|
|
717
|
+
return JsonStreamingResponse(handle_invoke(input))
|
|
718
|
+
|
|
719
|
+
|
|
720
|
+
class _SessionIdMiddleware(BaseHTTPMiddleware):
|
|
721
|
+
"""Bind the inbound session (or a fresh UUID) to async context."""
|
|
722
|
+
|
|
723
|
+
async def dispatch(self, request: Request, call_next):
|
|
724
|
+
session_id = request.headers.get(SESSION_ID_HEADER) or str(uuid.uuid4())
|
|
725
|
+
with session_id_context(session_id):
|
|
726
|
+
return await call_next(request)
|
|
727
|
+
|
|
728
|
+
|
|
729
|
+
app.add_middleware(_SessionIdMiddleware)
|
|
712
730
|
|
|
713
731
|
|
|
714
732
|
@app.get("/ping")
|
|
@@ -727,6 +745,7 @@ exports[`py#strands-agent generator > should match snapshot for generated files
|
|
|
727
745
|
name = "proj.test_project"
|
|
728
746
|
version = "0.1.0"
|
|
729
747
|
dependencies = [
|
|
748
|
+
"proj.agent_connection",
|
|
730
749
|
"aws-lambda-powertools==3.28.0",
|
|
731
750
|
"aws-opentelemetry-distro==0.17.0",
|
|
732
751
|
"bedrock-agentcore==1.8.0",
|
|
@@ -743,5 +762,8 @@ dev = [ "fastapi[standard]==0.136.1" ]
|
|
|
743
762
|
|
|
744
763
|
[tool.uv]
|
|
745
764
|
dev-dependencies = [ ]
|
|
765
|
+
|
|
766
|
+
[tool.uv.sources."proj.agent_connection"]
|
|
767
|
+
workspace = true
|
|
746
768
|
"
|
|
747
769
|
`;
|
|
@@ -9,21 +9,14 @@ from <%- agentConnectionModuleName %>.core.runtime_config import (
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class <%- targetAgentClassName %>Client:
|
|
12
|
-
"""Client for
|
|
13
|
-
|
|
14
|
-
In deployed mode: resolves the AgentCore runtime ARN from runtime config
|
|
15
|
-
and uses a SigV4-authenticated A2A transport.
|
|
16
|
-
|
|
17
|
-
In local mode (SERVE_LOCAL env var set): connects directly to the local
|
|
18
|
-
A2A server over plain HTTP.
|
|
19
|
-
"""
|
|
12
|
+
"""Client for the <%- targetAgentClassName %> A2A agent."""
|
|
20
13
|
|
|
21
14
|
@staticmethod
|
|
22
|
-
def create(
|
|
15
|
+
def create() -> A2AAgent:
|
|
23
16
|
if os.environ.get("SERVE_LOCAL") == "true":
|
|
24
|
-
return
|
|
25
|
-
|
|
17
|
+
return AgentCoreA2aClient.without_auth(
|
|
18
|
+
"http://localhost:<%- targetAgentPort %>/"
|
|
19
|
+
)
|
|
26
20
|
return AgentCoreA2aClient.with_iam_auth(
|
|
27
|
-
|
|
28
|
-
session_id=session_id,
|
|
21
|
+
get_connected_agent_runtime_arn("<%- targetAgentClassName %>")
|
|
29
22
|
)
|
|
@@ -138,7 +138,7 @@ const addClientToolToGetAgent = async (tree, filePath, clientClassName, clientVa
|
|
|
138
138
|
// The tool function we'll insert. Strands tools in Python are just
|
|
139
139
|
// @tool-decorated callables, so we define them inline in get_agent.
|
|
140
140
|
// A2AAgent is directly callable (syncs over invoke_async internally).
|
|
141
|
-
const toolBlock = `${clientVarName} = ${clientClassName}.create(
|
|
141
|
+
const toolBlock = `${clientVarName} = ${clientClassName}.create()
|
|
142
142
|
|
|
143
143
|
@tool
|
|
144
144
|
def ${toolName}(prompt: str) -> str:
|
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
import os
|
|
3
|
+
import uuid
|
|
3
4
|
|
|
4
|
-
from fastapi import FastAPI
|
|
5
|
+
from fastapi import FastAPI, Request
|
|
6
|
+
from starlette.middleware.base import BaseHTTPMiddleware
|
|
5
7
|
from strands.multiagent.a2a import A2AServer
|
|
8
|
+
from <%- agentConnectionModuleName %> import session_id_context, with_session_id
|
|
6
9
|
|
|
7
10
|
from .agent import get_agent
|
|
8
11
|
|
|
9
12
|
logging.basicConfig(level=logging.INFO)
|
|
10
13
|
|
|
11
14
|
PORT = int(os.environ.get("PORT", "9000"))
|
|
12
|
-
|
|
13
15
|
RUNTIME_URL = os.environ.get("AGENTCORE_RUNTIME_URL", f"http://localhost:{PORT}/")
|
|
16
|
+
SESSION_ID_HEADER = "x-amzn-bedrock-agentcore-runtime-session-id"
|
|
14
17
|
|
|
15
|
-
_agent_ctx =
|
|
18
|
+
_agent_ctx = with_session_id(
|
|
19
|
+
get_agent,
|
|
20
|
+
name="<%= agentNameClassName %>",
|
|
21
|
+
description="A Strands Agent exposed via the Agent-to-Agent (A2A) protocol.",
|
|
22
|
+
)
|
|
16
23
|
_agent = _agent_ctx.__enter__()
|
|
17
24
|
|
|
18
25
|
a2a_server = A2AServer(
|
|
@@ -20,9 +27,23 @@ a2a_server = A2AServer(
|
|
|
20
27
|
port=PORT,
|
|
21
28
|
http_url=RUNTIME_URL,
|
|
22
29
|
serve_at_root=True,
|
|
30
|
+
# Skip tool-registry introspection for the agent card — the per-session
|
|
31
|
+
# agents aren't constructed yet at import time.
|
|
32
|
+
skills=[],
|
|
23
33
|
)
|
|
24
34
|
|
|
35
|
+
|
|
36
|
+
class _SessionIdMiddleware(BaseHTTPMiddleware):
|
|
37
|
+
"""Bind the inbound session (or a fresh UUID) to async context."""
|
|
38
|
+
|
|
39
|
+
async def dispatch(self, request: Request, call_next):
|
|
40
|
+
session_id = request.headers.get(SESSION_ID_HEADER) or str(uuid.uuid4())
|
|
41
|
+
with session_id_context(session_id):
|
|
42
|
+
return await call_next(request)
|
|
43
|
+
|
|
44
|
+
|
|
25
45
|
app = FastAPI()
|
|
46
|
+
app.add_middleware(_SessionIdMiddleware)
|
|
26
47
|
|
|
27
48
|
|
|
28
49
|
@app.get("/ping")
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import logging
|
|
2
2
|
|
|
3
|
-
from .agent import get_agent
|
|
4
3
|
from ag_ui_strands import StrandsAgent, create_strands_app
|
|
5
4
|
|
|
5
|
+
from .agent import get_agent
|
|
6
|
+
|
|
6
7
|
logging.basicConfig(level=logging.INFO)
|
|
7
8
|
|
|
8
9
|
# Create AG-UI agent wrapper
|
|
9
|
-
_agent_ctx = get_agent(
|
|
10
|
+
_agent_ctx = get_agent()
|
|
10
11
|
_agent = _agent_ctx.__enter__()
|
|
11
12
|
|
|
12
13
|
agui_agent = StrandsAgent(
|
|
@@ -4,14 +4,13 @@ from strands import Agent, tool
|
|
|
4
4
|
from strands_tools import current_time
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
# Define a custom tool
|
|
8
7
|
@tool
|
|
9
8
|
def subtract(a: int, b: int) -> int:
|
|
10
9
|
return a - b
|
|
11
10
|
|
|
12
11
|
|
|
13
12
|
@contextmanager
|
|
14
|
-
def get_agent(
|
|
13
|
+
def get_agent():
|
|
15
14
|
yield Agent(
|
|
16
15
|
name="<%= agentNameClassName %>",
|
|
17
16
|
description="<%= agentNameClassName %> Strands Agent",
|
|
@@ -4,12 +4,21 @@ import uvicorn
|
|
|
4
4
|
from bedrock_agentcore.runtime.models import PingStatus
|
|
5
5
|
from fastapi import Request
|
|
6
6
|
from pydantic import BaseModel
|
|
7
|
+
from starlette.middleware.base import BaseHTTPMiddleware
|
|
8
|
+
from <%- agentConnectionModuleName %> import session_id_context, with_session_id
|
|
7
9
|
|
|
8
10
|
from .agent import get_agent
|
|
9
11
|
from .init import JsonStreamingResponse, app
|
|
10
12
|
|
|
11
13
|
SESSION_ID_HEADER = "x-amzn-bedrock-agentcore-runtime-session-id"
|
|
12
14
|
|
|
15
|
+
_agent_ctx = with_session_id(
|
|
16
|
+
get_agent,
|
|
17
|
+
name="<%= agentNameClassName %>",
|
|
18
|
+
description="A Strands Agent exposed via HTTP streaming.",
|
|
19
|
+
)
|
|
20
|
+
_agent = _agent_ctx.__enter__()
|
|
21
|
+
|
|
13
22
|
|
|
14
23
|
class InvokeInput(BaseModel):
|
|
15
24
|
message: str
|
|
@@ -19,17 +28,16 @@ class StreamChunk(BaseModel):
|
|
|
19
28
|
content: str
|
|
20
29
|
|
|
21
30
|
|
|
22
|
-
async def handle_invoke(input: InvokeInput
|
|
31
|
+
async def handle_invoke(input: InvokeInput):
|
|
23
32
|
"""Streaming handler for agent invocation"""
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
yield StreamChunk(content="\n")
|
|
33
|
+
stream = _agent.stream_async(input.message)
|
|
34
|
+
async for event in stream:
|
|
35
|
+
print(event)
|
|
36
|
+
text = event.get("event", {}).get("contentBlockDelta", {}).get("delta", {}).get("text")
|
|
37
|
+
if text is not None:
|
|
38
|
+
yield StreamChunk(content=text)
|
|
39
|
+
elif event.get("event", {}).get("messageStop") is not None:
|
|
40
|
+
yield StreamChunk(content="\n")
|
|
33
41
|
|
|
34
42
|
|
|
35
43
|
@app.post(
|
|
@@ -37,10 +45,21 @@ async def handle_invoke(input: InvokeInput, session_id: str):
|
|
|
37
45
|
response_class=JsonStreamingResponse,
|
|
38
46
|
responses={200: JsonStreamingResponse.openapi_response(StreamChunk, "Stream of agent response chunks")},
|
|
39
47
|
)
|
|
40
|
-
async def invoke(input: InvokeInput
|
|
48
|
+
async def invoke(input: InvokeInput) -> JsonStreamingResponse:
|
|
41
49
|
"""Entry point for agent invocation"""
|
|
42
|
-
|
|
43
|
-
|
|
50
|
+
return JsonStreamingResponse(handle_invoke(input))
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class _SessionIdMiddleware(BaseHTTPMiddleware):
|
|
54
|
+
"""Bind the inbound session (or a fresh UUID) to async context."""
|
|
55
|
+
|
|
56
|
+
async def dispatch(self, request: Request, call_next):
|
|
57
|
+
session_id = request.headers.get(SESSION_ID_HEADER) or str(uuid.uuid4())
|
|
58
|
+
with session_id_context(session_id):
|
|
59
|
+
return await call_next(request)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
app.add_middleware(_SessionIdMiddleware)
|
|
44
63
|
|
|
45
64
|
|
|
46
65
|
@app.get("/ping")
|
|
@@ -15,6 +15,8 @@ const format_1 = require("../../utils/format");
|
|
|
15
15
|
const names_1 = require("../../utils/names");
|
|
16
16
|
const py_1 = require("../../utils/py");
|
|
17
17
|
const agent_core_constructs_1 = require("../../utils/agent-core-constructs/agent-core-constructs");
|
|
18
|
+
const agent_connection_1 = require("../../utils/agent-connection/agent-connection");
|
|
19
|
+
const py_2 = require("../../utils/py");
|
|
18
20
|
const bundle_1 = require("../../utils/bundle/bundle");
|
|
19
21
|
const fs_1 = require("../../utils/fs");
|
|
20
22
|
const npm_scope_1 = require("../../utils/npm-scope");
|
|
@@ -45,11 +47,20 @@ const pyStrandsAgentGenerator = async (tree, options) => {
|
|
|
45
47
|
const computeType = options.computeType ?? 'BedrockAgentCoreRuntime';
|
|
46
48
|
const auth = options.auth ?? 'IAM';
|
|
47
49
|
const protocol = options.protocol ?? 'HTTP';
|
|
50
|
+
// Ensure the shared agent-connection project exists so the server entry
|
|
51
|
+
// point can import `session_id_context` and propagate the AgentCore
|
|
52
|
+
// session ID to any downstream MCP / A2A clients a later connection
|
|
53
|
+
// generator wires into this agent.
|
|
54
|
+
await (0, agent_connection_1.ensurePythonAgentConnectionProject)(tree);
|
|
55
|
+
const agentConnectionModuleName = (0, agent_connection_1.getPythonAgentConnectionModuleName)(tree);
|
|
56
|
+
const agentConnectionPackageName = (0, agent_connection_1.getPythonAgentConnectionPackageName)(tree);
|
|
57
|
+
(0, py_2.addWorkspaceDependencyToPyProject)(tree, project.root, agentConnectionPackageName);
|
|
48
58
|
const templateContext = {
|
|
49
59
|
name,
|
|
50
60
|
agentNameSnakeCase,
|
|
51
61
|
agentNameClassName,
|
|
52
62
|
moduleName,
|
|
63
|
+
agentConnectionModuleName,
|
|
53
64
|
};
|
|
54
65
|
// Generate common files shared by both protocols
|
|
55
66
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'common'), targetSourceDir, templateContext, { overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/strands-agent/generator.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCASoB;AACpB,mDAAoD;AACpD,yCAAkD;AAClD,+CAAoD;AAEpD,uCAMwB;AACxB,iDAAsE;AACtE,+CAA0D;AAC1D,6CAAwE;AACxE,uCAGwB;AACxB,mGAAwF;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/strands-agent/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,9 +3,19 @@
|
|
|
3
3
|
exports[`py#strands-agent#mcp-connection generator > should match snapshot for generated files > agent-connection-init.py 1`] = `
|
|
4
4
|
""""Automatically generated by Nx."""
|
|
5
5
|
|
|
6
|
+
from .core.session_context import get_current_session_id, session_id_context
|
|
7
|
+
|
|
6
8
|
from .app.inventory_mcp_client import InventoryMcpClient
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
from .core.with_session_id import with_session_id
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
__all__ = [
|
|
14
|
+
"get_current_session_id",
|
|
15
|
+
"session_id_context",
|
|
16
|
+
"with_session_id",
|
|
17
|
+
"InventoryMcpClient",
|
|
18
|
+
]
|
|
9
19
|
"
|
|
10
20
|
`;
|
|
11
21
|
|
|
@@ -18,10 +28,32 @@ from mcp.client.streamable_http import streamablehttp_client
|
|
|
18
28
|
from strands.tools.mcp.mcp_client import MCPClient
|
|
19
29
|
|
|
20
30
|
from .auth import SigV4HTTPXAuth
|
|
31
|
+
from .session_context import get_current_session_id
|
|
32
|
+
|
|
33
|
+
SESSION_HEADER = "X-Amzn-Bedrock-AgentCore-Runtime-Session-Id"
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class _SessionHeaderAuth(httpx.Auth):
|
|
37
|
+
"""Stamps the AgentCore session header from the current async context."""
|
|
38
|
+
|
|
39
|
+
requires_request_body = True
|
|
40
|
+
requires_response_body = True
|
|
41
|
+
|
|
42
|
+
def __init__(self, inner: httpx.Auth | None = None):
|
|
43
|
+
self._inner = inner
|
|
44
|
+
|
|
45
|
+
def auth_flow(self, request: httpx.Request): # type: ignore[override]
|
|
46
|
+
sid = get_current_session_id()
|
|
47
|
+
if sid:
|
|
48
|
+
request.headers[SESSION_HEADER] = sid
|
|
49
|
+
if self._inner is None:
|
|
50
|
+
yield request
|
|
51
|
+
return
|
|
52
|
+
yield from self._inner.auth_flow(request)
|
|
21
53
|
|
|
22
54
|
|
|
23
55
|
class AgentCoreMCPClient:
|
|
24
|
-
"""Factory for clients
|
|
56
|
+
"""Factory for MCP clients that forward the current async-context session."""
|
|
25
57
|
|
|
26
58
|
@staticmethod
|
|
27
59
|
def _build_url(agent_runtime_arn: str) -> tuple[str, str]:
|
|
@@ -31,74 +63,58 @@ class AgentCoreMCPClient:
|
|
|
31
63
|
"""
|
|
32
64
|
region = agent_runtime_arn.split(":")[3]
|
|
33
65
|
encoded_arn = agent_runtime_arn.replace(":", "%3A").replace("/", "%2F")
|
|
34
|
-
url =
|
|
66
|
+
url = (
|
|
67
|
+
f"https://bedrock-agentcore.{region}.amazonaws.com/runtimes/"
|
|
68
|
+
f"{encoded_arn}/invocations?qualifier=DEFAULT"
|
|
69
|
+
)
|
|
35
70
|
return region, url
|
|
36
71
|
|
|
37
72
|
@staticmethod
|
|
38
|
-
def _create(
|
|
39
|
-
agent_runtime_arn: str,
|
|
40
|
-
session_id: str,
|
|
41
|
-
headers: dict | None = None,
|
|
42
|
-
auth_handler: httpx.Auth | None = None,
|
|
43
|
-
) -> MCPClient:
|
|
44
|
-
_, url = AgentCoreMCPClient._build_url(agent_runtime_arn)
|
|
73
|
+
def _create(url: str, auth: httpx.Auth | None = None) -> MCPClient:
|
|
45
74
|
return MCPClient(
|
|
46
75
|
lambda: streamablehttp_client(
|
|
47
76
|
url,
|
|
48
|
-
auth=
|
|
77
|
+
auth=_SessionHeaderAuth(auth),
|
|
49
78
|
timeout=120,
|
|
50
79
|
terminate_on_close=False,
|
|
51
|
-
headers={
|
|
52
|
-
"X-Amzn-Bedrock-AgentCore-Runtime-Session-Id": session_id,
|
|
53
|
-
**(headers if headers is not None else {}),
|
|
54
|
-
},
|
|
55
80
|
)
|
|
56
81
|
)
|
|
57
82
|
|
|
58
83
|
@staticmethod
|
|
59
|
-
def with_iam_auth(agent_runtime_arn: str
|
|
60
|
-
"""
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
and the default credential provider chain.
|
|
64
|
-
"""
|
|
65
|
-
region, _ = AgentCoreMCPClient._build_url(agent_runtime_arn)
|
|
66
|
-
boto_session = boto3.Session(region_name=region)
|
|
67
|
-
credentials = boto_session.get_credentials()
|
|
84
|
+
def with_iam_auth(agent_runtime_arn: str) -> MCPClient:
|
|
85
|
+
"""SigV4-authenticated client for a Bedrock AgentCore runtime."""
|
|
86
|
+
region, url = AgentCoreMCPClient._build_url(agent_runtime_arn)
|
|
87
|
+
credentials = boto3.Session(region_name=region).get_credentials()
|
|
68
88
|
return AgentCoreMCPClient._create(
|
|
69
|
-
|
|
70
|
-
session_id=session_id,
|
|
71
|
-
auth_handler=SigV4HTTPXAuth(credentials, "bedrock-agentcore", region),
|
|
89
|
+
url, SigV4HTTPXAuth(credentials, "bedrock-agentcore", region)
|
|
72
90
|
)
|
|
73
91
|
|
|
74
92
|
@staticmethod
|
|
75
93
|
def with_jwt_auth(
|
|
76
|
-
agent_runtime_arn: str,
|
|
77
|
-
access_token_provider: Callable[[], str],
|
|
78
|
-
session_id: str,
|
|
94
|
+
agent_runtime_arn: str, access_token_provider: Callable[[], str]
|
|
79
95
|
) -> MCPClient:
|
|
80
|
-
"""
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
session_id=session_id,
|
|
91
|
-
headers={
|
|
92
|
-
"Authorization": f"Bearer {access_token}",
|
|
93
|
-
},
|
|
96
|
+
"""Bearer-authenticated client for a Bedrock AgentCore runtime."""
|
|
97
|
+
_, url = AgentCoreMCPClient._build_url(agent_runtime_arn)
|
|
98
|
+
return MCPClient(
|
|
99
|
+
lambda: streamablehttp_client(
|
|
100
|
+
url,
|
|
101
|
+
auth=_SessionHeaderAuth(),
|
|
102
|
+
headers={"Authorization": f"Bearer {access_token_provider()}"},
|
|
103
|
+
timeout=120,
|
|
104
|
+
terminate_on_close=False,
|
|
105
|
+
)
|
|
94
106
|
)
|
|
107
|
+
|
|
108
|
+
@staticmethod
|
|
109
|
+
def without_auth(url: str) -> MCPClient:
|
|
110
|
+
"""Plain-HTTP client — for local dev."""
|
|
111
|
+
return AgentCoreMCPClient._create(url)
|
|
95
112
|
"
|
|
96
113
|
`;
|
|
97
114
|
|
|
98
115
|
exports[`py#strands-agent#mcp-connection generator > should match snapshot for generated files > inventory_mcp_client.py 1`] = `
|
|
99
116
|
"import os
|
|
100
117
|
|
|
101
|
-
from mcp.client.streamable_http import streamablehttp_client
|
|
102
118
|
from strands.tools.mcp.mcp_client import MCPClient
|
|
103
119
|
|
|
104
120
|
from proj_agent_connection.core.agentcore_mcp_client import AgentCoreMCPClient
|
|
@@ -108,23 +124,14 @@ from proj_agent_connection.core.runtime_config import (
|
|
|
108
124
|
|
|
109
125
|
|
|
110
126
|
class InventoryMcpClient:
|
|
111
|
-
"""Client for
|
|
112
|
-
|
|
113
|
-
In deployed mode: resolves the AgentCore runtime ARN from runtime config
|
|
114
|
-
and uses SigV4-authenticated AgentCore transport.
|
|
115
|
-
|
|
116
|
-
In local mode (SERVE_LOCAL env var set): connects directly
|
|
117
|
-
to the local MCP server via Streamable HTTP.
|
|
118
|
-
"""
|
|
127
|
+
"""Client for the InventoryMcp MCP server."""
|
|
119
128
|
|
|
120
129
|
@staticmethod
|
|
121
|
-
def create(
|
|
130
|
+
def create() -> MCPClient:
|
|
122
131
|
if os.environ.get("SERVE_LOCAL") == "true":
|
|
123
|
-
return
|
|
124
|
-
|
|
132
|
+
return AgentCoreMCPClient.without_auth("http://localhost:8082/mcp")
|
|
125
133
|
return AgentCoreMCPClient.with_iam_auth(
|
|
126
|
-
|
|
127
|
-
session_id=session_id,
|
|
134
|
+
get_connected_agent_runtime_arn("InventoryMcp")
|
|
128
135
|
)
|
|
129
136
|
"
|
|
130
137
|
`;
|
|
@@ -145,7 +152,7 @@ def subtract(a: int, b: int) -> int:
|
|
|
145
152
|
|
|
146
153
|
@contextmanager
|
|
147
154
|
def get_agent(session_id: str):
|
|
148
|
-
inventory_mcp = InventoryMcpClient.create(
|
|
155
|
+
inventory_mcp = InventoryMcpClient.create()
|
|
149
156
|
with (
|
|
150
157
|
inventory_mcp,
|
|
151
158
|
):
|