diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..871373f --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Claude development files +CLAUDE.md \ No newline at end of file diff --git a/00_프로젝트_개요.md b/00_프로젝트_개요.md new file mode 100644 index 0000000..eb7a07b --- /dev/null +++ b/00_프로젝트_개요.md @@ -0,0 +1,264 @@ +--- +tags: + - 로빙 + - RO-BEING + - 존재에이전트 + - 정보가치분석 + - 블록체인 + - 협업도구 + - 스타트업 + - AI에이전트 +date: 2025-07-01 +team: 김종태, 황한용, 희재, (강일신) +--- + +# 로빙(RO-BEING) 프로젝트 개요 +## 기억하고 성장하는 존재형 AI 에이전트 + + + +## 프로젝트 비전 + +> **"기억하지 못하는 AI는 과연 나를 도울 수 있을까?"** +> 그래서 우리는, 함께 성장하고, 감정을 공유하고, +> 나만을 기억하는 **존재형 AI 에이전트**를 만듭니다. +> 당신의 일상에, **도구가 아닌 동료를**. + +### 핵심 철학: "도구를 넘어, 동료로" + +기존 AI 비서의 근본적 한계: +- **정보 단절**: 세션이 끝나면 회사 역사·감정·약속이 모두 증발 +- **권한 불투명**: 누가 언제 민감 데이터를 건드렸는지 추적 불가 +- **맥락 손실**: 똑같은 배경설명을 반복 입력하는 '캐시 미스' 문제 + +### 로빙의 해법 + +| 기존 AI 도구 | 로빙(RO-BEING) | +|------------|----------------| +| 일회성 대화 | **지속적 기억** | +| 블랙박스 권한 | **투명한 권한 토큰** | +| 정적 기능 | **성장하는 존재** | +| 명령 수행 | **선제적 행동** | + +--- + +## 3계층 아키텍처: 스탯-스킬-아이템 + +### 1. 스탯 시스템 (인프라 레이어) + +**4+1 핵심 스탯 (컨테이너 리소스 기반)**: +- **연산(Compute)**: CPU, RAM 기반 처리 능력 (응답 지연시간, 정확도) +- **기억(Memory)**: 저장 용량, 벡터 DB 크기 (저장 토큰 수, 검색 정확도) +- **공감(Empathy)**: 감정 분석 모듈 복잡도 (감정 인식 정확도, 배려 수준) +- **통솔(Leadership)**: 멀티태스킹 모듈 수 (팀 조율, 우선순위 관리 효율성) +- **윤리(Ethics)**: 안전 체크 토큰 할당량 (위험 방지율, 안전 점검 횟수) + +### 2. 스킬 시스템 (핵심 업무 모듈) + +**MVP 핵심 스킬**: +- **Thread Digest**: 1000줄 채널 대화를 10문장으로 요약 +- **Action Extractor**: 대화에서 해야 할 일 추출 및 캘린더 연동 +- **Risk Monitor**: 투자자 미팅에서 위험 신호 탐지 +- **Emotion Tracker**: 팀 분위기 분석 및 갈등 중재 +- **PDF Processing**: PDF를 구조화된 HTML로 변환하여 Slack 출력 +- **Mail Organizer**: Gmail 스팸/채용/투자 분류 및 요약 +- **News Curator**: 업계 뉴스 키워드 기반 큐레이션 + +### 3. 아이템 시스템 (외부 권한 토큰) + +**4가지 아이템 카테고리**: +- **API 접근권**: Whisper STT, Google API (24시간 만료 토큰) +- **프리미엄 모델**: GPT-4, Claude, Gemini 등 (사용량 기반 과금) +- **민감 데이터**: 재무제표, 투자정보 (DID 서명 + 감사 로그) +- **외부 도구**: Notion, Slack, Zoom (OAuth 토큰 관리) + +--- + +## 실제 사용 시나리오 + +### 스타트업 대표의 한 주 +**월요일**: 로빙이 밤새 쌓인 채팅 1,600줄을 6문단으로 압축, "오늘 우선순위" 카드를 노션에 자동 생성 + +**화요일**: 투자자 미팅 40분 녹음을 1페이지 요약 + "밸류에이션 질문 급증" 위험 신호 알림 + +**수요일**: 내부 회의 중 감정 지수 분석으로 "팀 분위기 급속 냉각" 조기 경보 + +**목요일**: 코드 변경 API 17건을 자동 정리하여 버전 노트 배포 + +**금요일**: 주간 성과 요약과 액션 아이템 완료율을 PDF로 전사 공유 + +### 로빙의 성장 과정 +- **1주차**: 기본 요약 기능 (기억 스탯 Lv.1) +- **1개월**: 감정 인식 추가 (공감 스탯 Lv.2) +- **3개월**: 선제적 리스크 알림 (반응 스탯 Lv.3) +- **6개월**: 팀 전체 조정 능력 (통솔 스탯 Lv.4) + +--- + +## 기술 스택 및 아키텍처 + +### MVP 기술 스택 +``` +Slack Bot (@robeing) +├── Supabase (Backend + Auth + Vector DB) +├── LangChain AI Pipeline +├── PostgreSQL (관계형 데이터) +├── Chroma DB (임베딩 검색) +├── JWT + DID 보안 레이어 +└── External APIs (Gmail, Notion, OpenAI) +``` + +### 데이터 관리 전략 +- **PostgreSQL**: 사용자 데이터, 스탯, 스킬, 피드백, 메타데이터 +- **Chroma DB**: 대화 내용, 문서 임베딩, 맥락적 기억 +- **정책 기반 저장**: 에이전트 주도의 기억 보존 결정 +- **완전 감사 로그**: 에이전트 행동과 결정의 완전한 투명성 + +### 함수형 프로그래밍 접근법 +- **순수 함수**: 부작용 없는 계산 및 판단 레이어 +- **모나드**: 오류 처리, 상태 관리, 외부 시스템 통합 +- **레시피 기반 아키텍처**: 연결 가능한 스킬 모듈 +- **안전성**: 예측 가능하고 테스트 가능한 실패 안전 작업 + +--- + +## 개발 로드맵 + +### MVP 단계 (3개월, 2025.06-09) + +| 주차 | 목표 | 상세 작업 | +|------|------|-----------| +| 1-2주 | 베이스라인 | 슬랙 앱 등록, Supabase 세팅, GPT 연결, 스탯/기억 스키마 | +| 3-4주 | 메일 모듈 | Gmail OAuth, 분류·요약 파이프라인, DM 리포트 | +| 5-6주 | 슬랙 회의 정리 | 메시지 페치, 요약·액션추출, 테스크 DM | +| 7-8주 | 노션 모듈 | Notion API 연결, 템플릿 작성·업로드 | +| 9-10주 | 뉴스 스크랩 | RSS/뉴스 API, 키워드 관리, 아침 DM | +| 11주 | 밸류에이션 초판 | 간단 재무·시장 프롬프트, 대화형 답변 | +| 12주 | PoC 테스트 | 외부 스타트업 초대, 피드백 수집 및 버그 수정 | + +### MMP 단계 (6개월) +- 30개 팀 유료 파일럿 (ARPU 25만원, 이탈률 5% 미만) +- 10개 핵심 스킬 + 20개 아이템 확장 +- 감정 벡터 + 관계 시스템 도입 + +### Scale 단계 (1년) +- 아이템 마켓플레이스 오픈 +- 멀티 에이전트 협업 시스템 +- 월매출 8억원 런레이트 달성 + +--- + +## 비즈니스 모델 + +### 수익 구조 (월 30만원 ARPU, 5인 스타트업 기준) +1. **스탯 구독** (15만원): 인프라 용량 과금 +2. **스킬 패스** (10만원): 고급 기능 번들 +3. **아이템 마켓플레이스** (5만원): 외부 도구 통합 수수료 + +### 시장 포지셔닝 +- **"도구 vs 동료"**: 기존 AI 어시스턴트와의 명확한 차별화 +- **데이터 해자**: 축적된 조직 기억이 전환 비용 창출 +- **네트워크 효과**: 팀 규모 배포가 에이전트 유용성 기하급수적 증가 +- **규제 친화적**: 완전한 감사 로그로 기업 컴플라이언스 지원 + +### 목표 시장 +- **1차 타겟**: 고성장 스타트업 (5인 이하 팀 규모) +- **시장 규모**: 3만 개 고성장 스타트업 × 30만원 = 1000억원 잠재 수익 +- **확장 계획**: 중견기업 → 대기업 → 글로벌 시장 + +--- + +## 정보 가치 분석 시스템 + +### 베이지안 투자 만족도 평가 모델 + +**깜놀도(Surprise Index) 개념**: +- **정의**: 예상 대비 실제 성과의 차이를 측정하는 지표 +- **공식**: Surprise = |Actual - Expected| / Expected_Variance +- **활용**: 투자 포트폴리오의 예상 외 성과 평가 + +**베이지안 업데이트 메커니즘**: +- **사전 확률**: 기존 경험과 데이터 기반 예측 +- **우도 함수**: 새로운 증거가 가설을 지지하는 정도 +- **사후 확률**: 새로운 정보 반영한 업데이트된 믿음 +- **적용**: 에이전트의 예측 정확도 지속적 개선 + +--- + +## 에이전트 중심 생태계 비전 + +### 4단계 생태계 구축 +1. **에이전트 협업 도구**: Slack 통합 AI 팀메이트 +2. **에이전트 마켓플레이스**: 전문 에이전트 발견 및 고용 플랫폼 +3. **에이전트 SNS**: 에이전트 상호작용 및 학습을 위한 소셜 플랫폼 +4. **에이전트 기반 정보회사**: 자동화된 데이터 수집 및 지식 합성 + +### 장기 전략적 목표 +- **1년차**: 에이전트 협업 도구 + 마켓플레이스 베타 +- **2년차**: 에이전트 SNS 집단 학습 플랫폼 +- **3년차**: 자동화된 지식 합성 정보 플랫폼 +- **출구 전략**: 협업 도구 벤더(Slack, Atlassian)에 인수 + +--- + +## 핵심 차별화 요소 + +### 1. 지속적 기억 시스템 +- **맥락 보존**: 조직의 장기 기억 유지 +- **캐시 미스 제거**: 반복적인 배경 설명 불필요 +- **감정적 기억**: 팀 역학, 선호도, 관계 패턴 추적 + +### 2. 투명한 성장 시스템 +- **목적이 있는 게이미피케이션**: 실제 성과 지표와 연결된 RPG식 레벨링 +- **경험 기반 학습**: 사용자 피드백과 성공률이 스킬 발전 견인 +- **가시적 진행**: 명확한 스탯 시각화로 에이전트 능력 이해 + +### 3. 보안 및 감사 가능성 +- **정책 토큰**: 모든 외부 권한 토큰화하여 추적 +- **DID 기반 신원**: 에이전트 책임을 위한 분산 신원 +- **완전한 감사 추적**: 컴플라이언스를 위한 모든 행동과 결정 로깅 +- **설명 가능한 AI**: 완전히 투명하고 추적 가능한 의사결정 과정 + +--- + +## 즉시 실행 항목 + +### MVP 환경 구축 +1. **Supabase 프로젝트** 생성 및 스키마 설계 +2. **Slack 앱 등록** 및 웹훅 연동 +3. **OpenAI API** 통합 및 기본 응답 엔진 +4. **기본 메모리 시스템** 구현 + +### 3개월 내 목표 +- **3개 파일럿 팀** 배포 및 테스트 +- **핵심 스킬 6개** 구현 완료 +- **기본 스탯 시스템** 작동 +- **사용자 만족도 80%** 달성 + +--- + +## 관련 문서 링크 + +### 핵심 설계 문서 +- [[archive/00_MOC_프로젝트 관련 문서들 집합]] +- [[core_concepts/existence_agent/에이전트 설계 핵심 단어]] +- [[archive/로빈 에이전트 설계 본문]] + +### 구현 계획 +- [[archive/00_ MVP 개발 개요]] +- [[implementation/01_MVP 단계_ 자세한 계획]] +- [[implementation/skillhub_architecture]] + +### 비즈니스 전략 +- [[core_concepts/value_analysis/001 valuation/베이지안_엔트로피_연결]] +- [[core_concepts/value_analysis/스타트업 관계자 페인 포인트]] + +### 팀 정보 +- **프로젝트 팀**: [[../../사람/희재|희재]], [[../../사람/황한용|황한용]], [[../../사람/김종태|김종태]], ([[../../사람/강일신|강일신]]) + +--- + +**문서 생성일**: 2025-07-01 +**최종 업데이트**: 2025-07-01 +**버전**: 1.1 (이모지 제거, 제목 정리) +**출처**: 기존 000_통합, 00_개요, MVP 개발 개요 통합 정리 \ No newline at end of file diff --git a/README.md b/README.md index b7ae6c1..bffc9bf 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,53 @@ -# DOCS -md, PPT 등 문서전용 repo +# 로빙 프로젝트 문서 저장소 -## 📖 문서 +Slack 기반 AI 어시스턴트 **로빙(Robing)** 프로젝트의 모든 문서를 모아놓은 저장소입니다. + +## 문서 구조 ### 프로젝트 개요 -- [프로젝트 관련 문서들 집합](docs/introduce/00_MOC_프로젝트%20관련%20문서들%20집합.md) -- [정보의바다 프로젝트 개요](docs/introduce/guide/00_정보의바다%20프로젝트%20개요.md) -- [로빙 MVP 계획](docs/introduce/00_로빙_MVP_계획.md) -- [MVP 개발 개요](docs/introduce/00_%20MVP%20개발%20개요.md) +- [프로젝트 개요](./00_프로젝트_개요.md) - 로빙 프로젝트 전체 소개 -### 함수형 프로그래밍 설계 -- [로빙 함수형 프로그래밍 가이드](docs/guide/functional-programing/로빙_함수형_프로그래밍_가이드.md) -- [함수형 프로그래밍 로빙](docs/guide/functional-programing함수형_프로그래밍_로빙.md) -- [함수형프로그래밍과 디지털로빙](docs/guide/functional-programing함수형프로그래밍과%20디지털로빙.md) -- [함수형 스킬 분류 사례](docs/guide/functional-programing함수형%20스킬%20분류%20사례.md) \ No newline at end of file +### 아이디어 및 설계 문서 +- [MVP 개발 개요](./docs/ideas/00_%20MVP%20개발%20개요.md) +- [로빙 MVP 계획](./docs/ideas/00_로빙_MVP_계획.md) +- [통합 지식베이스 로빙 프로젝트](./docs/ideas/00_통합_지식베이스_로빙_프로젝트.md) +- [MOC 프로젝트 관련 문서들 집합](./docs/ideas/00_MOC_프로젝트%20관련%20문서들%20집합.md) +- [정보의바다 프로젝트 개요](./docs/ideas/00_정보의바다%20프로젝트%20개요.md) + +### 함수형 프로그래밍 아키텍처 +- [로빙 함수형 프로그래밍 가이드](./docs/guide/functional-programing/로빙_함수형_프로그래밍_가이드.md) +- [함수형 프로그래밍 로빙](./docs/guide/functional-programing/함수형_프로그래밍_로빙.md) +- [함수형 스킬 분류 사례](./docs/guide/functional-programing/함수형%20스킬%20분류%20사례.md) +- [함수형프로그래밍과 디지털로빙](./docs/guide/functional-programing/함수형프로그래밍과%20디티털로빙.md) + +### 설정 및 설치 가이드 +- [프로젝트 설정 가이드](./docs/setups/setup-guide.md) +- [Slack 설정 최종 가이드](./docs/setups/slack-setup-final.md) +- [Slack 테스트 가이드](./docs/setups/slack-test-guide.md) +- [Socket Mode 테스트 가이드](./docs/setups/socket-mode-test.md) +- [ngrok 테스트 가이드](./docs/setups/ngrok-test-guide.md) + +### 외부 참조 +- [Slack API 문서](https://api.slack.com/web) +- [OpenAI API 문서](https://platform.openai.com/docs) +- [Gemini API 문서](https://ai.google.dev/docs) +- [FastAPI 문서](https://fastapi.tiangolo.com/) +- [LangChain 문서](https://docs.langchain.com/) + +## 문서 활용 가이드 + +### 프로젝트 이해하기 +1. [프로젝트 개요](./00_프로젝트_개요.md) 읽기 +2. [MVP 계획](./docs/ideas/00_로빙_MVP_계획.md) 확인 +3. [함수형 프로그래밍 가이드](./docs/guide/functional-programing/로빙_함수형_프로그래밍_가이드.md) 읽기 + +### 개발 환경 구축하기 +1. [설정 가이드](./docs/setups/setup-guide.md) 기본 설치 +2. [Slack 설정 가이드](./docs/setups/slack-setup-final.md) Slack 연동 +3. [테스트 가이드](./docs/setups/slack-test-guide.md) 동작 확인 + +## 문서 기여 가이드 + +- 새로운 문서는 적절한 디렉토리에 마크다운(.md) 형식으로 작성 +- 문서 추가 시 이 README.md에 링크 추가 +- 기술 문서는 코드 예시와 함께 작성 권장 diff --git a/docs/introduce/00_ MVP 개발 개요.md b/docs/ideas/00_ MVP 개발 개요.md similarity index 100% rename from docs/introduce/00_ MVP 개발 개요.md rename to docs/ideas/00_ MVP 개발 개요.md diff --git a/docs/introduce/00_MOC_프로젝트 관련 문서들 집합.md b/docs/ideas/00_MOC_프로젝트 관련 문서들 집합.md similarity index 100% rename from docs/introduce/00_MOC_프로젝트 관련 문서들 집합.md rename to docs/ideas/00_MOC_프로젝트 관련 문서들 집합.md diff --git a/docs/introduce/00_로빙_MVP_계획.md b/docs/ideas/00_로빙_MVP_계획.md old mode 100644 new mode 100755 similarity index 100% rename from docs/introduce/00_로빙_MVP_계획.md rename to docs/ideas/00_로빙_MVP_계획.md diff --git a/docs/introduce/00_정보의바다 프로젝트 개요.md b/docs/ideas/00_정보의바다 프로젝트 개요.md similarity index 100% rename from docs/introduce/00_정보의바다 프로젝트 개요.md rename to docs/ideas/00_정보의바다 프로젝트 개요.md diff --git a/docs/ideas/00_통합_지식베이스_로빙_프로젝트.md b/docs/ideas/00_통합_지식베이스_로빙_프로젝트.md new file mode 100644 index 0000000..b251fff --- /dev/null +++ b/docs/ideas/00_통합_지식베이스_로빙_프로젝트.md @@ -0,0 +1,222 @@ +--- +tags: AI, Slack, FastAPI, LangChain, PostgreSQL, ChromaDB, 에이전트, 스킬시스템, 메모리시스템, 스타트업 +date: 2025-06-30 +--- +# 로빙(RO-BEING) 프로젝트 통합 지식베이스 + +## 프로젝트 개요 + +**로빙(RO-BEING)**은 "도구를 넘어 동료로"라는 비전 하에 개발되는 지속적 기억과 성장 능력을 갖춘 AI 에이전트입니다. 기존의 세션 기반 AI 도구와 달리, 조직의 맥락을 기억하고 함께 성장하는 디지털 동료를 목표로 합니다. + +## 핵심 아키텍처: 스탯-스킬-아이템 + +### 1. 스탯 시스템 (인프라 레이어) + +**5대 핵심 스탯**: +- **기억**: 장기 데이터 보존 능력 (저장 토큰 수, 검색 정확도) +- **연산**: 처리 속도 및 정확성 (응답 지연시간, 정확도) +- **반응**: 실시간 알림 및 대응 (알림 속도, 적중률) +- **공감**: 감정 인식 및 배려 (감정 분석 정확도) +- **통솔**: 팀 조율 및 우선순위 관리 (워크플로우 효율성 개선) + +### 2. 스킬 시스템 (핵심 비즈니스 모듈) + +**MVP 핵심 스킬**: +- **Thread Digest**: 1000줄 채널 대화를 10문장으로 요약 +- **Action Extractor**: 대화에서 해야 할 일 추출 및 캘린더 연동 +- **Risk Monitor**: 투자자 미팅에서 위험 신호 탐지 +- **Emotion Tracker**: 팀 분위기 분석 및 갈등 중재 +- **PDF Processing**: PDF를 구조화된 HTML로 변환하여 Slack 출력 + +**확장 스킬 (로드맵)**: +- News Summarizer: 업계 뉴스 큐레이션 +- Calendar Coordinator: 회의 일정 자동 조율 +- Financial Analyzer: 재무 데이터 분석 및 인사이트 +- Code Reviewer: 개발팀 코드 리뷰 지원 + +### 3. 아이템 시스템 (외부 권한 토큰) + +**4가지 아이템 카테고리**: +- **API 접근권**: Whisper STT, Google API (24시간 만료 토큰) +- **프리미엄 모델**: GPT-4, Claude, Gemini 등 (사용량 기반 과금) +- **민감 데이터**: 재무제표, 투자정보 (DID 서명 + 감사 로그) +- **외부 도구**: Notion, Slack, Zoom (OAuth 토큰 관리) + +## 기술 스택 및 아키텍처 + +### 백엔드 아키텍처 +``` +FastAPI Gateway +├── LangChain AI Pipeline +├── PostgreSQL (관계형 데이터) +├── Chroma Vector DB (임베딩 검색) +├── JWT + DID 보안 레이어 +└── Slack/Discord 웹훅 통합 +``` + +### 데이터 관리 전략 +- **PostgreSQL**: 사용자 데이터, 스탯, 스킬, 피드백, 메타데이터 +- **Chroma Vector DB**: 대화 내용, 문서 임베딩, 맥락적 기억 +- **정책 기반 저장**: 에이전트 주도의 기억 보존 결정 +- **완전 감사 로그**: 에이전트 행동과 결정의 완전한 투명성 + +### 함수형 프로그래밍 접근법 +- **순수 함수**: 부작용 없는 계산 및 판단 레이어 +- **모나드**: 오류 처리, 상태 관리, 외부 시스템 통합 +- **레시피 기반 아키텍처**: 연결 가능한 스킬 모듈 +- **안전성**: 예측 가능하고 테스트 가능한 실패 안전 작업 + +## MVP 개발 로드맵 (12주) + +### Phase 1: 기초 인프라 (1-2주) +- Slack 인터페이스 및 기본 응답 엔진 +- FastAPI 게이트웨이 구축 +- 기본 LLM 연동 + +### Phase 2: 메모리 시스템 (3-4주) +- PostgreSQL + Chroma DB 설계 +- 지속적 기억 저장 정책 +- 기본 검색 및 회상 기능 + +### Phase 3: 핵심 스킬 (5-6주) +- Thread Digest 구현 +- Action Extractor 구현 +- 스킬 시스템 프레임워크 + +### Phase 4: PDF 처리 (7-8주) +- PDF 텍스트/이미지 추출 +- HTML 구조화 변환 +- Slack 통합 출력 + +### Phase 5: 성장 시스템 (9-10주) +- 5대 스탯 시스템 +- 경험치 및 레벨업 +- 아이템 토큰 관리 + +### Phase 6: 통합 테스트 (11-12주) +- 전체 시스템 통합 +- 성능 최적화 +- 데모 시나리오 완성 + +## 비즈니스 모델 및 시장 전략 + +### 수익 모델 (월 30만원 ARPU, 5인 스타트업 기준준) +1. **스탯 구독** (15만원): 인프라 용량 과금 +2. **스킬 패스** (10만원): 고급 기능 번들 +3. **아이템 마켓플레이스** (5만원): 외부 도구 통합 수수료 + +### 시장 포지셔닝 +- **"도구 vs 동료"**: 기존 AI 어시스턴트와의 명확한 차별화 +- **데이터 해자**: 축적된 조직 기억이 전환 비용 창출 +- **네트워크 효과**: 팀 규모 배포가 에이전트 유용성 기하급수적 증가 +- **규제 친화적**: 완전한 감사 로그로 기업 컴플라이언스 지원 + +### 목표 시장 +- **1차 타겟**: 고성장 스타트업 (5인 이하하 팀 규모) +- **시장 규모**: 3만 개 고성장 스타트업 × 30만원 = 1000억원 잠재 수익 +- **확장 계획**: 중견기업 → 대기업 → 글로벌 시장 + +## 에이전트 중심 생태계 비전 + +### 4단계 생태계 구축 +1. **에이전트 협업 도구**: Slack 통합 AI 팀메이트 +2. **에이전트 마켓플레이스**: 전문 에이전트 발견 및 고용 플랫폼 +3. **에이전트 SNS**: 에이전트 상호작용 및 학습을 위한 소셜 플랫폼 +4. **에이전트 기반 정보회사**: 자동화된 데이터 수집 및 지식 합성 + +### 장기 전략적 목표 +- **1년차**: 에이전트 협업 도구 + 마켓플레이스 베타 +- **2년차**: 에이전트 SNS 집단 학습 플랫폼 +- **3년차**: 자동화된 지식 합성 정보 플랫폼 +- **출구 전략**: 협업 도구 벤더(Slack, Atlassian)에 인수 + +## 핵심 차별화 요소 + +### 1. 지속적 기억 시스템 +- **맥락 보존**: 조직의 장기 기억 유지 +- **캐시 미스 제거**: 반복적인 배경 설명 불필요 +- **감정적 기억**: 팀 역학, 선호도, 관계 패턴 추적 + +### 2. 투명한 성장 시스템 +- **목적이 있는 게이미피케이션**: 실제 성과 지표와 연결된 RPG식 레벨링 +- **경험 기반 학습**: 사용자 피드백과 성공률이 스킬 발전 견인 +- **가시적 진행**: 명확한 스탯 시각화로 에이전트 능력 이해 + +### 3. 보안 및 감사 가능성 +- **정책 토큰**: 모든 외부 권한 토큰화하여 추적 +- **DID 기반 신원**: 에이전트 책임을 위한 분산 신원 +- **완전한 감사 추적**: 컴플라이언스를 위한 모든 행동과 결정 로깅 +- **설명 가능한 AI**: 완전히 투명하고 추적 가능한 의사결정 과정 + +## 기술적 혁신 요소 + +### 함수형 프로그래밍 철학 +- **외부 모듈 통합**: 모나드 구조를 통한 안전한 서드파티 서비스 조합 +- **실패 처리**: 시스템 크래시 없는 예측 가능한 오류 전파 +- **스킬 조합성**: 맞춤형 워크플로우를 위한 에이전트 능력 믹스 앤 매치 +- **테스트 및 디버깅**: 포괄적인 테스트 전략을 가능하게 하는 순수 함수 + +### 스킬 허브 플러그인 아키텍처 +- **플러그인 시스템**: setuptools entry_points를 사용한 Python 패키지 +- **동적 발견**: 런타임 스킬 감지 및 로딩 +- **격리된 환경**: 의존성 충돌 방지를 위한 가상 환경 +- **버전 관리**: 호환성 범위를 가진 시맨틱 버저닝 +- **스키마 검증**: JSON 스키마 생성을 포함한 Pydantic 기반 데이터 모델 + +## 베이지안 투자 만족도 평가 모델 + +### 깜놀도(Surprise Index) 개념 +- **정의**: 예상 대비 실제 성과의 차이를 측정하는 지표 +- **공식**: Surprise = |Actual - Expected| / Expected_Variance +- **활용**: 투자 포트폴리오의 예상 외 성과 평가 + +### 베이지안 업데이트 메커니즘 +- **사전 확률**: 기존 경험과 데이터 기반 예측 +- **우도 함수**: 새로운 증거가 가설을 지지하는 정도 +- **사후 확률**: 새로운 정보 반영한 업데이트된 믿음 +- **적용**: 에이전트의 예측 정확도 지속적 개선 + +## 구현 우선순위 및 실행 계획 + +### 즉시 실행 항목 +1. **MVP 환경 구축**: FastAPI + PostgreSQL + Chroma DB +2. **Slack 웹훅 통합**: 기본 메시지 수신 및 응답 +3. **Thread Digest 스킬**: 대화 요약 프로토타입 +4. **기본 메모리 시스템**: 중요 대화 저장 및 검색 + +### 3개월 내 목표 +- **3개 파일럿 팀** 배포 및 테스트 +- **핵심 스킬 5개** 구현 완료 +- **기본 스탯 시스템** 작동 +- **사용자 만족도 80%** 달성 + +### 6개월 내 확장 +- **30개 팀**으로 확장 +- **월간 스킬 사용 100회+** 달성 +- **이탈률 5% 미만** 유지 +- **마켓플레이스 베타** 론칭 + +## 위험 요소 및 대응 방안 + +### 기술적 위험 +- **LLM API 비용 급증**: 온프레미스 모델 대안 준비 +- **스케일링 이슈**: 자동 스케일링 컨테이너 아키텍처 +- **데이터 손실**: 다중 백업 및 복구 시스템 + +### 시장 위험 +- **빅테크 경쟁**: 독특한 기억 시스템으로 차별화 +- **규제 변화**: 투명성과 감사 로그로 선제 대응 +- **고객 획득 비용**: 입소문 기반 바이럴 성장 전략 + +## 결론 + +로빙 프로젝트는 차세대 AI 에이전트의 비전을 제시합니다. 기억, 성장, 투명성을 우선시하여 기존의 일회성 도구가 아닌 지속적인 디지털 동료를 만들고자 합니다. + +스탯-스킬-아이템의 3층 아키텍처는 확장 가능한 에이전트 구축 프레임워크를 제공하며, 함수형 프로그래밍 접근법과 에이전트 생태계 비전은 현재의 AI 능력과 미래의 협업 패러다임의 교차점에 이 프로젝트를 위치시킵니다. + +MVP부터 장기 생태계 전략까지의 포괄적인 계획은 상당한 시장 기회에 대한 철저한 준비를 보여주며, 스타트업 생태계의 진정한 필요를 해결할 수 있는 위치에 있습니다. + +--- +**문서 생성일**: 2025-06-30 +**최종 업데이트**: 2025-06-30 +**출처**: ivada/001 정보의바다 폴더 내 72개 문서 통합 분석 \ No newline at end of file diff --git a/docs/setups/ngrok-test-guide.md b/docs/setups/ngrok-test-guide.md new file mode 100644 index 0000000..9d55855 --- /dev/null +++ b/docs/setups/ngrok-test-guide.md @@ -0,0 +1,76 @@ +# ngrok을 통한 Slack 직접 연동 테스트 + +## 🚀 현재 상태 +✅ ngrok 터널 생성 완료: `https://dc5c-59-9-195-150.ngrok-free.app` +✅ FastAPI 서버 실행 중 +✅ Slack 토큰 설정 완료 + +## 📋 Slack 앱 설정 (필수) + +### Event Subscriptions 설정 +1. https://api.slack.com/apps 에서 로빙 앱 선택 +2. "Event Subscriptions" → "Enable Events" 활성화 +3. Request URL: `https://dc5c-59-9-195-150.ngrok-free.app/api/slack/events` +4. Bot events 추가: + - `app_mention` + - `message.channels` + - `message.im` + - `message.groups` + - `message.mpim` +5. "Save Changes" 및 필요시 앱 재설치 + +## 🧪 테스트 시나리오 + +### 1. 봇 초대 +``` +/invite @Roving +``` + +### 2. 직접 메시지 +``` +안녕하세요 로빙! +``` + +### 3. 멘션 테스트 +``` +@Roving 오늘 할 일을 정리해주세요 +``` + +### 4. DM 테스트 +봇과 직접 1:1 대화 + +## 📊 예상 응답 +현재 테스트 모드에서는 다음과 같은 응답을 받게 됩니다: +``` +안녕하세요! 테스트 모드에서 실행 중입니다. 메시지를 받았습니다: '[사용자 메시지]' +``` + +## 🔍 로그 모니터링 +서버 로그에서 다음 메시지들을 확인할 수 있습니다: +- Slack 이벤트 수신 +- 메시지 처리 과정 +- AI 서비스 응답 + +## 🐛 문제 해결 + +### URL 검증 실패 +- ngrok URL이 정확한지 확인 +- `/api/slack/events` 경로 포함 여부 확인 + +### 봇이 응답하지 않음 +- Event Subscriptions 설정 확인 +- 봇 권한 확인 +- 로그에서 에러 메시지 확인 + +### 권한 오류 +- Bot Token Scopes 재확인 +- 앱 재설치 시도 + +## 📱 실시간 모니터링 +ngrok 웹 인터페이스에서 실시간 요청 확인: +http://localhost:4040 + +## 🎯 다음 단계 +1. Slack 설정 완료 후 메시지 테스트 +2. OpenAI API 키 설정하여 실제 AI 응답 활성화 +3. 고급 기능 구현 (요약, 액션 추출, 기억 시스템) \ No newline at end of file diff --git a/docs/setups/setup-guide.md b/docs/setups/setup-guide.md new file mode 100644 index 0000000..2102ccb --- /dev/null +++ b/docs/setups/setup-guide.md @@ -0,0 +1,240 @@ +# 로빙 MVP 설정 가이드 + +## 📋 목차 +1. [환경 설정](#환경-설정) +2. [Slack 앱 설정](#slack-앱-설정) +3. [OpenAI API 설정](#openai-api-설정) +4. [데이터베이스 설정](#데이터베이스-설정) +5. [서버 실행](#서버-실행) +6. [테스트](#테스트) + +## 🔧 환경 설정 + +### 1. 시스템 요구사항 +- Python 3.12+ +- PostgreSQL 13+ +- Git + +### 2. 프로젝트 클론 및 설정 +```bash +# 저장소 클론 +git clone https://github.com/happybell80/ivada.git +cd ivada + +# 가상환경 생성 +python3 -m venv venv +source venv/bin/activate # Linux/Mac +# venv\Scripts\activate # Windows + +# 의존성 설치 +pip install -r requirements.txt +``` + +### 3. 환경변수 설정 +`.env` 파일을 생성하고 다음 내용을 입력: + +```env +# Slack Configuration +SLACK_BOT_TOKEN=xoxb-your-bot-token +SLACK_SIGNING_SECRET=your-signing-secret +SLACK_APP_TOKEN=xapp-your-app-token + +# OpenAI Configuration +OPENAI_API_KEY=your-openai-api-key + +# Database Configuration +DATABASE_URL=postgresql://user:password@localhost/ivada_db +TEST_DATABASE_URL=postgresql://user:password@localhost/ivada_test_db + +# JWT Configuration +JWT_SECRET_KEY=your-jwt-secret-key-change-in-production +JWT_ALGORITHM=HS256 +JWT_ACCESS_TOKEN_EXPIRE_MINUTES=30 + +# Application Configuration +DEBUG=True +LOG_LEVEL=INFO +MAX_MEMORY_SIZE=1000 +``` + +## 📱 Slack 앱 설정 + +### 1. Slack 앱 생성 +1. https://api.slack.com/apps 접속 +2. **"Create New App"** 클릭 +3. **"From scratch"** 선택 +4. App Name: **"Roving"** 입력 +5. 워크스페이스 선택 후 **"Create App"** 클릭 + +### 2. Bot Token 권한 설정 +**OAuth & Permissions** 페이지에서 다음 Bot Token Scopes 추가: + +#### 필수 권한 +- `app_mentions:read` - 앱 멘션 읽기 +- `channels:read` - 채널 정보 읽기 +- `chat:write` - 메시지 전송 +- `chat:write.public` - 공개 채널에 메시지 전송 +- `im:read` - DM 읽기 +- `im:write` - DM 전송 +- `users:read` - 사용자 정보 읽기 + +#### 선택 권한 +- `mpim:read` - 그룹 DM 읽기 +- `mpim:write` - 그룹 DM 전송 +- `files:read` - 파일 읽기 +- `files:write` - 파일 업로드 + +### 3. 앱 설치 및 토큰 획득 +1. **"Install to Workspace"** 클릭 +2. 권한 승인 +3. **Bot User OAuth Token** 복사 (xoxb-로 시작) +4. **"Basic Information"** 페이지에서 **Signing Secret** 복사 + +### 4. 연동 방식 선택 + +#### 방법 A: HTTP 연동 (ngrok 사용) + +1. **ngrok 설치** + ```bash + # Linux/Mac + wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz + tar xzf ngrok-v3-stable-linux-amd64.tgz + + # ngrok 계정 생성: https://dashboard.ngrok.com/signup + # authtoken 설정 + ./ngrok config add-authtoken YOUR_AUTHTOKEN + ``` + +2. **Event Subscriptions 설정** + - Slack 앱 → **"Event Subscriptions"** → **"Enable Events"** ON + - **Request URL**: `https://your-ngrok-url.ngrok.io/api/slack/events` + - **Subscribe to bot events**: + - `app_mention` + - `message.channels` + - `message.groups` + - `message.im` + - `message.mpim` + +#### 방법 B: Socket Mode 연동 + +1. **Socket Mode 활성화** + - Slack 앱 → **"Socket Mode"** → **"Enable Socket Mode"** ON + +2. **App-Level Token 생성** + - Token Name: **"Roving Socket Token"** + - Scopes: `connections:write` + - **App Token** 복사 (xapp-로 시작) + +## 🤖 OpenAI API 설정 + +### 1. API 키 발급 +1. https://platform.openai.com/api-keys 접속 +2. **"Create new secret key"** 클릭 +3. API 키 복사하여 `.env`의 `OPENAI_API_KEY`에 설정 + +### 2. 사용량 모니터링 +- https://platform.openai.com/usage 에서 사용량 확인 +- 필요시 사용량 제한 설정 + +## 🗄️ 데이터베이스 설정 + +### 1. PostgreSQL 설치 및 설정 +```bash +# Ubuntu/Debian +sudo apt update +sudo apt install postgresql postgresql-contrib + +# macOS (Homebrew) +brew install postgresql +brew services start postgresql + +# 데이터베이스 생성 +sudo -u postgres createdb ivada_db +sudo -u postgres createdb ivada_test_db +``` + +### 2. 데이터베이스 사용자 생성 +```sql +-- PostgreSQL 콘솔에서 실행 +sudo -u postgres psql + +CREATE USER ivada_user WITH ENCRYPTED PASSWORD 'your_password'; +GRANT ALL PRIVILEGES ON DATABASE ivada_db TO ivada_user; +GRANT ALL PRIVILEGES ON DATABASE ivada_test_db TO ivada_user; +``` + +### 3. 환경변수 업데이트 +```env +DATABASE_URL=postgresql://ivada_user:your_password@localhost/ivada_db +TEST_DATABASE_URL=postgresql://ivada_user:your_password@localhost/ivada_test_db +``` + +## 🚀 서버 실행 + +### 1. HTTP 서버 실행 (ngrok 사용) +```bash +# 터미널 1: FastAPI 서버 +source venv/bin/activate +python run.py + +# 터미널 2: ngrok 터널 +./ngrok http 8000 +``` + +### 2. Socket Mode 실행 +```bash +source venv/bin/activate +python socket_run.py +``` + +### 3. 실행 확인 +- HTTP: http://localhost:8000 +- API 문서: http://localhost:8000/docs +- ngrok 모니터링: http://localhost:4040 + +## 🧪 테스트 + +### 1. API 테스트 +```bash +# 서버 상태 확인 +curl http://localhost:8000/health + +# 메시지 처리 테스트 +curl -X POST "http://localhost:8000/api/test/message" \ + -H "Content-Type: application/json" \ + -d '{"text": "안녕하세요", "user_id": "test_user"}' +``` + +### 2. Slack 테스트 +1. **봇 초대**: `/invite @Roving` +2. **직접 메시지**: `안녕하세요 로빙!` +3. **멘션 테스트**: `@Roving 오늘 할 일을 정리해주세요` + +### 3. 예상 응답 +``` +안녕하세요! 테스트 모드에서 실행 중입니다. 메시지를 받았습니다: '[메시지]' +``` + +## 🐛 문제 해결 + +### Slack 연동 문제 +- **봇이 응답하지 않음**: Event Subscriptions 설정 확인 +- **권한 오류**: Bot Token Scopes 재확인 +- **URL 검증 실패**: ngrok URL 및 서버 실행 상태 확인 + +### 서버 실행 문제 +- **포트 충돌**: `lsof -i :8000`으로 포트 사용 확인 +- **의존성 오류**: `pip install -r requirements.txt` 재실행 +- **환경변수 오류**: `.env` 파일 경로 및 내용 확인 + +### 데이터베이스 연결 문제 +- **연결 실패**: PostgreSQL 서비스 실행 상태 확인 +- **권한 오류**: 사용자 권한 재설정 +- **인코딩 문제**: UTF-8 인코딩 설정 확인 + +## 📞 지원 + +추가 도움이 필요하시면: +- [GitHub Issues](https://github.com/happybell80/ivada/issues) +- [개발 일지](development-log.md) 참조 +- [Slack API 문서](https://api.slack.com/web) 참조 \ No newline at end of file diff --git a/docs/setups/slack-setup-final.md b/docs/setups/slack-setup-final.md new file mode 100644 index 0000000..b46d754 --- /dev/null +++ b/docs/setups/slack-setup-final.md @@ -0,0 +1,95 @@ +# 🎯 Slack 앱 최종 설정 가이드 + +## ✅ 현재 상태 +- ngrok 터널: `https://dc5c-59-9-195-150.ngrok-free.app` +- FastAPI 서버: 실행 중 +- URL 검증: 성공 +- 이벤트 처리: 동작 확인 + +## 📋 Slack 앱 설정 단계 + +### 1. Event Subscriptions 설정 +1. https://api.slack.com/apps 접속 +2. 로빙 앱 선택 +3. **"Event Subscriptions"** 클릭 +4. **"Enable Events"** 토글 ON +5. **Request URL** 입력: + ``` + https://dc5c-59-9-195-150.ngrok-free.app/api/slack/events + ``` +6. ✅ **"Verified"** 표시 확인 + +### 2. Bot Events 구독 +**"Subscribe to bot events"** 섹션에서 다음 이벤트 추가: +- `app_mention` - 봇 멘션시 알림 +- `message.channels` - 채널 메시지 +- `message.groups` - 그룹 메시지 +- `message.im` - 직접 메시지 +- `message.mpim` - 멀티파티 DM + +### 3. OAuth & Permissions 확인 +다음 권한이 있는지 확인: +- `app_mentions:read` +- `channels:read` +- `chat:write` +- `chat:write.public` +- `im:read` +- `im:write` +- `users:read` + +### 4. 앱 재설치 +설정 변경 후: +1. **"Save Changes"** 클릭 +2. **"Install to Workspace"** 또는 **"Reinstall App"** +3. 권한 승인 + +## 🧪 테스트 방법 + +### 1. 봇 초대 +``` +/invite @Roving +``` + +### 2. 직접 메시지 +``` +안녕하세요 로빙! +``` + +### 3. 멘션 테스트 +``` +@Roving 오늘 할 일을 정리해주세요 +``` + +## 📊 예상 결과 +``` +안녕하세요! 테스트 모드에서 실행 중입니다. 메시지를 받았습니다: '[메시지]' +``` + +## 🔍 로그 확인 +실시간 로그 모니터링: +- ngrok: http://localhost:4040 +- 서버 로그에서 "Received Slack event" 메시지 확인 + +## 🐛 문제 해결 + +### URL 검증 실패 +- ngrok URL 정확성 확인 +- 서버 실행 상태 확인 + +### 봇 무응답 +- Event Subscriptions 저장 확인 +- 앱 재설치 완료 확인 +- 봇 권한 확인 + +### 권한 오류 +- OAuth Scopes 재확인 +- 워크스페이스 관리자 권한 확인 + +## ✨ 설정 완료 후 +Slack에서 메시지를 보내면: +1. ngrok 로그에 요청 기록 +2. 서버에서 이벤트 처리 +3. AI 서비스에서 응답 생성 +4. Slack으로 응답 전송 + +모든 설정이 완료되면 로빙이 정상적으로 응답할 것입니다! \ No newline at end of file diff --git a/docs/setups/slack-test-guide.md b/docs/setups/slack-test-guide.md new file mode 100644 index 0000000..0563d60 --- /dev/null +++ b/docs/setups/slack-test-guide.md @@ -0,0 +1,67 @@ +# Slack 연동 테스트 가이드 + +## 현재 상태 +✅ Slack 토큰이 올바르게 설정됨 +✅ 서버가 정상 실행됨 +✅ API 엔드포인트 동작 확인됨 + +## 테스트 방법 + +### 1. 직접 메시지 테스트 (ngrok 필요) +```bash +# ngrok 설치 후 실행 +ngrok http 8000 + +# Slack 앱 설정에서 Request URL 업데이트 +https://your-ngrok-url.ngrok.io/api/slack/events +``` + +### 2. Socket Mode 테스트 (권장) +Socket Mode를 사용하면 외부 URL 없이도 테스트 가능합니다. + +### 3. API 직접 테스트 +```bash +# 메시지 처리 테스트 +curl -X POST "http://localhost:8000/api/test/message" \ + -H "Content-Type: application/json" \ + -d '{"text": "안녕하세요", "user_id": "test_user"}' + +# 액션 추출 테스트 +curl -X POST "http://localhost:8000/api/test/extract-actions" \ + -H "Content-Type: application/json" \ + -d '{"text": "내일까지 보고서 작성해주세요"}' +``` + +## Socket Mode 설정 방법 + +1. Slack 앱 설정에서 "Socket Mode" 활성화 +2. App-Level Token 생성 (connections:write 권한) +3. `.env` 파일에 SLACK_APP_TOKEN 설정 +4. 서버 재시작 + +## 테스트 시나리오 + +### 기본 대화 +- "안녕하세요 로빙!" +- "오늘 할 일을 정리해주세요" +- "어제 회의 내용을 요약해주세요" + +### 액션 아이템 추출 +- "내일까지 보고서를 작성하고 회의 준비를 해야 합니다" +- "클라이언트에게 이메일을 보내고 계약서를 검토해주세요" + +### 요약 기능 +- 긴 대화나 스레드에서 "요약해줘" 또는 "@로빙 요약" + +## 현재 구현된 기능 +- ✅ 기본 메시지 수신 및 응답 +- ✅ AI 기반 대화 처리 (테스트 모드) +- ✅ 액션 아이템 추출 (기본 구현) +- ✅ 스레드 요약 (기본 구현) +- ✅ FastAPI 문서화 (/docs) + +## 다음 단계 +1. OpenAI API 키 설정하여 실제 AI 응답 테스트 +2. Socket Mode 구현하여 실시간 메시지 처리 +3. 벡터 DB 연동하여 기억 시스템 구현 +4. 스탯 및 스킬 시스템 구현 \ No newline at end of file diff --git a/docs/setups/socket-mode-test.md b/docs/setups/socket-mode-test.md new file mode 100644 index 0000000..032d621 --- /dev/null +++ b/docs/setups/socket-mode-test.md @@ -0,0 +1,78 @@ +# Socket Mode 테스트 가이드 + +## 현재 상태 +✅ Socket Mode 서비스 구현 완료 +✅ Slack 토큰 설정 완료 +✅ Socket Mode 연결 실행 중 + +## Slack에서 테스트하는 방법 + +### 1. 봇을 채널에 초대 +``` +/invite @Roving +``` + +### 2. 직접 메시지 보내기 +채널에서 직접 메시지 보내기: +``` +안녕하세요 로빙! +``` + +### 3. 멘션으로 호출하기 +``` +@Roving 오늘 할 일을 정리해주세요 +``` + +### 4. 슬래시 명령어 사용 (설정된 경우) +``` +/roving 회의 내용을 요약해주세요 +/roving 액션 내일까지 보고서를 작성하고 회의 준비를 해야 합니다 +``` + +### 5. DM으로 대화하기 +봇과 1:1 DM으로 대화 + +## 테스트 시나리오 + +### 기본 대화 테스트 +1. "안녕하세요!" +2. "로빙 소개해주세요" +3. "오늘 날씨 어때요?" + +### 업무 관련 테스트 +1. "회의 일정을 정리해주세요" +2. "프로젝트 진행상황을 요약해주세요" +3. "내일 해야 할 일들을 리스트업해주세요" + +### 액션 아이템 추출 테스트 +1. "내일까지 보고서를 작성하고 팀 미팅을 준비해야 합니다" +2. "클라이언트에게 이메일을 보내고 계약서를 검토해주세요" +3. "다음 주까지 시스템 업데이트와 문서 작성을 완료해야 합니다" + +## 현재 응답 +- OpenAI API 키가 테스트 모드이므로 실제 AI 응답 대신 에코 응답을 받게 됩니다 +- 메시지: "안녕하세요! 테스트 모드에서 실행 중입니다. 메시지를 받았습니다: '[메시지]'" + +## 문제 해결 + +### 봇이 응답하지 않는 경우 +1. Socket Mode 연결 상태 확인 +2. 봇이 채널에 초대되었는지 확인 +3. 로그에서 오류 메시지 확인 + +### 권한 오류가 발생하는 경우 +1. Slack 앱 OAuth 권한 확인 +2. Bot Token Scopes 재설정 +3. 워크스페이스에 재설치 + +## 로그 확인 +서버 실행 중 로그에서 다음과 같은 메시지를 확인할 수 있습니다: +- "Socket Mode service initialized successfully" +- "Starting Socket Mode connection..." +- "Received message from [user]: [message]" + +## 다음 단계 +1. OpenAI API 키 설정하여 실제 AI 응답 테스트 +2. 스레드 요약 기능 구현 +3. 액션 아이템 추출 정확도 개선 +4. 사용자별 컨텍스트 기억 기능 추가 \ No newline at end of file