casabot 1.0.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/.github/workflows/publish.yml +28 -0
- package/LICENSE +190 -0
- package/README.md +112 -0
- package/dist/agent/base.d.ts +5 -0
- package/dist/agent/base.js +82 -0
- package/dist/agent/tools.d.ts +4 -0
- package/dist/agent/tools.js +36 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.js +70 -0
- package/dist/cli/setup.d.ts +2 -0
- package/dist/cli/setup.js +356 -0
- package/dist/config/manager.d.ts +14 -0
- package/dist/config/manager.js +46 -0
- package/dist/config/types.d.ts +38 -0
- package/dist/config/types.js +2 -0
- package/dist/history/store.d.ts +7 -0
- package/dist/history/store.js +52 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +7 -0
- package/dist/providers/anthropic.d.ts +10 -0
- package/dist/providers/anthropic.js +98 -0
- package/dist/providers/base.d.ts +11 -0
- package/dist/providers/base.js +2 -0
- package/dist/providers/custom.d.ts +4 -0
- package/dist/providers/custom.js +9 -0
- package/dist/providers/huggingface.d.ts +6 -0
- package/dist/providers/huggingface.js +8 -0
- package/dist/providers/index.d.ts +5 -0
- package/dist/providers/index.js +25 -0
- package/dist/providers/openai.d.ts +10 -0
- package/dist/providers/openai.js +76 -0
- package/dist/providers/openrouter.d.ts +6 -0
- package/dist/providers/openrouter.js +8 -0
- package/dist/skills/loader.d.ts +4 -0
- package/dist/skills/loader.js +48 -0
- package/dist/tui/app.d.ts +4 -0
- package/dist/tui/app.js +88 -0
- package/package.json +40 -0
- package/skills/agent/SKILL.md +180 -0
- package/skills/chat/SKILL.md +165 -0
- package/skills/config/SKILL.md +168 -0
- package/skills/memory/SKILL.md +245 -0
- package/skills/service/SKILL.md +224 -0
- package/src/agent/base.ts +98 -0
- package/src/agent/tools.ts +40 -0
- package/src/cli/index.ts +81 -0
- package/src/cli/setup.ts +378 -0
- package/src/config/manager.ts +53 -0
- package/src/config/types.ts +49 -0
- package/src/history/store.ts +59 -0
- package/src/index.ts +22 -0
- package/src/providers/anthropic.ts +115 -0
- package/src/providers/base.ts +12 -0
- package/src/providers/custom.ts +11 -0
- package/src/providers/huggingface.ts +10 -0
- package/src/providers/index.ts +29 -0
- package/src/providers/openai.ts +87 -0
- package/src/providers/openrouter.ts +10 -0
- package/src/skills/loader.ts +52 -0
- package/src/tui/app.tsx +158 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 대화 관리
|
|
3
|
+
description: 대화 세션을 관리하고 외부 서비스와 연동하기 위한 매뉴얼
|
|
4
|
+
metadata:
|
|
5
|
+
casabot:
|
|
6
|
+
requires:
|
|
7
|
+
bins: []
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# 대화 관리
|
|
11
|
+
|
|
12
|
+
이 매뉴얼은 대화 세션의 생성·조회·검색 방법과 외부 서비스 연동 방법을 설명합니다.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 1. 대화 세션 관리
|
|
17
|
+
|
|
18
|
+
### 세션 구조
|
|
19
|
+
|
|
20
|
+
각 대화 세션은 `~/casabot/history/` 디렉토리에 JSON 파일로 자동 저장됩니다.
|
|
21
|
+
|
|
22
|
+
```json
|
|
23
|
+
{
|
|
24
|
+
"id": "세션 고유 ID",
|
|
25
|
+
"startedAt": "2024-01-15T09:30:00.000Z",
|
|
26
|
+
"messages": [
|
|
27
|
+
{
|
|
28
|
+
"role": "user | assistant | system | tool",
|
|
29
|
+
"content": "메시지 내용",
|
|
30
|
+
"toolCalls": [],
|
|
31
|
+
"toolCallId": ""
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 세션 생명주기
|
|
38
|
+
- **생성**: `casabot` 명령어를 실행하면 새 세션이 자동 생성됩니다.
|
|
39
|
+
- **유지**: 대화가 진행되는 동안 메시지가 자동으로 추가됩니다.
|
|
40
|
+
- **종료**: 프로그램을 종료하면 세션이 닫힙니다.
|
|
41
|
+
- **보존**: 종료 후에도 기록은 history 디렉토리에 영구 보존됩니다.
|
|
42
|
+
|
|
43
|
+
## 2. 대화 불러오기
|
|
44
|
+
|
|
45
|
+
### 최근 대화 목록 확인
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# 최근 대화 20개 (최신순)
|
|
49
|
+
ls -lt ~/casabot/history/ | head -20
|
|
50
|
+
|
|
51
|
+
# 파일명과 크기 확인
|
|
52
|
+
ls -lhS ~/casabot/history/
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 특정 대화 내용 보기
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
# 대화 전체 보기 (정리된 형태)
|
|
59
|
+
cat ~/casabot/history/<conversation-id>.json | jq '.messages[] | {role, content: .content[:100]}'
|
|
60
|
+
|
|
61
|
+
# 사용자 메시지만 보기
|
|
62
|
+
cat ~/casabot/history/<conversation-id>.json | jq '.messages[] | select(.role == "user") | .content'
|
|
63
|
+
|
|
64
|
+
# 어시스턴트 응답만 보기
|
|
65
|
+
cat ~/casabot/history/<conversation-id>.json | jq '.messages[] | select(.role == "assistant") | .content'
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 세션 메타정보 확인
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# 세션 ID와 시작 시간
|
|
72
|
+
cat ~/casabot/history/<conversation-id>.json | jq '{id, startedAt, messageCount: (.messages | length)}'
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## 3. 이전 대화 검색
|
|
76
|
+
|
|
77
|
+
### 키워드로 검색
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# 모든 대화에서 키워드 검색
|
|
81
|
+
grep -rl "검색어" ~/casabot/history/
|
|
82
|
+
|
|
83
|
+
# 키워드가 포함된 대화의 맥락 보기
|
|
84
|
+
grep -l "검색어" ~/casabot/history/*.json | while read f; do
|
|
85
|
+
echo "=== $(basename $f) ==="
|
|
86
|
+
cat "$f" | jq '.messages[] | select(.content | contains("검색어")) | {role, content: .content[:200]}'
|
|
87
|
+
done
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### 날짜로 검색
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# 특정 날짜 이후의 대화
|
|
94
|
+
find ~/casabot/history/ -name "*.json" -newermt "2024-01-15" -type f
|
|
95
|
+
|
|
96
|
+
# 오늘 대화만
|
|
97
|
+
find ~/casabot/history/ -name "*.json" -newermt "$(date +%Y-%m-%d)" -type f
|
|
98
|
+
|
|
99
|
+
# 최근 7일간 대화
|
|
100
|
+
find ~/casabot/history/ -name "*.json" -mtime -7 -type f
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### 역할별 검색
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# 도구 호출이 포함된 대화 찾기
|
|
107
|
+
grep -rl "toolCalls" ~/casabot/history/ | head -10
|
|
108
|
+
|
|
109
|
+
# 특정 도구가 사용된 대화
|
|
110
|
+
grep -rl "run_command" ~/casabot/history/
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## 4. 대화 통계
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# 전체 대화 수
|
|
117
|
+
ls ~/casabot/history/*.json 2>/dev/null | wc -l
|
|
118
|
+
|
|
119
|
+
# 가장 긴 대화 (메시지 수 기준)
|
|
120
|
+
for f in ~/casabot/history/*.json; do
|
|
121
|
+
echo "$(cat "$f" | jq '.messages | length') $(basename $f)"
|
|
122
|
+
done | sort -rn | head -10
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## 5. 외부 서비스 연동
|
|
126
|
+
|
|
127
|
+
외부 메시징 서비스(WhatsApp, Discord, Telegram, Slack 등)와 연동하여 CasAbot을 사용할 수 있습니다.
|
|
128
|
+
|
|
129
|
+
### 연동 구조
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
외부 서비스 → [연동 서브에이전트] → base 에이전트 → [작업 서브에이전트들]
|
|
133
|
+
↓
|
|
134
|
+
사용자에게 응답
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### 연동 설정 단계
|
|
138
|
+
|
|
139
|
+
1. **연동 서브에이전트 생성** — `agent` 스킬을 참조하여 연동 전용 컨테이너를 만듭니다.
|
|
140
|
+
2. **서비스 API/봇 설정** — 해당 서비스의 봇 토큰이나 웹훅 URL을 설정합니다.
|
|
141
|
+
3. **메시지 수신** — 서비스에서 메시지를 수신하면 base에게 전달합니다.
|
|
142
|
+
4. **응답 전송** — base의 응답을 서비스로 돌려보냅니다.
|
|
143
|
+
|
|
144
|
+
### 예시: 웹훅 기반 연동
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
# 연동 에이전트 생성 (agent 스킬 참조)
|
|
148
|
+
podman run -d \
|
|
149
|
+
--name webhook-bridge \
|
|
150
|
+
--label casabot=true \
|
|
151
|
+
-p 8080:8080 \
|
|
152
|
+
-v ~/casabot/workspaces/webhook-bridge:/workspace \
|
|
153
|
+
-v ~/casabot/skills:/skills:ro \
|
|
154
|
+
node:20-slim sleep infinity
|
|
155
|
+
|
|
156
|
+
# 웹훅 서버 스크립트를 에이전트에 배포
|
|
157
|
+
podman cp webhook-server.js webhook-bridge:/workspace/
|
|
158
|
+
podman exec -d webhook-bridge node /workspace/webhook-server.js
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## 6. 주의사항
|
|
162
|
+
|
|
163
|
+
- **기록은 수정하지 마세요**: `~/casabot/history/`의 파일은 원본 로그입니다. 수정이 필요하면 별도 사본을 만드세요.
|
|
164
|
+
- **메모가 필요하면 memory를 사용하세요**: 대화에서 중요한 내용을 기록하려면 `memory` 스킬을 참조하세요.
|
|
165
|
+
- **대용량 기록 관리**: 기록이 많아지면 오래된 파일을 아카이브하거나 압축하세요.
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: CasAbot 설정
|
|
3
|
+
description: CasAbot 자체의 구조와 설정을 이해하기 위한 매뉴얼
|
|
4
|
+
metadata:
|
|
5
|
+
casabot:
|
|
6
|
+
requires:
|
|
7
|
+
bins: [jq]
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# CasAbot 설정
|
|
11
|
+
|
|
12
|
+
이 매뉴얼은 CasAbot의 디렉토리 구조, 설정 파일 스키마, 공급자 관리 방법을 설명합니다.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 1. 디렉토리 구조
|
|
17
|
+
|
|
18
|
+
CasAbot의 모든 데이터는 `~/casabot/` 아래에 저장됩니다.
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
~/casabot/
|
|
22
|
+
├── casabot.json # 모든 설정 (공급자, 모델 등)
|
|
23
|
+
├── skills/ # 스킬 디렉토리 (SKILL.md 포함)
|
|
24
|
+
│ ├── agent/ # 에이전트 생성 및 관리
|
|
25
|
+
│ ├── config/ # 설정 관리 (이 문서)
|
|
26
|
+
│ ├── chat/ # 대화 관리
|
|
27
|
+
│ ├── service/ # 시스템 서비스 등록
|
|
28
|
+
│ └── memory/ # 기록(메모) 관리
|
|
29
|
+
├── workspaces/ # 에이전트별 워크스페이스
|
|
30
|
+
│ └── <agent-name>/ # 개별 에이전트 작업 디렉토리
|
|
31
|
+
│ └── output/ # 에이전트 출력 결과
|
|
32
|
+
├── history/ # 대화 전체 기록 (원본 로그, JSON)
|
|
33
|
+
└── memory/ # 에이전트가 직접 작성한 메모 (.md)
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 각 디렉토리의 역할
|
|
37
|
+
|
|
38
|
+
| 디렉토리 | 설명 | 형식 |
|
|
39
|
+
|---------|------|------|
|
|
40
|
+
| `casabot.json` | 공급자 설정, 활성 모델 등 전체 설정 | JSON |
|
|
41
|
+
| `skills/` | base 에이전트가 참조하는 스킬 매뉴얼 | SKILL.md (YAML + Markdown) |
|
|
42
|
+
| `workspaces/` | 서브에이전트 컨테이너에 마운트되는 작업 공간 | 자유 형식 |
|
|
43
|
+
| `history/` | 자동 저장되는 대화 로그 (수정 불가) | JSON |
|
|
44
|
+
| `memory/` | 에이전트가 직접 작성하는 메모 | Markdown |
|
|
45
|
+
|
|
46
|
+
## 2. casabot.json 스키마
|
|
47
|
+
|
|
48
|
+
설정 파일의 전체 구조입니다.
|
|
49
|
+
|
|
50
|
+
```json
|
|
51
|
+
{
|
|
52
|
+
"providers": [
|
|
53
|
+
{
|
|
54
|
+
"name": "공급자 이름 (고유 식별자)",
|
|
55
|
+
"type": "openai | anthropic | huggingface | openrouter | custom-openai | custom-anthropic",
|
|
56
|
+
"apiKey": "API 키",
|
|
57
|
+
"endpoint": "커스텀 엔드포인트 URL (선택, custom-* 타입에서 필수)",
|
|
58
|
+
"model": "모델 이름",
|
|
59
|
+
"isDefault": true
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"activeProvider": "현재 사용 중인 공급자 이름",
|
|
63
|
+
"baseModel": "기본 모델 이름"
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 필드 설명
|
|
68
|
+
|
|
69
|
+
| 필드 | 타입 | 필수 | 설명 |
|
|
70
|
+
|-----|------|-----|------|
|
|
71
|
+
| `providers` | 배열 | ✅ | 등록된 공급자 목록 |
|
|
72
|
+
| `providers[].name` | 문자열 | ✅ | 공급자의 고유 이름 |
|
|
73
|
+
| `providers[].type` | 문자열 | ✅ | 공급자 타입 (아래 지원 타입 참조) |
|
|
74
|
+
| `providers[].apiKey` | 문자열 | ✅ | 해당 공급자의 API 키 |
|
|
75
|
+
| `providers[].endpoint` | 문자열 | ❌ | 커스텀 엔드포인트 (custom-openai, custom-anthropic에서 필수) |
|
|
76
|
+
| `providers[].model` | 문자열 | ✅ | 사용할 모델 이름 |
|
|
77
|
+
| `providers[].isDefault` | 불리언 | ✅ | 기본 공급자 여부 |
|
|
78
|
+
| `activeProvider` | 문자열 | ✅ | 현재 활성 공급자의 name 값 |
|
|
79
|
+
| `baseModel` | 문자열 | ✅ | base 에이전트가 사용하는 모델 |
|
|
80
|
+
|
|
81
|
+
### 지원하는 공급자 타입
|
|
82
|
+
|
|
83
|
+
- `openai` — OpenAI API (GPT 시리즈)
|
|
84
|
+
- `anthropic` — Anthropic API (Claude 시리즈)
|
|
85
|
+
- `huggingface` — Hugging Face Inference API
|
|
86
|
+
- `openrouter` — OpenRouter 통합 API
|
|
87
|
+
- `custom-openai` — OpenAI 호환 커스텀 엔드포인트
|
|
88
|
+
- `custom-anthropic` — Anthropic 호환 커스텀 엔드포인트
|
|
89
|
+
|
|
90
|
+
## 3. 공급자 추가 방법
|
|
91
|
+
|
|
92
|
+
casabot.json의 `providers` 배열에 새 항목을 추가합니다.
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
# 새 공급자 추가 (jq 사용)
|
|
96
|
+
cat ~/casabot/casabot.json | jq '.providers += [{
|
|
97
|
+
"name": "my-openai",
|
|
98
|
+
"type": "openai",
|
|
99
|
+
"apiKey": "sk-...",
|
|
100
|
+
"model": "gpt-4o",
|
|
101
|
+
"isDefault": false
|
|
102
|
+
}]' > /tmp/casabot.json && mv /tmp/casabot.json ~/casabot/casabot.json
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### 커스텀 공급자 추가 예시
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
cat ~/casabot/casabot.json | jq '.providers += [{
|
|
109
|
+
"name": "local-llm",
|
|
110
|
+
"type": "custom-openai",
|
|
111
|
+
"apiKey": "not-needed",
|
|
112
|
+
"endpoint": "http://localhost:11434/v1",
|
|
113
|
+
"model": "llama3",
|
|
114
|
+
"isDefault": false
|
|
115
|
+
}]' > /tmp/casabot.json && mv /tmp/casabot.json ~/casabot/casabot.json
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## 4. 활성 공급자 변경
|
|
119
|
+
|
|
120
|
+
현재 사용하는 공급자를 변경합니다.
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
# activeProvider 변경
|
|
124
|
+
cat ~/casabot/casabot.json | jq '.activeProvider = "my-openai"' > /tmp/casabot.json && mv /tmp/casabot.json ~/casabot/casabot.json
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### baseModel도 함께 변경
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
cat ~/casabot/casabot.json | jq '
|
|
131
|
+
.activeProvider = "my-openai" |
|
|
132
|
+
.baseModel = "gpt-4o"
|
|
133
|
+
' > /tmp/casabot.json && mv /tmp/casabot.json ~/casabot/casabot.json
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## 5. 현재 설정 확인
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
# 전체 설정 보기
|
|
140
|
+
cat ~/casabot/casabot.json | jq .
|
|
141
|
+
|
|
142
|
+
# 활성 공급자만 확인
|
|
143
|
+
cat ~/casabot/casabot.json | jq '.activeProvider'
|
|
144
|
+
|
|
145
|
+
# 등록된 공급자 목록
|
|
146
|
+
cat ~/casabot/casabot.json | jq '.providers[] | {name, type, model}'
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## 6. 공급자 삭제
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
# 이름으로 공급자 삭제
|
|
153
|
+
cat ~/casabot/casabot.json | jq '.providers = [.providers[] | select(.name != "삭제할-이름")]' > /tmp/casabot.json && mv /tmp/casabot.json ~/casabot/casabot.json
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## 7. 설정 초기화
|
|
157
|
+
|
|
158
|
+
전체 설정을 초기화하려면 `casabot setup` 명령어를 다시 실행합니다.
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
casabot setup
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
또는 설정 파일을 직접 초기화합니다:
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
echo '{"providers":[],"activeProvider":"","baseModel":""}' > ~/casabot/casabot.json
|
|
168
|
+
```
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 기록
|
|
3
|
+
description: base와 서브에이전트가 기록(memory)을 작성하고 조회하기 위한 매뉴얼
|
|
4
|
+
metadata:
|
|
5
|
+
casabot:
|
|
6
|
+
requires:
|
|
7
|
+
bins: []
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# 기록 (Memory)
|
|
11
|
+
|
|
12
|
+
이 매뉴얼은 기억(History)과 기록(Memory)의 차이를 설명하고, 에이전트가 메모를 작성하고 조회하는 방법을 안내합니다.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## 1. 기억(History)과 기록(Memory)의 차이
|
|
17
|
+
|
|
18
|
+
CasAbot에는 두 가지 저장소가 있습니다. 반드시 구분하여 사용하세요.
|
|
19
|
+
|
|
20
|
+
### 기억 (History) — 대화 로그
|
|
21
|
+
|
|
22
|
+
| 항목 | 설명 |
|
|
23
|
+
|------|------|
|
|
24
|
+
| **경로** | `~/casabot/history/` |
|
|
25
|
+
| **형식** | JSON |
|
|
26
|
+
| **작성자** | 시스템 (자동 저장) |
|
|
27
|
+
| **수정 가능** | ❌ 수정 불가 |
|
|
28
|
+
| **용도** | 대화 전체의 원본 기록 |
|
|
29
|
+
| **내용** | 사용자 입력, 에이전트 응답, 도구 호출 결과 등 |
|
|
30
|
+
|
|
31
|
+
### 기록 (Memory) — 에이전트 메모
|
|
32
|
+
|
|
33
|
+
| 항목 | 설명 |
|
|
34
|
+
|------|------|
|
|
35
|
+
| **경로** | `~/casabot/memory/` |
|
|
36
|
+
| **형식** | Markdown (.md) |
|
|
37
|
+
| **작성자** | 에이전트 (직접 작성) |
|
|
38
|
+
| **수정 가능** | ✅ 자유롭게 수정 가능 |
|
|
39
|
+
| **용도** | 중요한 정보, 학습 내용, 분석 결과 등을 기록 |
|
|
40
|
+
| **내용** | 에이전트가 기억해야 할 사항 |
|
|
41
|
+
|
|
42
|
+
### 핵심 원칙
|
|
43
|
+
|
|
44
|
+
- **History는 절대 수정하지 않습니다.** 원본 대화 로그로서 보존됩니다.
|
|
45
|
+
- **Memory는 에이전트가 자유롭게 작성·수정·삭제합니다.** 중요한 정보를 정리하는 공간입니다.
|
|
46
|
+
- 대화에서 중요한 내용이 나오면, 그 내용을 Memory에 기록하세요.
|
|
47
|
+
|
|
48
|
+
## 2. 기록 파일 위치
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
~/casabot/memory/
|
|
52
|
+
├── 2024-01-15-프로젝트-분석.md
|
|
53
|
+
├── 2024-01-16-서버-설정.md
|
|
54
|
+
├── 사용자-선호도.md
|
|
55
|
+
├── 자주-사용하는-명령어.md
|
|
56
|
+
└── ...
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 3. 기록 작성 규칙
|
|
60
|
+
|
|
61
|
+
### 파일명 규칙
|
|
62
|
+
|
|
63
|
+
- **날짜 포함 (권장)**: `YYYY-MM-DD-주제.md` — 특정 시점의 기록
|
|
64
|
+
- **날짜 미포함**: `주제.md` — 지속적으로 업데이트되는 기록
|
|
65
|
+
- 한글, 영문, 숫자, 하이픈(`-`) 사용
|
|
66
|
+
- 공백 대신 하이픈 사용
|
|
67
|
+
|
|
68
|
+
### 파일 형식
|
|
69
|
+
|
|
70
|
+
모든 기록은 마크다운(.md) 형식으로 작성합니다.
|
|
71
|
+
|
|
72
|
+
### 기록 내용 구조 (권장)
|
|
73
|
+
|
|
74
|
+
```markdown
|
|
75
|
+
# 제목
|
|
76
|
+
|
|
77
|
+
- **작성자**: 에이전트 이름
|
|
78
|
+
- **날짜**: YYYY-MM-DD
|
|
79
|
+
- **태그**: #키워드1 #키워드2
|
|
80
|
+
|
|
81
|
+
## 요약
|
|
82
|
+
핵심 내용 한두 줄 요약
|
|
83
|
+
|
|
84
|
+
## 상세
|
|
85
|
+
자세한 내용...
|
|
86
|
+
|
|
87
|
+
## 관련 항목
|
|
88
|
+
- 관련 기록 파일명
|
|
89
|
+
- 관련 대화 ID
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### 기록 작성 예시
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
cat > ~/casabot/memory/2024-01-15-프로젝트-분석.md << 'EOF'
|
|
96
|
+
# 프로젝트 분석 결과
|
|
97
|
+
|
|
98
|
+
- **작성자**: code-reviewer
|
|
99
|
+
- **날짜**: 2024-01-15
|
|
100
|
+
- **태그**: #프로젝트 #코드분석
|
|
101
|
+
|
|
102
|
+
## 요약
|
|
103
|
+
사용자의 Node.js 프로젝트를 분석한 결과, Express 기반 REST API 서버이며 TypeScript를 사용합니다.
|
|
104
|
+
|
|
105
|
+
## 상세
|
|
106
|
+
- 프레임워크: Express 4.18
|
|
107
|
+
- 언어: TypeScript 5.3
|
|
108
|
+
- 데이터베이스: PostgreSQL (Prisma ORM)
|
|
109
|
+
- 테스트: Jest
|
|
110
|
+
- 주요 엔드포인트: /api/users, /api/posts, /api/auth
|
|
111
|
+
|
|
112
|
+
## 개선 제안
|
|
113
|
+
1. 에러 핸들링 미들웨어 추가
|
|
114
|
+
2. 환경변수 검증 로직 추가
|
|
115
|
+
3. API 문서화 (Swagger)
|
|
116
|
+
EOF
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 기록 업데이트 예시
|
|
120
|
+
|
|
121
|
+
지속적인 기록은 내용을 추가하거나 수정합니다:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# 기존 기록에 내용 추가
|
|
125
|
+
cat >> ~/casabot/memory/사용자-선호도.md << 'EOF'
|
|
126
|
+
|
|
127
|
+
## 2024-01-16 추가
|
|
128
|
+
- 코드 스타일: ESLint + Prettier 선호
|
|
129
|
+
- 커밋 메시지: Conventional Commits 형식 선호
|
|
130
|
+
EOF
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## 4. 기록 조회 및 검색
|
|
134
|
+
|
|
135
|
+
### 전체 기록 목록
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
# 최신순으로 기록 목록
|
|
139
|
+
ls -lt ~/casabot/memory/
|
|
140
|
+
|
|
141
|
+
# 파일명만 목록
|
|
142
|
+
ls ~/casabot/memory/
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### 키워드 검색
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
# 전체 기록에서 키워드 검색
|
|
149
|
+
grep -rl "검색어" ~/casabot/memory/
|
|
150
|
+
|
|
151
|
+
# 검색 결과와 함께 맥락 보기 (앞뒤 2줄 포함)
|
|
152
|
+
grep -rn -C 2 "검색어" ~/casabot/memory/
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### 태그 검색
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
# 태그로 기록 찾기
|
|
159
|
+
grep -rl "#프로젝트" ~/casabot/memory/
|
|
160
|
+
grep -rl "#코드분석" ~/casabot/memory/
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### 특정 기록 읽기
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
# 기록 전체 읽기
|
|
167
|
+
cat ~/casabot/memory/<filename>.md
|
|
168
|
+
|
|
169
|
+
# 제목(h1)만 모아보기
|
|
170
|
+
grep "^# " ~/casabot/memory/*.md
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### 날짜별 검색
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
# 특정 날짜 이후 수정된 기록
|
|
177
|
+
find ~/casabot/memory/ -name "*.md" -newermt "2024-01-15" -type f
|
|
178
|
+
|
|
179
|
+
# 최근 7일 내 수정된 기록
|
|
180
|
+
find ~/casabot/memory/ -name "*.md" -mtime -7 -type f
|
|
181
|
+
|
|
182
|
+
# 파일명에 날짜가 포함된 기록 검색
|
|
183
|
+
ls ~/casabot/memory/2024-01-*.md 2>/dev/null
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### 작성자별 검색
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
# 특정 에이전트가 작성한 기록
|
|
190
|
+
grep -rl "작성자.*code-reviewer" ~/casabot/memory/
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## 5. 기록 관리
|
|
194
|
+
|
|
195
|
+
### 기록 삭제
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
rm ~/casabot/memory/<filename>.md
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### 기록 백업
|
|
202
|
+
|
|
203
|
+
```bash
|
|
204
|
+
# 전체 기록 백업
|
|
205
|
+
tar czf ~/casabot-memory-backup-$(date +%Y%m%d).tar.gz ~/casabot/memory/
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### 오래된 기록 아카이브
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
# 아카이브 디렉토리 생성
|
|
212
|
+
mkdir -p ~/casabot/memory/archive
|
|
213
|
+
|
|
214
|
+
# 30일 이상 된 기록 이동
|
|
215
|
+
find ~/casabot/memory/ -maxdepth 1 -name "*.md" -mtime +30 -exec mv {} ~/casabot/memory/archive/ \;
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
## 6. 서브에이전트의 기록 작성
|
|
219
|
+
|
|
220
|
+
서브에이전트도 동일한 `~/casabot/memory/` 디렉토리에 기록을 작성할 수 있습니다. 컨테이너에 memory 디렉토리를 마운트합니다:
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
podman run -d \
|
|
224
|
+
--name <agent-name> \
|
|
225
|
+
--label casabot=true \
|
|
226
|
+
-v ~/casabot/workspaces/<agent-name>:/workspace \
|
|
227
|
+
-v ~/casabot/skills:/skills:ro \
|
|
228
|
+
-v ~/casabot/memory:/memory \
|
|
229
|
+
node:20-slim sleep infinity
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
서브에이전트 내부에서:
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
# 기록 작성
|
|
236
|
+
cat > /memory/2024-01-15-분석결과.md << 'EOF'
|
|
237
|
+
# 분석 결과
|
|
238
|
+
- **작성자**: <agent-name>
|
|
239
|
+
...
|
|
240
|
+
EOF
|
|
241
|
+
|
|
242
|
+
# 기록 조회
|
|
243
|
+
ls /memory/
|
|
244
|
+
cat /memory/<filename>.md
|
|
245
|
+
```
|