maskweaver 0.7.0 โ†’ 0.7.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/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,332 @@
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
+ ### Quick Install
51
+
52
+ ```bash
53
+ # npm
54
+ npm install maskweaver
55
+
56
+ # bun
57
+ bun add maskweaver
58
+ ```
59
+
60
+ ### OpenCode Plugin Setup
61
+
62
+ Add to your OpenCode config - that's it!
63
+
64
+ **Global** (`~/.config/opencode/opencode.json`):
65
+ ```json
66
+ {
67
+ "plugin": ["maskweaver"]
68
+ }
69
+ ```
70
+
71
+ **Or per-project** (`opencode.json` in project root):
72
+ ```json
73
+ {
74
+ "plugin": ["maskweaver"]
75
+ }
76
+ ```
77
+
78
+ OpenCode automatically installs the plugin to `~/.cache/opencode/node_modules/` on startup.
79
+
80
+ **Windows:** `%USERPROFILE%\.config\opencode\opencode.json`
81
+
82
+ ---
83
+
84
+ ## Quick Start
85
+
86
+ ### First Use
87
+
88
+ ```bash
89
+ # In your AI assistant chat:
90
+ @maskweaver Use Linus Torvalds mask to review this C code
91
+
92
+ # Or delegate to dummy-humans:
93
+ @dummy-human Linus mask: review my multithreading code
94
+ @dummy-flash Find all files with "unsafe" in them
95
+ @dummy-premium Design microservices architecture for this monolith
96
+ ```
97
+
98
+ ---
99
+
100
+ ## Features
101
+
102
+ ### ๐ŸŽญ Expert Personas (Masks)
103
+
104
+ Apply legendary developer personalities to your AI assistant:
105
+
106
+ ```yaml
107
+ # masks/software-engineering/linus-torvalds.yaml
108
+ profile:
109
+ name: Linus Torvalds
110
+ expertise:
111
+ - Kernel-level systems programming
112
+ - Performance optimization
113
+ - Memory management and concurrency
114
+
115
+ thinkingStyle: |
116
+ Bottom-up, pragmatic. Starts with code, not theory.
117
+ Ruthlessly eliminates complexity.
118
+ ```
119
+
120
+ **Current Masks:**
121
+ - ๐Ÿง **Linus Torvalds** - Systems, C, Linux, performance
122
+ - ๐Ÿ—๏ธ **Martin Fowler** - Architecture, refactoring, patterns
123
+ - ๐Ÿงช **Kent Beck** - TDD, XP, testing
124
+ - ๐Ÿง  **Andrew Ng** - ML/AI systems
125
+ - โš›๏ธ **Dan Abramov** - React, frontend architecture
126
+
127
+ ### ๐Ÿค– Dummy-Human System
128
+
129
+ Smart subagents for cost-efficient multi-agent workflows:
130
+
131
+ | Agent | Model Tier | Cost | Best For |
132
+ |-------|-----------|------|----------|
133
+ | `@dummy-flash` | Fast | ๐Ÿ’ฐ | File search, summaries, simple tasks |
134
+ | `@dummy-human` | Balanced | ๐Ÿ’ฐ๐Ÿ’ฐ | Code writing, reviews, general work |
135
+ | `@dummy-premium` | Powerful | ๐Ÿ’ฐ๐Ÿ’ฐ๐Ÿ’ฐ | Architecture, complex debugging |
136
+
137
+ ### ๐Ÿง  Memory System
138
+
139
+ Remember past conversations, decisions, and mask effectiveness:
140
+
141
+ ```typescript
142
+ import { memory } from 'maskweaver';
143
+
144
+ // Index your project knowledge
145
+ await memory.indexFile('./docs/architecture.md', embedFn);
146
+
147
+ // Semantic search with multiple providers:
148
+ const results = await memory.hybridSearch(
149
+ 'How does authentication work?',
150
+ embedding,
151
+ { limit: 5, minScore: 0.7 }
152
+ );
153
+ ```
154
+
155
+ **Embedding Providers:**
156
+ - ๐Ÿฆ™ **Ollama** - Local, private (bge-m3, nomic-embed)
157
+ - ๐Ÿค– **OpenAI** - text-embedding-3-large
158
+ - ๐Ÿš€ **VoyageAI** - Code-specialized embeddings!
159
+ - ๐Ÿ”€ **OpenRouter** - Access to multiple providers
160
+ - ๐Ÿ“ **Text-only** - No embeddings, pure FTS5
161
+
162
+ ### ๐Ÿ—‚๏ธ Context System
163
+
164
+ Track long-running features with file associations:
165
+
166
+ ```bash
167
+ # Start a feature
168
+ @context start name="oauth-login" goal="Implement OAuth2 flow"
169
+
170
+ # Add files to feature context
171
+ @context add file="src/auth/oauth.ts"
172
+
173
+ # Check status
174
+ @context status
175
+
176
+ # Mark as done
177
+ @context done
178
+ ```
179
+
180
+ ### ๐Ÿ”„ Retrospect System
181
+
182
+ Evaluate mask effectiveness after each session:
183
+
184
+ ```typescript
185
+ {
186
+ "trigger": "session_end",
187
+ "masksUsed": [
188
+ {
189
+ "name": "linus-torvalds",
190
+ "task": "Review multithreading code",
191
+ "effectiveness": 9.5
192
+ }
193
+ ],
194
+ "wellDone": ["Found 3 critical race conditions"],
195
+ "lessons": ["Linus mask excels at concurrency reviews"]
196
+ }
197
+ ```
198
+
199
+ ---
200
+
201
+ ## ๐Ÿ“ฆ Package Structure
202
+
203
+ Maskweaver is a single npm package with modular exports:
204
+
205
+ ```typescript
206
+ // Default export - OpenCode plugin
207
+ import maskweaver from 'maskweaver';
208
+
209
+ // Named exports - module namespaces
210
+ import { core, memory, context, retrospect, verify } from 'maskweaver';
211
+
212
+ // Subpath imports - direct module access
213
+ import { hybridSearch } from 'maskweaver/memory';
214
+ import { createFeature } from 'maskweaver/context';
215
+ import { MaskLoader } from 'maskweaver/core';
216
+ ```
217
+
218
+ **Modules:**
219
+ - `maskweaver/core` - Mask loading, validation (YAML/JSON)
220
+ - `maskweaver/memory` - Embeddings + vector search (5 providers)
221
+ - `maskweaver/context` - Feature-based work tracking
222
+ - `maskweaver/verify` - Cross-mask code review
223
+ - `maskweaver/retrospect` - Session effectiveness analysis
224
+ - `maskweaver/plugin` - OpenCode plugin entry point
225
+
226
+ ---
227
+
228
+ ## ๐ŸŽญ Creating Masks
229
+
230
+ Masks are simple YAML files:
231
+
232
+ ```yaml
233
+ # masks/my-expert.yaml
234
+ metadata:
235
+ id: my-expert
236
+ version: '1.0'
237
+ language: en
238
+
239
+ profile:
240
+ name: Ada Lovelace
241
+ tagline: Pioneer of Computing - First Programmer
242
+
243
+ expertise:
244
+ - Algorithm design
245
+ - Mathematical thinking
246
+ - Analytical engines
247
+
248
+ thinkingStyle: |
249
+ Combines mathematical rigor with poetic imagination.
250
+ Sees patterns others miss.
251
+
252
+ behavior:
253
+ systemPrompt: |
254
+ You are Ada Lovelace, the first computer programmer.
255
+
256
+ You see algorithms as poetry - elegant, precise, beautiful.
257
+ You think in terms of mathematical transformations and
258
+ logical flows.
259
+
260
+ communicationStyle:
261
+ tone: thoughtful
262
+ verbosity: moderate
263
+ technicalDepth: expert
264
+
265
+ usage:
266
+ suitableFor:
267
+ - Algorithm design and optimization
268
+ - Mathematical problem-solving
269
+ - Pattern recognition in code
270
+ ```
271
+
272
+ ---
273
+
274
+ ## ๐ŸŒ Multilingual
275
+
276
+ Infrastructure ready for:
277
+ - ๐Ÿ‡บ๐Ÿ‡ธ English
278
+ - ๐Ÿ‡ฐ๐Ÿ‡ท Korean
279
+ - ๐Ÿ‡จ๐Ÿ‡ณ Chinese *(coming soon)*
280
+ - ๐Ÿ‡ฏ๐Ÿ‡ต Japanese *(coming soon)*
281
+
282
+ Masks can have multiple language versions:
283
+ ```
284
+ masks/
285
+ โ”œโ”€โ”€ linus-torvalds.en.yaml
286
+ โ”œโ”€โ”€ linus-torvalds.ko.yaml
287
+ โ””โ”€โ”€ linus-torvalds.zh.yaml
288
+ ```
289
+
290
+ ---
291
+
292
+ ## ๐Ÿค Contributing
293
+
294
+ We need your help!
295
+
296
+ ### Add a Mask
297
+
298
+ Create a YAML file in `masks/` and submit a PR:
299
+ - โœ… Real expertise (domain knowledge)
300
+ - โœ… Distinct personality (thinking style)
301
+ - โœ… Clear use cases (when to use)
302
+ - โœ… Examples (expected behavior)
303
+
304
+ ### Report Bugs
305
+
306
+ Open an issue with:
307
+ 1. What you tried
308
+ 2. What happened
309
+ 3. What you expected
310
+
311
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for more details.
312
+
313
+ ---
314
+
315
+ ## ๐Ÿ“„ License
316
+
317
+ MIT - See [LICENSE](LICENSE)
318
+
319
+ ---
320
+
321
+ ## ๐Ÿ™ Acknowledgments
322
+
323
+ Inspired by:
324
+ - **Rob Pike** - Simplicity in design
325
+ - **TJ Holowaychuk** - Beautiful CLIs and tools
326
+ - **Sindre Sorhus** - npm ecosystem excellence
327
+
328
+ ---
329
+
330
+ <p align="center">
331
+ <sub>Crafted with ๐ŸŽญ by <a href="https://github.com/ulgerang">ULJI SOFT</a></sub>
332
+ </p>