@@ -25,7 +25,7 @@ class ClientAsyncOperation:
25
25
@property
26
26
def is_expired (self ) -> bool :
27
27
"""Check if operation has expired based on keepAlive."""
28
- return time .time () > (self .created_at + self .keep_alive )
28
+ return time .time () > (self .created_at + self .keep_alive * 2 ) # Give some buffer before expiration
29
29
30
30
31
31
@dataclass
@@ -38,15 +38,18 @@ class ServerAsyncOperation:
38
38
status : AsyncOperationStatus
39
39
created_at : float
40
40
keep_alive : int
41
+ resolved_at : float | None = None
41
42
session_id : str | None = None
42
43
result : types .CallToolResult | None = None
43
44
error : str | None = None
44
45
45
46
@property
46
47
def is_expired (self ) -> bool :
47
48
"""Check if operation has expired based on keepAlive."""
49
+ if not self .resolved_at :
50
+ return False
48
51
if self .status in ("completed" , "failed" , "canceled" ):
49
- return time .time () > (self .created_at + self .keep_alive )
52
+ return time .time () > (self .resolved_at + self .keep_alive )
50
53
return False
51
54
52
55
@property
@@ -197,6 +200,7 @@ def complete_operation(self, token: str, result: types.CallToolResult) -> bool:
197
200
198
201
operation .status = "completed"
199
202
operation .result = result
203
+ operation .resolved_at = time .time ()
200
204
return True
201
205
202
206
def fail_operation (self , token : str , error : str ) -> bool :
@@ -211,6 +215,7 @@ def fail_operation(self, token: str, error: str) -> bool:
211
215
212
216
operation .status = "failed"
213
217
operation .error = error
218
+ operation .resolved_at = time .time ()
214
219
return True
215
220
216
221
def get_operation_result (self , token : str ) -> types .CallToolResult | None :
0 commit comments