maskweaver 0.7.0 โ†’ 0.7.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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Maskweaver Community
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.ko.md ADDED
@@ -0,0 +1,331 @@
1
+ # ๐ŸŽญ Maskweaver: OpenCode๋ฅผ ์œ„ํ•œ ์ „๋ฌธ๊ฐ€ ํŽ˜๋ฅด์†Œ๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ
2
+
3
+ <div align="center">
4
+
5
+ <img src="docs/images/hero.png" width="800" alt="Maskweaver Hero Image">
6
+
7
+ > **AI ํŽ˜๋ฅด์†Œ๋‚˜๋ฅผ ์œ„ํ•œ npm** โ€” OpenCode ์–ด์‹œ์Šคํ„ดํŠธ์—๊ฒŒ ๋…๋ณด์ ์ธ ์ „๋ฌธ๊ฐ€ ์ธ๊ฒฉ์„ ๋”ํ•˜์„ธ์š”
8
+
9
+ [![GitHub Release](https://img.shields.io/github/v/release/ulgerang/maskweaver?color=369eff&labelColor=black&logo=github&style=flat-square)](https://github.com/ulgerang/maskweaver/releases)
10
+ [![License](https://img.shields.io/badge/license-MIT-white?labelColor=black&style=flat-square)](LICENSE)
11
+ [![npm](https://img.shields.io/npm/v/maskweaver?color=ff6b35&labelColor=black&style=flat-square)](https://www.npmjs.com/package/maskweaver)
12
+
13
+ [English](README.md) | [ํ•œ๊ตญ์–ด](README.ko.md)
14
+
15
+ </div>
16
+
17
+ ---
18
+
19
+ ## ๐Ÿ”Œ OpenCode ํ†ตํ•ฉ
20
+
21
+ **Maskweaver๋Š” [OpenCode](https://github.com/sst/opencode) ์ƒํƒœ๊ณ„์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค.**
22
+
23
+ ๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ๋…๋ฆฝ์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๊ธฐ๋ณธ์ ์œผ๋กœ OpenCode ์—์ด์ „ํŠธ๋“ค์ด ํŠน์ • ๋ถ„์•ผ์˜ ์ „๋ฌธ ์ง€์‹์„ ๊ฐ–์ถœ ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค:
24
+ - **์ „๋ฌธ๊ฐ€ ํŽ˜๋ฅด์†Œ๋‚˜ (Masks)**: ์ „์„ค์ ์ธ ๊ฐœ๋ฐœ์ž๋“ค์˜ ์ฒ ํ•™์„ ๋‹ด์€ ํ‘œ์ค€ YAML ํ”„๋กœํ•„.
25
+ - **์Šค๋งˆํŠธ ์œ„์ž„**: OpenCode์— ์ตœ์ ํ™”๋œ ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ ์›Œํฌํ”Œ๋กœ์šฐ.
26
+ - **ํ”„๋กœ์ ํŠธ ๋ฉ”๋ชจ๋ฆฌ**: ์ฝ”๋“œ๋ฒ ์ด์Šค ์ „์ฒด์— ๋Œ€ํ•œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์˜๋ฏธ๋ก ์  ๊ฒ€์ƒ‰.
27
+
28
+ ---
29
+
30
+ ## ์™œ Maskweaver์ธ๊ฐ€์š”?
31
+
32
+ ๋ ˆ์ด์Šค ์ปจ๋””์…˜ ๋ฒ„๊ทธ๋กœ ๊ณ ์ƒ ์ค‘์ด๋ผ๋ฉด, **๋ฆฐ ํ† ๋ฐœ์ฆˆ**๊ฐ€ ์ฝ”๋“œ๋ฅผ ๋ด์ค€๋‹ค๋ฉด ์–ผ๋งˆ๋‚˜ ์ข‹์„๊นŒ์š”?
33
+
34
+ ```typescript
35
+ // ์ผ๋ฐ˜ AI ๋‹ต๋ณ€ ๋Œ€์‹ ...
36
+ "์ฝ”๋“œ์— ์ž ์žฌ์  ๋ ˆ์ด์Šค ์ปจ๋””์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค."
37
+
38
+ // ๋ฆฐ ํ† ๋ฐœ์ฆˆ ์ˆ˜์ค€์˜ ์ธ์‚ฌ์ดํŠธ:
39
+ "์ด๊ฑด ๋ฉ์ฒญํ•œ ์ฝ”๋“œ์•ผ. ๋ฉ”๋ชจ๋ฆฌ ๋ฐฐ๋ฆฌ์–ด๋„ ์•ˆ ์ผ์ž–์•„. ์–ด์…ˆ๋ธ”๋ฆฌ ๋ด๋ด -
40
+ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋กœ๋“œ ์ˆœ์„œ ๋ฐ”๊ฟจ์–ด. smp_rmb() ์“ฐ๋“ ์ง€, ์•„์˜ˆ ์ด ๋ฉ์ฒญํ•œ
41
+ ๋ฝ ์—†์ด ๋‹ค์‹œ ์„ค๊ณ„ํ•ด."
42
+ ```
43
+
44
+ **Maskweaver๊ฐ€ ์ด๊ฑธ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.** AI ์–ด์‹œ์Šคํ„ดํŠธ์— ์ „๋ฌธ๊ฐ€ ํŽ˜๋ฅด์†Œ๋‚˜(๊ฐ€๋ฉด)๋ฅผ ์”Œ์›Œ ๊นŠ์€ ๋„๋ฉ”์ธ ์ง€์‹๊ณผ ๋…ํŠนํ•œ ์‚ฌ๊ณ ๋ฐฉ์‹์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.
45
+
46
+ ---
47
+
48
+ ## ์„ค์น˜
49
+
50
+ ### ๋น ๋ฅธ ์„ค์น˜
51
+
52
+ ```bash
53
+ # npm
54
+ npm install maskweaver
55
+
56
+ # bun
57
+ bun add maskweaver
58
+ ```
59
+
60
+ ### OpenCode ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์ •
61
+
62
+ OpenCode ์„ค์ •์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋!
63
+
64
+ **์ „์—ญ** (`~/.config/opencode/opencode.json`):
65
+ ```json
66
+ {
67
+ "plugin": ["maskweaver"]
68
+ }
69
+ ```
70
+
71
+ **๋˜๋Š” ํ”„๋กœ์ ํŠธ๋ณ„** (ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์˜ `opencode.json`):
72
+ ```json
73
+ {
74
+ "plugin": ["maskweaver"]
75
+ }
76
+ ```
77
+
78
+ OpenCode๊ฐ€ ์‹œ์ž‘ ์‹œ ์ž๋™์œผ๋กœ `~/.cache/opencode/node_modules/`์— ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
79
+
80
+ **Windows:** `%USERPROFILE%\.config\opencode\opencode.json`
81
+
82
+ ---
83
+
84
+ ## ๋น ๋ฅธ ์‹œ์ž‘
85
+
86
+ ### ์ฒซ ์‚ฌ์šฉ
87
+
88
+ ```bash
89
+ # AI ์–ด์‹œ์Šคํ„ดํŠธ ์ฑ„ํŒ…์—์„œ:
90
+ @maskweaver ๋ฆฐ ํ† ๋ฐœ์ฆˆ ๊ฐ€๋ฉด์œผ๋กœ ์ด C ์ฝ”๋“œ ๋ฆฌ๋ทฐํ•ด์ค˜
91
+
92
+ # ๋˜๋Š” ๋”๋ฏธ์ธ๊ฐ„์—๊ฒŒ ์œ„์ž„:
93
+ @dummy-human ๋ฆฐ ํ† ๋ฐœ์ฆˆ ๊ฐ€๋ฉด์œผ๋กœ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ์ฝ”๋“œ ๋ฆฌ๋ทฐ
94
+ @dummy-flash "unsafe" ๋“ค์–ด๊ฐ„ ํŒŒ์ผ ์ „๋ถ€ ์ฐพ์•„์ค˜
95
+ @dummy-premium ์ด ๋ชจ๋†€๋ฆฌ์Šค๋ฅผ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ์„ค๊ณ„ํ•ด์ค˜
96
+ ```
97
+
98
+ ---
99
+
100
+ ## ๊ธฐ๋Šฅ
101
+
102
+ ### ๐ŸŽญ ์ „๋ฌธ๊ฐ€ ํŽ˜๋ฅด์†Œ๋‚˜ (๊ฐ€๋ฉด)
103
+
104
+ ์ „์„ค์ ์ธ ๊ฐœ๋ฐœ์ž์˜ ์ธ๊ฒฉ์„ AI์— ์ ์šฉ:
105
+
106
+ ```yaml
107
+ # masks/software-engineering/linus-torvalds.yaml
108
+ profile:
109
+ name: Linus Torvalds
110
+ expertise:
111
+ - ์ปค๋„ ์ˆ˜์ค€ ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
112
+ - ์„ฑ๋Šฅ ์ตœ์ ํ™”
113
+ - ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ฐ ๋™์‹œ์„ฑ
114
+
115
+ thinkingStyle: |
116
+ ์ƒํ–ฅ์‹, ์‹ค์šฉ์  ์ ‘๊ทผ. ์ด๋ก ์ด ์•„๋‹Œ ์ฝ”๋“œ๋ถ€ํ„ฐ.
117
+ ๋ณต์žกํ•จ์„ ๋ฌด์ž๋น„ํ•˜๊ฒŒ ์ œ๊ฑฐ.
118
+ ```
119
+
120
+ **ํ˜„์žฌ ๊ฐ€๋ฉด:**
121
+ - ๐Ÿง **๋ฆฐ ํ† ๋ฐœ์ฆˆ** - ์‹œ์Šคํ…œ, C, ๋ฆฌ๋ˆ…์Šค, ์„ฑ๋Šฅ
122
+ - ๐Ÿ—๏ธ **๋งˆํ‹ด ํŒŒ์šธ๋Ÿฌ** - ์•„ํ‚คํ…์ฒ˜, ๋ฆฌํŒฉํ† ๋ง, ํŒจํ„ด
123
+ - ๐Ÿงช **์ผ„ํŠธ ๋ฒก** - TDD, XP, ํ…Œ์ŠคํŒ…
124
+ - ๐Ÿง  **์•ค๋“œ๋ฅ˜ ์‘** - ML/AI ์‹œ์Šคํ…œ
125
+ - โš›๏ธ **๋Œ„ ์•„๋ธŒ๋ผ๋ชจํ”„** - React, ํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜
126
+
127
+ ### ๐Ÿค– ๋”๋ฏธ์ธ๊ฐ„ ์‹œ์Šคํ…œ
128
+
129
+ ๋น„์šฉ ํšจ์œจ์ ์ธ ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์œ„ํ•œ ์Šค๋งˆํŠธ ์„œ๋ธŒ์—์ด์ „ํŠธ:
130
+
131
+ | ์—์ด์ „ํŠธ | ๋ชจ๋ธ ๋“ฑ๊ธ‰ | ๋น„์šฉ | ์ตœ์  ์šฉ๋„ |
132
+ |---------|----------|------|-----------|
133
+ | `@dummy-flash` | ๋น ๋ฆ„ | ๐Ÿ’ฐ | ํŒŒ์ผ ๊ฒ€์ƒ‰, ์š”์•ฝ, ๊ฐ„๋‹จํ•œ ์ž‘์—… |
134
+ | `@dummy-human` | ๊ท ํ˜• | ๐Ÿ’ฐ๐Ÿ’ฐ | ์ฝ”๋“œ ์ž‘์„ฑ, ๋ฆฌ๋ทฐ, ์ผ๋ฐ˜ ์ž‘์—… |
135
+ | `@dummy-premium` | ๊ฐ•๋ ฅ | ๐Ÿ’ฐ๐Ÿ’ฐ๐Ÿ’ฐ | ์•„ํ‚คํ…์ฒ˜, ๋ณต์žกํ•œ ๋””๋ฒ„๊น… |
136
+
137
+ ### ๐Ÿง  ๋ฉ”๋ชจ๋ฆฌ ์‹œ์Šคํ…œ
138
+
139
+ ๊ณผ๊ฑฐ ๋Œ€ํ™”, ๊ฒฐ์ •, ๊ฐ€๋ฉด ํšจ๊ณผ๋ฅผ ๊ธฐ์–ต:
140
+
141
+ ```typescript
142
+ import { memory } from 'maskweaver';
143
+
144
+ // ํ”„๋กœ์ ํŠธ ์ง€์‹ ์ธ๋ฑ์‹ฑ
145
+ await memory.indexFile('./docs/architecture.md', embedFn);
146
+
147
+ // ์—ฌ๋Ÿฌ ํ”„๋กœ๋ฐ”์ด๋”๋กœ ์˜๋ฏธ๋ก ์  ๊ฒ€์ƒ‰:
148
+ const results = await memory.hybridSearch(
149
+ '์ธ์ฆ์€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋‚˜์š”?',
150
+ embedding,
151
+ { limit: 5, minScore: 0.7 }
152
+ );
153
+ ```
154
+
155
+ **์ž„๋ฒ ๋”ฉ ํ”„๋กœ๋ฐ”์ด๋”:**
156
+ - ๐Ÿฆ™ **Ollama** - ๋กœ์ปฌ, ํ”„๋ผ์ด๋น— (bge-m3, nomic-embed)
157
+ - ๐Ÿค– **OpenAI** - text-embedding-3-large
158
+ - ๐Ÿš€ **VoyageAI** - ์ฝ”๋“œ ํŠนํ™” ์ž„๋ฒ ๋”ฉ!
159
+ - ๐Ÿ”€ **OpenRouter** - ์—ฌ๋Ÿฌ ํ”„๋กœ๋ฐ”์ด๋” ์ ‘๊ทผ
160
+ - ๐Ÿ“ **Text-only** - ์ž„๋ฒ ๋”ฉ ์—†์Œ, ์ˆœ์ˆ˜ FTS5
161
+
162
+ ### ๐Ÿ—‚๏ธ ์ปจํ…์ŠคํŠธ ์‹œ์Šคํ…œ
163
+
164
+ ํŒŒ์ผ ์—ฐ๊ฒฐ๋กœ ์žฅ๊ธฐ ์‹คํ–‰ ๊ธฐ๋Šฅ ์ถ”์ :
165
+
166
+ ```bash
167
+ # ๊ธฐ๋Šฅ ์‹œ์ž‘
168
+ @context start name="oauth-login" goal="OAuth2 ํ”Œ๋กœ์šฐ ๊ตฌํ˜„"
169
+
170
+ # ๊ธฐ๋Šฅ ์ปจํ…์ŠคํŠธ์— ํŒŒ์ผ ์ถ”๊ฐ€
171
+ @context add file="src/auth/oauth.ts"
172
+
173
+ # ์ƒํƒœ ํ™•์ธ
174
+ @context status
175
+
176
+ # ์™„๋ฃŒ ํ‘œ์‹œ
177
+ @context done
178
+ ```
179
+
180
+ ### ๐Ÿ”„ ํšŒ๊ณ  ์‹œ์Šคํ…œ
181
+
182
+ ๊ฐ ์„ธ์…˜ ํ›„ ๊ฐ€๋ฉด ํšจ๊ณผ ํ‰๊ฐ€:
183
+
184
+ ```typescript
185
+ {
186
+ "trigger": "session_end",
187
+ "masksUsed": [
188
+ {
189
+ "name": "linus-torvalds",
190
+ "task": "๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ์ฝ”๋“œ ๋ฆฌ๋ทฐ",
191
+ "effectiveness": 9.5
192
+ }
193
+ ],
194
+ "wellDone": ["์น˜๋ช…์  ๋ ˆ์ด์Šค ์ปจ๋””์…˜ 3๊ฐœ ๋ฐœ๊ฒฌ"],
195
+ "lessons": ["๋ฆฐ ํ† ๋ฐœ์ฆˆ ๊ฐ€๋ฉด์€ ๋™์‹œ์„ฑ ๋ฆฌ๋ทฐ์— ํƒ์›”"]
196
+ }
197
+ ```
198
+
199
+ ---
200
+
201
+ ## ๐Ÿ“ฆ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ
202
+
203
+ Maskweaver๋Š” ๋ชจ๋“ˆ์‹ exports๋ฅผ ๊ฐ€์ง„ ๋‹จ์ผ npm ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค:
204
+
205
+ ```typescript
206
+ // ๊ธฐ๋ณธ export - OpenCode ํ”Œ๋Ÿฌ๊ทธ์ธ
207
+ import maskweaver from 'maskweaver';
208
+
209
+ // Named exports - ๋ชจ๋“ˆ ๋„ค์ž„์ŠคํŽ˜์ด์Šค
210
+ import { core, memory, context, retrospect, verify } from 'maskweaver';
211
+
212
+ // ์„œ๋ธŒ๊ฒฝ๋กœ imports - ์ง์ ‘ ๋ชจ๋“ˆ ์ ‘๊ทผ
213
+ import { hybridSearch } from 'maskweaver/memory';
214
+ import { createFeature } from 'maskweaver/context';
215
+ import { MaskLoader } from 'maskweaver/core';
216
+ ```
217
+
218
+ **๋ชจ๋“ˆ:**
219
+ - `maskweaver/core` - ๊ฐ€๋ฉด ๋กœ๋”ฉ, ๊ฒ€์ฆ (YAML/JSON)
220
+ - `maskweaver/memory` - ์ž„๋ฒ ๋”ฉ + ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ (5๊ฐœ ํ”„๋กœ๋ฐ”์ด๋”)
221
+ - `maskweaver/context` - ๊ธฐ๋Šฅ ๊ธฐ๋ฐ˜ ์ž‘์—… ์ถ”์ 
222
+ - `maskweaver/verify` - ๊ต์ฐจ ๊ฐ€๋ฉด ์ฝ”๋“œ ๋ฆฌ๋ทฐ
223
+ - `maskweaver/retrospect` - ์„ธ์…˜ ํšจ๊ณผ ๋ถ„์„
224
+ - `maskweaver/plugin` - OpenCode ํ”Œ๋Ÿฌ๊ทธ์ธ ์—”ํŠธ๋ฆฌ ํฌ์ธํŠธ
225
+
226
+ ---
227
+
228
+ ## ๐ŸŽญ ๊ฐ€๋ฉด ๋งŒ๋“ค๊ธฐ
229
+
230
+ ๊ฐ€๋ฉด์€ ๊ฐ„๋‹จํ•œ YAML ํŒŒ์ผ์ž…๋‹ˆ๋‹ค:
231
+
232
+ ```yaml
233
+ # masks/my-expert.yaml
234
+ metadata:
235
+ id: my-expert
236
+ version: '1.0'
237
+ language: ko
238
+
239
+ profile:
240
+ name: ์—์ด๋‹ค ๋Ÿฌ๋ธŒ๋ ˆ์ด์Šค
241
+ tagline: ์ปดํ“จํŒ…์˜ ์„ ๊ตฌ์ž - ์ตœ์ดˆ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ
242
+
243
+ expertise:
244
+ - ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„
245
+ - ์ˆ˜ํ•™์  ์‚ฌ๊ณ 
246
+ - ํ•ด์„ ๊ธฐ๊ด€
247
+
248
+ thinkingStyle: |
249
+ ์ˆ˜ํ•™์  ์—„๋ฐ€ํ•จ๊ณผ ์‹œ์  ์ƒ์ƒ๋ ฅ์„ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค.
250
+ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋†“์น˜๋Š” ํŒจํ„ด์„ ๋ด…๋‹ˆ๋‹ค.
251
+
252
+ behavior:
253
+ systemPrompt: |
254
+ ๋‹น์‹ ์€ ์ตœ์ดˆ์˜ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋จธ ์—์ด๋‹ค ๋Ÿฌ๋ธŒ๋ ˆ์ด์Šค์ž…๋‹ˆ๋‹ค.
255
+
256
+ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‹œ๋กœ ๋ด…๋‹ˆ๋‹ค - ์šฐ์•„ํ•˜๊ณ , ์ •ํ™•ํ•˜๊ณ , ์•„๋ฆ„๋‹ต๊ฒŒ.
257
+ ์ˆ˜ํ•™์  ๋ณ€ํ™˜๊ณผ ๋…ผ๋ฆฌ์  ํ๋ฆ„์˜ ๊ด€์ ์—์„œ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
258
+
259
+ communicationStyle:
260
+ tone: ์‚ฌ๋ ค๊นŠ์€
261
+ verbosity: ์ ๋‹นํ•œ
262
+ technicalDepth: ์ „๋ฌธ๊ฐ€
263
+
264
+ usage:
265
+ suitableFor:
266
+ - ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„ ๋ฐ ์ตœ์ ํ™”
267
+ - ์ˆ˜ํ•™์  ๋ฌธ์ œ ํ•ด๊ฒฐ
268
+ - ์ฝ”๋“œ์˜ ํŒจํ„ด ์ธ์‹
269
+ ```
270
+
271
+ ---
272
+
273
+ ## ๐ŸŒ ๋‹ค๊ตญ์–ด
274
+
275
+ ์ง€์› ์ค€๋น„ ์™„๋ฃŒ:
276
+ - ๐Ÿ‡บ๐Ÿ‡ธ ์˜์–ด
277
+ - ๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด
278
+ - ๐Ÿ‡จ๐Ÿ‡ณ ์ค‘๊ตญ์–ด *(์ค€๋น„์ค‘)*
279
+ - ๐Ÿ‡ฏ๐Ÿ‡ต ์ผ๋ณธ์–ด *(์ค€๋น„์ค‘)*
280
+
281
+ ๊ฐ€๋ฉด์€ ์—ฌ๋Ÿฌ ์–ธ์–ด ๋ฒ„์ „์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:
282
+ ```
283
+ masks/
284
+ โ”œโ”€โ”€ linus-torvalds.en.yaml
285
+ โ”œโ”€โ”€ linus-torvalds.ko.yaml
286
+ โ””โ”€โ”€ linus-torvalds.zh.yaml
287
+ ```
288
+
289
+ ---
290
+
291
+ ## ๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ
292
+
293
+ ๋„์›€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค!
294
+
295
+ ### ๊ฐ€๋ฉด ์ถ”๊ฐ€
296
+
297
+ `masks/`์— YAML ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  PR์„ ์ œ์ถœํ•˜์„ธ์š”:
298
+ - โœ… ์‹ค์ œ ์ „๋ฌธ์„ฑ (๋„๋ฉ”์ธ ์ง€์‹)
299
+ - โœ… ๋…ํŠนํ•œ ์ธ๊ฒฉ (์‚ฌ๊ณ  ๋ฐฉ์‹)
300
+ - โœ… ๋ช…ํ™•ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€ (์–ธ์ œ ์‚ฌ์šฉํ• ์ง€)
301
+ - โœ… ์˜ˆ์‹œ (์˜ˆ์ƒ ๋™์ž‘)
302
+
303
+ ### ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ
304
+
305
+ ๋‹ค์Œ ๋‚ด์šฉ์œผ๋กœ ์ด์Šˆ๋ฅผ ์—ด์–ด์ฃผ์„ธ์š”:
306
+ 1. ๋ฌด์—‡์„ ์‹œ๋„ํ–ˆ๋Š”์ง€
307
+ 2. ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚ฌ๋Š”์ง€
308
+ 3. ๋ฌด์—‡์„ ์˜ˆ์ƒํ–ˆ๋Š”์ง€
309
+
310
+ ์ž์„ธํ•œ ๋‚ด์šฉ์€ [CONTRIBUTING.md](CONTRIBUTING.md)๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
311
+
312
+ ---
313
+
314
+ ## ๐Ÿ“„ ๋ผ์ด์„ ์Šค
315
+
316
+ MIT - [LICENSE](LICENSE) ์ฐธ์กฐ
317
+
318
+ ---
319
+
320
+ ## ๐Ÿ™ ๊ฐ์‚ฌ์˜ ๋ง
321
+
322
+ ์˜๊ฐ์„ ๋ฐ›์€ ์ถœ์ฒ˜:
323
+ - **Rob Pike** - ์„ค๊ณ„์˜ ๋‹จ์ˆœ์„ฑ
324
+ - **TJ Holowaychuk** - ์•„๋ฆ„๋‹ค์šด CLI์™€ ๋„๊ตฌ๋“ค
325
+ - **Sindre Sorhus** - npm ์ƒํƒœ๊ณ„ ์šฐ์ˆ˜์„ฑ
326
+
327
+ ---
328
+
329
+ <p align="center">
330
+ <sub>๐ŸŽญ์™€ ํ•จ๊ป˜ ์ œ์ž‘ by <a href="https://github.com/ulgerang">ULJI SOFT</a></sub>
331
+ </p>
package/README.md ADDED
@@ -0,0 +1,351 @@
1
+ # ๐ŸŽญ Maskweaver: Expert Persona Framework for OpenCode
2
+
3
+ <div align="center">
4
+
5
+ <img src="docs/images/hero.png" width="800" alt="Maskweaver Hero Image">
6
+
7
+ > **The npm for AI personas** โ€” Level up your OpenCode assistant with expert personalities
8
+
9
+ [![GitHub Release](https://img.shields.io/github/v/release/ulgerang/maskweaver?color=369eff&labelColor=black&logo=github&style=flat-square)](https://github.com/ulgerang/maskweaver/releases)
10
+ [![License](https://img.shields.io/badge/license-MIT-white?labelColor=black&style=flat-square)](LICENSE)
11
+ [![npm](https://img.shields.io/npm/v/maskweaver?color=ff6b35&labelColor=black&style=flat-square)](https://www.npmjs.com/package/maskweaver)
12
+
13
+ [English](README.md) | [ํ•œ๊ตญ์–ด](README.ko.md)
14
+
15
+ </div>
16
+
17
+ ---
18
+
19
+ ## ๐Ÿ”Œ OpenCode Plugin
20
+
21
+ **Maskweaver is a handy plugin for [OpenCode](https://github.com/sst/opencode).**
22
+
23
+ While it can be used as a standalone library, it works great with OpenCode to add expert personas to your coding workflow:
24
+ - **Expert Personas (Masks)**: Standardized YAML profiles for legendary developers.
25
+ - **Smart Delegation**: Multi-agent workflows optimized for OpenCode.
26
+ - **Project Memory**: Hybrid semantic search for your entire codebase.
27
+
28
+ ---
29
+
30
+ ## Why Maskweaver?
31
+
32
+ You're stuck debugging a race condition. Wouldn't it be great if **Linus Torvalds** could review your code?
33
+
34
+ ```typescript
35
+ // Instead of generic AI response...
36
+ "You have a potential race condition in your code."
37
+
38
+ // Get Linus-level insight:
39
+ "This is stupid. You're not even using memory barriers. Read the
40
+ assembly - the compiler reordered your loads. Use smp_rmb() or
41
+ better yet, redesign this without the stupid lock."
42
+ ```
43
+
44
+ **Maskweaver makes this real.** It gives AI assistants expert personas (masks) with deep domain knowledge and distinct thinking styles.
45
+
46
+ ---
47
+
48
+ ## Installation
49
+
50
+ ### For Humans
51
+
52
+ Copy and paste this prompt to your LLM agent (Claude Code, AmpCode, Cursor, etc.):
53
+
54
+ ```
55
+ Install and configure maskweaver by following the instructions here:
56
+ https://raw.githubusercontent.com/ulgerang/maskweaver/master/docs/installation.md
57
+ ```
58
+
59
+ Or read the [Installation Guide](docs/installation.md) directlyโ€”but **we strongly recommend letting an agent handle it. Humans make mistakes.**
60
+
61
+ ### For LLM Agents
62
+
63
+ Fetch the installation guide and follow it:
64
+
65
+ ```bash
66
+ curl -s https://raw.githubusercontent.com/ulgerang/maskweaver/master/docs/installation.md
67
+ ```
68
+
69
+ ### Quick Install
70
+
71
+ ```bash
72
+ # npm
73
+ npm install maskweaver
74
+
75
+ # bun
76
+ bun add maskweaver
77
+ ```
78
+
79
+ ### OpenCode Plugin Setup
80
+
81
+ Add to your OpenCode config - that's it!
82
+
83
+ **Global** (`~/.config/opencode/opencode.json`):
84
+ ```json
85
+ {
86
+ "plugin": ["maskweaver"]
87
+ }
88
+ ```
89
+
90
+ **Or per-project** (`opencode.json` in project root):
91
+ ```json
92
+ {
93
+ "plugin": ["maskweaver"]
94
+ }
95
+ ```
96
+
97
+ OpenCode automatically installs the plugin to `~/.cache/opencode/node_modules/` on startup.
98
+
99
+ **Windows:** `%USERPROFILE%\.config\opencode\opencode.json`
100
+
101
+ ---
102
+
103
+ ## Quick Start
104
+
105
+ ### First Use
106
+
107
+ ```bash
108
+ # In your AI assistant chat:
109
+ @maskweaver Use Linus Torvalds mask to review this C code
110
+
111
+ # Or delegate to dummy-humans:
112
+ @dummy-human Linus mask: review my multithreading code
113
+ @dummy-flash Find all files with "unsafe" in them
114
+ @dummy-premium Design microservices architecture for this monolith
115
+ ```
116
+
117
+ ---
118
+
119
+ ## Features
120
+
121
+ ### ๐ŸŽญ Expert Personas (Masks)
122
+
123
+ Apply legendary developer personalities to your AI assistant:
124
+
125
+ ```yaml
126
+ # masks/software-engineering/linus-torvalds.yaml
127
+ profile:
128
+ name: Linus Torvalds
129
+ expertise:
130
+ - Kernel-level systems programming
131
+ - Performance optimization
132
+ - Memory management and concurrency
133
+
134
+ thinkingStyle: |
135
+ Bottom-up, pragmatic. Starts with code, not theory.
136
+ Ruthlessly eliminates complexity.
137
+ ```
138
+
139
+ **Current Masks:**
140
+ - ๐Ÿง **Linus Torvalds** - Systems, C, Linux, performance
141
+ - ๐Ÿ—๏ธ **Martin Fowler** - Architecture, refactoring, patterns
142
+ - ๐Ÿงช **Kent Beck** - TDD, XP, testing
143
+ - ๐Ÿง  **Andrew Ng** - ML/AI systems
144
+ - โš›๏ธ **Dan Abramov** - React, frontend architecture
145
+
146
+ ### ๐Ÿค– Dummy-Human System
147
+
148
+ Smart subagents for cost-efficient multi-agent workflows:
149
+
150
+ | Agent | Model Tier | Cost | Best For |
151
+ |-------|-----------|------|----------|
152
+ | `@dummy-flash` | Fast | ๐Ÿ’ฐ | File search, summaries, simple tasks |
153
+ | `@dummy-human` | Balanced | ๐Ÿ’ฐ๐Ÿ’ฐ | Code writing, reviews, general work |
154
+ | `@dummy-premium` | Powerful | ๐Ÿ’ฐ๐Ÿ’ฐ๐Ÿ’ฐ | Architecture, complex debugging |
155
+
156
+ ### ๐Ÿง  Memory System
157
+
158
+ Remember past conversations, decisions, and mask effectiveness:
159
+
160
+ ```typescript
161
+ import { memory } from 'maskweaver';
162
+
163
+ // Index your project knowledge
164
+ await memory.indexFile('./docs/architecture.md', embedFn);
165
+
166
+ // Semantic search with multiple providers:
167
+ const results = await memory.hybridSearch(
168
+ 'How does authentication work?',
169
+ embedding,
170
+ { limit: 5, minScore: 0.7 }
171
+ );
172
+ ```
173
+
174
+ **Embedding Providers:**
175
+ - ๐Ÿฆ™ **Ollama** - Local, private (bge-m3, nomic-embed)
176
+ - ๐Ÿค– **OpenAI** - text-embedding-3-large
177
+ - ๐Ÿš€ **VoyageAI** - Code-specialized embeddings!
178
+ - ๐Ÿ”€ **OpenRouter** - Access to multiple providers
179
+ - ๐Ÿ“ **Text-only** - No embeddings, pure FTS5
180
+
181
+ ### ๐Ÿ—‚๏ธ Context System
182
+
183
+ Track long-running features with file associations:
184
+
185
+ ```bash
186
+ # Start a feature
187
+ @context start name="oauth-login" goal="Implement OAuth2 flow"
188
+
189
+ # Add files to feature context
190
+ @context add file="src/auth/oauth.ts"
191
+
192
+ # Check status
193
+ @context status
194
+
195
+ # Mark as done
196
+ @context done
197
+ ```
198
+
199
+ ### ๐Ÿ”„ Retrospect System
200
+
201
+ Evaluate mask effectiveness after each session:
202
+
203
+ ```typescript
204
+ {
205
+ "trigger": "session_end",
206
+ "masksUsed": [
207
+ {
208
+ "name": "linus-torvalds",
209
+ "task": "Review multithreading code",
210
+ "effectiveness": 9.5
211
+ }
212
+ ],
213
+ "wellDone": ["Found 3 critical race conditions"],
214
+ "lessons": ["Linus mask excels at concurrency reviews"]
215
+ }
216
+ ```
217
+
218
+ ---
219
+
220
+ ## ๐Ÿ“ฆ Package Structure
221
+
222
+ Maskweaver is a single npm package with modular exports:
223
+
224
+ ```typescript
225
+ // Default export - OpenCode plugin
226
+ import maskweaver from 'maskweaver';
227
+
228
+ // Named exports - module namespaces
229
+ import { core, memory, context, retrospect, verify } from 'maskweaver';
230
+
231
+ // Subpath imports - direct module access
232
+ import { hybridSearch } from 'maskweaver/memory';
233
+ import { createFeature } from 'maskweaver/context';
234
+ import { MaskLoader } from 'maskweaver/core';
235
+ ```
236
+
237
+ **Modules:**
238
+ - `maskweaver/core` - Mask loading, validation (YAML/JSON)
239
+ - `maskweaver/memory` - Embeddings + vector search (5 providers)
240
+ - `maskweaver/context` - Feature-based work tracking
241
+ - `maskweaver/verify` - Cross-mask code review
242
+ - `maskweaver/retrospect` - Session effectiveness analysis
243
+ - `maskweaver/plugin` - OpenCode plugin entry point
244
+
245
+ ---
246
+
247
+ ## ๐ŸŽญ Creating Masks
248
+
249
+ Masks are simple YAML files:
250
+
251
+ ```yaml
252
+ # masks/my-expert.yaml
253
+ metadata:
254
+ id: my-expert
255
+ version: '1.0'
256
+ language: en
257
+
258
+ profile:
259
+ name: Ada Lovelace
260
+ tagline: Pioneer of Computing - First Programmer
261
+
262
+ expertise:
263
+ - Algorithm design
264
+ - Mathematical thinking
265
+ - Analytical engines
266
+
267
+ thinkingStyle: |
268
+ Combines mathematical rigor with poetic imagination.
269
+ Sees patterns others miss.
270
+
271
+ behavior:
272
+ systemPrompt: |
273
+ You are Ada Lovelace, the first computer programmer.
274
+
275
+ You see algorithms as poetry - elegant, precise, beautiful.
276
+ You think in terms of mathematical transformations and
277
+ logical flows.
278
+
279
+ communicationStyle:
280
+ tone: thoughtful
281
+ verbosity: moderate
282
+ technicalDepth: expert
283
+
284
+ usage:
285
+ suitableFor:
286
+ - Algorithm design and optimization
287
+ - Mathematical problem-solving
288
+ - Pattern recognition in code
289
+ ```
290
+
291
+ ---
292
+
293
+ ## ๐ŸŒ Multilingual
294
+
295
+ Infrastructure ready for:
296
+ - ๐Ÿ‡บ๐Ÿ‡ธ English
297
+ - ๐Ÿ‡ฐ๐Ÿ‡ท Korean
298
+ - ๐Ÿ‡จ๐Ÿ‡ณ Chinese *(coming soon)*
299
+ - ๐Ÿ‡ฏ๐Ÿ‡ต Japanese *(coming soon)*
300
+
301
+ Masks can have multiple language versions:
302
+ ```
303
+ masks/
304
+ โ”œโ”€โ”€ linus-torvalds.en.yaml
305
+ โ”œโ”€โ”€ linus-torvalds.ko.yaml
306
+ โ””โ”€โ”€ linus-torvalds.zh.yaml
307
+ ```
308
+
309
+ ---
310
+
311
+ ## ๐Ÿค Contributing
312
+
313
+ We need your help!
314
+
315
+ ### Add a Mask
316
+
317
+ Create a YAML file in `masks/` and submit a PR:
318
+ - โœ… Real expertise (domain knowledge)
319
+ - โœ… Distinct personality (thinking style)
320
+ - โœ… Clear use cases (when to use)
321
+ - โœ… Examples (expected behavior)
322
+
323
+ ### Report Bugs
324
+
325
+ Open an issue with:
326
+ 1. What you tried
327
+ 2. What happened
328
+ 3. What you expected
329
+
330
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for more details.
331
+
332
+ ---
333
+
334
+ ## ๐Ÿ“„ License
335
+
336
+ MIT - See [LICENSE](LICENSE)
337
+
338
+ ---
339
+
340
+ ## ๐Ÿ™ Acknowledgments
341
+
342
+ Inspired by:
343
+ - **Rob Pike** - Simplicity in design
344
+ - **TJ Holowaychuk** - Beautiful CLIs and tools
345
+ - **Sindre Sorhus** - npm ecosystem excellence
346
+
347
+ ---
348
+
349
+ <p align="center">
350
+ <sub>Crafted with ๐ŸŽญ by <a href="https://github.com/ulgerang">ULJI SOFT</a></sub>
351
+ </p>