From 7a3df96a954dad015f3b37b01e895013ee7ec75c Mon Sep 17 00:00:00 2001 From: Variet Agent Date: Wed, 18 Mar 2026 21:50:06 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20=EC=84=B8=EC=85=98=20=EC=A2=85=EB=A3=8C?= =?UTF-8?q?=20=E2=80=94=20devlog=20+=20known-issues=20+=20STATUS.md=20?= =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - known-issues: WebDAV 501, anime action 분기 누락, 함수명 불일치 3건 - devlog: 007~013 (7건 추가) - STATUS.md: NC 4모듈, Foreman, unified 라우팅 반영 - Vikunja: #418 done, #439 created+done - Wiki: Status 페이지 동기화 --- .agent/references/STATUS.md | 21 ++++++++++++++++----- .agent/references/known-issues.md | 17 +++++++++++++++++ docs/devlog/2026-03-18.md | 7 +++++++ 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/.agent/references/STATUS.md b/.agent/references/STATUS.md index c020c92..ee42653 100644 --- a/.agent/references/STATUS.md +++ b/.agent/references/STATUS.md @@ -2,7 +2,7 @@ > AI 에이전트는 **세션 시작 시** 이 문서를 읽어 전체 맥락을 파악합니다. > **세션 종료 시** 변경사항을 이 문서에 반영합니다. -> Last updated: 2026-03-17 +> Last updated: 2026-03-18 ## 시스템 개요 @@ -10,11 +10,12 @@ Hybrid Skill-Based AI Agent v3 — 사용자가 디스코드에서 자연어 명 ``` Discord 메시지 - → Orchestrator.classify() — NLU 분류 + → unified prompt (Gemini 분류) → JSON 파싱 ├── chat → 즉답 ├── clarify → 질문 - ├── anime → AnimeTool (파이프라인) - └── task → TaskPipeline.execute() → Gemini CLI agent 모드 + ├── anime → handle_anime_message (AnimePipeline) + ├── nextcloud → NCHandler (Files/Calendar/Mail/Contacts) + └── task → Gemini CLI agent 모드 ``` ## 핵심 설계 결정 (불변) @@ -42,6 +43,13 @@ Discord 메시지 | Gitea Wiki 관리 | `.agent/workflows/helpers/wiki_helper.py` | Wiki 페이지 CRUD | ✅ | | Discord Bot | `api/discord_bot.py` | 이벤트 핸들러 + NLU 라우팅 (~310줄) | ✅ | | 커뮤니티 트렌드 | `tools/community_scraper.py` | DCInside 갤러리 인기글 스크래핑 + 랭킹 + 본문 조회 (Gemini Skill) | ✅ | +| NC 파일 관리 | `tools/nc_files.py` | Nextcloud WebDAV 파일 목록/검색/공유 (PROPFIND 폴백) | ✅ | +| NC 캘린더 | `tools/nc_calendar.py` | CalDAV 일정 CRUD (조회/추가/수정/삭제) | ✅ | +| NC 메일 | `tools/nc_mail.py` | IMAP 메일 조회/검색 (Mailcow PLAIN auth) | ✅ | +| NC 연락처 | `tools/nc_contacts.py` | CardDAV 연락처 조회/검색 | ✅ | +| NC 핸들러 | `handlers/nc_handler.py` | 자연어→NC 도구 라우팅 (Embed 응답) | ✅ | +| AI Foreman | `core/foreman.py` | 목표 분해 + 상담 + Vikunja 일괄 등록 (/goal) | ✅ | +| 통합 분류 라우팅 | `api/discord_bot.py` | unified prompt→JSON→모드별 핸들러 라우팅 | ✅ | | CLI Bridge | - | Gemini CLI 영속 프로세스 (PTY 미지원으로 보류) | ⏸️ | ## 모듈 상태 @@ -53,12 +61,15 @@ Discord 메시지 | Gemini 래퍼 | `core/gemini_caller.py` | ✅ | text/agent 모드 | | 컨텍스트 | `core/context_manager.py` | ✅ | 관련 파일 선별 + 토큰 예산 | | 애니 파이프라인 | `tools/anime_pipeline.py` | ✅ | v2 에피소드 추출, 그룹 필터링, 자막 보호 | -| Discord Bot | `api/discord_bot.py` | ✅ | 레거시 800줄 제거, ~310줄 | +| Discord Bot | `api/discord_bot.py` | ✅ | unified classify→route, ~470줄 | | 커뮤니티 스크래퍼 | `tools/community_scraper.py` | ✅ | DCInside 스크래퍼 + 4종 정렬 + Gemini Skill | +| NC 4모듈 | `tools/nc_*.py` | ✅ | Files/Calendar/Mail/Contacts | +| AI Foreman | `core/foreman.py` | ✅ | 목표 분해 + 상담 + Vikunja 등록 | | 에이전트 워크플로우 | `.agent/` | ✅ | STATUS.md + 수칙 업데이트 | ## 최근 마일스톤 +- **2026-03-18**: Nextcloud 4모듈 + NC핸들러 + AI Foreman v0.1 + unified 분류→라우팅 구현 - **2026-03-17**: 커뮤니티 트렌드 스크래퍼 구현 (DCInside 인기글 + Gemini Skill) - **2026-03-16**: 에이전트 수칙 업데이트 + STATUS.md 도입 + .agents 통합 - **2026-03-15**: MCP 서버 제거 → CLI 직접 실행 전환 diff --git a/.agent/references/known-issues.md b/.agent/references/known-issues.md index 151e2d9..be8feea 100644 --- a/.agent/references/known-issues.md +++ b/.agent/references/known-issues.md @@ -106,3 +106,20 @@ - **해결**: `conn.authenticate("PLAIN", lambda x: ("\0" + user + "\0" + pw).encode())` 사용 - **주의**: 일반 계정 비밀번호는 `LOGIN`도 가능하지만, 앱 비밀번호는 반드시 `PLAIN` auth 필요 +### [2026-03-18] WebDAV SEARCH — Nextcloud 501 Not Implemented +- **증상**: `nc_files.search()` 결과 0건, 로그에 `WebDAV SEARCH 실패: 501` +- **원인**: Nextcloud 인스턴스가 WebDAV `SEARCH` 메서드를 지원하지 않음 +- **해결**: SEARCH 실패 시 PROPFIND depth=99 → 로컬 필터 폴백 (`nc_files.py`) +- **주의**: PROPFIND depth=99는 파일 수가 많으면 느릴 수 있음. 추후 OCS 파일 검색 API 검토 + +### [2026-03-18] anime_handler — action 분기 누락 +- **증상**: 자연어 "자막 최신화" → "무엇을 도와드릴까요?" 표시 +- **원인**: unified prompt가 `action: "download", title: ""` 반환 → `download and title` 조건 불충족 → else 분기 +- **해결**: `download and not title` 분기 추가 (filter에 "sub" 포함 시 `batch_download(sub_only)`) +- **주의**: 새 action 추가 시 unified prompt와 handler 양쪽 매핑 반드시 확인 + +### [2026-03-18] discord_bot — 모듈 함수명 불일치 +- **증상**: `cannot import name 'handle_anime_action'` +- **원인**: 존재하지 않는 함수명으로 import (실제: `handle_anime_message`) +- **해결**: import 수정 + 시그니처 확인 `(message, parsed)` +- **주의**: 핸들러 연결 시 반드시 실제 모듈의 함수명/시그니처 확인 후 코드 작성 diff --git a/docs/devlog/2026-03-18.md b/docs/devlog/2026-03-18.md index dd4bb32..51f40b9 100644 --- a/docs/devlog/2026-03-18.md +++ b/docs/devlog/2026-03-18.md @@ -6,3 +6,10 @@ | 004 | 17:10 | NC 도구 핸들러 (`handlers/nc_handler.py`) 구현 | - | ✅ | | 005 | 17:13 | AI Foreman v0.1 (`core/foreman.py` + `/goal` 커맨드) | - | ✅ | | 006 | 17:15 | unified.md에 nextcloud 모드 추가 + discord_bot.py 통합 | - | ✅ | +| 007 | 17:30 | unified prompt 분류 → 라우팅 흐름 구현 | `56787b1` | ✅ | +| 008 | 18:00 | JSON 파서 중첩 객체 매칭 수정 | `62bc257` | ✅ | +| 009 | 19:20 | classify_and_route 디버그 로그 추가 | `35b9813` | ✅ | +| 010 | 19:30 | NC 검색 PROPFIND 폴백 + 자막 중복 스킵 | `c552034` | ✅ | +| 011 | 19:40 | anime 분류 정확도 강화 (6/6 테스트 통과) | `77bd211` | ✅ | +| 012 | 19:45 | Foreman E2E 테스트 (분해→수정→Vikunja 등록) | `489755f` | ✅ | +| 013 | 21:35 | anime handler import 수정 + action 분기 완성 | `28ae0d5` | ✅ |