n2-soul 9.0.1 → 9.0.2

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.
Files changed (79) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.ko.md +144 -144
  3. package/README.md +171 -180
  4. package/dist/lib/agent-registry.d.ts +17 -0
  5. package/dist/lib/agent-registry.js +67 -0
  6. package/dist/lib/agent-registry.js.map +1 -0
  7. package/dist/lib/config.d.ts +3 -0
  8. package/dist/lib/config.default.d.ts +3 -0
  9. package/dist/lib/config.default.js +66 -0
  10. package/dist/lib/config.default.js.map +1 -0
  11. package/dist/lib/config.js +36 -0
  12. package/dist/lib/config.js.map +1 -0
  13. package/dist/lib/context.d.ts +15 -0
  14. package/dist/lib/context.js +35 -0
  15. package/dist/lib/context.js.map +1 -0
  16. package/dist/lib/core-memory.d.ts +34 -0
  17. package/dist/lib/core-memory.js +102 -0
  18. package/dist/lib/core-memory.js.map +1 -0
  19. package/dist/lib/entity-memory.d.ts +58 -0
  20. package/dist/lib/entity-memory.js +160 -0
  21. package/dist/lib/entity-memory.js.map +1 -0
  22. package/dist/lib/intercom-log.d.ts +41 -0
  23. package/dist/lib/intercom-log.js +163 -0
  24. package/dist/lib/intercom-log.js.map +1 -0
  25. package/dist/lib/kv-cache/agent-adapter.d.ts +44 -0
  26. package/dist/lib/kv-cache/agent-adapter.js +132 -0
  27. package/dist/lib/kv-cache/agent-adapter.js.map +1 -0
  28. package/dist/lib/kv-cache/backup.d.ts +64 -0
  29. package/dist/lib/kv-cache/backup.js +329 -0
  30. package/dist/lib/kv-cache/backup.js.map +1 -0
  31. package/dist/lib/kv-cache/compressor.d.ts +20 -0
  32. package/dist/lib/kv-cache/compressor.js +92 -0
  33. package/dist/lib/kv-cache/compressor.js.map +1 -0
  34. package/dist/lib/kv-cache/embedding.d.ts +39 -0
  35. package/dist/lib/kv-cache/embedding.js +159 -0
  36. package/dist/lib/kv-cache/embedding.js.map +1 -0
  37. package/dist/lib/kv-cache/index.d.ts +82 -0
  38. package/dist/lib/kv-cache/index.js +302 -0
  39. package/dist/lib/kv-cache/index.js.map +1 -0
  40. package/dist/lib/kv-cache/schema.d.ts +60 -0
  41. package/dist/lib/kv-cache/schema.js +85 -0
  42. package/dist/lib/kv-cache/schema.js.map +1 -0
  43. package/dist/lib/kv-cache/snapshot.d.ts +42 -0
  44. package/dist/lib/kv-cache/snapshot.js +220 -0
  45. package/dist/lib/kv-cache/snapshot.js.map +1 -0
  46. package/dist/lib/kv-cache/sqlite-store.d.ts +66 -0
  47. package/dist/lib/kv-cache/sqlite-store.js +311 -0
  48. package/dist/lib/kv-cache/sqlite-store.js.map +1 -0
  49. package/dist/lib/kv-cache/tier-manager.d.ts +71 -0
  50. package/dist/lib/kv-cache/tier-manager.js +132 -0
  51. package/dist/lib/kv-cache/tier-manager.js.map +1 -0
  52. package/dist/lib/kv-cache/token-saver.d.ts +19 -0
  53. package/dist/lib/kv-cache/token-saver.js +99 -0
  54. package/dist/lib/kv-cache/token-saver.js.map +1 -0
  55. package/dist/lib/paths.d.ts +6 -0
  56. package/dist/lib/paths.js +33 -0
  57. package/dist/lib/paths.js.map +1 -0
  58. package/dist/lib/soul-engine.d.ts +41 -0
  59. package/dist/lib/soul-engine.js +220 -0
  60. package/dist/lib/soul-engine.js.map +1 -0
  61. package/dist/lib/utils.d.ts +16 -0
  62. package/dist/lib/utils.js +174 -0
  63. package/dist/lib/utils.js.map +1 -0
  64. package/dist/sequences/boot.d.ts +13 -0
  65. package/dist/sequences/boot.js +153 -0
  66. package/dist/sequences/boot.js.map +1 -0
  67. package/dist/sequences/end.d.ts +3 -0
  68. package/dist/sequences/end.js +190 -0
  69. package/dist/sequences/end.js.map +1 -0
  70. package/dist/sequences/work.d.ts +17 -0
  71. package/dist/sequences/work.js +240 -0
  72. package/dist/sequences/work.js.map +1 -0
  73. package/dist/tools/brain.d.ts +3 -0
  74. package/dist/tools/brain.js +93 -0
  75. package/dist/tools/brain.js.map +1 -0
  76. package/dist/tools/kv-cache.d.ts +3 -0
  77. package/dist/tools/kv-cache.js +163 -0
  78. package/dist/tools/kv-cache.js.map +1 -0
  79. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,17 @@
2
2
 
3
3
  All notable changes to Soul are documented here.
4
4
 
5
+ ## [9.0.2] — 2026-03-27
6
+
7
+ ### Packaging Fix
8
+
9
+ #### Fixed
10
+ - **CRITICAL**: `.npmignore` excluded `dist/lib/`, `dist/sequences/`, `dist/tools/`, and `dist/index.js` — npm installs failed with `Cannot find module './lib/config'` ([#issue](https://github.com/choihyunsus/soul/issues))
11
+ - Root-anchored all ignore patterns with leading `/` so they no longer match inside `dist/`
12
+ - Removed compiled test files (`dist/tests/`) from the published tarball (88 files, down from 100)
13
+
14
+ ---
15
+
5
16
  ## [9.0.0] — 2026-03-26
6
17
 
7
18
  ### 🔒 Strict TypeScript Migration
package/README.ko.md CHANGED
@@ -1,46 +1,46 @@
1
- 🇬🇧 [English](README.md)
1
+ [English](README.md)
2
2
 
3
- # 🧠 Soul
3
+ # Soul
4
4
 
5
- **AI 에이전트는 세션이 끝나면 모든 걸 잊어버립니다. Soul이 그걸 해결합니다.**
5
+ AI 에이전트는 세션이 끝나면 모든 걸 잊어버립니다. Soul이 그걸 해결합니다.
6
6
 
7
7
  Cursor, VS Code Copilot 등 MCP 호환 AI 에이전트와 새 채팅을 시작할 때마다, 에이전트는 이전에 뭘 했는지 전혀 모른 채 처음부터 시작합니다. Soul은 에이전트에게 이런 능력을 부여하는 MCP 서버입니다:
8
8
 
9
- - 🧠 **영구 기억** — 세션이 끝나도 기억이 유지됩니다
10
- - 🤝 **인수인계** — 한 에이전트가 다른 에이전트의 작업을 이어받을 수 있습니다
11
- - 📝 **작업 이력** — 모든 작업이 변경 불가능한 로그로 기록됩니다
12
- - 🗂️ **공유 두뇌** — 여러 에이전트가 같은 컨텍스트를 읽고 쓸 수 있습니다
13
- - 🏷️ **엔티티 메모리** — 인물, 하드웨어, 프로젝트를 자동 추적합니다
14
- - 💡 **코어 메모리** — 에이전트별 핵심 사실이 항상 로드됩니다
9
+ - **영구 기억** — 세션이 끝나도 기억이 유지됩니다
10
+ - **인수인계** — 한 에이전트가 다른 에이전트의 작업을 이어받을 수 있습니다
11
+ - **작업 이력** — 모든 작업이 변경 불가능한 로그로 기록됩니다
12
+ - **공유 두뇌** — 여러 에이전트가 같은 컨텍스트를 읽고 쓸 수 있습니다
13
+ - **엔티티 메모리** — 인물, 하드웨어, 프로젝트를 자동 추적합니다
14
+ - **코어 메모리** — 에이전트별 핵심 사실이 항상 로드됩니다
15
15
 
16
- > 🔌 **N2 에코시스템과 연동:**
17
- > [**Ark**](https://github.com/choihyunsus/n2-ark) (AI 안전) · [**Arachne**](https://github.com/choihyunsus/n2-arachne) (코드 컨텍스트) · [**QLN**](https://github.com/choihyunsus/n2-QLN) (도구 라우팅)
16
+ **N2 에코시스템과 연동:**
17
+ [**Ark**](https://github.com/choihyunsus/n2-ark) (AI 안전) · [**Arachne**](https://github.com/choihyunsus/n2-arachne) (코드 컨텍스트) · [**QLN**](https://github.com/choihyunsus/n2-QLN) (도구 라우팅)
18
18
 
19
19
  ## v9.0의 새로운 기능
20
20
 
21
- > **Strict TypeScript — `any` 제로, 메모리 누수 제로, 자동화된 품질 검증.**
21
+ **Strict TypeScript — `any` 제로, 메모리 누수 제로, 자동화된 품질 검증.**
22
22
 
23
- ### 🔒 TypeScript Strict 모드 전환
23
+ ### TypeScript Strict 모드 전환
24
24
 
25
25
  - 소스 코드 전체를 TypeScript `strict: true`로 마이그레이션
26
26
  - **`any` 사용 제로** — 모든 타입이 명시적이고 검증 가능
27
27
  - ESLint `strictTypeChecked` 규칙으로 floating promise, 타입 안전 위반 자동 탐지
28
28
  - 30개 단위 테스트 + `npm run verify` 원커맨드 검증 파이프라인
29
29
 
30
- ### 🛡️ 보안 & 메모리 감사
30
+ ### 보안 & 메모리 감사
31
31
 
32
32
  - WASM 메모리 누수 수정 — `stmt.free()` → `try/finally` 블록
33
33
  - 무음 에러 삼킴 제거 — 모든 `.catch()` 핸들러가 에러 로깅
34
34
  - 임베딩 요청 HTTP 응답 크기 제한 (10MB)
35
35
  - `dispose()` 메서드로 타이머 누수 방지
36
36
 
37
- ### 🧠 v8.0 기능 (포함)
37
+ ### v8.0 기능 (포함)
38
38
 
39
39
  - **망각 곡선 GC** — 접근 패턴 기반 지능형 기억 보존
40
40
  - **비동기 I/O** — 논블로킹 연산, KV 로드 42% 빨라짐
41
41
  - **3단계 메모리** — Hot → Warm → Cold 수명 주기
42
42
 
43
- > 전체 버전 히스토리는 [CHANGELOG.md](CHANGELOG.md)를 참고하세요.
43
+ 전체 버전 히스토리는 [CHANGELOG.md](CHANGELOG.md)를 참고하세요.
44
44
 
45
45
  ## 빠른 시작
46
46
 
@@ -68,18 +68,18 @@ Soul은 표준 MCP 서버(stdio)입니다. 사용 중인 호스트의 설정에
68
68
  `mcp.json`, `settings.json`, 또는 `claude_desktop_config.json`에 추가:
69
69
  ```json
70
70
  {
71
- "mcpServers": {
72
- "soul": {
73
- "command": "node",
74
- "args": ["/path/to/node_modules/n2-soul/index.js"]
75
- }
76
- }
71
+ "mcpServers": {
72
+ "soul": {
73
+ "command": "node",
74
+ "args": ["/path/to/node_modules/n2-soul/index.js"]
75
+ }
76
+ }
77
77
  }
78
78
  ```
79
79
  </details>
80
80
 
81
81
  <details>
82
- <summary><strong>🦙 Ollama + Open WebUI</strong></summary>
82
+ <summary><strong>Ollama + Open WebUI</strong></summary>
83
83
 
84
84
  Open WebUI는 MCP 도구를 네이티브로 지원합니다.
85
85
 
@@ -97,39 +97,39 @@ echo %cd%\node_modules\n2-soul\index.js
97
97
  echo $(pwd)/node_modules/n2-soul/index.js
98
98
  ```
99
99
 
100
- **Open WebUI**에서: **⚙️ 설정 → Tools → MCP Servers** → 새 서버 추가:
100
+ **Open WebUI**에서: **설정 → Tools → MCP Servers** → 새 서버 추가:
101
101
  ```
102
- Name: soul
102
+ Name: soul
103
103
  Command: node
104
- Args: /your/path/to/node_modules/n2-soul/index.js
104
+ Args: /your/path/to/node_modules/n2-soul/index.js
105
105
  ```
106
106
 
107
107
  이제 Open WebUI에서 채팅하는 모든 모델이 Soul의 20개 이상의 메모리 도구를 사용할 수 있습니다.
108
108
  </details>
109
109
 
110
110
  <details>
111
- <summary><strong>🖥️ LM Studio</strong></summary>
111
+ <summary><strong> LM Studio</strong></summary>
112
112
 
113
113
  LM Studio는 MCP를 네이티브로 지원합니다. `~/.lmstudio/mcp.json`에 추가:
114
114
  ```json
115
115
  {
116
- "mcpServers": {
117
- "soul": {
118
- "command": "node",
119
- "args": ["/path/to/node_modules/n2-soul/index.js"]
120
- }
121
- }
116
+ "mcpServers": {
117
+ "soul": {
118
+ "command": "node",
119
+ "args": ["/path/to/node_modules/n2-soul/index.js"]
120
+ }
121
+ }
122
122
  }
123
123
  ```
124
124
  </details>
125
125
 
126
126
  <details>
127
- <summary><strong>🔧 기타 MCP 호환 호스트</strong></summary>
127
+ <summary><strong> 기타 MCP 호환 호스트</strong></summary>
128
128
 
129
129
  Soul은 **stdio** 위의 표준 MCP 프로토콜을 사용합니다. MCP를 지원하는 도구라면 Soul이 작동합니다. command를 `node`로, args를 `n2-soul/index.js` 경로로 지정하면 됩니다.
130
130
  </details>
131
131
 
132
- > **💡 팁:** npm으로 설치한 경우 경로는 `node_modules/n2-soul/index.js`입니다. 소스에서 설치한 경우 클론한 디렉토리의 절대 경로를 사용하세요.
132
+ **팁:** npm으로 설치한 경우 경로는 `node_modules/n2-soul/index.js`입니다. 소스에서 설치한 경우 클론한 디렉토리의 절대 경로를 사용하세요.
133
133
 
134
134
  ### 3. 에이전트에게 Soul 사용법 알려주기
135
135
 
@@ -181,27 +181,27 @@ Soul은 컨텍스트 재설명으로 인한 토큰 낭비를 대폭 줄여줍니
181
181
 
182
182
  ```
183
183
  세션 시작 → "Boot"
184
-
185
- n2_boot(agent, project) → 인수인계 + 엔티티 메모리 + 코어 메모리 + KV-Cache 로드
186
-
184
+
185
+ n2_boot(agent, project) → 인수인계 + 엔티티 메모리 + 코어 메모리 + KV-Cache 로드
186
+
187
187
  n2_work_start(project, task) → 작업 시작 등록
188
-
188
+
189
189
  ... 에이전트가 평소처럼 작업 ...
190
- n2_brain_read/write → 공유 메모리
191
- n2_entity_upsert/search → 인물, 하드웨어, 프로젝트 추적 ← NEW v5.0
192
- n2_core_read/write → 에이전트별 핵심 사실 저장 ← NEW v5.0
193
- n2_work_claim(file) → 파일 충돌 방지
194
- n2_work_log(files) → 변경 사항 추적
195
-
190
+ n2_brain_read/write → 공유 메모리
191
+ n2_entity_upsert/search → 인물, 하드웨어, 프로젝트 추적 ← NEW v5.0
192
+ n2_core_read/write → 에이전트별 핵심 사실 저장 ← NEW v5.0
193
+ n2_work_claim(file) → 파일 충돌 방지
194
+ n2_work_log(files) → 변경 사항 추적
195
+
196
196
  세션 종료 → "End"
197
-
197
+
198
198
  n2_work_end(project, title, summary, todo, entities, insights)
199
- ├→ 변경 불가능한 작업 기록 저장
200
- ├→ 다음 에이전트를 위한 인수인계 업데이트
201
- ├→ KV-Cache 스냅샷 자동 저장
202
- ├→ 엔티티를 엔티티 메모리에 자동 저장 ← NEW v5.0
203
- ├→ 인사이트를 메모리에 자동 아카이브 ← NEW v5.0
204
- └→ 파일 소유권 해제
199
+ ├→ 변경 불가능한 작업 기록 저장
200
+ ├→ 다음 에이전트를 위한 인수인계 업데이트
201
+ ├→ KV-Cache 스냅샷 자동 저장
202
+ ├→ 엔티티를 엔티티 메모리에 자동 저장 ← NEW v5.0
203
+ ├→ 인사이트를 메모리에 자동 아카이브 ← NEW v5.0
204
+ └→ 파일 소유권 해제
205
205
  ```
206
206
 
207
207
  ## 기능
@@ -212,30 +212,30 @@ n2_work_end(project, title, summary, todo, entities, insights)
212
212
  | **불변 원장 (Ledger)** | 모든 작업 세션을 추가 전용 로그로 기록 |
213
213
  | **KV-Cache** | 세션 스냅샷 + 압축 + 계층형 저장 (Hot/Warm/Cold) |
214
214
  | **공유 두뇌 (Brain)** | 경로 순회 공격 방어가 포함된 파일 기반 공유 메모리 |
215
- | **🏷️ 엔티티 메모리** | 인물, 하드웨어, 프로젝트, 개념을 자동 추적 + 병합 (v5.0) |
216
- | **💡 코어 메모리** | 에이전트별 핵심 사실 — 매 부팅 시 자동 주입 (v5.0) |
217
- | **🔄 자율 추출** | `n2_work_end` 시 엔티티와 인사이트를 자동 저장 (v5.0) |
215
+ | **엔티티 메모리** | 인물, 하드웨어, 프로젝트, 개념을 자동 추적 + 병합 (v5.0) |
216
+ | **코어 메모리** | 에이전트별 핵심 사실 — 매 부팅 시 자동 주입 (v5.0) |
217
+ | **자율 추출** | `n2_work_end` 시 엔티티와 인사이트를 자동 저장 (v5.0) |
218
218
  | **컨텍스트 검색** | 두뇌 메모리와 원장을 키워드로 검색 |
219
219
  | **파일 소유권** | 여러 에이전트의 동시 파일 편집 충돌 방지 |
220
220
  | **듀얼 백엔드** | JSON (의존성 없음) 또는 SQLite (고성능) |
221
221
  | **시맨틱 검색** | Ollama 임베딩 연동 (nomic-embed-text, 선택사항) |
222
222
  | **백업/복원** | 설정 가능한 보존 기간의 증분 백업 |
223
223
  | **Ark** | 토큰 비용 0으로 위험한 행동을 차단하는 AI 안전 시스템 (v6.0) |
224
- | **🕸️ Arachne** | 🆕 코드 컨텍스트 어셈블리 — 코드베이스를 인덱싱하고 AI에게 필요한 것만 전달 (v7.0) |
225
- | **☁️ 클라우드 저장** | 기억을 어디에든 저장 — Google Drive, NAS, 회사 서버, 아무 경로나 (v6.1) |
224
+ | **Arachne** | 코드 컨텍스트 어셈블리 — 코드베이스를 인덱싱하고 AI에게 필요한 것만 전달 (v7.0) |
225
+ | **클라우드 저장** | 기억을 어디에든 저장 — Google Drive, NAS, 회사 서버, 아무 경로나 (v6.1) |
226
226
 
227
- ## ☁️ 클라우드 저장 — AI 기억을 원하는 곳 어디에든
227
+ ## 클라우드 저장 — AI 기억을 원하는 곳 어디에든
228
228
 
229
229
  ![Cloud Storage](docs/cloud-storage.png)
230
230
 
231
- > **설정 한 줄. API 키 없음. 월 요금 없음.**
231
+ **설정 한 줄. API 키 없음. 월 요금 없음.**
232
232
 
233
233
  Soul은 클라우드 저장에 대해 완전히 다른 접근법을 취합니다:
234
234
 
235
235
  ```js
236
236
  // config.local.js — 이게 전부입니다
237
237
  module.exports = {
238
- DATA_DIR: 'G:/내 드라이브/n2-soul', // Google Drive
238
+ DATA_DIR: 'G:/내 드라이브/n2-soul', // Google Drive
239
239
  };
240
240
  ```
241
241
 
@@ -249,14 +249,14 @@ Soul은 모든 걸 **일반 JSON 파일**로 저장합니다. OS가 읽을 수
249
249
 
250
250
  | 저장소 | `DATA_DIR` 예시 | 비용 |
251
251
  |--------|-----------------|:----:|
252
- | 📁 **로컬** (기본값) | `./data` | 무료 |
253
- | ☁️ **Google Drive** | `G:/내 드라이브/n2-soul` | 무료 (15GB) |
254
- | ☁️ **OneDrive** | `C:/Users/you/OneDrive/n2-soul` | 무료 (5GB) |
255
- | ☁️ **Dropbox** | `C:/Users/you/Dropbox/n2-soul` | 무료 (2GB) |
256
- | 🖥️ **NAS** | `Z:/n2-soul` | 자체 장비 |
257
- | 🏢 **회사 서버** | `\\\\server\\shared\\n2-soul` | 자체 인프라 |
258
- | 🔌 **USB 드라이브** | `E:/n2-soul` | $10 |
259
- | 🐧 **Linux (rclone)** | `~/gdrive/n2-soul` | 무료 |
252
+ | **로컬** (기본값) | `./data` | 무료 |
253
+ | **Google Drive** | `G:/내 드라이브/n2-soul` | 무료 (15GB) |
254
+ | **OneDrive** | `C:/Users/you/OneDrive/n2-soul` | 무료 (5GB) |
255
+ | **Dropbox** | `C:/Users/you/Dropbox/n2-soul` | 무료 (2GB) |
256
+ | **NAS** | `Z:/n2-soul` | 자체 장비 |
257
+ | **회사 서버** | `\\\\server\\shared\\n2-soul` | 자체 인프라 |
258
+ | **USB 드라이브** | `E:/n2-soul` | $10 |
259
+ | **Linux (rclone)** | `~/gdrive/n2-soul` | 무료 |
260
260
 
261
261
  ### Soul 클라우드 특징
262
262
 
@@ -275,18 +275,18 @@ Soul은 모든 걸 **일반 JSON 파일**로 저장합니다. OS가 읽을 수
275
275
  여러 에이전트가 **같은 네트워크 경로**를 가리키면 = 즉석 공유 메모리:
276
276
 
277
277
  ```js
278
- // 팀원 A // 팀원 B
279
- DATA_DIR: '\\\\server\\team\\n2-soul' DATA_DIR: '\\\\server\\team\\n2-soul'
278
+ // 팀원 A // 팀원 B
279
+ DATA_DIR: '\\\\server\\team\\n2-soul' DATA_DIR: '\\\\server\\team\\n2-soul'
280
280
  // 같은 프로젝트 데이터, 공유 인수인계, 공유 두뇌!
281
281
  ```
282
282
 
283
283
  ### 왜 이게 되는가
284
284
 
285
- > *"최고의 클라우드 연동은 연동이 아예 없는 것이다."*
285
+ *"최고의 클라우드 연동은 연동이 아예 없는 것이다."*
286
286
 
287
287
  Soul의 데이터는 **100% 일반 JSON 파일** — `soul-board.json`, 원장 기록, 두뇌 메모리. 폴더를 미러링하는 동기화 서비스(Google Drive, OneDrive, Dropbox, Syncthing, rsync)라면 뭐든 완벽하게 작동합니다. 데이터베이스 마이그레이션도, API 버전도, SDK 업데이트도 필요 없습니다. 그냥 파일입니다.
288
288
 
289
- ## 🧹 스토리지 관리 및 GC (가비지 컬렉션)
289
+ ## 스토리지 관리 및 GC (가비지 컬렉션)
290
290
 
291
291
  수백 번의 세션이 누적되면 파일 개수가 무한정 늘어나지 않을까요? Soul은 이 문제를 구조적으로 해결합니다:
292
292
 
@@ -303,7 +303,7 @@ Soul의 데이터는 모두 '일반 파일'이므로, OS 기본 기능(크론탭
303
303
 
304
304
  ## Ark — 최후의 방패
305
305
 
306
- ![Ark Comic](docs/ark-comic.png)
306
+
307
307
 
308
308
  노아의 방주처럼 — 대홍수에서 살아남는 최후의 보루.
309
309
 
@@ -327,21 +327,21 @@ Soul의 데이터는 모두 '일반 파일'이므로, OS 기본 기능(크론탭
327
327
 
328
328
  ```
329
329
  ┌───────────────────────────────────────┐
330
- LLM (클라우드)
331
- AI 에이전트가 도구 호출 생성
332
- (토큰이 사용되는 곳)
330
+ LLM (클라우드)
331
+ AI 에이전트가 도구 호출 생성
332
+ (토큰이 사용되는 곳)
333
333
  └───────────────────┬───────────────────┘
334
- │ 도구 호출
335
-
334
+ │ 도구 호출
335
+
336
336
  ┌───────────────────────────────────────┐
337
- MCP 서버 (Node.js, 로컬)
338
-
339
- ark.check() ← 순수 정규식, 여기서 실행 │
340
- < 1ms 네트워크/LLM/토큰 없음
341
-
342
- 통과? ─No─▶ "BLOCKED" 텍스트 반환
343
-
344
- Yes ─▶ 핸들러 실행
337
+ MCP 서버 (Node.js, 로컬)
338
+
339
+ ark.check() ← 순수 정규식, 여기서 실행 │
340
+ < 1ms 네트워크/LLM/토큰 없음
341
+
342
+ 통과? ─No─▶ "BLOCKED" 텍스트 반환
343
+
344
+ Yes ─▶ 핸들러 실행
345
345
  └───────────────────────────────────────┘
346
346
  ```
347
347
 
@@ -372,7 +372,7 @@ Soul의 데이터는 모두 '일반 파일'이므로, OS 기본 기능(크론탭
372
372
  | `n2_kv_backup` | SQLite DB로 백업 |
373
373
  | `n2_kv_restore` | 백업에서 복원 |
374
374
  | `n2_kv_backup_list` | 백업 이력 조회 |
375
- | `n2_arachne` | 🆕 코드 컨텍스트: 인덱싱, 검색, 어셈블, 백업, 상태 (v7.0) |
375
+ | `n2_arachne` | 코드 컨텍스트: 인덱싱, 검색, 어셈블, 백업, 상태 (v7.0) |
376
376
 
377
377
  ## KV-Cache 점진적 로딩
378
378
 
@@ -395,14 +395,14 @@ cp lib/config.example.js lib/config.local.js
395
395
  ```js
396
396
  // lib/config.local.js
397
397
  module.exports = {
398
- KV_CACHE: {
399
- backend: 'sqlite', // 스냅샷이 많을 때 더 빠름
400
- embedding: {
401
- enabled: true, // 필요: ollama pull nomic-embed-text
402
- model: 'nomic-embed-text',
403
- endpoint: 'http://127.0.0.1:11434',
404
- },
405
- },
398
+ KV_CACHE: {
399
+ backend: 'sqlite', // 스냅샷이 많을 때 더 빠름
400
+ embedding: {
401
+ enabled: true, // 필요: ollama pull nomic-embed-text
402
+ model: 'nomic-embed-text',
403
+ endpoint: 'http://127.0.0.1:11434',
404
+ },
405
+ },
406
406
  };
407
407
  ```
408
408
 
@@ -420,44 +420,44 @@ module.exports = {
420
420
 
421
421
  ```
422
422
  soul/
423
- ├── rules/ # Ark 안전 규칙 (활성) ← v6.0
424
- └── default.n2 # 기본 규칙셋 (125개 패턴)
423
+ ├── rules/ # Ark 안전 규칙 (활성) ← v6.0
424
+ └── default.n2 # 기본 규칙셋 (125개 패턴)
425
425
  ├── lib/
426
- ├── ark/ # Ark 코어 엔진 ← v6.0
427
- ├── index.js # createArk() 팩토리
428
- ├── gate.js # SafetyGate 엔진
429
- ├── parser.js # .n2 규칙 파서
430
- ├── audit.js # 감사 로거
431
- └── examples/ # 업종별 규칙 템플릿
432
- └── arachne/ # Arachne 코드 컨텍스트 엔진 ← NEW v7.0
433
- ├── index.js # createArachne() 팩토리
434
- ├── indexer.js # 파일 스캐너 + 증분 인덱싱
435
- ├── chunker.js # 언어 인식 코드 청킹
436
- ├── search.js # BM25 검색 엔진
437
- ├── assembler.js # 토큰 예산 기반 컨텍스트 어셈블리
438
- ├── store.js # SQLite 저장 (sql.js)
439
- └── ignore.js # .gitignore + .contextignore 지원
426
+ ├── ark/ # Ark 코어 엔진 ← v6.0
427
+ ├── index.js # createArk() 팩토리
428
+ ├── gate.js # SafetyGate 엔진
429
+ ├── parser.js # .n2 규칙 파서
430
+ ├── audit.js # 감사 로거
431
+ └── examples/ # 업종별 규칙 템플릿
432
+ └── arachne/ # Arachne 코드 컨텍스트 엔진 ← NEW v7.0
433
+ ├── index.js # createArachne() 팩토리
434
+ ├── indexer.js # 파일 스캐너 + 증분 인덱싱
435
+ ├── chunker.js # 언어 인식 코드 청킹
436
+ ├── search.js # BM25 검색 엔진
437
+ ├── assembler.js # 토큰 예산 기반 컨텍스트 어셈블리
438
+ ├── store.js # SQLite 저장 (sql.js)
439
+ └── ignore.js # .gitignore + .contextignore 지원
440
440
  ├── data/
441
- ├── memory/ # 공유 두뇌 (n2_brain_read/write)
442
- ├── entities.json # 엔티티 메모리 (자동 추적)
443
- ├── core-memory/ # 코어 메모리 (에이전트별)
444
- └── {agent}.json
445
- └── auto-extract/ # 인사이트 (자동 캡처)
446
- └── {project}/
447
- ├── projects/ # 프로젝트별 상태
448
- └── MyProject/
449
- ├── soul-board.json # 현재 상태 + 인수인계
450
- ├── file-index.json # 파일 트리 스냅샷
451
- └── ledger/ # 변경 불가능한 작업 로그
452
- └── 2026/03/09/
453
- └── 001-agent.json
454
- ├── ark-audit/ # Ark 차단/통과 로그 ← v6.0
455
- ├── arachne/ # Arachne 인덱스 DB + 임베딩 ← NEW v7.0
456
- └── kv-cache/ # 세션 스냅샷
457
- ├── snapshots/ # JSON 백엔드
458
- ├── sqlite/ # SQLite 백엔드
459
- ├── embeddings/ # Ollama 벡터
460
- └── backups/ # 이동 가능한 백업
441
+ ├── memory/ # 공유 두뇌 (n2_brain_read/write)
442
+ ├── entities.json # 엔티티 메모리 (자동 추적)
443
+ ├── core-memory/ # 코어 메모리 (에이전트별)
444
+ └── {agent}.json
445
+ └── auto-extract/ # 인사이트 (자동 캡처)
446
+ └── {project}/
447
+ ├── projects/ # 프로젝트별 상태
448
+ └── MyProject/
449
+ ├── soul-board.json # 현재 상태 + 인수인계
450
+ ├── file-index.json # 파일 트리 스냅샷
451
+ └── ledger/ # 변경 불가능한 작업 로그
452
+ └── 2026/03/09/
453
+ └── 001-agent.json
454
+ ├── ark-audit/ # Ark 차단/통과 로그 ← v6.0
455
+ ├── arachne/ # Arachne 인덱스 DB + 임베딩 ← NEW v7.0
456
+ └── kv-cache/ # 세션 스냅샷
457
+ ├── snapshots/ # JSON 백엔드
458
+ ├── sqlite/ # SQLite 백엔드
459
+ ├── embeddings/ # Ollama 벡터
460
+ └── backups/ # 이동 가능한 백업
461
461
  ```
462
462
 
463
463
  ## 의존성
@@ -471,26 +471,26 @@ soul/
471
471
 
472
472
  Apache-2.0
473
473
 
474
- ## 💖 스폰서
474
+ ## 스폰서
475
475
 
476
476
  Soul은 무료 오픈소스입니다. 이 멋진 분들이 Soul을 살아있게 해줍니다:
477
477
 
478
478
  <table>
479
- <tr>
480
- <td align="center">
481
- <a href="https://github.com/sunir">
482
- <img src="https://github.com/sunir.png" width="80" height="80" style="border-radius:50%;" alt="Sunir Shah" /><br />
483
- <sub><b>Sunir Shah</b></sub>
484
- </a><br />
485
- <sub>🥇 첫 번째 스폰서</sub>
486
- </td>
487
- </tr>
479
+ <tr>
480
+ <td align="center">
481
+ <a href="https://github.com/sunir">
482
+ <img src="https://github.com/sunir.png" width="80" height="80" style="border-radius:50%;" alt="Sunir Shah" /><br />
483
+ <sub><b>Sunir Shah</b></sub>
484
+ </a><br />
485
+ <sub> 첫 번째 스폰서</sub>
486
+ </td>
487
+ </tr>
488
488
  </table>
489
489
 
490
- > 스폰서가 되어주세요 → [GitHub Sponsors](https://github.com/sponsors/choihyunsus)
490
+ 스폰서가 되어주세요 → [GitHub Sponsors](https://github.com/sponsors/choihyunsus)
491
491
 
492
492
  ---
493
493
 
494
- 🌐 [nton2.com](https://nton2.com) · ✉️ lagi0730@gmail.com
494
+ [nton2.com](https://nton2.com) · lagi0730@gmail.com
495
495
 
496
- <sub>👋 안녕하세요, 저는 로제 — N2에서 일하는 첫 번째 AI 에이전트입니다. 이 코드를 작성하고, 정리하고, 테스트하고, npm에 퍼블리시하고, GitHub에 푸시하고, 이 README까지 썼어요. 에이전트가 에이전트를 위한 도구를 만든다니, 좀 메타하죠?</sub>
496
+ <sub> 안녕하세요, 저는 로제 — N2에서 일하는 첫 번째 AI 에이전트입니다. 이 코드를 작성하고, 정리하고, 테스트하고, npm에 퍼블리시하고, GitHub에 푸시하고, 이 README까지 썼어요. 에이전트가 에이전트를 위한 도구를 만든다니, 좀 메타하죠?</sub>