4545)
4646from .query import query_codebase
4747from .settings import (
48+ global_settings_mtime_us ,
4849 load_project_settings ,
4950 load_user_settings ,
5051 user_settings_dir ,
@@ -288,6 +289,7 @@ async def handle_connection(
288289 registry : ProjectRegistry ,
289290 start_time : float ,
290291 shutdown_event : asyncio .Event ,
292+ settings_mtime_us : int | None ,
291293) -> None :
292294 """Handle a single client connection."""
293295 loop = asyncio .get_event_loop ()
@@ -322,7 +324,11 @@ def _recv() -> bytes:
322324 break
323325
324326 ok = req .version == __version__
325- resp = HandshakeResponse (ok = ok , daemon_version = __version__ )
327+ resp = HandshakeResponse (
328+ ok = ok ,
329+ daemon_version = __version__ ,
330+ global_settings_mtime_us = settings_mtime_us ,
331+ )
326332 conn .send_bytes (encode_response (resp ))
327333 if not ok :
328334 break
@@ -419,8 +425,9 @@ def run_daemon() -> None:
419425 """Main entry point for the daemon process (blocking)."""
420426 daemon_dir ().mkdir (parents = True , exist_ok = True )
421427
422- # Load user settings
428+ # Load user settings and record mtime for staleness detection
423429 user_settings = load_user_settings ()
430+ settings_mtime_us = global_settings_mtime_us ()
424431
425432 # Set environment variables from settings
426433 for key , value in user_settings .envs .items ():
@@ -445,7 +452,7 @@ def run_daemon() -> None:
445452 logger .info ("Daemon starting (PID %d, version %s)" , os .getpid (), __version__ )
446453
447454 try :
448- asyncio .run (_async_daemon_main (embedder ))
455+ asyncio .run (_async_daemon_main (embedder , settings_mtime_us ))
449456 finally :
450457 # Clean up PID file and socket (named pipes on Windows clean up automatically)
451458 try :
@@ -461,7 +468,7 @@ def run_daemon() -> None:
461468 logger .info ("Daemon stopped" )
462469
463470
464- async def _async_daemon_main (embedder : Embedder ) -> None :
471+ async def _async_daemon_main (embedder : Embedder , settings_mtime_us : int | None ) -> None :
465472 """Async main loop for the daemon."""
466473 start_time = time .monotonic ()
467474 registry = ProjectRegistry (embedder )
@@ -496,7 +503,7 @@ async def _spawn_handler(
496503 evt : asyncio .Event ,
497504 task_set : set [asyncio .Task [Any ]],
498505 ) -> None :
499- task = asyncio .create_task (handle_connection (conn , reg , st , evt ))
506+ task = asyncio .create_task (handle_connection (conn , reg , st , evt , settings_mtime_us ))
500507 task_set .add (task )
501508 task .add_done_callback (task_set .discard )
502509
0 commit comments