@byh3071/vhk 1.8.1 → 2.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/README.md +9 -8
- package/dist/{chunk-RXDOM4QT.js → chunk-HCNU6K7D.js} +13 -2
- package/dist/index.js +758 -241
- package/dist/mcp/index.js +1 -1
- package/package.json +72 -72
package/README.md
CHANGED
|
@@ -76,7 +76,7 @@ vhk gate # 퀵 5문항 — GO / 다듬기 / 다른 아이디어
|
|
|
76
76
|
| 🎯 **Goals 체계** | 단계별 미션 + 게이트 스크립트로 AI가 목표를 스스로 추적 | `vhk goal init` |
|
|
77
77
|
| ▶️ **자율 루프** | `goal next → 작업 → goal check → goal done`. FAIL 시 `vhk blocker` 수동 기록 → 블로커 3건 누적 시 HARD_STOP 자동 | `vhk goal next` |
|
|
78
78
|
| 🚧 **HARD_STOP 안전장치** | 블로커 3건 누적 → `.vhk/HARD_STOP` 트립와이어. `vhk resume --confirm` 만 해제 | `vhk blocker "<증상>"` |
|
|
79
|
-
| 🔌 **MCP
|
|
79
|
+
| 🔌 **MCP 25 tool** | Cursor·Claude Desktop 등에서 vhk를 채팅으로 호출 | `vhk mcp-init` |
|
|
80
80
|
| 📋 **컨텍스트 영속화** | `.vhk/context.md` + `memory.json` + `brief.md` 로 세션 간 맥락 유지 | `vhk context` |
|
|
81
81
|
| 🔀 **드리프트 감지** | 규칙 파일이 RULES.md와 어긋나거나 context가 코드보다 낡으면 자동 경고 (읽기전용) | `vhk doctor` |
|
|
82
82
|
|
|
@@ -172,11 +172,12 @@ vhk 기획 끝났고 바로 시작
|
|
|
172
172
|
| `vhk update` | `업데이트` | VHK CLI 최신 버전으로 셀프 업데이트 |
|
|
173
173
|
| `vhk context` | `맥락` | 프로젝트 트리·스택·CLI 명령 목록을 `.vhk/context.md`로 자동 생성 (AI 어시스턴트용). `--compact` 로 토큰 절감형(Active Goal + 최근 blockers/learnings/memories + 참조 링크) 출력 |
|
|
174
174
|
| `vhk context-show` | `맥락보기` | 현재 컨텍스트 파일 내용 출력 |
|
|
175
|
-
| `vhk memory` | `기억` |
|
|
175
|
+
| `vhk memory` | `기억` | 기억 v2 4버킷(결정/실패/성공/패턴) 관리 (`add --type` / `list [--all]` / `remove` / `archive` / `resolve` / `unarchive` / `migrate`). 조회 명령(`memory list`·`context`·`brief`) 첫 실행 시 v1→v2 자동 마이그레이션 + `.v1.bak` 원본 백업. 손상 파일은 read 경로에서 보존(원자적 write) |
|
|
176
176
|
| `vhk brief` | `브리핑` | 프로젝트 정보 + git 상태 + 결정사항 + 레퍼런스 통합 보고서 `.vhk/brief.md` |
|
|
177
177
|
| `vhk goal` | `목표` | Goal 단계별 미션 관리 (`init` / `list` / `next` / `check` / `done`) — vspec/vooster 패턴 |
|
|
178
|
+
| `vhk mission` | `미션` | 미션 계약(`set` / `check` / `clear`) — 작업 범위·금지선 선언·검증 (`.vhk/mission.json`, 경로 glob) |
|
|
178
179
|
| `vhk blocker <설명>` | `블로커` | 블로커 1건 → `docs/state/blockers.md` append. 3건 누적 시 `.vhk/HARD_STOP` 자동 생성 |
|
|
179
|
-
| `vhk learn <교훈>` | `교훈` | 교훈 1건 → `
|
|
180
|
+
| `vhk learn <교훈>` | `교훈` | 교훈 1건 → `memory.json` `failures.lesson` 단일 SoT (v2.0 통합 — 구 learnings.md 분리 폐지) |
|
|
180
181
|
| `vhk resume --confirm` | `재개` | `.vhk/HARD_STOP` 해제 (사람 확인 필요, 자동 호출 금지) |
|
|
181
182
|
|
|
182
183
|
### 자율 루프 (v1.3+)
|
|
@@ -227,12 +228,12 @@ vhk mcp-init # .cursor/mcp.json 자동 생성
|
|
|
227
228
|
# 예: "상태 알려줘" → Cursor가 vhk status 도구 호출
|
|
228
229
|
```
|
|
229
230
|
|
|
230
|
-
노출되는 MCP 도구 **
|
|
231
|
+
노출되는 MCP 도구 **25개** (v2.0 — `learn` 추가):
|
|
231
232
|
|
|
232
233
|
- **git 워크플로 (8)**: `save`, `undo`, `status`, `diff`, `ship`, `doctor`, `check`, `recap`
|
|
233
234
|
- **환경/규칙 (4)**: `env`, `env-check`, `sync`, `secure`
|
|
234
235
|
- **품질/감사 (3)**: `audit`, `harness`, `mcp-init`
|
|
235
|
-
- **컨텍스트/기록 (
|
|
236
|
+
- **컨텍스트/기록 (5)**: `context`, `context-show`, `memory-list`, `brief`, `learn` (교훈 1줄 → memory v2 failures.lesson 기록, 유일한 쓰기 도구)
|
|
236
237
|
- **dry-info (4)**: `deploy`, `publish`, `migrate`, `update` — 인터랙티브 본질이라 실제 실행 안 함, 진단/안내만
|
|
237
238
|
- **레퍼런스 (1)**: `ref-list`
|
|
238
239
|
|
|
@@ -251,7 +252,7 @@ vhk mcp # stdio 서버 시작 (Cursor가 자동으로 호출)
|
|
|
251
252
|
| 기능 | 설명 |
|
|
252
253
|
|------|------|
|
|
253
254
|
| **context** | 프로젝트 디렉토리 트리(3-depth) + 기술 스택(Next/Nuxt/Vue/Svelte/TS/Tailwind/tsup/Vite/...) 자동 감지 + 29개+ VHK 명령어 목록을 `.vhk/context.md` 마크다운으로 생성. AI 어시스턴트가 프로젝트 맥락을 즉시 파악 |
|
|
254
|
-
| **memory** | `.vhk/memory.json`
|
|
255
|
+
| **memory** | `.vhk/memory.json` 기억 v2 4버킷(결정/실패/성공/패턴) 관리. `add <content> --type decision\|failure\|success` / `list [--all]` / `remove` / `archive` / `resolve` / `unarchive` / `migrate`. 손상 파일은 read 경로에서 덮어쓰지 않고 보존(원자적 write + `.v1.bak`/`.bak` 백업). NL은 list·migrate (인자 필요한 add/remove/archive/resolve 는 commander 전용) |
|
|
255
256
|
| **brief** | 프로젝트 정보 + git 상태(브랜치·마지막 커밋·미커밋 변경) + 최근 결정사항 + 레퍼런스를 한 화면에 + `.vhk/brief.md` 저장. `safeExecFile` 기반 (Windows .cmd shim 안전) |
|
|
256
257
|
| **자연어 확장** | `"맥락 만들어줘"` → context · `"컨텍스트 보여줘"` → context-show · `"기억 목록"` → memory · `"프로젝트 브리핑 만들어줘"` / `"상태 요약"` → brief |
|
|
257
258
|
|
|
@@ -279,7 +280,7 @@ vhk brief # 세션 종료 시 상태 보고서
|
|
|
279
280
|
- **공개 API 안정성**: 명령어 이름, CLI 인자, `.vhk/` 파일 포맷은 v2.0까지 breaking change 없음
|
|
280
281
|
- **deprecation 절차**: 명령어/옵션 제거 전 1개 마이너 버전(1.x.0)에서 deprecation 경고
|
|
281
282
|
- **i18n 키**: `ko.ts`의 `t()` 키 이름은 안정. 신규 키 누적, 기존 키 미제거
|
|
282
|
-
- **MCP 서버 도구**: v1.0 GA 의 8개 baseline 도구(save/undo/status/diff/ship/doctor/check/recap) 인터페이스 안정 — v1.1 에서 16개
|
|
283
|
+
- **MCP 서버 도구**: v1.0 GA 의 8개 baseline 도구(save/undo/status/diff/ship/doctor/check/recap) 인터페이스 안정 — v1.1 에서 16개 추가(총 24개), v2.0 에서 `learn` 추가(총 25개)
|
|
283
284
|
|
|
284
285
|
> **`vhk memory` vs Claude Code `auto memory`** — `vhk memory`는 **프로젝트 단위** 결정사항(`.vhk/memory.json`, 팀 공유). Claude Code의 `auto memory`는 **사용자 단위** (`~/.claude/projects/.../memory/`, 개인 컨텍스트). 둘은 별개.
|
|
285
286
|
|
|
@@ -330,7 +331,7 @@ vhk ref open 1 # 1번 레퍼런스를 브라우저로 열기
|
|
|
330
331
|
|
|
331
332
|
| 기능 | 설명 |
|
|
332
333
|
|------|------|
|
|
333
|
-
| **MCP 서버** | `vhk mcp` — stdio MCP 서버 첫 도입 (v0.6.0 당시 8개 도구 — save/undo/status/diff/ship/doctor/check/recap). 현재
|
|
334
|
+
| **MCP 서버** | `vhk mcp` — stdio MCP 서버 첫 도입 (v0.6.0 당시 8개 도구 — save/undo/status/diff/ship/doctor/check/recap). 현재 v2.0 기준 **25개** 로 확장 (`learn` 포함) — 위 "Cursor와 MCP로 연동하기" 섹션 참조 |
|
|
334
335
|
| **mcp-init** | `vhk mcp-init` — Cursor `.cursor/mcp.json` 자동 생성. 재시작 한 번으로 연동 완료 |
|
|
335
336
|
| **자연어 라우팅 확장** | `vhk mcp설정` → `vhk mcp-init` 별칭 |
|
|
336
337
|
| **보안** | MCP save 도구의 shell injection 차단 — 모든 git 호출에 shell 미경유 `safeExecFile` 사용 |
|
|
@@ -1386,7 +1386,8 @@ function toAgentsMd(sections, projectName) {
|
|
|
1386
1386
|
"## Loop Protocol",
|
|
1387
1387
|
"- \uB8E8\uD504: `context \u2192 goal next \u2192 \uC791\uC5C5 \u2192 goal check \u2192 goal done`",
|
|
1388
1388
|
"- \uC791\uC5C5 \uC2DC\uC791 \uC2DC `.vhk/HARD_STOP` \uD655\uC778 \u2014 \uC788\uC73C\uBA74 \uBAA8\uB4E0 \uC790\uB3D9\uD654 \uC989\uC2DC \uC911\uB2E8.",
|
|
1389
|
-
"- active goal \uB9CC \uC791\uC5C5. `docs/state`(next-task/blockers
|
|
1389
|
+
"- active goal \uB9CC \uC791\uC5C5. `docs/state`(next-task/blockers)\uB294 append-only.",
|
|
1390
|
+
"- \uAD50\uD6C8\xB7\uACB0\uC815\xB7\uC2E4\uD328\xB7\uC131\uACF5\uC740 `vhk memory`(memory v2 4\uBC84\uD0B7, \uB2E8\uC77C \uCD9C\uCC98).",
|
|
1390
1391
|
"- \uAC8C\uC774\uD2B8(tsc / test:run / build) \uD1B5\uACFC\uD574\uC57C\uB9CC `vhk goal done`.",
|
|
1391
1392
|
""
|
|
1392
1393
|
];
|
|
@@ -2972,9 +2973,19 @@ ${cliStatus}
|
|
|
2972
2973
|
);
|
|
2973
2974
|
server.registerTool(
|
|
2974
2975
|
"memory-list",
|
|
2975
|
-
{
|
|
2976
|
+
{
|
|
2977
|
+
description: "memory v2 \uD65C\uC131 \uAE30\uC5B5 \uBAA9\uB85D (decisions/failures/successes \u2014 \uAE30\uBCF8 active \uB9CC). add/remove/archive/resolve/unarchive/migrate \uB294 \uC778\uC790\xB7\uC4F0\uAE30 \u2192 CLI \uC804\uC6A9"
|
|
2978
|
+
},
|
|
2976
2979
|
async () => runVhkCli(["memory", "list"], "memory list")
|
|
2977
2980
|
);
|
|
2981
|
+
server.registerTool(
|
|
2982
|
+
"learn",
|
|
2983
|
+
{
|
|
2984
|
+
description: "\uAD50\uD6C8 1\uC904 \uAE30\uB85D \u2192 memory v2 failures.lesson (\uB2E8\uC77C SoT, Evolution Loop \uD3D0\uD68C\uB85C)",
|
|
2985
|
+
inputSchema: { lesson: z.string().describe("\uAE30\uB85D\uD560 \uAD50\uD6C8 \uD55C \uC904") }
|
|
2986
|
+
},
|
|
2987
|
+
async ({ lesson }) => runVhkCli(["learn", lesson], "learn")
|
|
2988
|
+
);
|
|
2978
2989
|
server.registerTool(
|
|
2979
2990
|
"context-show",
|
|
2980
2991
|
{ description: ".vhk/context.md \uD30C\uC77C \uB0B4\uC6A9 \uBCF4\uAE30 (\uC5C6\uC73C\uBA74 `vhk context` \uC548\uB0B4)" },
|