11# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22# SPDX-License-Identifier: Apache-2.0
33
4- from code_int_mcp .server import code_int_mcp_server
4+ import json
5+ import logging
6+ import os
7+
8+ from agents .subagents import get_subagent_definitions
9+ from bedrock_agentcore .runtime import BedrockAgentCoreApp , RequestContext
510from claude_agent_sdk import (
611 AssistantMessage ,
7- UserMessage ,
12+ ClaudeAgentOptions ,
13+ ClaudeSDKClient ,
14+ ProcessError ,
815 ResultMessage ,
916 SystemMessage ,
10- ClaudeAgentOptions ,
1117 TextBlock ,
12- ToolUseBlock ,
13- ClaudeSDKClient ,
1418 ToolResultBlock ,
15- ProcessError ,
19+ ToolUseBlock ,
20+ UserMessage ,
1621)
17- from bedrock_agentcore .runtime import BedrockAgentCoreApp , RequestContext
18- from agents .subagents import get_subagent_definitions
22+ from code_int_mcp .server import code_int_mcp_server
1923from utils .auth import extract_user_id_from_context , get_gateway_access_token
2024from utils .ssm import get_ssm_parameter
21- import logging
22- import json
23- import os
2425
2526logging .basicConfig (level = logging .INFO )
2627logger = logging .getLogger (__name__ )
@@ -49,7 +50,7 @@ async def main(payload, context: RequestContext):
4950 }
5051 return
5152
52- code_int_session_id = payload .get ("code_int_session_id" , "" )
53+ _code_int_session_id = payload .get ("code_int_session_id" , "" )
5354 claude_session_id = _session_map .get (runtime_session_id )
5455
5556 # Extract user ID securely from validated JWT token
@@ -68,7 +69,9 @@ async def main(payload, context: RequestContext):
6869 gateway_url = get_ssm_parameter (f"/{ stack_name } /gateway_url" )
6970 access_token = get_gateway_access_token ()
7071 except Exception as e :
71- logger .warning ("[AGENT] Gateway not available, continuing without tools: %s" , e )
72+ logger .warning (
73+ "[AGENT] Gateway not available, continuing without tools: %s" , e
74+ )
7275 gateway_url = None
7376 access_token = None
7477
@@ -107,13 +110,28 @@ def _build_options(resume_id: str | None) -> ClaudeAgentOptions:
107110 mcp_servers = mcp_servers ,
108111 model = "us.anthropic.claude-opus-4-6-v1" ,
109112 allowed_tools = allowed_tools ,
110- disallowed_tools = ["Bash" , "Write" , "NotebookEdit" , "Edit" , "WebFetch" , "Read" , "Glob" , "Grep" , "EnterWorktree" , "Skill" , "TodoWrite" , "CronCreate" , "CronDelete" , "CronList" ],
113+ disallowed_tools = [
114+ "Bash" ,
115+ "Write" ,
116+ "NotebookEdit" ,
117+ "Edit" ,
118+ "WebFetch" ,
119+ "Read" ,
120+ "Glob" ,
121+ "Grep" ,
122+ "EnterWorktree" ,
123+ "Skill" ,
124+ "TodoWrite" ,
125+ "CronCreate" ,
126+ "CronDelete" ,
127+ "CronList" ,
128+ ],
111129 agents = subagents ,
112130 resume = resume_id ,
113131 thinking = {"type" : "adaptive" },
114132 cli_path = "/usr/bin/claude" ,
115133 stderr = lambda line : logger .error ("claude-code stderr: %s" , line ),
116- system_prompt = f """You are an AI assistant that helps users with code execution and analysis tasks.
134+ system_prompt = """You are an AI assistant that helps users with code execution and analysis tasks.
117135
118136CRITICAL RULES:
1191371. You MUST use mcp__codeint__execute_code for ALL Python code execution tasks.
@@ -144,7 +162,9 @@ async def _process_messages(options: ClaudeAgentOptions):
144162 async for msg in client .receive_response ():
145163 if isinstance (msg , SystemMessage ):
146164 if msg .subtype == "init" :
147- logger .info ("Claude session init: %s" , msg .data .get ("session_id" ))
165+ logger .info (
166+ "Claude session init: %s" , msg .data .get ("session_id" )
167+ )
148168 elif isinstance (msg , AssistantMessage ):
149169 for block in msg .content :
150170 if isinstance (block , ToolUseBlock ):
@@ -153,7 +173,9 @@ async def _process_messages(options: ClaudeAgentOptions):
153173 "current_tool_use" : {
154174 "name" : block .name ,
155175 "input" : block .input ,
156- "toolUseId" : f"tool-{ block .id } " if hasattr (block , "id" ) else f"tool-{ hash (block .name )} " ,
176+ "toolUseId" : f"tool-{ block .id } "
177+ if hasattr (block , "id" )
178+ else f"tool-{ hash (block .name )} " ,
157179 }
158180 }
159181 elif isinstance (block , TextBlock ):
@@ -169,9 +191,11 @@ async def _process_messages(options: ClaudeAgentOptions):
169191 try :
170192 result_data = json .loads (text_content )
171193 if isinstance (result_data , dict ):
172- extracted = result_data .get ("code_int_session_id" , "" )
194+ extracted = result_data .get (
195+ "code_int_session_id" , ""
196+ )
173197 if extracted :
174- code_int_session_id = extracted
198+ _code_int_session_id = extracted
175199 except json .JSONDecodeError :
176200 pass
177201 elif isinstance (msg , ResultMessage ):
@@ -185,7 +209,10 @@ async def _process_messages(options: ClaudeAgentOptions):
185209 yield event
186210 except ProcessError :
187211 if claude_session_id :
188- logger .warning ("Resume failed for session %s, starting fresh session" , claude_session_id )
212+ logger .warning (
213+ "Resume failed for session %s, starting fresh session" ,
214+ claude_session_id ,
215+ )
189216 async for event in _process_messages (_build_options (None )):
190217 yield event
191218 else :
0 commit comments