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 +120 -244
- package/dist/cli/main.js +430 -70
- package/dist/cli/setup.js +30 -8
- package/dist/config/constants.js +39 -71
- package/dist/config/features.js +85 -0
- package/dist/config/index.js +3 -37
- package/dist/config/loader.js +161 -0
- package/dist/config/secrets.js +40 -2
- package/dist/session/state.js +5 -5
- package/dist/telegram/handlers/messages.js +11 -5
- package/dist/tools/index.js +1 -1
- package/dist/tools/pathCheck.js +25 -35
- package/dist/tools/session.js +62 -80
- package/dist/utils/retry.js +7 -4
- package/package.json +3 -1
- package/templates/AGENTS.md +8 -1
package/README.md
CHANGED
|
@@ -1,327 +1,203 @@
|
|
|
1
1
|
# CompanionBot
|
|
2
2
|
|
|
3
|
-
> Claude
|
|
3
|
+
> Claude 기반 개인 AI 친구 - 텔레그램 봇
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/companionbot)
|
|
6
6
|
[](https://nodejs.org)
|
|
7
7
|
[](https://opensource.org/licenses/MIT)
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## ✨ 특징
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
11
|
+
- 🧠 **Extended Thinking** - Claude의 사고 과정 활용
|
|
12
|
+
- 🔍 **시맨틱 메모리** - 로컬 임베딩으로 관련 기억 검색
|
|
13
|
+
- ⚡ **빠른 응답** - 사전 로딩, 병렬 처리, 스마트 캐싱
|
|
14
|
+
- 🎭 **페르소나** - 이름, 성격, 말투 커스터마이징
|
|
15
|
+
- 🔧 **20+ 도구** - 파일, 웹, 일정, 메모리 등
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
- **웹 검색** - "최신 React 뉴스 검색해줘" (Brave Search API)
|
|
19
|
-
- **웹 페이지 읽기** - URL 내용을 가져와서 분석/요약
|
|
17
|
+
## 🚀 빠른 시작
|
|
20
18
|
|
|
21
|
-
### ⏰ 일정 관리
|
|
22
|
-
- **리마인더** - "10분 뒤에 알려줘"
|
|
23
|
-
- **Google Calendar 연동** - 일정 조회/추가/삭제
|
|
24
|
-
- **일일 브리핑** - 매일 아침 날씨와 일정 알림
|
|
25
|
-
- **Heartbeat** - 주기적으로 체크리스트 확인 후 알림
|
|
26
19
|
|
|
27
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
설정
|
|
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
|
-
| `/
|
|
121
|
-
| `/reset` |
|
|
72
|
+
| `/memory` | 최근 기억 보기 |
|
|
73
|
+
| `/health` | 봇 상태 확인 |
|
|
74
|
+
| `/reset` | 대화 초기화 |
|
|
122
75
|
|
|
123
|
-
### 기능
|
|
76
|
+
### 고급 기능
|
|
124
77
|
|
|
125
78
|
| 명령어 | 설명 |
|
|
126
79
|
|--------|------|
|
|
127
|
-
| `/
|
|
128
|
-
| `/
|
|
129
|
-
| `/
|
|
130
|
-
| `/
|
|
131
|
-
| `/
|
|
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
|
-
| `/
|
|
138
|
-
| `/
|
|
139
|
-
| `/
|
|
140
|
-
| `/
|
|
141
|
-
|
|
142
|
-
### 자연어 명령
|
|
90
|
+
| `/pin <메시지>` | 메시지 고정 (항상 컨텍스트에 포함) |
|
|
91
|
+
| `/pins` | 고정된 메시지 목록 |
|
|
92
|
+
| `/unpin <번호>` | 고정 해제 |
|
|
93
|
+
| `/context` | 현재 컨텍스트 상태 확인 |
|
|
143
94
|
|
|
144
|
-
|
|
95
|
+
### 자연어로도 가능
|
|
145
96
|
|
|
146
97
|
```
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
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
|
-
###
|
|
107
|
+
### AI 엔진
|
|
108
|
+
- **Claude 모델** - Sonnet 4 / Opus 4 / Haiku 3.5
|
|
109
|
+
- **Extended Thinking** - 내부 스트리밍으로 thinking 지원
|
|
110
|
+
- **도구 사용** - 20+ 도구, 병렬 실행
|
|
161
111
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
112
|
+
### 메모리 시스템
|
|
113
|
+
- **로컬 임베딩** - @xenova/transformers
|
|
114
|
+
- **하이브리드 검색** - 벡터 + 키워드 (FTS5)
|
|
115
|
+
- **한국어 최적화** - trigram tokenizer
|
|
165
116
|
|
|
166
|
-
###
|
|
117
|
+
### 일정/알림
|
|
118
|
+
- **리마인더** - 자연어로 알림 설정
|
|
119
|
+
- **Google Calendar** - 일정 조회/추가
|
|
120
|
+
- **Cron** - 반복 작업 스케줄링
|
|
121
|
+
- **브리핑/하트비트** - 주기적 알림
|
|
167
122
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
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
|
-
├──
|
|
206
|
-
├──
|
|
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
|
-
├──
|
|
214
|
-
├──
|
|
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
|
-
|
|
230
|
-
|----|-----------|
|
|
231
|
-
| macOS | Keychain Access |
|
|
232
|
-
| Windows | Credential Manager |
|
|
233
|
-
| Linux | libsecret (GNOME Keyring 등) |
|
|
147
|
+
위 CLI 명령어로 설정:
|
|
234
148
|
|
|
235
|
-
|
|
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
|
-
|
|
242
|
-
2. **토큰 확인**: Telegram Bot Token이 정확한지 확인
|
|
243
|
-
3. **로그 확인**: `pm2 logs companionbot` 또는 터미널 출력 확인
|
|
161
|
+
## 🔒 보안
|
|
244
162
|
|
|
245
|
-
|
|
163
|
+
- API 키는 OS 키체인에 저장 (macOS Keychain, Windows Credential Manager, Linux libsecret)
|
|
164
|
+
- 파일 접근 경로 검증 (TOCTOU 방지)
|
|
165
|
+
- 명령어 화이트리스트
|
|
166
|
+
- SSRF 방지
|
|
246
167
|
|
|
247
|
-
|
|
248
|
-
- 잠시 후 다시 시도하거나 API 플랜 업그레이드
|
|
168
|
+
## 🐛 트러블슈팅
|
|
249
169
|
|
|
250
|
-
###
|
|
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
|
-
###
|
|
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
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
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
|
-
|
|
203
|
+
**Issues**: [github.com/DinN0000/CompanionBot/issues](https://github.com/DinN0000/CompanionBot/issues)
|