Phase 5-6: API usage tracking + Calendar/Mail/DEVONthink/OmniFocus/News pipeline

- 파이프라인 42→51노드 확장 (calendar/mail/note 핸들러 추가)
- 네이티브 서비스 6개: heic_converter(:8090), chat_bridge(:8091),
  caldav_bridge(:8092), devonthink_bridge(:8093), inbox_processor, news_digest
- 분류기 v2→v3: calendar, reminder, mail, note intent 추가
- Mail Processing Pipeline (7노드, IMAP 폴링)
- LaunchAgent plist 6개 + manage_services.sh
- migrate-v3.sql: news_digest_log + calendar_events 확장
- 개발 문서 현행화 (CLAUDE.md, QUICK_REFERENCE.md, docs/architecture.md)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
hyungi
2026-03-14 17:09:04 +09:00
parent f7cccc9c5e
commit 612933c2d3
23 changed files with 2492 additions and 67 deletions

39
init/migrate-v3.sql Normal file
View File

@@ -0,0 +1,39 @@
-- migrate-v3.sql: Phase 6 확장 — 캘린더/메일/뉴스 마이그레이션
-- 실행: docker exec -i bot-postgres psql -U bot -d chatbot < init/migrate-v3.sql
-- ========================
-- 캘린더 확장
-- ========================
ALTER TABLE calendar_events ADD COLUMN IF NOT EXISTS caldav_uid VARCHAR(200);
ALTER TABLE calendar_events ADD COLUMN IF NOT EXISTS description TEXT;
ALTER TABLE calendar_events ADD COLUMN IF NOT EXISTS created_by VARCHAR(100);
CREATE INDEX IF NOT EXISTS idx_cal_start ON calendar_events(start_time);
CREATE INDEX IF NOT EXISTS idx_cal_caldav_uid ON calendar_events(caldav_uid);
CREATE INDEX IF NOT EXISTS idx_cal_created_by ON calendar_events(created_by);
-- ========================
-- 메일 인덱스 (Stage C용)
-- ========================
CREATE INDEX IF NOT EXISTS idx_mail_date ON mail_logs(mail_date);
CREATE INDEX IF NOT EXISTS idx_mail_label ON mail_logs(label);
CREATE INDEX IF NOT EXISTS idx_mail_account ON mail_logs(account_id);
-- ========================
-- 뉴스 다이제스트 로그 (Stage E용)
-- ========================
CREATE TABLE IF NOT EXISTS news_digest_log (
id SERIAL PRIMARY KEY,
article_url TEXT UNIQUE,
source VARCHAR(50),
original_lang VARCHAR(10),
title_ko TEXT,
summary_ko TEXT,
processed_at TIMESTAMPTZ DEFAULT NOW(),
qdrant_id VARCHAR(100),
devonthink_uuid VARCHAR(100)
);
CREATE INDEX IF NOT EXISTS idx_news_processed ON news_digest_log(processed_at);