companionbot 0.15.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,327 +1,203 @@
1
1
  # CompanionBot
2
2
 
3
- > Claude 기반의 개인화된 페르소나를 가진 AI Companion Bot
3
+ > Claude 기반 개인 AI 친구 - 텔레그램
4
4
 
5
5
  [![npm version](https://badge.fury.io/js/companionbot.svg)](https://www.npmjs.com/package/companionbot)
6
6
  [![Node.js](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen)](https://nodejs.org)
7
7
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
8
8
 
9
- ## 주요 기능
9
+ ## 특징
10
10
 
11
- ### 💬 대화
12
- - **자연스러운 대화** - Claude Sonnet/Opus/Haiku 모델 선택 가능
13
- - **페르소나 커스터마이징** - 실행 온보딩으로 봇의 성격, 말투, 이름 설정
14
- - **이미지 분석** - 사진을 보내면 분석
15
- - **링크 요약** - URL을 보내면 내용을 읽고 요약
11
+ - 🧠 **Extended Thinking** - Claude의 사고 과정 활용
12
+ - 🔍 **시맨틱 메모리** - 로컬 임베딩으로 관련 기억 검색
13
+ - **빠른 응답** - 사전 로딩, 병렬 처리, 스마트 캐싱
14
+ - 🎭 **페르소나** - 이름, 성격, 말투 커스터마이징
15
+ - 🔧 **20+ 도구** - 파일, 웹, 일정, 메모리
16
16
 
17
- ### 🔍 정보 검색 (v0.3.0)
18
- - **웹 검색** - "최신 React 뉴스 검색해줘" (Brave Search API)
19
- - **웹 페이지 읽기** - URL 내용을 가져와서 분석/요약
17
+ ## 🚀 빠른 시작
20
18
 
21
- ### ⏰ 일정 관리
22
- - **리마인더** - "10분 뒤에 알려줘"
23
- - **Google Calendar 연동** - 일정 조회/추가/삭제
24
- - **일일 브리핑** - 매일 아침 날씨와 일정 알림
25
- - **Heartbeat** - 주기적으로 체크리스트 확인 후 알림
26
19
 
27
- ### 🕐 스케줄링 (v0.3.0)
28
- - **Cron 작업** - "매일 아침 9시에 뉴스 알려줘", "평일 오후 6시에 퇴근 알림"
29
- - **일회성 예약** - "내일 오전 9시에 알려줘"
30
- - **반복 작업** - "30분마다 주식 가격 확인해줘"
31
-
32
- ### 🤖 고급 기능 (v0.3.0+)
33
- - **서브 에이전트** - 복잡한 작업을 백그라운드에서 처리
34
- - **백그라운드 실행** - 긴 명령어를 백그라운드에서 실행하고 결과 확인
35
- - **파일 시스템** - 워크스페이스 내 파일 읽기/쓰기/편집
36
- - **일일 메모리** - 대화 내용 자동 저장
37
-
38
- ### 🧠 시맨틱 메모리 (v0.6.0)
39
- - **벡터 검색** - 임베딩 기반 관련 메모리 검색
40
- - **자동 인덱싱** - 메모리 파일 자동 청크 분할 및 임베딩
41
- - **유사도 매칭** - 의미 기반으로 관련 대화 기록 찾기
42
-
43
- ### 🔧 시스템 (v0.6.0)
44
- - **헬스 체크** - 봇 상태 모니터링 (uptime, 메시지 수, 오류 수)
45
- - **업데이트 알림** - 새 버전 출시 시 자동 알림
46
-
47
- ## 설치
48
-
49
- ### 사전 준비
50
-
51
- - **Node.js 18+** ([다운로드](https://nodejs.org))
52
- - **Telegram Bot Token** - [@BotFather](https://t.me/BotFather)에서 봇 생성 후 발급
53
- - **Anthropic API Key** - [console.anthropic.com](https://console.anthropic.com)에서 발급
54
-
55
- #### Linux 사용자 (keytar 의존성)
56
-
57
- ```bash
58
- # Debian/Ubuntu
59
- sudo apt-get install libsecret-1-dev
60
-
61
- # Fedora
62
- sudo dnf install libsecret-devel
63
-
64
- # Arch
65
- sudo pacman -S libsecret
66
- ```
67
-
68
- ### 간편 설치
20
+ **요구사항:** Node.js 18 이상
69
21
 
70
22
  ```bash
71
23
  npm install -g companionbot
72
24
  companionbot
73
25
  ```
74
26
 
75
- ### 개발자 설치
27
+ 실행 시 안내에 따라:
28
+ 1. Telegram Bot Token 입력 ([@BotFather](https://t.me/BotFather))
29
+ 2. Anthropic API Key 입력 ([console.anthropic.com](https://console.anthropic.com))
30
+ 3. Telegram에서 봇에게 `/start` 보내기
76
31
 
77
- ```bash
78
- git clone https://github.com/DinN0000/CompanionBot.git
79
- cd companionbot
80
- npm install
81
- npm run build
82
- npm start
83
- ```
84
-
85
- ## 첫 실행
32
+ ## 🖥️ CLI 명령어
86
33
 
87
- 처음 실행하면 대화형 설정이 시작됩니다:
34
+ 터미널에서 실행하는 명령어:
88
35
 
36
+ ```bash
37
+ companionbot # 봇 시작 (첫 실행 시 설정 마법사 자동 시작)
38
+ companionbot setup # 설정 마법사 (전체)
39
+ companionbot setup telegram # Telegram 토큰 설정
40
+ companionbot setup anthropic # Anthropic API 키 설정
41
+ companionbot setup weather # 날씨 API 설정
42
+ companionbot setup calendar # Google Calendar 연동
43
+ companionbot setup brave # 웹 검색 API 설정
44
+ companionbot --help # 도움말
45
+ companionbot --version # 버전 확인
89
46
  ```
90
- 🤖 CompanionBot 첫 실행입니다!
91
-
92
- [1/2] Telegram Bot Token
93
- @BotFather에서 봇 생성 후 토큰을 붙여넣으세요.
94
- Token: _
95
47
 
96
- [2/2] Anthropic API Key
97
- console.anthropic.com에서 발급받으세요.
98
- API Key: _
48
+ ### 비대화형 모드
99
49
 
100
- 📁 워크스페이스 생성 중...
101
- → ~/.companionbot/ 생성 완료
50
+ CI/CD나 스크립트에서 사용할 때:
102
51
 
103
- 🚀 봇을 시작합니다!
52
+ ```bash
53
+ companionbot -n # --no-interactive 모드
104
54
  ```
105
55
 
106
- 설정 완료 **Telegram에서 봇에게 `/start`를 보내면** 온보딩이 시작됩니다:
107
- - 봇 이름 짓기
108
- - 성격과 말투 설정
109
- - 사용자 정보 입력
56
+ 환경변수로 설정 (비대화형 모드에서 사용):
57
+ - `TELEGRAM_TOKEN` - Telegram 토큰
58
+ - `ANTHROPIC_API_KEY` - Anthropic API 키
59
+
60
+ ## 📱 텔레그램 명령어
110
61
 
111
- ## 명령어
62
+ 봇과 대화할 때 사용하는 명령어:
112
63
 
113
64
  ### 기본 명령어
114
65
 
115
66
  | 명령어 | 설명 |
116
67
  |--------|------|
117
- | `/start` | 봇 시작 (첫 실행 시 온보딩) |
68
+ | `/start` | 봇 시작 |
69
+ | `/help` | 도움말 보기 |
70
+ | `/model` | AI 모델 변경 (haiku/sonnet/opus) |
118
71
  | `/compact` | 대화 정리 (토큰 절약) |
119
- | `/memory` | 최근 일주일 기억 보기 |
120
- | `/model [id]` | AI 모델 변경 (sonnet/opus/haiku) |
121
- | `/reset` | 페르소나 초기화 (온보딩 다시) |
72
+ | `/memory` | 최근 기억 보기 |
73
+ | `/health` | 상태 확인 |
74
+ | `/reset` | 대화 초기화 |
122
75
 
123
- ### 기능 설정
76
+ ### 고급 기능
124
77
 
125
78
  | 명령어 | 설명 |
126
79
  |--------|------|
127
- | `/setup` | 전체 기능 설정 메뉴 |
128
- | `/setup weather` | 날씨 API 설정 |
129
- | `/setup calendar` | Google Calendar 설정 |
130
- | `/setup briefing` | 일일 브리핑 설정 |
131
- | `/setup heartbeat` | Heartbeat 설정 |
80
+ | `/calendar_setup` | Google Calendar 연동 설정 |
81
+ | `/weather_setup` | 날씨 도시 설정 |
82
+ | `/briefing` | 브리핑 설정/실행 |
83
+ | `/reminders` | 리마인더 목록 보기 |
84
+ | `/heartbeat` | 하트비트 상태 확인 |
132
85
 
133
- ### 빠른 명령어
86
+ ### 컨텍스트 관리
134
87
 
135
88
  | 명령어 | 설명 |
136
89
  |--------|------|
137
- | `/briefing` | 일일 브리핑 토글 |
138
- | `/heartbeat` | Heartbeat 토글 |
139
- | `/reminders` | 알림 목록 보기 |
140
- | `/calendar` | 오늘 일정 보기 |
141
-
142
- ### 자연어 명령
90
+ | `/pin <메시지>` | 메시지 고정 (항상 컨텍스트에 포함) |
91
+ | `/pins` | 고정된 메시지 목록 |
92
+ | `/unpin <번호>` | 고정 해제 |
93
+ | `/context` | 현재 컨텍스트 상태 확인 |
143
94
 
144
- 명령어 대신 자연스럽게 말해도 됩니다:
95
+ ### 자연어로도 가능
145
96
 
146
97
  ```
147
- 모델 변경 "하이쿠로 바꿔줘" / "opus로 변경해줘"
148
- 리마인더 "10분 뒤에 알려줘" / "내일 9시에 회의 알림"
149
- 브리핑 "브리핑 켜줘" / "지금 브리핑 해줘" / "아침 9시에 브리핑"
150
- Heartbeat "하트비트 켜줘" / "10분마다 체크해줘"
151
- 날씨 "서울 날씨 어때?" / "도쿄 날씨 알려줘"
152
- 메모리 "이거 기억해둬"
153
- 웹 검색 "React 19 검색해줘" / "최신 뉴스 찾아줘"
154
- Cron "매일 아침 9시에 뉴스 알려줘" / "평일 오후 6시에 퇴근 알림"
155
- 서브에이전트 "이 코드 분석해줘" (복잡한 작업은 자동으로 서브에이전트 사용)
98
+ "하이쿠로 바꿔줘"
99
+ "10분 뒤에 알려줘"
100
+ "서울 날씨 어때?"
101
+ "React 19 검색해줘"
102
+ "매일 아침 9시에 뉴스 알려줘"
156
103
  ```
157
104
 
158
- ## 선택적 기능 설정
105
+ ## 🔧 주요 기능
159
106
 
160
- ### 🌤️ 날씨 (OpenWeatherMap)
107
+ ### AI 엔진
108
+ - **Claude 모델** - Sonnet 4 / Opus 4 / Haiku 3.5
109
+ - **Extended Thinking** - 내부 스트리밍으로 thinking 지원
110
+ - **도구 사용** - 20+ 도구, 병렬 실행
161
111
 
162
- 1. [openweathermap.org](https://openweathermap.org) 가입
163
- 2. API Keys에서 무료 키 발급
164
- 3. 봇에게 DM으로: `/weather_setup YOUR_API_KEY`
112
+ ### 메모리 시스템
113
+ - **로컬 임베딩** - @xenova/transformers
114
+ - **하이브리드 검색** - 벡터 + 키워드 (FTS5)
115
+ - **한국어 최적화** - trigram tokenizer
165
116
 
166
- ### 📅 Google Calendar
117
+ ### 일정/알림
118
+ - **리마인더** - 자연어로 알림 설정
119
+ - **Google Calendar** - 일정 조회/추가
120
+ - **Cron** - 반복 작업 스케줄링
121
+ - **브리핑/하트비트** - 주기적 알림
167
122
 
168
- 1. [Google Cloud Console](https://console.cloud.google.com) 접속
169
- 2. 프로젝트 생성 Calendar API 활성화
170
- 3. OAuth 동의 화면 설정 (앱 이름, 범위 추가)
171
- 4. 사용자 인증 정보 OAuth 클라이언트 ID (데스크톱 앱)
172
- 5. 봇에게 DM으로: `/calendar_setup CLIENT_ID CLIENT_SECRET`
173
- 6. 인증 링크 클릭하여 Google 로그인
174
-
175
- ### 🔍 웹 검색 (Brave Search)
176
-
177
- 1. [Brave Search API](https://api.search.brave.com) 가입
178
- 2. API 키 발급
179
- 3. 터미널에서: `npm run setup brave YOUR_API_KEY`
180
-
181
- ## PM2로 상시 실행
182
-
183
- ```bash
184
- # PM2 설치
185
- npm install -g pm2
123
+ ### 성능
124
+ - **Warmup** - 시작 사전 로딩
125
+ - **병렬 처리** - 워크스페이스, 도구 실행
126
+ - **LRU 캐시** - 임베딩, 워크스페이스
186
127
 
187
- # 시작
188
- pm2 start npm --name companionbot -- start
189
-
190
- # 부팅 시 자동 시작
191
- pm2 startup && pm2 save
192
-
193
- # 로그 확인
194
- pm2 logs companionbot
195
-
196
- # 재시작
197
- pm2 restart companionbot
198
- ```
199
-
200
- ## 워크스페이스
128
+ ## 📁 워크스페이스
201
129
 
202
130
  `~/.companionbot/` 구조:
203
131
 
204
132
  ```
205
- ├── AGENTS.md # 운영 지침 (행동 규칙)
206
- ├── BOOTSTRAP.md # 온보딩 프롬프트 (완료 후 삭제됨)
207
- ├── HEARTBEAT.md # 주기적 체크 항목
208
- ├── IDENTITY.md # 봇 정체성 (이름, 이모지, 소개)
209
- ├── MEMORY.md # 장기 기억
210
- ├── SOUL.md # 봇 성격과 말투
211
- ├── TOOLS.md # 도구 설정 노트
133
+ ├── SOUL.md # 봇 성격/말투
134
+ ├── IDENTITY.md # 이름, 이모지
212
135
  ├── USER.md # 사용자 정보
213
- ├── canvas/ # 작업 디렉토리
214
- ├── cron.json # 크론 작업 저장
136
+ ├── MEMORY.md # 장기 기억
137
+ ├── AGENTS.md # 행동 지침
138
+ ├── HEARTBEAT.md # 주기적 체크 항목
139
+ ├── TOOLS.md # 도구 설정
140
+ ├── canvas/ # 작업 디렉토리
215
141
  └── memory/ # 일일 로그
216
142
  └── YYYY-MM-DD.md
217
143
  ```
218
144
 
219
- ### 파일 커스터마이징
220
-
221
- - **SOUL.md** - 봇의 성격, 말투, 관심사 수정
222
- - **HEARTBEAT.md** - 주기적으로 체크할 항목 설정
223
- - **AGENTS.md** - 봇의 행동 지침 수정
224
-
225
- ## 시크릿 저장
226
-
227
- API 키는 OS 키체인에 안전하게 저장됩니다:
145
+ ## ⚙️ 선택 기능
228
146
 
229
- | OS | 저장 위치 |
230
- |----|-----------|
231
- | macOS | Keychain Access |
232
- | Windows | Credential Manager |
233
- | Linux | libsecret (GNOME Keyring 등) |
147
+ CLI 명령어로 설정:
234
148
 
235
- 완전 초기화: `~/.companionbot/` 폴더 삭제 다시 실행
149
+ - **날씨** - OpenWeatherMap API (`companionbot setup weather`)
150
+ - **일정** - Google Calendar 연동 (`companionbot setup calendar`)
151
+ - **검색** - Brave Search API (`companionbot setup brave`)
236
152
 
237
- ## 트러블슈팅
153
+ ## 🖥️ PM2로 상시 실행
238
154
 
239
- ### 봇이 응답하지 않아요
155
+ ```bash
156
+ npm install -g pm2
157
+ pm2 start companionbot --name bot
158
+ pm2 startup && pm2 save
159
+ ```
240
160
 
241
- 1. **API 키 확인**: Anthropic API 키가 유효한지 확인
242
- 2. **토큰 확인**: Telegram Bot Token이 정확한지 확인
243
- 3. **로그 확인**: `pm2 logs companionbot` 또는 터미널 출력 확인
161
+ ## 🔒 보안
244
162
 
245
- ### "rate limit" 오류가 나요
163
+ - API 키는 OS 키체인에 저장 (macOS Keychain, Windows Credential Manager, Linux libsecret)
164
+ - 파일 접근 경로 검증 (TOCTOU 방지)
165
+ - 명령어 화이트리스트
166
+ - SSRF 방지
246
167
 
247
- - Anthropic API 사용량 한도 초과
248
- - 잠시 후 다시 시도하거나 API 플랜 업그레이드
168
+ ## 🐛 트러블슈팅
249
169
 
250
- ### Linux에서 설치 오류
170
+ ### 봇이 응답 안 해요
171
+ 1. API 키 확인
172
+ 2. `tail -f /tmp/companionbot.log` 로그 확인
251
173
 
174
+ ### Linux 설치 오류
252
175
  ```bash
253
- # keytar 의존성 설치 필요
254
176
  sudo apt-get install libsecret-1-dev # Debian/Ubuntu
255
177
  ```
256
178
 
257
- ### Google Calendar 인증 실패
258
-
259
- 1. OAuth 클라이언트 ID가 "데스크톱 앱" 유형인지 확인
260
- 2. 리디렉션 URI에 `http://localhost:3847/oauth2callback` 추가
261
- 3. `/setup calendar off` 후 `/calendar_setup`으로 다시 시도
262
-
263
- ### 온보딩이 다시 안 나와요
264
-
179
+ ### 초기화하고 싶어요
265
180
  ```bash
266
- # 페르소나 리셋
267
- # Telegram에서: /reset
268
-
269
- # 또는 완전 초기화
270
- rm -rf ~/.companionbot
271
- companionbot
181
+ rm -rf ~/.companionbot && companionbot
272
182
  ```
273
183
 
274
- ## 개발
184
+ ## 📜 버전
275
185
 
276
- ```bash
277
- npm run dev # 개발 모드 (tsx)
278
- npm run build # TypeScript 빌드
279
- npm start # 빌드된 코드 실행
280
- npm test # 테스트 실행
281
- ```
186
+ 현재: **v0.15.2**
187
+
188
+ 주요 변경:
189
+ - README 명령어 섹션 정리 (CLI/텔레그램 분리)
190
+ - 메모리 검색 → 도구 방식 (성능 개선)
191
+ - tools 모듈 분할 (15개 파일)
192
+ - Agent 메모리 누수 방지
193
+ - /help 명령어, 한국어 메시지 통일
194
+
195
+ 전체 변경 이력: [CHANGELOG.md](CHANGELOG.md)
282
196
 
283
- ## 버전 히스토리
284
-
285
- ### v0.6.0 (현재)
286
- - 🧠 시맨틱 메모리 검색 (임베딩 기반)
287
- - 💚 헬스 체크 모니터링
288
- - 🔄 자동 업데이트 알림
289
-
290
- ### v0.5.0
291
- - 🔒 보안 강화 (SSRF 방지, 경로 검증)
292
- - ✅ 테스트 추가 (vitest)
293
- - 📖 문서 개선
294
-
295
- ### v0.4.0
296
- - 🛡️ 보안 강화 (TOCTOU, 심볼릭 링크 검증)
297
- - 🧹 세션 자동 정리
298
- - 🔧 환경변수 기반 경로 설정
299
-
300
- ### v0.3.0
301
- - 🔍 웹 검색 (Brave Search API)
302
- - 🕐 Cron 스케줄링 (한국어 지원)
303
- - 🤖 서브 에이전트 (백그라운드 작업)
304
- - 🖥️ 백그라운드 명령어 실행
305
- - 📝 파일 편집 도구 추가
306
-
307
- ### v0.2.0
308
- - 📅 Google Calendar 연동
309
- - ☀️ 일일 브리핑
310
- - 💓 Heartbeat 시스템
311
- - 🌤️ 날씨 조회
312
-
313
- ### v0.1.0
314
- - 🚀 초기 릴리스
315
- - 💬 Claude 기반 대화
316
- - 🎭 페르소나 온보딩
317
- - ⏰ 리마인더
318
- - 🖼️ 이미지 분석
319
- - 🔗 링크 요약
320
-
321
- ## 라이선스
197
+ ## 📄 라이선스
322
198
 
323
199
  [MIT](LICENSE)
324
200
 
325
201
  ---
326
202
 
327
- **문제가 있거나 기능 요청이 있으면** [Issues](https://github.com/DinN0000/CompanionBot/issues)에 등록해주세요!
203
+ **Issues**: [github.com/DinN0000/CompanionBot/issues](https://github.com/DinN0000/CompanionBot/issues)