From 37c56167350ceff978ccab6bd2dc0dc973429114 Mon Sep 17 00:00:00 2001 From: Hyungi Ahn Date: Mon, 6 Apr 2026 14:49:54 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=9D=B4=EB=A9=94=EC=9D=BC=20=ED=8F=B4?= =?UTF-8?q?=EB=8D=94=20=ED=95=84=ED=84=B0=EB=A7=81=20=E2=80=94=20=ED=85=8C?= =?UTF-8?q?=ED=81=AC=EB=8B=88=EC=BB=AC=EC=BD=94=EB=A6=AC=EC=95=84/Gmail/?= =?UTF-8?q?=EA=B0=9C=EC=9D=B8=20=EC=A7=80=EC=A0=95=20=EA=B0=80=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "테크니컬코리아 메일만" → Technicalkorea 폴더만 검색 "구글 메일" → Gmail만, "개인 메일" → INBOX만 폴더 미지정 시 전체 검색 유지 Co-Authored-By: Claude Opus 4.6 (1M context) --- nanoclaude/services/worker.py | 12 ++++++++++-- nanoclaude/tools/email_tool.py | 7 ++++--- nanoclaude/tools/registry.py | 1 + 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/nanoclaude/services/worker.py b/nanoclaude/services/worker.py index 21be80d..77560bd 100644 --- a/nanoclaude/services/worker.py +++ b/nanoclaude/services/worker.py @@ -127,9 +127,17 @@ def _pre_route(message: str) -> dict | None: if any(k in msg for k in ["메일", "이메일", "mail", "편지"]): query = "" days = 7 - if "오늘" in msg: + folder = "" + if "오늘" in msg or "4월 6일" in msg or "6일" in msg: days = 1 - return {"action": "tools", "tool": "email", "operation": "search", "params": {"query": query, "days": days}} + # 폴더 필터링 + if any(k in msg for k in ["테크니컬", "회사", "technicalkorea", "네이버웍스"]): + folder = "Technicalkorea" + elif any(k in msg for k in ["gmail", "구글", "지메일"]): + folder = "Gmail" + elif any(k in msg for k in ["개인", "inbox"]): + folder = "INBOX" + return {"action": "tools", "tool": "email", "operation": "search", "params": {"query": query, "days": days, "folder": folder}} # 문서 키워드 if any(k in msg for k in ["문서", "도큐먼트", "자료", "파일"]) and any(k in msg for k in ["찾아", "검색", "확인"]): diff --git a/nanoclaude/tools/email_tool.py b/nanoclaude/tools/email_tool.py index 75230ca..596bae5 100644 --- a/nanoclaude/tools/email_tool.py +++ b/nanoclaude/tools/email_tool.py @@ -79,8 +79,8 @@ def _connect(): return conn -async def search(query: str = "", days: int = 7) -> dict: - """전체 폴더에서 최근 메일 검색.""" +async def search(query: str = "", days: int = 7, folder: str = "") -> dict: + """메일 검색. folder 지정 시 해당 폴더만, 없으면 전체.""" try: conn = _connect() if not conn: @@ -92,10 +92,11 @@ async def search(query: str = "", days: int = 7) -> dict: else: criteria = f"(SINCE {since})" + search_folders = [folder] if folder else FOLDERS all_results = [] failed_folders = [] - for folder in FOLDERS: + for folder in search_folders: try: conn.select(folder, readonly=True) _, data = conn.search(None, criteria) diff --git a/nanoclaude/tools/registry.py b/nanoclaude/tools/registry.py index 1d91754..f771af6 100644 --- a/nanoclaude/tools/registry.py +++ b/nanoclaude/tools/registry.py @@ -83,6 +83,7 @@ async def _exec_email(operation: str, params: dict) -> dict: return await email_tool.search( params.get("query", ""), params.get("days", 7), + params.get("folder", ""), ) elif operation == "read": return await email_tool.read(params.get("uid", ""))