feat/memo-intake-upgrade #8
Reference in New Issue
Block a user
Delete Branch "feat/memo-intake-upgrade"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
PR-2B/2C backend 2/2. plan v9 commit 분할 2~3 통합 (memos.py 단일 파일 변경). PR-2B promote-to-event: - POST /api/memos/{memo_id}/promote-to-event — 메모 → events 1-click 승급 · kind 결정: body.kind > documents.ai_event_kind > 400 · activity_log 면 status=done + ended_at=now() 자동 (5초 행동 기록 UX) · calendar_event + start_at 있으면 status=scheduled · Event row + events_history(create) 자동 생성 · memo_document_id 자동 link + source='memo' + raw_metadata 에 AI 추천값 보존 · 한 메모 → N events 가능 (사용자 의도에 따라 dedup 없음) - POST /api/memos/{memo_id}/dismiss-event-suggestion — '그냥 메모' (ai_event_kind='note' 강제) · MVP: AI 추천값과 사용자 확정값 같은 컬럼 (정확도 측정 흐려질 수 있음) · 백로그: user_event_kind 별 컬럼 분리 (plan Memo Intake Upgrade 백로그) - MemoResponse 확장: ai_event_kind / ai_event_confidence / source_channel / file_type / file_path - list_memos 필터 완화: file_type IN (note, audio) + source_channel IN (memo, voice) → voice 메모도 같은 inbox list 에 표시 (사용자 의도: 메모 = 모든 입력의 inbox) PR-2C voice upload: - migration 254: ALTER TYPE source_channel ADD VALUE 'voice' - POST /api/memos/voice (multipart audio + recorded_at + device_hint) · 검증: Content-Type audio/* + size ≤ 50MB + 확장자 화이트리스트 · NAS 저장: /documents/PKM/Recordings/{YYYY-MM}/{uuid}.{ext} · fsync + rename(atomic) 패턴 (NAS soft mount 안전) · Document row: file_type='audio' + source_channel='voice' + category='audio' · enqueue stt 큐 → 기존 stt_worker → classify (PR-2B triage) → embed → chunk · extract_meta 에 device_hint / recorded_at 보존 - 응답: MemoResponse (file_path 포함, frontend audio player 용) 원칙: AI worker 는 events row 직접 생성 X. 본 endpoint 가 사용자 의도 channel.PR-2B/2C frontend (commit 4/4). plan v9 Memo Intake Upgrade. PR-2B 분류 표시 + 1-click promote: - 메모 카드 상단에 AI 분류 배지 (task/calendar/activity/reference + confidence%) - ai_event_kind != 'note' 메모 하단에 4 버튼: · [할 일로] [일정으로] [활동으로] (AI 추천 kind 는 색깔 highlight) · [그냥 메모] (dismiss → ai_event_kind='note' 강제) - promote 후 메모 카드에 "→ events #N" link 배지 (사용자 시각 확인) PR-2C 음성 메모 표시: - source_channel='voice' 메모는 🎙️ "음성" 배지 - audio player (<audio src=/api/documents/{id}/file?token=>) — 기존 file endpoint 재활용 - STT 대기 중인 voice 메모는 "음성 → 텍스트 변환 대기 중…" placeholder API helpers: - promoteMemo(memoId, kind) → POST /memos/{id}/promote-to-event - dismissEventSuggestion(memoId) → POST /memos/{id}/dismiss-event-suggestion - voiceAudioUrl(memoId) → /api/documents/{id}/file?token= (access token URL pattern) Sidebar 영향 0 (events 진입점은 이미 PR-2 에서 추가됨). 원칙 (재명시): AI worker 는 events row 직접 생성 X — 본 UI 의 promote 버튼만이 events 진입.