@byh3071/vhk 0.8.1 โ†’ 1.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 CHANGED
@@ -1,12 +1,14 @@
1
1
  ---
2
2
  id: vhk-readme
3
3
  date: 2026-05-24
4
- tags: [vhk, cli, readme, v0.8.0]
4
+ tags: [vhk, cli, readme, v1.0.0, ga]
5
5
  ---
6
6
 
7
7
  # ๐Ÿ”ง VHK โ€” Vibe Harness Kit
8
8
 
9
- > AI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋ฅผ ๋ถ€๋ฆฌ๋Š” ์‚ฌ๋žŒ์„ ์œ„ํ•œ **ํ•œ๊ตญ์–ด ํ’€์‚ฌ์ดํด CLI** (v0.8.0)
9
+ > ๐ŸŽ‰ **v1.0.0 GA** โ€” ๋ฐ”์ด๋ธŒ์ฝ”๋”์˜ ์˜ฌ์ธ์› CLI. ๊ณต๊ฐœ API ์•ˆ์ •์„ฑ ๋ณด์žฅ.
10
+ >
11
+ > AI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋ฅผ ๋ถ€๋ฆฌ๋Š” ์‚ฌ๋žŒ์„ ์œ„ํ•œ **ํ•œ๊ตญ์–ด ํ’€์‚ฌ์ดํด CLI** (v1.0.0)
10
12
  >
11
13
  > ๐Ÿฝ๏ธ **VHK๋Š” VHK๋กœ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ๋จ** โ€” ์ด ๋ ˆํฌ์˜ `docs/`, `CLAUDE.md`, `.cursorrules`๋„ `vhk init`์ด ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
12
14
 
@@ -99,6 +101,14 @@ vhk ๊ธฐํš ๋๋‚ฌ๊ณ  ๋ฐ”๋กœ ์‹œ์ž‘
99
101
  | `vhk design-palette` | `ํŒ”๋ ˆํŠธ` | ์ปฌ๋Ÿฌ ํŒ”๋ ˆํŠธ ํ”„๋ฆฌ์…‹ ์„ ํƒ + ์ ์šฉ |
100
102
  | `vhk theme` | `ํ…Œ๋งˆ` | ๋‹คํฌ/๋ผ์ดํŠธ ๋ชจ๋“œ CSS + ํ† ๊ธ€ ์œ ํ‹ธ๋ฆฌํ‹ฐ ์ƒ์„ฑ |
101
103
  | `vhk ref` | `๋ ˆํผ๋Ÿฐ์Šค` | ๋ ˆํผ๋Ÿฐ์Šค URL ๊ด€๋ฆฌ (`add` / `list` / `open`) |
104
+ | `vhk harness` | `ํ•˜๋„ค์Šค` | ํ†ตํ•ฉ ํ’ˆ์งˆ ์ ๊ฒ€ (lint + type-check + test + build ์ˆœ์ฐจ ์‹คํ–‰ + ๋ฆฌํฌํŠธ) |
105
+ | `vhk audit` | `๊ฐ์‚ฌ` | npm/pnpm/yarn ๋ณด์•ˆ ์ทจ์•ฝ์  ๊ฐ์‚ฌ (`--fix`๋กœ ์ž๋™ ์ˆ˜์ •, npm๋งŒ) |
106
+ | `vhk migrate [target]` | `์ „ํ™˜` | ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์ „ํ™˜ (`npm` / `yarn` / `pnpm`, lockfile + node_modules ์žฌ๊ตฌ์„ฑ) |
107
+ | `vhk update` | `์—…๋ฐ์ดํŠธ` | VHK CLI ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์…€ํ”„ ์—…๋ฐ์ดํŠธ |
108
+ | `vhk context` | `๋งฅ๋ฝ` | ํ”„๋กœ์ ํŠธ ํŠธ๋ฆฌยท์ŠคํƒยทCLI ๋ช…๋ น ๋ชฉ๋ก์„ `.vhk/context.md`๋กœ ์ž๋™ ์ƒ์„ฑ (AI ์–ด์‹œ์Šคํ„ดํŠธ์šฉ) |
109
+ | `vhk context-show` | `๋งฅ๋ฝ๋ณด๊ธฐ` | ํ˜„์žฌ ์ปจํ…์ŠคํŠธ ํŒŒ์ผ ๋‚ด์šฉ ์ถœ๋ ฅ |
110
+ | `vhk memory` | `๊ธฐ์–ต` | ๊ฒฐ์ •์‚ฌํ•ญ ๊ธฐ์–ต ๊ด€๋ฆฌ (`add` / `list` / `remove`, `.vhk/memory.json` ๊ธฐ๋ฐ˜, ํƒœ๊ทธ ์ง€์›) |
111
+ | `vhk brief` | `๋ธŒ๋ฆฌํ•‘` | ํ”„๋กœ์ ํŠธ ์ •๋ณด + git ์ƒํƒœ + ๊ฒฐ์ •์‚ฌํ•ญ + ๋ ˆํผ๋Ÿฐ์Šค ํ†ตํ•ฉ ๋ณด๊ณ ์„œ `.vhk/brief.md` |
102
112
 
103
113
  ### init ์˜ต์…˜
104
114
 
@@ -133,6 +143,63 @@ MCP ์„œ๋ฒ„๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋„์šฐ๋ ค๋ฉด:
133
143
  vhk mcp # stdio ์„œ๋ฒ„ ์‹œ์ž‘ (Cursor๊ฐ€ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ)
134
144
  ```
135
145
 
146
+ ## v1.0.0 GA ํ•˜์ด๋ผ์ดํŠธ ๐ŸŽ‰
147
+
148
+ > **๊ณต๊ฐœ API ์•ˆ์ •์„ฑ ์•ฝ์†**. ๋ช…๋ น์–ด ์ด๋ฆ„, CLI ์ธ์ž, `.vhk/` ํŒŒ์ผ ํฌ๋งท์€ v2.0๊นŒ์ง€ breaking change ์—†์Œ.
149
+
150
+ | ๊ธฐ๋Šฅ | ์„ค๋ช… |
151
+ |------|------|
152
+ | **context** | ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ํŠธ๋ฆฌ(3-depth) + ๊ธฐ์ˆ  ์Šคํƒ(Next/Nuxt/Vue/Svelte/TS/Tailwind/tsup/Vite/...) ์ž๋™ ๊ฐ์ง€ + 29๊ฐœ+ VHK ๋ช…๋ น์–ด ๋ชฉ๋ก์„ `.vhk/context.md` ๋งˆํฌ๋‹ค์šด์œผ๋กœ ์ƒ์„ฑ. AI ์–ด์‹œ์Šคํ„ดํŠธ๊ฐ€ ํ”„๋กœ์ ํŠธ ๋งฅ๋ฝ์„ ์ฆ‰์‹œ ํŒŒ์•… |
153
+ | **memory** | `.vhk/memory.json` ๊ฒฐ์ •์‚ฌํ•ญ ๊ธฐ์–ต ๊ด€๋ฆฌ. `add <content> --tags X,Y` / `list` / `remove <๋ฒˆํ˜ธ>`. NL์€ list๋งŒ (add/remove๋Š” ์ธ์ž ํ•„์ˆ˜ โ†’ commander ์ „์šฉ) |
154
+ | **brief** | ํ”„๋กœ์ ํŠธ ์ •๋ณด + git ์ƒํƒœ(๋ธŒ๋žœ์น˜ยท๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹ยท๋ฏธ์ปค๋ฐ‹ ๋ณ€๊ฒฝ) + ์ตœ๊ทผ ๊ฒฐ์ •์‚ฌํ•ญ + ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ํ•œ ํ™”๋ฉด์— + `.vhk/brief.md` ์ €์žฅ. `safeExecFile` ๊ธฐ๋ฐ˜ (Windows .cmd shim ์•ˆ์ „) |
155
+ | **์ž์—ฐ์–ด ํ™•์žฅ** | `"๋งฅ๋ฝ ๋งŒ๋“ค์–ด์ค˜"` โ†’ context ยท `"์ปจํ…์ŠคํŠธ ๋ณด์—ฌ์ค˜"` โ†’ context-show ยท `"๊ธฐ์–ต ๋ชฉ๋ก"` โ†’ memory ยท `"ํ”„๋กœ์ ํŠธ ๋ธŒ๋ฆฌํ•‘ ๋งŒ๋“ค์–ด์ค˜"` / `"์ƒํƒœ ์š”์•ฝ"` โ†’ brief |
156
+
157
+ ```powershell
158
+ vhk context # .vhk/context.md (ํŠธ๋ฆฌ + ์Šคํƒ + ๋ช…๋ น ๋ชฉ๋ก)
159
+ vhk memory add "API๋Š” tRPC ์‚ฌ์šฉ" --tags decision,arch
160
+ vhk memory list
161
+ vhk brief # ์ฝ˜์†” ์ถœ๋ ฅ + .vhk/brief.md
162
+ ```
163
+
164
+ ### Cursor ๊ถŒ์žฅ ์‹œํ€€์Šค (v1.0 GA)
165
+
166
+ ```text
167
+ vhk init # ํ”„๋กœ์ ํŠธ ์…‹์—…
168
+ vhk design + theme # ๋””์ž์ธ ์‹œ์Šคํ…œ
169
+ vhk context # AI ๋งฅ๋ฝ ํŒŒ์ผ ์ƒ์„ฑ
170
+ ... ๊ฐœ๋ฐœ ...
171
+ vhk memory add "<๊ฒฐ์ •>" # ๊ฒฐ์ • ๋ˆ„์ 
172
+ vhk brief # ์„ธ์…˜ ์ข…๋ฃŒ ์‹œ ์ƒํƒœ ๋ณด๊ณ ์„œ
173
+ ๋‹ค์Œ ์„ธ์…˜ ์‹œ์ž‘: "์ปจํ…์ŠคํŠธ ๋ณด์—ฌ์ค˜" โ†’ ์–ด์ œ ๋งฅ๋ฝ ๋ณต์›
174
+ ```
175
+
176
+ ### v1.0.0 GA ์ •์ฑ…
177
+
178
+ - **๊ณต๊ฐœ API ์•ˆ์ •์„ฑ**: ๋ช…๋ น์–ด ์ด๋ฆ„, CLI ์ธ์ž, `.vhk/` ํŒŒ์ผ ํฌ๋งท์€ v2.0๊นŒ์ง€ breaking change ์—†์Œ
179
+ - **deprecation ์ ˆ์ฐจ**: ๋ช…๋ น์–ด/์˜ต์…˜ ์ œ๊ฑฐ ์ „ 1๊ฐœ ๋งˆ์ด๋„ˆ ๋ฒ„์ „(1.x.0)์—์„œ deprecation ๊ฒฝ๊ณ 
180
+ - **i18n ํ‚ค**: `ko.ts`์˜ `t()` ํ‚ค ์ด๋ฆ„์€ ์•ˆ์ •. ์‹ ๊ทœ ํ‚ค ๋ˆ„์ , ๊ธฐ์กด ํ‚ค ๋ฏธ์ œ๊ฑฐ
181
+ - **MCP ์„œ๋ฒ„ ๋„๊ตฌ**: 8๊ฐœ ๋„๊ตฌ(save/undo/status/diff/ship/doctor/check/recap) ์ธํ„ฐํŽ˜์ด์Šค ์•ˆ์ •
182
+
183
+ > **`vhk memory` vs Claude Code `auto memory`** โ€” `vhk memory`๋Š” **ํ”„๋กœ์ ํŠธ ๋‹จ์œ„** ๊ฒฐ์ •์‚ฌํ•ญ(`.vhk/memory.json`, ํŒ€ ๊ณต์œ ). Claude Code์˜ `auto memory`๋Š” **์‚ฌ์šฉ์ž ๋‹จ์œ„** (`~/.claude/projects/.../memory/`, ๊ฐœ์ธ ์ปจํ…์ŠคํŠธ). ๋‘˜์€ ๋ณ„๊ฐœ.
184
+
185
+ ## v0.9.0 ํ•˜์ด๋ผ์ดํŠธ
186
+
187
+ | ๊ธฐ๋Šฅ | ์„ค๋ช… |
188
+ |------|------|
189
+ | **harness** | `package.json` scripts ์ž๋™ ๊ฐ์ง€ โ†’ `lint` / `type-check` / `test` / `build` ์ˆœ์ฐจ ์‹คํ–‰ + ํ†ตํ•ฉ ๋ฆฌํฌํŠธ. ์ผ๋ถ€ ์‹คํŒจํ•ด๋„ ๋๊นŒ์ง€ ์ง„ํ–‰ |
190
+ | **audit** | `npm audit --json` ๋ž˜ํ•‘ + ์‹ฌ๊ฐ๋„๋ณ„ ์š”์•ฝ. `Critical`/`High` ๋ฐœ๊ฒฌ ์‹œ ์ž๋™ fix ์˜ต์…˜. Windows PowerShell ํ˜ธํ™˜ (`2>/dev/null` ๋ฏธ์‚ฌ์šฉ) |
191
+ | **migrate** | npm/yarn/pnpm ์ „ํ™˜ โ€” ๋Œ€์ƒ CLI ์กด์žฌ ํ™•์ธ โ†’ ํ™•์ธ ํ”„๋กฌํ”„ํŠธ โ†’ ๊ธฐ์กด lockfile + node_modules ์ •๋ฆฌ โ†’ `<pm> install` |
192
+ | **update** | npm registry์—์„œ `@byh3071/vhk` ์ตœ์‹  ๋ฒ„์ „ ์กฐํšŒ โ†’ semver ๋น„๊ต โ†’ `npm update -g` ์‹คํ–‰. ํ˜„์žฌ ๋ฒ„์ „์ด ๊ฐ™๊ฑฐ๋‚˜ ๋” ๋†’์œผ๋ฉด ์Šคํ‚ต |
193
+ | **์ž์—ฐ์–ด ํ™•์žฅ** | `"ํ’ˆ์งˆ ์ ๊ฒ€ํ•ด์ค˜"` โ†’ harness ยท `"๋ณด์•ˆ ๊ฐ์‚ฌ ํ•ด์ค˜"` / `"์ทจ์•ฝ์  ํ™•์ธ"` โ†’ audit ยท `"ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์ „ํ™˜"` โ†’ migrate ยท `"vhk ์—…๋ฐ์ดํŠธ ํ•ด์ค˜"` โ†’ update. ํ‚ค์›Œ๋“œ ์ถฉ๋Œ ๊ฐ€๋“œ: `์ ๊ฒ€` ๋‹จ๋…์€ ๊ธฐ์กด `check`์— ์–‘๋ณด, `๋ณด์•ˆ` ๋‹จ๋…์€ ๊ธฐ์กด `secure`์— ์–‘๋ณด |
194
+
195
+ ```powershell
196
+ vhk harness # lint + type-check + test + build ์ˆœ์ฐจ ์‹คํ–‰
197
+ vhk audit # npm ๋ณด์•ˆ ๊ฐ์‚ฌ (Critical/High ๋ฐœ๊ฒฌ ์‹œ ์ž๋™ fix ์˜ต์…˜)
198
+ vhk audit --fix # ํ•ญ์ƒ npm audit fix ์‹คํ–‰
199
+ vhk migrate pnpm # npm/yarn โ†’ pnpm ์ „ํ™˜ (๋Œ€ํ™”ํ˜• ํ™•์ธ)
200
+ vhk update # @byh3071/vhk ์ตœ์‹  ๋ฒ„์ „ ์ฒดํฌ + ๊ธ€๋กœ๋ฒŒ ์—…๋ฐ์ดํŠธ
201
+ ```
202
+
136
203
  ## v0.8.0 ํ•˜์ด๋ผ์ดํŠธ
137
204
 
138
205
  | ๊ธฐ๋Šฅ | ์„ค๋ช… |
@@ -224,6 +291,14 @@ vhk ref open 1 # 1๋ฒˆ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๋ธŒ๋ผ์šฐ์ €๋กœ ์—ด๊ธฐ
224
291
  | ํŒ”๋ ˆํŠธ ๊ณจ๋ผ์ค˜ | `vhk design-palette` |
225
292
  | ๋‹คํฌ ๋ชจ๋“œ ์ ์šฉ | `vhk theme` |
226
293
  | ๋ ˆํผ๋Ÿฐ์Šค ๋ณด์—ฌ์ค˜ | `vhk ref` (list) |
294
+ | ํ’ˆ์งˆ ์ ๊ฒ€ํ•ด์ค˜ | `vhk harness` |
295
+ | ๋ณด์•ˆ ๊ฐ์‚ฌ ํ•ด์ค˜ / ์ทจ์•ฝ์  ํ™•์ธ | `vhk audit` |
296
+ | ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์ „ํ™˜ | `vhk migrate` |
297
+ | vhk ์—…๋ฐ์ดํŠธ ํ•ด์ค˜ | `vhk update` |
298
+ | ๋งฅ๋ฝ ๋งŒ๋“ค์–ด์ค˜ / ์ปจํ…์ŠคํŠธ ์ƒ์„ฑ | `vhk context` |
299
+ | ์ปจํ…์ŠคํŠธ ๋ณด์—ฌ์ค˜ / ๋งฅ๋ฝ ๋ณด์—ฌ์ค˜ | `vhk context-show` |
300
+ | ๊ธฐ์–ต ๋ชฉ๋ก / ๊ฒฐ์ •์‚ฌํ•ญ ํ™•์ธ | `vhk memory` (list) |
301
+ | ํ”„๋กœ์ ํŠธ ๋ธŒ๋ฆฌํ•‘ / ์ƒํƒœ ์š”์•ฝ | `vhk brief` |
227
302
 
228
303
  ## ํŠน์ง•
229
304
 
@@ -283,6 +283,10 @@ var ko = {
283
283
  addTitle: "\uB808\uD37C\uB7F0\uC2A4 \uCD94\uAC00",
284
284
  listTitle: "\uB808\uD37C\uB7F0\uC2A4 \uBAA9\uB85D"
285
285
  },
286
+ memory: {
287
+ addTitle: "\uAE30\uC5B5 \uCD94\uAC00",
288
+ listTitle: "\uAE30\uC5B5 \uBAA9\uB85D"
289
+ },
286
290
  mcp: {
287
291
  initTitle: "Cursor MCP \uC5F0\uB3D9 \uC124\uC815",
288
292
  serverStarted: "VHK MCP \uC11C\uBC84 \uC2DC\uC791\uB428"
@@ -310,6 +314,26 @@ var ko = {
310
314
  publishing: "npm \uBC30\uD3EC \uC911...",
311
315
  publishSuccess: "npm \uBC30\uD3EC \uC131\uACF5!",
312
316
  publishFailed: "npm \uBC30\uD3EC \uC2E4\uD328"
317
+ },
318
+ harness: {
319
+ title: "\uD1B5\uD569 \uD488\uC9C8 \uC810\uAC80"
320
+ },
321
+ audit: {
322
+ title: "\uBCF4\uC548 \uAC10\uC0AC"
323
+ },
324
+ migrate: {
325
+ title: "\uD328\uD0A4\uC9C0 \uB9E4\uB2C8\uC800 \uC804\uD658",
326
+ selectTarget: "\uC5B4\uB5A4 \uD328\uD0A4\uC9C0 \uB9E4\uB2C8\uC800\uB85C \uC804\uD658\uD560\uAE4C\uC694?"
327
+ },
328
+ update: {
329
+ title: "VHK CLI \uC5C5\uB370\uC774\uD2B8"
330
+ },
331
+ context: {
332
+ title: "\uD504\uB85C\uC81D\uD2B8 \uCEE8\uD14D\uC2A4\uD2B8 \uC0DD\uC131",
333
+ showTitle: "\uCEE8\uD14D\uC2A4\uD2B8 \uD30C\uC77C"
334
+ },
335
+ brief: {
336
+ title: "\uD504\uB85C\uC81D\uD2B8 \uBE0C\uB9AC\uD551"
313
337
  }
314
338
  };
315
339
  function lookup(path) {
@@ -457,8 +481,10 @@ function safeExecFile(cmd, args) {
457
481
  }).toString();
458
482
  return { ok: true, out: out.trim() };
459
483
  } catch (err) {
460
- const msg = err instanceof Error ? err.message : String(err);
461
- return { ok: false, err: msg };
484
+ const e = err;
485
+ const stdout = e.stdout ? e.stdout.toString() : "";
486
+ const msg = e.message ?? String(err);
487
+ return { ok: false, err: msg, out: stdout.trim() };
462
488
  }
463
489
  }
464
490
  function safeExecFileStream(cmd, args) {