cc-memory 2.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/README.md +369 -0
- package/dist/auth.d.ts +9 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +35 -0
- package/dist/auth.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +83 -0
- package/dist/cli.js.map +1 -0
- package/dist/search.d.ts +11 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +40 -0
- package/dist/search.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +40 -0
- package/dist/server.js.map +1 -0
- package/dist/storage.d.ts +20 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +185 -0
- package/dist/storage.js.map +1 -0
- package/dist/tools.d.ts +341 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +259 -0
- package/dist/tools.js.map +1 -0
- package/dist/types.d.ts +62 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +36 -0
package/README.md
ADDED
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
# cc-memory
|
|
2
|
+
|
|
3
|
+
> マルチエージェント開発で、共有知識と専門知識を分離管理するメモリサーバー
|
|
4
|
+
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
[](https://nodejs.org/)
|
|
7
|
+
[](https://modelcontextprotocol.io/)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## コンセプト
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
Shared Scope(共有層)← 全エージェント読める、manager のみ書ける
|
|
15
|
+
├── プロジェクト要件
|
|
16
|
+
├── コーディング規約
|
|
17
|
+
└── 運用ルール
|
|
18
|
+
|
|
19
|
+
Personal Scope(個人層)← 本人のみ読み書き
|
|
20
|
+
├── Web AG: Nginx経験、フロント知識
|
|
21
|
+
├── DB AG: MySQL経験、クエリ最適化
|
|
22
|
+
└── Infra AG: k8s経験、監視設定
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
マネージャーがチーム全体の知識を **Shared Scope** に集約し、各ワーカーは自分だけの経験を **Personal Scope** に蓄積。これにより、知識の一貫性と専門性を両立します。
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 特徴
|
|
30
|
+
|
|
31
|
+
- **スコープモデル** — `shared`(共有)と `personal`(個人)の 2 層でメモリを管理
|
|
32
|
+
- **Role-based Access Control** — `manager` は全スコープ読み書き可、`worker` は shared 読み取り+自分の personal のみ
|
|
33
|
+
- **MCP 対応** — Claude Code やその他 MCP クライアントからそのまま使える
|
|
34
|
+
- **SQLite** — ローカル保存、クラウド不要、プライバシー重視
|
|
35
|
+
- **8 API endpoints** — シンプルで必要十分な API セット
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## インストール & セットアップ
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# グローバルインストール
|
|
43
|
+
npm install -g cc-memory
|
|
44
|
+
|
|
45
|
+
# データベース初期化
|
|
46
|
+
cc-memory setup
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Claude Code で使う
|
|
50
|
+
|
|
51
|
+
`~/.claude/settings.json` に以下を追加:
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"mcpServers": {
|
|
56
|
+
"cc-memory": {
|
|
57
|
+
"command": "cc-memory",
|
|
58
|
+
"args": ["serve"]
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
> `cc-memory setup` を実行すると DB ファイルが作成されます。デフォルトパスは `./cc-memory.db`(環境変数 `CC_MEMORY_DB` で変更可)。
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## MCP API 一覧
|
|
69
|
+
|
|
70
|
+
### メモリ操作(4 本)
|
|
71
|
+
|
|
72
|
+
| ツール | 説明 |
|
|
73
|
+
|--------|------|
|
|
74
|
+
| `memory_store` | メモリを保存。shared スコープは manager のみ書き込み可 |
|
|
75
|
+
| `memory_recall` | クエリでメモリを検索。関連度順にランキング |
|
|
76
|
+
| `memory_list` | スコープ内の全メモリを一覧 |
|
|
77
|
+
| `memory_delete` | メモリを削除。オーナーまたは manager のみ |
|
|
78
|
+
|
|
79
|
+
### プロジェクト管理(2 本)
|
|
80
|
+
|
|
81
|
+
| ツール | 説明 |
|
|
82
|
+
|--------|------|
|
|
83
|
+
| `project_create` | 新しいプロジェクトを作成 |
|
|
84
|
+
| `project_list` | 全プロジェクトを一覧 |
|
|
85
|
+
|
|
86
|
+
### エージェント管理(2 本)
|
|
87
|
+
|
|
88
|
+
| ツール | 説明 |
|
|
89
|
+
|--------|------|
|
|
90
|
+
| `agent_register` | エージェントをプロジェクトに登録(role: manager / worker) |
|
|
91
|
+
| `agent_list` | プロジェクト内の全エージェントを一覧 |
|
|
92
|
+
|
|
93
|
+
### パラメータ詳細
|
|
94
|
+
|
|
95
|
+
<details>
|
|
96
|
+
<summary><code>memory_store</code></summary>
|
|
97
|
+
|
|
98
|
+
| パラメータ | 型 | 必須 | 説明 |
|
|
99
|
+
|-----------|------|------|------|
|
|
100
|
+
| `scope` | `"shared" \| "personal"` | ✅ | メモリスコープ |
|
|
101
|
+
| `agent_id` | `string` | ✅ | 呼び出し元エージェント ID |
|
|
102
|
+
| `content` | `string` | ✅ | メモリ内容 |
|
|
103
|
+
| `tags` | `string[]` | - | タグ(検索用) |
|
|
104
|
+
| `project_id` | `string` | - | プロジェクト ID(デフォルト: `"default"`) |
|
|
105
|
+
|
|
106
|
+
</details>
|
|
107
|
+
|
|
108
|
+
<details>
|
|
109
|
+
<summary><code>memory_recall</code></summary>
|
|
110
|
+
|
|
111
|
+
| パラメータ | 型 | 必須 | 説明 |
|
|
112
|
+
|-----------|------|------|------|
|
|
113
|
+
| `scope` | `"shared" \| "personal" \| "all"` | ✅ | 検索スコープ |
|
|
114
|
+
| `query` | `string` | ✅ | 検索クエリ |
|
|
115
|
+
| `caller_id` | `string` | ✅* | 呼び出し元エージェント ID(権限チェック用) |
|
|
116
|
+
| `agent_id` | `string` | - | エージェント ID フィルタ |
|
|
117
|
+
| `project_id` | `string` | - | プロジェクト ID |
|
|
118
|
+
| `limit` | `number` | - | 最大件数(1-100、デフォルト: 10) |
|
|
119
|
+
|
|
120
|
+
> *`caller_id` は権限チェックのため実質必須です。
|
|
121
|
+
|
|
122
|
+
</details>
|
|
123
|
+
|
|
124
|
+
<details>
|
|
125
|
+
<summary><code>memory_list</code></summary>
|
|
126
|
+
|
|
127
|
+
| パラメータ | 型 | 必須 | 説明 |
|
|
128
|
+
|-----------|------|------|------|
|
|
129
|
+
| `scope` | `"shared" \| "personal"` | ✅ | メモリスコープ |
|
|
130
|
+
| `agent_id` | `string` | - | エージェント ID フィルタ |
|
|
131
|
+
| `project_id` | `string` | - | プロジェクト ID |
|
|
132
|
+
|
|
133
|
+
</details>
|
|
134
|
+
|
|
135
|
+
<details>
|
|
136
|
+
<summary><code>memory_delete</code></summary>
|
|
137
|
+
|
|
138
|
+
| パラメータ | 型 | 必須 | 説明 |
|
|
139
|
+
|-----------|------|------|------|
|
|
140
|
+
| `memory_id` | `string` | ✅ | 削除するメモリの ID |
|
|
141
|
+
| `caller_id` | `string` | ✅* | 呼び出し元エージェント ID |
|
|
142
|
+
| `project_id` | `string` | - | プロジェクト ID |
|
|
143
|
+
|
|
144
|
+
</details>
|
|
145
|
+
|
|
146
|
+
<details>
|
|
147
|
+
<summary><code>project_create</code></summary>
|
|
148
|
+
|
|
149
|
+
| パラメータ | 型 | 必須 | 説明 |
|
|
150
|
+
|-----------|------|------|------|
|
|
151
|
+
| `project_id` | `string` | ✅ | プロジェクト ID |
|
|
152
|
+
| `description` | `string` | ✅ | プロジェクトの説明 |
|
|
153
|
+
|
|
154
|
+
</details>
|
|
155
|
+
|
|
156
|
+
<details>
|
|
157
|
+
<summary><code>project_list</code></summary>
|
|
158
|
+
|
|
159
|
+
パラメータなし。
|
|
160
|
+
|
|
161
|
+
</details>
|
|
162
|
+
|
|
163
|
+
<details>
|
|
164
|
+
<summary><code>agent_register</code></summary>
|
|
165
|
+
|
|
166
|
+
| パラメータ | 型 | 必須 | 説明 |
|
|
167
|
+
|-----------|------|------|------|
|
|
168
|
+
| `project_id` | `string` | ✅ | プロジェクト ID |
|
|
169
|
+
| `agent_id` | `string` | ✅ | エージェント ID |
|
|
170
|
+
| `role` | `"manager" \| "worker"` | ✅ | 役割 |
|
|
171
|
+
|
|
172
|
+
</details>
|
|
173
|
+
|
|
174
|
+
<details>
|
|
175
|
+
<summary><code>agent_list</code></summary>
|
|
176
|
+
|
|
177
|
+
| パラメータ | 型 | 必須 | 説明 |
|
|
178
|
+
|-----------|------|------|------|
|
|
179
|
+
| `project_id` | `string` | ✅ | プロジェクト ID |
|
|
180
|
+
|
|
181
|
+
</details>
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## 使い方(マルチエージェントシナリオ)
|
|
186
|
+
|
|
187
|
+
### 1. プロジェクト作成
|
|
188
|
+
|
|
189
|
+
```json
|
|
190
|
+
{ "tool": "project_create", "project_id": "my-app", "description": "ECサイト開発" }
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### 2. エージェント登録
|
|
194
|
+
|
|
195
|
+
```json
|
|
196
|
+
{ "tool": "agent_register", "project_id": "my-app", "agent_id": "lead", "role": "manager" }
|
|
197
|
+
{ "tool": "agent_register", "project_id": "my-app", "agent_id": "web-worker", "role": "worker" }
|
|
198
|
+
{ "tool": "agent_register", "project_id": "my-app", "agent_id": "db-worker", "role": "worker" }
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### 3. マネージャーが共有知識を保存
|
|
202
|
+
|
|
203
|
+
```json
|
|
204
|
+
{
|
|
205
|
+
"tool": "memory_store",
|
|
206
|
+
"scope": "shared",
|
|
207
|
+
"agent_id": "lead",
|
|
208
|
+
"content": "TypeScript + Next.js で開発。ESLint strict モード必須。",
|
|
209
|
+
"tags": ["規約", "tech-stack"],
|
|
210
|
+
"project_id": "my-app"
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### 4. ワーカーが共有知識を参照 & 個人メモリに記録
|
|
215
|
+
|
|
216
|
+
```json
|
|
217
|
+
// 共有知識を検索
|
|
218
|
+
{ "tool": "memory_recall", "scope": "shared", "query": "tech-stack", "caller_id": "web-worker", "project_id": "my-app" }
|
|
219
|
+
|
|
220
|
+
// 個人メモリに作業記録を保存
|
|
221
|
+
{
|
|
222
|
+
"tool": "memory_store",
|
|
223
|
+
"scope": "personal",
|
|
224
|
+
"agent_id": "web-worker",
|
|
225
|
+
"content": "Nginx リバースプロキシ設定完了。ポート 3000 → 80 に転送。",
|
|
226
|
+
"tags": ["nginx", "infra"],
|
|
227
|
+
"project_id": "my-app"
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## スコープと権限
|
|
234
|
+
|
|
235
|
+
| 操作 | Shared Scope | Personal Scope(自分) | Personal Scope(他人) |
|
|
236
|
+
|------|:---:|:---:|:---:|
|
|
237
|
+
| **Manager 読み取り** | ✅ | ✅ | ✅ |
|
|
238
|
+
| **Manager 書き込み** | ✅ | ✅ | ❌ |
|
|
239
|
+
| **Worker 読み取り** | ✅ | ✅ | ❌ |
|
|
240
|
+
| **Worker 書き込み** | ❌ | ✅ | ❌ |
|
|
241
|
+
| **削除** | Manager のみ | オーナー or Manager | Manager のみ |
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## CLI コマンド
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
cc-memory setup # DB 初期化
|
|
249
|
+
cc-memory doctor # 環境チェック
|
|
250
|
+
cc-memory status # プロジェクト・メモリの統計表示
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
---
|
|
254
|
+
|
|
255
|
+
## 設定
|
|
256
|
+
|
|
257
|
+
### 環境変数
|
|
258
|
+
|
|
259
|
+
| 変数 | デフォルト | 説明 |
|
|
260
|
+
|------|-----------|------|
|
|
261
|
+
| `CC_MEMORY_DB` | `cc-memory.db` | SQLite データベースのパス |
|
|
262
|
+
|
|
263
|
+
### Claude Code 設定
|
|
264
|
+
|
|
265
|
+
```json
|
|
266
|
+
{
|
|
267
|
+
"mcpServers": {
|
|
268
|
+
"cc-memory": {
|
|
269
|
+
"command": "cc-memory",
|
|
270
|
+
"args": ["serve"]
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
---
|
|
277
|
+
|
|
278
|
+
## FAQ
|
|
279
|
+
|
|
280
|
+
**Q: データはどこに保存されますか?**
|
|
281
|
+
A: ローカルの SQLite ファイル(デフォルト: `./cc-memory.db`)。クラウドには送信されません。
|
|
282
|
+
|
|
283
|
+
**Q: メモリを全削除するには?**
|
|
284
|
+
A: DB ファイルを削除して `cc-memory setup` を再実行してください。
|
|
285
|
+
|
|
286
|
+
**Q: Claude Code 以外でも使えますか?**
|
|
287
|
+
A: はい。MCP プロトコルに対応した任意のクライアントから利用できます。
|
|
288
|
+
|
|
289
|
+
**Q: プロジェクトを指定しないとどうなりますか?**
|
|
290
|
+
A: `"default"` プロジェクトが自動的に使用されます(初回起動時に作成済み)。
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## v1 からの移行
|
|
295
|
+
|
|
296
|
+
v1 のコードは [`v1` ブランチ](https://github.com/0xchoux1/cc-memory/tree/v1)で保全されています。
|
|
297
|
+
|
|
298
|
+
### 主な変更点
|
|
299
|
+
|
|
300
|
+
| | v1 | v2 |
|
|
301
|
+
|---|---|---|
|
|
302
|
+
| **メモリモデル** | 3 層(Working / Episodic / Semantic) | 2 スコープ(Shared / Personal) |
|
|
303
|
+
| **アクセス制御** | チーム・API キーベース | Role-based(manager / worker) |
|
|
304
|
+
| **API 数** | 20+ ツール | 8 ツール |
|
|
305
|
+
| **同期** | Tachikoma / Git / Cloud | なし(ローカル完結) |
|
|
306
|
+
| **設計思想** | 機能豊富 | シンプル・必要十分 |
|
|
307
|
+
|
|
308
|
+
> ⚠️ v1 と v2 のデータベースには互換性がありません。v2 は新しい DB で始めてください。
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## English
|
|
313
|
+
|
|
314
|
+
### What is cc-memory?
|
|
315
|
+
|
|
316
|
+
A memory server for multi-agent development that separates **shared knowledge** from **personal expertise** using scope-based access control.
|
|
317
|
+
|
|
318
|
+
### Key Features
|
|
319
|
+
|
|
320
|
+
- **Scope model** — `shared` (team-wide, manager-writable) and `personal` (agent-private)
|
|
321
|
+
- **Role-based access** — `manager` reads/writes all; `worker` reads shared + own personal only
|
|
322
|
+
- **MCP compatible** — works with Claude Code and any MCP client
|
|
323
|
+
- **SQLite** — local storage, no cloud, privacy-first
|
|
324
|
+
- **8 API endpoints** — simple and sufficient
|
|
325
|
+
|
|
326
|
+
### Quick Start
|
|
327
|
+
|
|
328
|
+
```bash
|
|
329
|
+
npm install -g cc-memory
|
|
330
|
+
cc-memory setup
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
Add to `~/.claude/settings.json`:
|
|
334
|
+
|
|
335
|
+
```json
|
|
336
|
+
{
|
|
337
|
+
"mcpServers": {
|
|
338
|
+
"cc-memory": {
|
|
339
|
+
"command": "cc-memory",
|
|
340
|
+
"args": ["serve"]
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
### API
|
|
347
|
+
|
|
348
|
+
**Memory:** `memory_store`, `memory_recall`, `memory_list`, `memory_delete`
|
|
349
|
+
**Projects:** `project_create`, `project_list`
|
|
350
|
+
**Agents:** `agent_register`, `agent_list`
|
|
351
|
+
|
|
352
|
+
### Scope & Permissions
|
|
353
|
+
|
|
354
|
+
| Action | Shared | Own Personal | Other's Personal |
|
|
355
|
+
|--------|:---:|:---:|:---:|
|
|
356
|
+
| Manager read | ✅ | ✅ | ✅ |
|
|
357
|
+
| Manager write | ✅ | ✅ | ❌ |
|
|
358
|
+
| Worker read | ✅ | ✅ | ❌ |
|
|
359
|
+
| Worker write | ❌ | ✅ | ❌ |
|
|
360
|
+
|
|
361
|
+
### Migration from v1
|
|
362
|
+
|
|
363
|
+
v1 is preserved on the [`v1` branch](https://github.com/0xchoux1/cc-memory/tree/v1). v2 databases are not compatible with v1 — start fresh.
|
|
364
|
+
|
|
365
|
+
---
|
|
366
|
+
|
|
367
|
+
## License
|
|
368
|
+
|
|
369
|
+
MIT
|
package/dist/auth.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Storage } from "./storage.js";
|
|
2
|
+
import type { Scope, Role } from "./types.js";
|
|
3
|
+
export declare class AuthError extends Error {
|
|
4
|
+
constructor(message: string);
|
|
5
|
+
}
|
|
6
|
+
export declare function checkStorePermission(storage: Storage, projectId: string, agentId: string, scope: Scope): void;
|
|
7
|
+
export declare function checkReadPermission(storage: Storage, projectId: string, requestingAgentId: string, scope: Scope, targetAgentId?: string): void;
|
|
8
|
+
export declare function getAgentRole(storage: Storage, projectId: string, agentId: string): Role | null;
|
|
9
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE9C,qBAAa,SAAU,SAAQ,KAAK;gBACtB,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,GACX,IAAI,CASN;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,KAAK,EAAE,KAAK,EACZ,aAAa,CAAC,EAAE,MAAM,GACrB,IAAI,CAeN;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,IAAI,GAAG,IAAI,CAGb"}
|
package/dist/auth.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export class AuthError extends Error {
|
|
2
|
+
constructor(message) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = "AuthError";
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export function checkStorePermission(storage, projectId, agentId, scope) {
|
|
8
|
+
const agent = storage.getAgent(projectId, agentId);
|
|
9
|
+
if (!agent) {
|
|
10
|
+
throw new AuthError(`Agent "${agentId}" is not registered in project "${projectId}"`);
|
|
11
|
+
}
|
|
12
|
+
if (scope === "shared" && agent.role !== "manager") {
|
|
13
|
+
throw new AuthError("Only managers can write to shared scope");
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function checkReadPermission(storage, projectId, requestingAgentId, scope, targetAgentId) {
|
|
17
|
+
const agent = storage.getAgent(projectId, requestingAgentId);
|
|
18
|
+
if (!agent) {
|
|
19
|
+
throw new AuthError(`Agent "${requestingAgentId}" is not registered in project "${projectId}"`);
|
|
20
|
+
}
|
|
21
|
+
// shared: everyone can read
|
|
22
|
+
if (scope === "shared")
|
|
23
|
+
return;
|
|
24
|
+
// personal: own data or manager
|
|
25
|
+
if (scope === "personal") {
|
|
26
|
+
if (targetAgentId && targetAgentId !== requestingAgentId && agent.role !== "manager") {
|
|
27
|
+
throw new AuthError("Workers can only read their own personal memories");
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export function getAgentRole(storage, projectId, agentId) {
|
|
32
|
+
const agent = storage.getAgent(projectId, agentId);
|
|
33
|
+
return agent?.role ?? null;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=auth.js.map
|
package/dist/auth.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,UAAU,oBAAoB,CAClC,OAAgB,EAChB,SAAiB,EACjB,OAAe,EACf,KAAY;IAEZ,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,SAAS,CAAC,UAAU,OAAO,mCAAmC,SAAS,GAAG,CAAC,CAAC;IACxF,CAAC;IAED,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACnD,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAgB,EAChB,SAAiB,EACjB,iBAAyB,EACzB,KAAY,EACZ,aAAsB;IAEtB,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAC7D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,SAAS,CAAC,UAAU,iBAAiB,mCAAmC,SAAS,GAAG,CAAC,CAAC;IAClG,CAAC;IAED,4BAA4B;IAC5B,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO;IAE/B,gCAAgC;IAChC,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QACzB,IAAI,aAAa,IAAI,aAAa,KAAK,iBAAiB,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACrF,MAAM,IAAI,SAAS,CAAC,mDAAmD,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,OAAgB,EAChB,SAAiB,EACjB,OAAe;IAEf,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC;AAC7B,CAAC"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// cc-memory v2 CLI - setup, doctor, status
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
import { resolve } from "node:path";
|
|
5
|
+
import { Storage } from "./storage.js";
|
|
6
|
+
const DB_PATH = process.env.CC_MEMORY_DB ?? "cc-memory.db";
|
|
7
|
+
function setup() {
|
|
8
|
+
console.log("Setting up cc-memory v2...");
|
|
9
|
+
const storage = new Storage(DB_PATH);
|
|
10
|
+
storage.close();
|
|
11
|
+
console.log(`Database created at: ${resolve(DB_PATH)}`);
|
|
12
|
+
console.log("Setup complete.");
|
|
13
|
+
}
|
|
14
|
+
function doctor() {
|
|
15
|
+
console.log("cc-memory v2 doctor\n");
|
|
16
|
+
// Check Node version
|
|
17
|
+
const nodeVersion = process.version;
|
|
18
|
+
console.log(`Node.js: ${nodeVersion} ✅`);
|
|
19
|
+
// Check better-sqlite3
|
|
20
|
+
try {
|
|
21
|
+
require("better-sqlite3");
|
|
22
|
+
console.log("better-sqlite3: installed ✅");
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
console.log("better-sqlite3: missing ❌");
|
|
26
|
+
}
|
|
27
|
+
// Check DB
|
|
28
|
+
if (existsSync(resolve(DB_PATH))) {
|
|
29
|
+
console.log(`Database: ${resolve(DB_PATH)} ✅`);
|
|
30
|
+
try {
|
|
31
|
+
const storage = new Storage(DB_PATH);
|
|
32
|
+
const projects = storage.listProjects();
|
|
33
|
+
console.log(` Projects: ${projects.length}`);
|
|
34
|
+
storage.close();
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
console.log(` Error reading DB: ${err}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
console.log(`Database: not found (run 'cc-memory setup')`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function status() {
|
|
45
|
+
if (!existsSync(resolve(DB_PATH))) {
|
|
46
|
+
console.log("No database found. Run 'cc-memory setup' first.");
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const storage = new Storage(DB_PATH);
|
|
50
|
+
const projects = storage.listProjects();
|
|
51
|
+
console.log("cc-memory v2 status\n");
|
|
52
|
+
console.log(`Database: ${resolve(DB_PATH)}`);
|
|
53
|
+
console.log(`Projects: ${projects.length}`);
|
|
54
|
+
for (const project of projects) {
|
|
55
|
+
const agents = storage.listAgents(project.id);
|
|
56
|
+
const shared = storage.listMemories("shared", project.id);
|
|
57
|
+
const personal = storage.listMemories("personal", project.id);
|
|
58
|
+
console.log(`\n [${project.id}] ${project.description ?? ""}`);
|
|
59
|
+
console.log(` Agents: ${agents.length}`);
|
|
60
|
+
console.log(` Shared memories: ${shared.length}`);
|
|
61
|
+
console.log(` Personal memories: ${personal.length}`);
|
|
62
|
+
}
|
|
63
|
+
storage.close();
|
|
64
|
+
}
|
|
65
|
+
// Main
|
|
66
|
+
const command = process.argv[2];
|
|
67
|
+
switch (command) {
|
|
68
|
+
case "setup":
|
|
69
|
+
setup();
|
|
70
|
+
break;
|
|
71
|
+
case "doctor":
|
|
72
|
+
doctor();
|
|
73
|
+
break;
|
|
74
|
+
case "status":
|
|
75
|
+
status();
|
|
76
|
+
break;
|
|
77
|
+
default:
|
|
78
|
+
console.log("cc-memory v2 CLI");
|
|
79
|
+
console.log("Usage: cc-memory <command>");
|
|
80
|
+
console.log("Commands: setup, doctor, status");
|
|
81
|
+
process.exit(command ? 1 : 0);
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/search.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Memory } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Score a memory against a query string.
|
|
4
|
+
* Returns 0 if no match, higher = better match.
|
|
5
|
+
*/
|
|
6
|
+
export declare function scoreMemory(memory: Memory, query: string): number;
|
|
7
|
+
/**
|
|
8
|
+
* Filter and rank memories by query relevance.
|
|
9
|
+
*/
|
|
10
|
+
export declare function filterAndRank(memories: Memory[], query: string, limit: number): Memory[];
|
|
11
|
+
//# sourceMappingURL=search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAkBjE;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAOxF"}
|
package/dist/search.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// cc-memory v2 search - text-based search utilities
|
|
2
|
+
// Currently delegates to Storage.searchMemories which does keyword matching.
|
|
3
|
+
// This module exists as the extension point for future semantic search.
|
|
4
|
+
/**
|
|
5
|
+
* Score a memory against a query string.
|
|
6
|
+
* Returns 0 if no match, higher = better match.
|
|
7
|
+
*/
|
|
8
|
+
export function scoreMemory(memory, query) {
|
|
9
|
+
const terms = query.toLowerCase().split(/\s+/).filter(Boolean);
|
|
10
|
+
if (terms.length === 0)
|
|
11
|
+
return 0;
|
|
12
|
+
const text = (memory.content + " " + (memory.tags?.join(" ") ?? "")).toLowerCase();
|
|
13
|
+
let score = 0;
|
|
14
|
+
for (const term of terms) {
|
|
15
|
+
// Exact word boundary match scores higher
|
|
16
|
+
const regex = new RegExp(`\\b${escapeRegex(term)}\\b`, "i");
|
|
17
|
+
if (regex.test(text)) {
|
|
18
|
+
score += 2;
|
|
19
|
+
}
|
|
20
|
+
else if (text.includes(term)) {
|
|
21
|
+
score += 1;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return score;
|
|
25
|
+
}
|
|
26
|
+
function escapeRegex(s) {
|
|
27
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Filter and rank memories by query relevance.
|
|
31
|
+
*/
|
|
32
|
+
export function filterAndRank(memories, query, limit) {
|
|
33
|
+
return memories
|
|
34
|
+
.map((m) => ({ memory: m, score: scoreMemory(m, query) }))
|
|
35
|
+
.filter((s) => s.score > 0)
|
|
36
|
+
.sort((a, b) => b.score - a.score)
|
|
37
|
+
.slice(0, limit)
|
|
38
|
+
.map((s) => s.memory);
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,6EAA6E;AAC7E,wEAAwE;AAIxE;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,KAAa;IACvD,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEjC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACnF,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,0CAA0C;QAC1C,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5D,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,QAAkB,EAAE,KAAa,EAAE,KAAa;IAC5E,OAAO,QAAQ;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;SACzD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;SAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACjC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":""}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// cc-memory v2 - MCP Server entry point
|
|
3
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
4
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
5
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
6
|
+
import { Storage } from "./storage.js";
|
|
7
|
+
import { toolDefinitions, createToolHandler } from "./tools.js";
|
|
8
|
+
const DB_PATH = process.env.CC_MEMORY_DB ?? "cc-memory.db";
|
|
9
|
+
const storage = new Storage(DB_PATH);
|
|
10
|
+
const handleTool = createToolHandler(storage);
|
|
11
|
+
const server = new Server({ name: "cc-memory", version: "2.0.0" }, { capabilities: { tools: {} } });
|
|
12
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
13
|
+
tools: toolDefinitions,
|
|
14
|
+
}));
|
|
15
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
16
|
+
const { name, arguments: args } = request.params;
|
|
17
|
+
const result = await handleTool(name, args ?? {});
|
|
18
|
+
return {
|
|
19
|
+
content: [{ type: "text", text: result }],
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
async function main() {
|
|
23
|
+
const transport = new StdioServerTransport();
|
|
24
|
+
await server.connect(transport);
|
|
25
|
+
console.error("cc-memory v2 MCP server started");
|
|
26
|
+
}
|
|
27
|
+
main().catch((err) => {
|
|
28
|
+
console.error("Fatal:", err);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
});
|
|
31
|
+
// Cleanup on exit
|
|
32
|
+
process.on("SIGINT", () => {
|
|
33
|
+
storage.close();
|
|
34
|
+
process.exit(0);
|
|
35
|
+
});
|
|
36
|
+
process.on("SIGTERM", () => {
|
|
37
|
+
storage.close();
|
|
38
|
+
process.exit(0);
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AACA,wCAAwC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEhE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,cAAc,CAAC;AAE3D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;AACrC,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAE9C,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,EACvC,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAChC,CAAC;AAEF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAC5D,KAAK,EAAE,eAAe;CACvB,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IACjD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IAClD,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;KAC1C,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;AACnD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,kBAAkB;AAClB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Memory, Project, Agent, Scope, Role } from "./types.js";
|
|
2
|
+
export declare class Storage {
|
|
3
|
+
private db;
|
|
4
|
+
constructor(dbPath?: string);
|
|
5
|
+
private migrateCreatedBy;
|
|
6
|
+
private ensureDefaultProject;
|
|
7
|
+
createProject(id: string, description: string): Project;
|
|
8
|
+
listProjects(): Project[];
|
|
9
|
+
getProject(id: string): Project | undefined;
|
|
10
|
+
registerAgent(projectId: string, agentId: string, role: Role): Agent;
|
|
11
|
+
listAgents(projectId: string): Agent[];
|
|
12
|
+
getAgent(projectId: string, agentId: string): Agent | undefined;
|
|
13
|
+
storeMemory(projectId: string, scope: Scope, agentId: string | null, content: string, tags: string[] | null, createdBy?: string | null): Memory;
|
|
14
|
+
listMemories(scope: Scope, projectId?: string, agentId?: string): Memory[];
|
|
15
|
+
searchMemories(query: string, scope: Scope | "all", projectId?: string, agentId?: string, limit?: number): Memory[];
|
|
16
|
+
getMemory(id: string): Memory | undefined;
|
|
17
|
+
deleteMemory(id: string): boolean;
|
|
18
|
+
close(): void;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAkCtE,qBAAa,OAAO;IAClB,OAAO,CAAC,EAAE,CAAoB;gBAElB,MAAM,GAAE,MAAuB;IAW3C,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,oBAAoB;IAS5B,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAQvD,YAAY,IAAI,OAAO,EAAE;IAIzB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAK3C,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK;IAUpE,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,EAAE;IAMtC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAO/D,WAAW,CACT,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EACrB,SAAS,GAAE,MAAM,GAAG,IAAW,GAC9B,MAAM;IAYT,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;IAiB1E,cAAc,CACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,KAAK,GAAG,KAAK,EACpB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,GAAE,MAAW,GACjB,MAAM,EAAE;IAoCX,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAKzC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAKjC,KAAK,IAAI,IAAI;CAGd"}
|