@@ -88,7 +88,11 @@ def __init__(
8888 queue: The message queue for elicitation/sampling
8989 handler: The result handler for response routing (required for elicit/create_message)
9090 """
91- self ._ctx = TaskContext (task = task , store = store )
91+ session_id = session .session_id
92+ if session_id is None :
93+ raise RuntimeError ("Session ID is required for task operations but session has no ID." )
94+ self ._session_id = session_id
95+ self ._ctx = TaskContext (task = task , store = store , session_id = session_id )
9296 self ._session = session
9397 self ._queue = queue
9498 self ._handler = handler
@@ -210,7 +214,7 @@ async def elicit(
210214 raise RuntimeError ("handler is required for elicit(). Pass handler= to ServerTaskContext." )
211215
212216 # Update status to input_required
213- await self ._store .update_task (self .task_id , status = TASK_STATUS_INPUT_REQUIRED )
217+ await self ._store .update_task (self .task_id , status = TASK_STATUS_INPUT_REQUIRED , session_id = self . _session_id )
214218
215219 # Build the request using session's helper
216220 request = self ._session ._build_elicit_form_request ( # pyright: ignore[reportPrivateUsage]
@@ -234,12 +238,12 @@ async def elicit(
234238 try :
235239 # Wait for response (routed back via TaskResultHandler)
236240 response_data = await resolver .wait ()
237- await self ._store .update_task (self .task_id , status = TASK_STATUS_WORKING )
241+ await self ._store .update_task (self .task_id , status = TASK_STATUS_WORKING , session_id = self . _session_id )
238242 return ElicitResult .model_validate (response_data )
239243 except anyio .get_cancelled_exc_class ():
240244 # This path is tested in test_elicit_restores_status_on_cancellation
241245 # which verifies status is restored to "working" after cancellation.
242- await self ._store .update_task (self .task_id , status = TASK_STATUS_WORKING )
246+ await self ._store .update_task (self .task_id , status = TASK_STATUS_WORKING , session_id = self . _session_id )
243247 raise
244248
245249 async def elicit_url (
@@ -279,7 +283,7 @@ async def elicit_url(
279283 raise RuntimeError ("handler is required for elicit_url(). Pass handler= to ServerTaskContext." )
280284
281285 # Update status to input_required
282- await self ._store .update_task (self .task_id , status = TASK_STATUS_INPUT_REQUIRED )
286+ await self ._store .update_task (self .task_id , status = TASK_STATUS_INPUT_REQUIRED , session_id = self . _session_id )
283287
284288 # Build the request using session's helper
285289 request = self ._session ._build_elicit_url_request ( # pyright: ignore[reportPrivateUsage]
@@ -304,10 +308,10 @@ async def elicit_url(
304308 try :
305309 # Wait for response (routed back via TaskResultHandler)
306310 response_data = await resolver .wait ()
307- await self ._store .update_task (self .task_id , status = TASK_STATUS_WORKING )
311+ await self ._store .update_task (self .task_id , status = TASK_STATUS_WORKING , session_id = self . _session_id )
308312 return ElicitResult .model_validate (response_data )
309313 except anyio .get_cancelled_exc_class (): # pragma: no cover
310- await self ._store .update_task (self .task_id , status = TASK_STATUS_WORKING )
314+ await self ._store .update_task (self .task_id , status = TASK_STATUS_WORKING , session_id = self . _session_id )
311315 raise
312316
313317 async def create_message (
@@ -362,7 +366,7 @@ async def create_message(
362366 raise RuntimeError ("handler is required for create_message(). Pass handler= to ServerTaskContext." )
363367
364368 # Update status to input_required
365- await self ._store .update_task (self .task_id , status = TASK_STATUS_INPUT_REQUIRED )
369+ await self ._store .update_task (self .task_id , status = TASK_STATUS_INPUT_REQUIRED , session_id = self . _session_id )
366370
367371 # Build the request using session's helper
368372 request = self ._session ._build_create_message_request ( # pyright: ignore[reportPrivateUsage]
@@ -394,12 +398,12 @@ async def create_message(
394398 try :
395399 # Wait for response (routed back via TaskResultHandler)
396400 response_data = await resolver .wait ()
397- await self ._store .update_task (self .task_id , status = TASK_STATUS_WORKING )
401+ await self ._store .update_task (self .task_id , status = TASK_STATUS_WORKING , session_id = self . _session_id )
398402 return CreateMessageResult .model_validate (response_data )
399403 except anyio .get_cancelled_exc_class ():
400404 # This path is tested in test_create_message_restores_status_on_cancellation
401405 # which verifies status is restored to "working" after cancellation.
402- await self ._store .update_task (self .task_id , status = TASK_STATUS_WORKING )
406+ await self ._store .update_task (self .task_id , status = TASK_STATUS_WORKING , session_id = self . _session_id )
403407 raise
404408
405409 async def elicit_as_task (
@@ -435,7 +439,7 @@ async def elicit_as_task(
435439 raise RuntimeError ("handler is required for elicit_as_task()" )
436440
437441 # Update status to input_required
438- await self ._store .update_task (self .task_id , status = TASK_STATUS_INPUT_REQUIRED )
442+ await self ._store .update_task (self .task_id , status = TASK_STATUS_INPUT_REQUIRED , session_id = self . _session_id )
439443
440444 request = self ._session ._build_elicit_form_request ( # pyright: ignore[reportPrivateUsage]
441445 message = message ,
@@ -472,11 +476,11 @@ async def elicit_as_task(
472476 ElicitResult ,
473477 )
474478
475- await self ._store .update_task (self .task_id , status = TASK_STATUS_WORKING )
479+ await self ._store .update_task (self .task_id , status = TASK_STATUS_WORKING , session_id = self . _session_id )
476480 return result
477481
478482 except anyio .get_cancelled_exc_class (): # pragma: no cover
479- await self ._store .update_task (self .task_id , status = TASK_STATUS_WORKING )
483+ await self ._store .update_task (self .task_id , status = TASK_STATUS_WORKING , session_id = self . _session_id )
480484 raise
481485
482486 async def create_message_as_task (
@@ -531,7 +535,7 @@ async def create_message_as_task(
531535 raise RuntimeError ("handler is required for create_message_as_task()" )
532536
533537 # Update status to input_required
534- await self ._store .update_task (self .task_id , status = TASK_STATUS_INPUT_REQUIRED )
538+ await self ._store .update_task (self .task_id , status = TASK_STATUS_INPUT_REQUIRED , session_id = self . _session_id )
535539
536540 # Build request WITH task field for task-augmented sampling
537541 request = self ._session ._build_create_message_request ( # pyright: ignore[reportPrivateUsage]
@@ -577,9 +581,9 @@ async def create_message_as_task(
577581 CreateMessageResult ,
578582 )
579583
580- await self ._store .update_task (self .task_id , status = TASK_STATUS_WORKING )
584+ await self ._store .update_task (self .task_id , status = TASK_STATUS_WORKING , session_id = self . _session_id )
581585 return result
582586
583587 except anyio .get_cancelled_exc_class (): # pragma: no cover
584- await self ._store .update_task (self .task_id , status = TASK_STATUS_WORKING )
588+ await self ._store .update_task (self .task_id , status = TASK_STATUS_WORKING , session_id = self . _session_id )
585589 raise
0 commit comments