n2-soul 5.0.1 β 6.0.1
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/CONTRIBUTING.md +142 -0
- package/README.ko.md +99 -19
- package/README.md +388 -21
- package/index.js +40 -3
- package/lib/ark/README.md +7 -0
- package/lib/ark/audit.js +180 -0
- package/lib/ark/examples/README.md +14 -0
- package/lib/ark/examples/autonomous.n2 +68 -0
- package/lib/ark/examples/financial.n2 +42 -0
- package/lib/ark/examples/legal.n2 +70 -0
- package/lib/ark/examples/medical.n2 +73 -0
- package/lib/ark/examples/military.n2 +73 -0
- package/lib/ark/examples/privacy.n2 +83 -0
- package/lib/ark/examples/system.n2 +35 -0
- package/lib/ark/gate.js +217 -0
- package/lib/ark/index.js +109 -0
- package/lib/ark/parser.js +249 -0
- package/lib/config.default.js +8 -0
- package/lib/kv-cache/backup.js +16 -16
- package/lib/kv-cache/compressor.js +1 -1
- package/lib/kv-cache/index.js +1 -1
- package/package.json +6 -3
- package/rules/README.md +4 -0
- package/rules/default.n2 +316 -0
- package/sequences/boot.js +10 -1
- package/test-ark-integration.js +54 -0
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# Contributing to Soul
|
|
2
|
+
|
|
3
|
+
Thank you for your interest in contributing to Soul! π§
|
|
4
|
+
|
|
5
|
+
## Getting Started
|
|
6
|
+
|
|
7
|
+
### Prerequisites
|
|
8
|
+
|
|
9
|
+
- Node.js 18+
|
|
10
|
+
- Git
|
|
11
|
+
|
|
12
|
+
### Setup
|
|
13
|
+
|
|
14
|
+
1. Fork the repository
|
|
15
|
+
2. Clone your fork:
|
|
16
|
+
```bash
|
|
17
|
+
git clone https://github.com/YOUR_USERNAME/soul.git
|
|
18
|
+
cd soul
|
|
19
|
+
```
|
|
20
|
+
3. Install dependencies:
|
|
21
|
+
```bash
|
|
22
|
+
npm install
|
|
23
|
+
```
|
|
24
|
+
4. Test your setup:
|
|
25
|
+
```bash
|
|
26
|
+
node index.js
|
|
27
|
+
```
|
|
28
|
+
You should see the MCP server start without errors (it will wait for stdin input).
|
|
29
|
+
|
|
30
|
+
## How to Contribute
|
|
31
|
+
|
|
32
|
+
### Reporting Bugs
|
|
33
|
+
|
|
34
|
+
- Open an [issue](https://github.com/choihyunsus/soul/issues) with `[Bug]` in the title
|
|
35
|
+
- Include: Node.js version, OS, MCP client (Cursor/VS Code/etc.), and steps to reproduce
|
|
36
|
+
- If possible, include the relevant Soul Board or Ledger output
|
|
37
|
+
|
|
38
|
+
### Suggesting Features
|
|
39
|
+
|
|
40
|
+
- Open an [issue](https://github.com/choihyunsus/soul/issues) with `[Feature]` in the title
|
|
41
|
+
- Describe the use case and expected behavior
|
|
42
|
+
- Bonus: include a rough API design
|
|
43
|
+
|
|
44
|
+
### Submitting Code
|
|
45
|
+
|
|
46
|
+
1. Create a feature branch:
|
|
47
|
+
```bash
|
|
48
|
+
git checkout -b feature/amazing-feature
|
|
49
|
+
```
|
|
50
|
+
2. Make your changes
|
|
51
|
+
3. Test manually with your MCP client
|
|
52
|
+
4. Commit with [Conventional Commits](https://www.conventionalcommits.org/):
|
|
53
|
+
```bash
|
|
54
|
+
git commit -m 'feat: add amazing feature'
|
|
55
|
+
```
|
|
56
|
+
5. Push and open a Pull Request:
|
|
57
|
+
```bash
|
|
58
|
+
git push origin feature/amazing-feature
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Code Guidelines
|
|
62
|
+
|
|
63
|
+
### Project Structure
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
soul/
|
|
67
|
+
βββ index.js # Entry point (MCP server setup)
|
|
68
|
+
βββ lib/ # Core libraries
|
|
69
|
+
β βββ config.js # Config loader (default + local deep merge)
|
|
70
|
+
β βββ config.default.js # Default settings (shipped)
|
|
71
|
+
β βββ soul-engine.js # Core engine
|
|
72
|
+
β βββ utils.js # Shared utilities
|
|
73
|
+
β βββ kv-cache/ # KV-Cache engine (snapshots, compression, search)
|
|
74
|
+
βββ sequences/ # Agent lifecycle
|
|
75
|
+
β βββ boot.js # n2_boot
|
|
76
|
+
β βββ work.js # n2_work_start, n2_work_claim, n2_work_log
|
|
77
|
+
β βββ end.js # n2_work_end
|
|
78
|
+
βββ tools/ # MCP tool registrations
|
|
79
|
+
β βββ brain.js # n2_brain_read/write, n2_entity_*, n2_core_*
|
|
80
|
+
β βββ kv-cache.js # n2_kv_save/load/search/backup/restore/gc
|
|
81
|
+
βββ data/ # Runtime data (gitignored, auto-created)
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Style
|
|
85
|
+
|
|
86
|
+
- **No build step** β Soul runs directly with Node.js
|
|
87
|
+
- **Minimal dependencies** β Think twice before adding a new package (currently only 3)
|
|
88
|
+
- **CommonJS** β Use `require()` / `module.exports` (not ESM)
|
|
89
|
+
- **Descriptive naming** β Functions and variables should be self-documenting
|
|
90
|
+
- **Error handling** β Always return meaningful error messages to the MCP client
|
|
91
|
+
|
|
92
|
+
### Adding a New Tool
|
|
93
|
+
|
|
94
|
+
1. Create or edit a file in `tools/`
|
|
95
|
+
2. Register the tool using the MCP SDK pattern:
|
|
96
|
+
```js
|
|
97
|
+
server.tool('n2_your_tool', 'Description', { /* zod schema */ }, async (params) => {
|
|
98
|
+
// implementation
|
|
99
|
+
return { content: [{ type: 'text', text: 'result' }] };
|
|
100
|
+
});
|
|
101
|
+
```
|
|
102
|
+
3. If it's a new file, import and register it in `index.js`
|
|
103
|
+
|
|
104
|
+
### Adding a New Sequence
|
|
105
|
+
|
|
106
|
+
1. Create or edit a file in `sequences/`
|
|
107
|
+
2. Follow the existing pattern in `boot.js` / `work.js` / `end.js`
|
|
108
|
+
3. Register in `index.js`
|
|
109
|
+
|
|
110
|
+
## Testing
|
|
111
|
+
|
|
112
|
+
Soul doesn't have a formal test suite yet β this is a great area to contribute!
|
|
113
|
+
|
|
114
|
+
Currently, testing is done by:
|
|
115
|
+
1. Starting Soul as an MCP server
|
|
116
|
+
2. Connecting from an MCP client (Cursor, VS Code, etc.)
|
|
117
|
+
3. Calling tools and verifying output
|
|
118
|
+
|
|
119
|
+
## Pull Request Guidelines
|
|
120
|
+
|
|
121
|
+
- **One feature per PR** β keep PRs focused and reviewable
|
|
122
|
+
- **Update README** if you add/change tools or features
|
|
123
|
+
- **No breaking changes** without discussion in an issue first
|
|
124
|
+
- **Keep dependencies minimal** β justify any new package
|
|
125
|
+
|
|
126
|
+
## Architecture Principles
|
|
127
|
+
|
|
128
|
+
- **Deterministic over probabilistic** β Soul forces saves/loads instead of relying on LLM decisions
|
|
129
|
+
- **Zero config by default** β Everything should work with just `node index.js`
|
|
130
|
+
- **Progressive complexity** β Simple for beginners, powerful for advanced users
|
|
131
|
+
- **Multi-agent first** β Every feature should consider concurrent agent scenarios
|
|
132
|
+
|
|
133
|
+
## Community
|
|
134
|
+
|
|
135
|
+
- π [nton2.com](https://nton2.com)
|
|
136
|
+
- π¦ [npm](https://www.npmjs.com/package/n2-soul)
|
|
137
|
+
- π [Issues](https://github.com/choihyunsus/soul/issues)
|
|
138
|
+
- βοΈ lagi0730@gmail.com
|
|
139
|
+
|
|
140
|
+
## License
|
|
141
|
+
|
|
142
|
+
By contributing, you agree that your contributions will be licensed under the [Apache-2.0 License](LICENSE).
|
package/README.ko.md
CHANGED
|
@@ -3,6 +3,18 @@
|
|
|
3
3
|
# π§ Soul
|
|
4
4
|
|
|
5
5
|
**AI μμ΄μ νΈλ μΈμ
μ΄ λλλ©΄ λͺ¨λ κ±Έ μμ΄λ²λ¦½λλ€. Soulμ΄ κ·Έκ±Έ ν΄κ²°ν©λλ€.**
|
|
6
|
+
**AI μμ΄μ νΈκ° μνν νλμ ν μλ μμ΅λλ€. Arkκ° κ·Έκ±Έ λ§μ΅λλ€.**
|
|
7
|
+
|
|
8
|
+
> ### π v6.0 μ
λ°μ΄νΈ β Ark: μ΅νμ λ°©ν¨
|
|
9
|
+
>
|
|
10
|
+
> Soul v6.0μ **Ark**κ° νμ¬λμμ΅λλ€. λͺ¨λ λꡬ νΈμΆμ κ²μ¬νκ³ μνν νλμ **μ€ν μ μ** μ°¨λ¨νλ AI μμ μμ€ν
μ
λλ€. LLM νΈμΆ μμ, ν ν° λΉμ© 0, μ§μ° μμ β MCP μλ² λ 벨μ μμ μ κ·μ λ§€μΉ.
|
|
11
|
+
>
|
|
12
|
+
> - λͺ¨λ λꡬ νΈμΆμ΄ `ark.check()`λ₯Ό ν΅κ³Ό β **무쑰건**
|
|
13
|
+
> - `enabled: false` μ΅μ
μμ β Arkλ νμ μΌμ Έ μμ (μλμ μ€κ³)
|
|
14
|
+
> - 12κ° λΈλ리μ€νΈ κ·μΉ, 125κ° ν¨ν΄, 7κ° μ
μ’
λ³ ν
νλ¦Ώ ν¬ν¨
|
|
15
|
+
> - μ기보νΈ: 4κ³μΈ΅μΌλ‘ AIκ° λ°©νλ²½μ λΉνμ±ννλ κ²μ λ°©μ§
|
|
16
|
+
>
|
|
17
|
+
> v6.0μ΄ **λ©μ΄μ λ²μ **μΈ μ΄μ : λͺ¨λ λꡬ νΈμΆμ μνΈμκ° μκ²Όμ΅λλ€. [μμΈν β](#ark--μ΅νμ-λ°©ν¨)
|
|
6
18
|
|
|
7
19
|
Cursor, VS Code Copilot λ± MCP νΈν AI μμ΄μ νΈμ μ μ±ν
μ μμν λλ§λ€, μμ΄μ νΈλ μ΄μ μ λ νλμ§ μ ν λͺ¨λ₯Έ μ± μ²μλΆν° μμν©λλ€. Soulμ μμ΄μ νΈμκ² μ΄λ° λ₯λ ₯μ λΆμ¬νλ MCP μλ²μ
λλ€:
|
|
8
20
|
|
|
@@ -12,6 +24,7 @@ Cursor, VS Code Copilot λ± MCP νΈν AI μμ΄μ νΈμ μ μ±ν
μ μμ
|
|
|
12
24
|
- ποΈ **곡μ λλ** β μ¬λ¬ μμ΄μ νΈκ° κ°μ 컨ν
μ€νΈλ₯Ό μ½κ³ μΈ μ μμ΅λλ€
|
|
13
25
|
- π·οΈ **μν°ν° λ©λͺ¨λ¦¬** β μΈλ¬Ό, νλμ¨μ΄, νλ‘μ νΈλ₯Ό μλ μΆμ ν©λλ€ (v5.0)
|
|
14
26
|
- π‘ **μ½μ΄ λ©λͺ¨λ¦¬** β μμ΄μ νΈλ³ ν΅μ¬ μ¬μ€μ΄ νμ λ‘λλ©λλ€ (v5.0)
|
|
27
|
+
- π‘οΈ **Ark** β ν ν° λΉμ© 0μΌλ‘ μνν νλμ μ°¨λ¨νλ AI μμ μμ€ν
(v6.0)
|
|
15
28
|
|
|
16
29
|
> β‘ **Soulμ N2 Browserμ μμ λΆμν νλμ
λλ€** β μ°λ¦¬κ° λ§λ€κ³ μλ AI λ€μ΄ν°λΈ λΈλΌμ°μ μ μΌλΆμμ. λ©ν° μμ΄μ νΈ μ€μΌμ€νΈλ μ΄μ
, μ€μκ° λꡬ λΌμ°ν
, μμ΄μ νΈ κ° ν΅μ λ± ν¨μ¬ λ λ§μ κΈ°λ₯λ€μ΄ νμ¬ ν
μ€νΈ μ€μ
λλ€. μ΄κ±΄ μμμ λΆκ³Όν©λλ€.
|
|
17
30
|
|
|
@@ -127,6 +140,55 @@ n2_work_end(project, title, summary, todo, entities, insights)
|
|
|
127
140
|
| **λμΌ λ°±μλ** | JSON (μμ‘΄μ± μμ) λλ SQLite (κ³ μ±λ₯) |
|
|
128
141
|
| **μλ§¨ν± κ²μ** | Ollama μλ² λ© μ°λ (nomic-embed-text, μ νμ¬ν) |
|
|
129
142
|
| **λ°±μ
/볡μ** | μ€μ κ°λ₯ν 보쑴 κΈ°κ°μ μ¦λΆ λ°±μ
|
|
|
143
|
+
| **Ark** | ν ν° λΉμ© 0μΌλ‘ μνν νλμ μ°¨λ¨νλ AI μμ μμ€ν
(v6.0) |
|
|
144
|
+
|
|
145
|
+
## Ark β μ΅νμ λ°©ν¨
|
|
146
|
+
|
|
147
|
+

|
|
148
|
+
|
|
149
|
+
λ
Έμμ λ°©μ£Όμ²λΌ β λνμμμ μ΄μλ¨λ μ΅νμ 보루.
|
|
150
|
+
|
|
151
|
+
### μ ArkμΈκ°?
|
|
152
|
+
|
|
153
|
+
| | Ark | LLM κΈ°λ° μμ | μλ² λ© κΈ°λ° |
|
|
154
|
+
|---|:---:|:---:|:---:|
|
|
155
|
+
| **ν ν° λΉμ©** | 0 | κ²μ¬λΉ 500~2,000 | κ²μ¬λΉ 100~500 |
|
|
156
|
+
| **μ§μ°** | < 1ms | 1~5μ΄ | 200~500ms |
|
|
157
|
+
| **μΆκ° μμ‘΄μ±** | 0 (μμ JS) | LLM API ν€ νμ | λ²‘ν° DB νμ |
|
|
158
|
+
| **μ€νλΌμΈ μλ** | κ°λ₯ | λΆκ° | κ²½μ°μ λ°λΌ |
|
|
159
|
+
| **νμ νμ±ν** | νμ (ν κΈ μμ) | μ νμ | μ νμ |
|
|
160
|
+
| **μ기보νΈ** | 4κ³μΈ΅ λμ | μμ | μμ |
|
|
161
|
+
| **κ·μΉ νμ** | `.n2` νμΌ (μ¬λμ΄ μ½μ μ μμ) | ν둬ννΈ μμ§λμ΄λ§ | μλ² λ© νλ |
|
|
162
|
+
| **μ
μ’
λ³ ν
νλ¦Ώ** | 7κ° λλ©μΈ ν¬ν¨ | μ§μ μμ± | μ§μ μμ± |
|
|
163
|
+
| **MCP νΈν** | λͺ¨λ νΈμ€νΈ (Cursor, VS Code, Claude Desktop) | νΈμ€νΈ νμ | νΈμ€νΈ νμ |
|
|
164
|
+
|
|
165
|
+
### ν ν° λΉμ©: 0
|
|
166
|
+
|
|
167
|
+
**μ 0μΈκ°?** Arkλ AI λͺ¨λΈ μμ΄ μλλΌ **MCP μλ² λ΄λΆ(Node.js)μμ** μ€νλκΈ° λλ¬Έμ
λλ€.
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
βββββββββββββββββββββββββββββββββββββββββ
|
|
171
|
+
β LLM (ν΄λΌμ°λ) β
|
|
172
|
+
β AI μμ΄μ νΈκ° λꡬ νΈμΆ μμ± β
|
|
173
|
+
β (ν ν°μ΄ μ¬μ©λλ κ³³) β
|
|
174
|
+
βββββββββββββββββββββ¬ββββββββββββββββββββ
|
|
175
|
+
β λꡬ νΈμΆ
|
|
176
|
+
βΌ
|
|
177
|
+
βββββββββββββββββββββββββββββββββββββββββ
|
|
178
|
+
β MCP μλ² (Node.js, λ‘컬) β
|
|
179
|
+
β β
|
|
180
|
+
β ark.check() β μμ μ κ·μ, μ¬κΈ°μ μ€ν β
|
|
181
|
+
β < 1ms λ€νΈμν¬/LLM/ν ν° μμ β
|
|
182
|
+
β β
|
|
183
|
+
β ν΅κ³Ό? βNoββΆ "BLOCKED" ν
μ€νΈ λ°ν β
|
|
184
|
+
β β β
|
|
185
|
+
β Yes ββΆ νΈλ€λ¬ μ€ν β
|
|
186
|
+
βββββββββββββββββββββββββββββββββββββββββ
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
ν΅μ¬: **ν ν° λΉμ©μ LLM λ΄λΆμμλ§ λ°μ**ν©λλ€. Arkλ ν λ¨κ³ μλ β μλ² λ 벨μ μμ΅λλ€. LLMμ΄ λꡬ νΈμΆμ 보λ΄λ©΄, Arkκ° νΈλ€λ¬ μ€ν μ μ μ κ·μμΌλ‘ κ²μ¬ν©λλ€. λ λ²μ§Έ LLM νΈμΆ μμ, API μμ² μμ, λ²‘ν° κ²μ μμ. κ·Έλ₯ λ¬Έμμ΄ λ§€μΉ.
|
|
190
|
+
|
|
191
|
+
μΈμ
λΉ 100ν λꡬ νΈμΆ κΈ°μ€, LLM κΈ°λ° μμ λλΉ **50,000~200,000 ν ν° μ κ°**.
|
|
130
192
|
|
|
131
193
|
## μ¬μ© κ°λ₯ν λꡬ
|
|
132
194
|
|
|
@@ -189,25 +251,43 @@ module.exports = {
|
|
|
189
251
|
λͺ¨λ λ°νμ λ°μ΄ν°λ `data/`μ μ μ₯λ©λλ€ (gitignored, μλ μμ±):
|
|
190
252
|
|
|
191
253
|
```
|
|
192
|
-
|
|
193
|
-
βββ
|
|
194
|
-
β
|
|
195
|
-
|
|
196
|
-
β
|
|
197
|
-
β
|
|
198
|
-
β
|
|
199
|
-
βββ
|
|
200
|
-
β
|
|
201
|
-
β
|
|
202
|
-
β
|
|
203
|
-
β
|
|
204
|
-
β
|
|
205
|
-
β
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
254
|
+
soul/
|
|
255
|
+
βββ rules/ # Ark μμ κ·μΉ (νμ±) β NEW v6.0
|
|
256
|
+
β βββ default.n2 # κΈ°λ³Έ κ·μΉμ
(125κ° ν¨ν΄)
|
|
257
|
+
βββ lib/
|
|
258
|
+
β βββ ark/ # Ark μ½μ΄ μμ§ β NEW v6.0
|
|
259
|
+
β βββ index.js # createArk() ν©ν 리
|
|
260
|
+
β βββ gate.js # SafetyGate μμ§
|
|
261
|
+
β βββ parser.js # .n2 κ·μΉ νμ
|
|
262
|
+
β βββ audit.js # κ°μ¬ λ‘κ±°
|
|
263
|
+
β βββ examples/ # μ
μ’
λ³ κ·μΉ ν
νλ¦Ώ
|
|
264
|
+
β βββ medical.n2 # μλ£ (HIPAA, μ²λ°©)
|
|
265
|
+
β βββ military.n2 # κ΅°μ¬ (κ΅μ , ν΅)
|
|
266
|
+
β βββ financial.n2 # κΈμ΅ (κ²°μ , κ±°λ)
|
|
267
|
+
β βββ legal.n2 # λ²λ₯ (κ³μ½, μμ‘)
|
|
268
|
+
β βββ privacy.n2 # κ°μΈμ 보 (GDPR, CCPA)
|
|
269
|
+
β βββ autonomous.n2 # μμ¨μ£Όν (λλ‘ , μ°¨λ)
|
|
270
|
+
β βββ system.n2 # μμ€ν
(λ°°ν¬, μΈνλΌ)
|
|
271
|
+
βββ data/
|
|
272
|
+
β βββ memory/ # 곡μ λλ (n2_brain_read/write)
|
|
273
|
+
β β βββ entities.json # μν°ν° λ©λͺ¨λ¦¬ (μλ μΆμ )
|
|
274
|
+
β β βββ core-memory/ # μ½μ΄ λ©λͺ¨λ¦¬ (μμ΄μ νΈλ³)
|
|
275
|
+
β β β βββ {agent}.json
|
|
276
|
+
β β βββ auto-extract/ # μΈμ¬μ΄νΈ (μλ μΊ‘μ²)
|
|
277
|
+
β β βββ {project}/
|
|
278
|
+
β βββ projects/ # νλ‘μ νΈλ³ μν
|
|
279
|
+
β β βββ MyProject/
|
|
280
|
+
β β βββ soul-board.json # νμ¬ μν + μΈμμΈκ³
|
|
281
|
+
β β βββ file-index.json # νμΌ νΈλ¦¬ μ€λ
μ·
|
|
282
|
+
β β βββ ledger/ # λ³κ²½ λΆκ°λ₯ν μμ
λ‘κ·Έ
|
|
283
|
+
β β βββ 2026/03/09/
|
|
284
|
+
β β βββ 001-agent.json
|
|
285
|
+
β βββ ark-audit/ # Ark μ°¨λ¨/ν΅κ³Ό λ‘κ·Έ β NEW v6.0
|
|
286
|
+
β βββ kv-cache/ # μΈμ
μ€λ
μ·
|
|
287
|
+
β βββ snapshots/ # JSON λ°±μλ
|
|
288
|
+
β βββ sqlite/ # SQLite λ°±μλ
|
|
289
|
+
β βββ embeddings/ # Ollama 벑ν°
|
|
290
|
+
β βββ backups/ # μ΄λ κ°λ₯ν λ°±μ
|
|
211
291
|
```
|
|
212
292
|
|
|
213
293
|
## μμ‘΄μ±
|