From 03b2b20ae2d3704861bf4e6a54519eb27a4de09d Mon Sep 17 00:00:00 2001 From: Yiorgis Gozadinos Date: Fri, 20 Jun 2025 10:18:07 +0200 Subject: [PATCH] Handle keyboard interrupt --- src/haiku/rag/app.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/haiku/rag/app.py b/src/haiku/rag/app.py index 3589c003..6db14c83 100644 --- a/src/haiku/rag/app.py +++ b/src/haiku/rag/app.py @@ -96,12 +96,21 @@ class HaikuRAGApp: """Start the MCP server.""" async with HaikuRAG(self.db_path) as client: monitor = FileWatcher(paths=Config.MONITOR_DIRECTORIES, client=client) - asyncio.create_task(monitor.observe()) + monitor_task = asyncio.create_task(monitor.observe()) server = create_mcp_server(self.db_path) - if transport == "stdio": - await server.run_stdio_async() - elif transport == "sse": - await server.run_sse_async("sse") - else: - await server.run_http_async("streamable-http") + try: + if transport == "stdio": + await server.run_stdio_async() + elif transport == "sse": + await server.run_sse_async("sse") + else: + await server.run_http_async("streamable-http") + except KeyboardInterrupt: + pass + finally: + monitor_task.cancel() + try: + await monitor_task + except asyncio.CancelledError: + pass