@@ -1106,33 +1106,7 @@ async def create_session(
11061106 else :
11071107 raise RuntimeError ("Client not connected. Call start() first." )
11081108
1109- cfg : dict [str , Any ] = {
1110- "on_permission_request" : on_permission_request ,
1111- "model" : model ,
1112- "session_id" : session_id ,
1113- "client_name" : client_name ,
1114- "reasoning_effort" : reasoning_effort ,
1115- "tools" : tools ,
1116- "system_message" : system_message ,
1117- "available_tools" : available_tools ,
1118- "excluded_tools" : excluded_tools ,
1119- "on_user_input_request" : on_user_input_request ,
1120- "hooks" : hooks ,
1121- "working_directory" : working_directory ,
1122- "provider" : provider ,
1123- "streaming" : streaming ,
1124- "mcp_servers" : mcp_servers ,
1125- "custom_agents" : custom_agents ,
1126- "agent" : agent ,
1127- "config_dir" : config_dir ,
1128- "skill_directories" : skill_directories ,
1129- "disabled_skills" : disabled_skills ,
1130- "infinite_sessions" : infinite_sessions ,
1131- "on_event" : on_event ,
1132- }
1133-
11341109 tool_defs = []
1135- tools = cfg .get ("tools" )
11361110 if tools :
11371111 for tool in tools :
11381112 definition : dict [str , Any ] = {
@@ -1148,92 +1122,74 @@ async def create_session(
11481122 tool_defs .append (definition )
11491123
11501124 payload : dict [str , Any ] = {}
1151- if cfg . get ( " model" ) :
1152- payload ["model" ] = cfg [ " model" ]
1153- if cfg . get ( " client_name" ) :
1154- payload ["clientName" ] = cfg [ " client_name" ]
1155- if cfg . get ( " reasoning_effort" ) :
1156- payload ["reasoningEffort" ] = cfg [ " reasoning_effort" ]
1125+ if model :
1126+ payload ["model" ] = model
1127+ if client_name :
1128+ payload ["clientName" ] = client_name
1129+ if reasoning_effort :
1130+ payload ["reasoningEffort" ] = reasoning_effort
11571131 if tool_defs :
11581132 payload ["tools" ] = tool_defs
11591133
1160- # Add system message configuration if provided
1161- system_message = cfg .get ("system_message" )
11621134 if system_message :
11631135 payload ["systemMessage" ] = system_message
11641136
1165- # Add tool filtering options
1166- available_tools = cfg .get ("available_tools" )
11671137 if available_tools is not None :
11681138 payload ["availableTools" ] = available_tools
1169- excluded_tools = cfg .get ("excluded_tools" )
11701139 if excluded_tools is not None :
11711140 payload ["excludedTools" ] = excluded_tools
11721141
1173- # Always enable permission request callback (deny by default if no handler provided)
1174- on_permission_request = cfg .get ("on_permission_request" )
1142+ # Always enable permission request callback
11751143 payload ["requestPermission" ] = True
11761144
11771145 # Enable user input request callback if handler provided
1178- on_user_input_request = cfg .get ("on_user_input_request" )
11791146 if on_user_input_request :
11801147 payload ["requestUserInput" ] = True
11811148
11821149 # Enable hooks callback if any hook handler provided
1183- hooks = cfg .get ("hooks" )
11841150 if hooks and any (hooks .values ()):
11851151 payload ["hooks" ] = True
11861152
11871153 # Add working directory if provided
1188- working_directory = cfg .get ("working_directory" )
11891154 if working_directory :
11901155 payload ["workingDirectory" ] = working_directory
11911156
11921157 # Add streaming option if provided
1193- streaming = cfg .get ("streaming" )
11941158 if streaming is not None :
11951159 payload ["streaming" ] = streaming
11961160
11971161 # Add provider configuration if provided
1198- provider = cfg .get ("provider" )
11991162 if provider :
12001163 payload ["provider" ] = self ._convert_provider_to_wire_format (provider )
12011164
12021165 # Add MCP servers configuration if provided
1203- mcp_servers = cfg .get ("mcp_servers" )
12041166 if mcp_servers :
12051167 payload ["mcpServers" ] = mcp_servers
12061168 payload ["envValueMode" ] = "direct"
12071169
12081170 # Add custom agents configuration if provided
1209- custom_agents = cfg .get ("custom_agents" )
12101171 if custom_agents :
12111172 payload ["customAgents" ] = [
12121173 self ._convert_custom_agent_to_wire_format (agent ) for agent in custom_agents
12131174 ]
12141175
12151176 # Add agent selection if provided
1216- agent = cfg .get ("agent" )
12171177 if agent :
12181178 payload ["agent" ] = agent
12191179
12201180 # Add config directory override if provided
1221- config_dir = cfg .get ("config_dir" )
12221181 if config_dir :
12231182 payload ["configDir" ] = config_dir
12241183
12251184 # Add skill directories configuration if provided
1226- skill_directories = cfg .get ("skill_directories" )
12271185 if skill_directories :
12281186 payload ["skillDirectories" ] = skill_directories
12291187
12301188 # Add disabled skills configuration if provided
1231- disabled_skills = cfg .get ("disabled_skills" )
12321189 if disabled_skills :
12331190 payload ["disabledSkills" ] = disabled_skills
12341191
12351192 # Add infinite sessions configuration if provided
1236- infinite_sessions = cfg .get ("infinite_sessions" )
12371193 if infinite_sessions :
12381194 wire_config : dict [str , Any ] = {}
12391195 if "enabled" in infinite_sessions :
@@ -1251,34 +1207,33 @@ async def create_session(
12511207 if not self ._client :
12521208 raise RuntimeError ("Client not connected" )
12531209
1254- session_id = cfg . get ( " session_id" ) or str (uuid .uuid4 ())
1255- payload ["sessionId" ] = session_id
1210+ actual_session_id = session_id or str (uuid .uuid4 ())
1211+ payload ["sessionId" ] = actual_session_id
12561212
12571213 # Propagate W3C Trace Context to CLI if OpenTelemetry is active
12581214 trace_ctx = get_trace_context ()
12591215 payload .update (trace_ctx )
12601216
12611217 # Create and register the session before issuing the RPC so that
12621218 # events emitted by the CLI (e.g. session.start) are not dropped.
1263- session = CopilotSession (session_id , self ._client , None )
1219+ session = CopilotSession (actual_session_id , self ._client , None )
12641220 session ._register_tools (tools )
12651221 session ._register_permission_handler (on_permission_request )
12661222 if on_user_input_request :
12671223 session ._register_user_input_handler (on_user_input_request )
12681224 if hooks :
12691225 session ._register_hooks (hooks )
1270- on_event = cfg .get ("on_event" )
12711226 if on_event :
12721227 session .on (on_event )
12731228 with self ._sessions_lock :
1274- self ._sessions [session_id ] = session
1229+ self ._sessions [actual_session_id ] = session
12751230
12761231 try :
12771232 response = await self ._client .request ("session.create" , payload )
12781233 session ._workspace_path = response .get ("workspacePath" )
12791234 except BaseException :
12801235 with self ._sessions_lock :
1281- self ._sessions .pop (session_id , None )
1236+ self ._sessions .pop (actual_session_id , None )
12821237 raise
12831238
12841239 return session
@@ -1372,32 +1327,7 @@ async def resume_session(
13721327 else :
13731328 raise RuntimeError ("Client not connected. Call start() first." )
13741329
1375- cfg : dict [str , Any ] = {
1376- "on_permission_request" : on_permission_request ,
1377- "model" : model ,
1378- "client_name" : client_name ,
1379- "reasoning_effort" : reasoning_effort ,
1380- "tools" : tools ,
1381- "system_message" : system_message ,
1382- "available_tools" : available_tools ,
1383- "excluded_tools" : excluded_tools ,
1384- "on_user_input_request" : on_user_input_request ,
1385- "hooks" : hooks ,
1386- "working_directory" : working_directory ,
1387- "provider" : provider ,
1388- "streaming" : streaming ,
1389- "mcp_servers" : mcp_servers ,
1390- "custom_agents" : custom_agents ,
1391- "agent" : agent ,
1392- "config_dir" : config_dir ,
1393- "skill_directories" : skill_directories ,
1394- "disabled_skills" : disabled_skills ,
1395- "infinite_sessions" : infinite_sessions ,
1396- "on_event" : on_event ,
1397- }
1398-
13991330 tool_defs = []
1400- tools = cfg .get ("tools" )
14011331 if tools :
14021332 for tool in tools :
14031333 definition : dict [str , Any ] = {
@@ -1414,103 +1344,56 @@ async def resume_session(
14141344
14151345 payload : dict [str , Any ] = {"sessionId" : session_id }
14161346
1417- # Add client name if provided
1418- client_name = cfg .get ("client_name" )
14191347 if client_name :
14201348 payload ["clientName" ] = client_name
1421-
1422- # Add model if provided
1423- model = cfg .get ("model" )
14241349 if model :
14251350 payload ["model" ] = model
1426-
1427- if cfg .get ("reasoning_effort" ):
1428- payload ["reasoningEffort" ] = cfg ["reasoning_effort" ]
1351+ if reasoning_effort :
1352+ payload ["reasoningEffort" ] = reasoning_effort
14291353 if tool_defs :
14301354 payload ["tools" ] = tool_defs
1431-
1432- # Add system message configuration if provided
1433- system_message = cfg .get ("system_message" )
14341355 if system_message :
14351356 payload ["systemMessage" ] = system_message
1436-
1437- # Add available/excluded tools if provided
1438- available_tools = cfg .get ("available_tools" )
14391357 if available_tools is not None :
14401358 payload ["availableTools" ] = available_tools
1441-
1442- excluded_tools = cfg .get ("excluded_tools" )
14431359 if excluded_tools is not None :
14441360 payload ["excludedTools" ] = excluded_tools
1445-
1446- provider = cfg .get ("provider" )
14471361 if provider :
14481362 payload ["provider" ] = self ._convert_provider_to_wire_format (provider )
1449-
1450- # Add streaming option if provided
1451- streaming = cfg .get ("streaming" )
14521363 if streaming is not None :
14531364 payload ["streaming" ] = streaming
14541365
1455- # Always enable permission request callback (deny by default if no handler provided)
1456- on_permission_request = cfg .get ("on_permission_request" )
1366+ # Always enable permission request callback
14571367 payload ["requestPermission" ] = True
14581368
1459- # Enable user input request callback if handler provided
1460- on_user_input_request = cfg .get ("on_user_input_request" )
14611369 if on_user_input_request :
14621370 payload ["requestUserInput" ] = True
14631371
1464- # Enable hooks callback if any hook handler provided
1465- hooks = cfg .get ("hooks" )
14661372 if hooks and any (hooks .values ()):
14671373 payload ["hooks" ] = True
14681374
1469- # Add working directory if provided
1470- working_directory = cfg .get ("working_directory" )
14711375 if working_directory :
14721376 payload ["workingDirectory" ] = working_directory
1473-
1474- # Add config directory if provided
1475- config_dir = cfg .get ("config_dir" )
14761377 if config_dir :
14771378 payload ["configDir" ] = config_dir
14781379
1479- # Add disable resume flag if provided
1480- disable_resume = cfg .get ("disable_resume" )
1481- if disable_resume :
1482- payload ["disableResume" ] = True
1483-
1484- # Add MCP servers configuration if provided
1485- mcp_servers = cfg .get ("mcp_servers" )
1380+ # TODO: disable_resume is not a keyword arg yet; keeping for future use
14861381 if mcp_servers :
14871382 payload ["mcpServers" ] = mcp_servers
14881383 payload ["envValueMode" ] = "direct"
14891384
1490- # Add custom agents configuration if provided
1491- custom_agents = cfg .get ("custom_agents" )
14921385 if custom_agents :
14931386 payload ["customAgents" ] = [
1494- self ._convert_custom_agent_to_wire_format (agent ) for agent in custom_agents
1387+ self ._convert_custom_agent_to_wire_format (a ) for a in custom_agents
14951388 ]
14961389
1497- # Add agent selection if provided
1498- agent = cfg .get ("agent" )
14991390 if agent :
15001391 payload ["agent" ] = agent
1501-
1502- # Add skill directories configuration if provided
1503- skill_directories = cfg .get ("skill_directories" )
15041392 if skill_directories :
15051393 payload ["skillDirectories" ] = skill_directories
1506-
1507- # Add disabled skills configuration if provided
1508- disabled_skills = cfg .get ("disabled_skills" )
15091394 if disabled_skills :
15101395 payload ["disabledSkills" ] = disabled_skills
15111396
1512- # Add infinite sessions configuration if provided
1513- infinite_sessions = cfg .get ("infinite_sessions" )
15141397 if infinite_sessions :
15151398 wire_config : dict [str , Any ] = {}
15161399 if "enabled" in infinite_sessions :
@@ -1535,13 +1418,12 @@ async def resume_session(
15351418 # Create and register the session before issuing the RPC so that
15361419 # events emitted by the CLI (e.g. session.start) are not dropped.
15371420 session = CopilotSession (session_id , self ._client , None )
1538- session ._register_tools (cfg . get ( " tools" ) )
1421+ session ._register_tools (tools )
15391422 session ._register_permission_handler (on_permission_request )
15401423 if on_user_input_request :
15411424 session ._register_user_input_handler (on_user_input_request )
15421425 if hooks :
15431426 session ._register_hooks (hooks )
1544- on_event = cfg .get ("on_event" )
15451427 if on_event :
15461428 session .on (on_event )
15471429 with self ._sessions_lock :
0 commit comments