feat: DEVONthink 제거 + 모닝 브리핑 추가

- DEVONthink 의존성 제거 → kb_writer 전환 (news_digest, inbox_processor, mail pipeline)
- devonthink_bridge.py, plist 삭제
- morning_briefing.py 신규 (매일 07:30, 일정·메일·보고·뉴스 → Synology Chat)
- intent_service.py 분류기 프롬프트 개선 + 키워드 fallback
- migrate-v5.sql (news_digest_log kb_path 컬럼)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-03-19 14:12:38 +09:00
parent fd8925637d
commit 782caf5130
15 changed files with 479 additions and 240 deletions

View File

@@ -16,7 +16,7 @@ logger = logging.getLogger("inbox_processor")
GPU_OLLAMA_URL = os.getenv("GPU_OLLAMA_URL", "http://192.168.1.186:11434")
CALDAV_BRIDGE_URL = os.getenv("CALDAV_BRIDGE_URL", "http://127.0.0.1:8092")
DEVONTHINK_BRIDGE_URL = os.getenv("DEVONTHINK_BRIDGE_URL", "http://127.0.0.1:8093")
KB_WRITER_URL = os.getenv("KB_WRITER_URL", "http://127.0.0.1:8095")
def run_applescript(script: str, timeout: int = 15) -> str:
@@ -166,23 +166,26 @@ def route_calendar(cls: dict, task_id: str) -> None:
def route_note(cls: dict, task_id: str) -> None:
"""DEVONthink 브릿지로 메모 저장."""
"""kb_writer로 메모 저장."""
content = cls.get("content") or cls.get("title", "")
title = cls.get("title", "OmniFocus 메모")
try:
resp = httpx.post(
f"{DEVONTHINK_BRIDGE_URL}/save",
f"{KB_WRITER_URL}/save",
json={
"title": title,
"content": content,
"type": "markdown",
"type": "note",
"tags": ["omnifocus", "inbox"],
"username": "inbox-processor",
"source": "omnifocus",
"topic": "omnifocus",
},
timeout=10,
)
if resp.json().get("success"):
logger.info(f"Note saved to DEVONthink: {title}")
logger.info(f"Note saved to KB: {title}")
mark_processed(task_id)
complete_task(task_id)
except Exception as e: