maskweaver 0.8.16 → 0.9.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.ko.md +640 -657
- package/README.md +672 -689
- package/assets/commands/meta/commands.json +254 -0
- package/assets/commands/weave-agents.md +62 -0
- package/assets/commands/weave-approve.md +61 -0
- package/assets/commands/weave-build.md +99 -0
- package/assets/commands/weave-help.md +112 -158
- package/assets/commands/weave-interview.md +121 -0
- package/assets/commands/weave-map.md +109 -0
- package/assets/commands/weave-troubleshoot.md +57 -0
- package/dist/plugin/index.d.ts +5 -1
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +20 -17
- package/dist/plugin/index.js.map +1 -1
- package/dist/plugin/tools/command-registry.d.ts +51 -0
- package/dist/plugin/tools/command-registry.d.ts.map +1 -0
- package/dist/plugin/tools/command-registry.js +348 -0
- package/dist/plugin/tools/command-registry.js.map +1 -0
- package/dist/plugin/tools/slashcommand.d.ts +1 -1
- package/dist/plugin/tools/slashcommand.d.ts.map +1 -1
- package/dist/plugin/tools/slashcommand.js +47 -193
- package/dist/plugin/tools/slashcommand.js.map +1 -1
- package/dist/plugin/tools/weave.d.ts +14 -35
- package/dist/plugin/tools/weave.d.ts.map +1 -1
- package/dist/plugin/tools/weave.js +247 -213
- package/dist/plugin/tools/weave.js.map +1 -1
- package/package.json +142 -142
- package/assets/commands/weave-approve-plan.md +0 -57
- package/assets/commands/weave-design.md +0 -296
- package/assets/commands/weave-flow.md +0 -48
- package/assets/commands/weave-plan.md +0 -15
- package/assets/commands/weave-research.md +0 -51
- package/assets/commands/weave-spec.md +0 -227
- package/assets/commands/weave-switch.md +0 -170
package/package.json
CHANGED
|
@@ -1,142 +1,142 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "maskweaver",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "AI Expert Persona System - Give your AI coding assistant expert personalities (가면술사)",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "./dist/index.js",
|
|
7
|
-
"types": "./dist/index.d.ts",
|
|
8
|
-
"bin": {
|
|
9
|
-
"maskweaver": "dist/cli/install.js"
|
|
10
|
-
},
|
|
11
|
-
"files": [
|
|
12
|
-
"dist",
|
|
13
|
-
"masks",
|
|
14
|
-
"assets",
|
|
15
|
-
"postinstall.mjs"
|
|
16
|
-
],
|
|
17
|
-
"exports": {
|
|
18
|
-
".": {
|
|
19
|
-
"types": "./dist/index.d.ts",
|
|
20
|
-
"import": "./dist/index.js",
|
|
21
|
-
"require": "./dist/index.js"
|
|
22
|
-
},
|
|
23
|
-
"./cli": {
|
|
24
|
-
"import": "./dist/cli/install.js",
|
|
25
|
-
"require": "./dist/cli/install.js"
|
|
26
|
-
},
|
|
27
|
-
"./plugin": {
|
|
28
|
-
"types": "./dist/plugin/index.d.ts",
|
|
29
|
-
"import": "./dist/plugin/index.js",
|
|
30
|
-
"require": "./dist/plugin/index.js"
|
|
31
|
-
},
|
|
32
|
-
"./memory": {
|
|
33
|
-
"types": "./dist/memory/index.d.ts",
|
|
34
|
-
"import": "./dist/memory/index.js",
|
|
35
|
-
"require": "./dist/memory/index.js"
|
|
36
|
-
},
|
|
37
|
-
"./context": {
|
|
38
|
-
"types": "./dist/context/index.d.ts",
|
|
39
|
-
"import": "./dist/context/index.js",
|
|
40
|
-
"require": "./dist/context/index.js"
|
|
41
|
-
},
|
|
42
|
-
"./retrospect": {
|
|
43
|
-
"types": "./dist/retrospect/index.d.ts",
|
|
44
|
-
"import": "./dist/retrospect/index.js",
|
|
45
|
-
"require": "./dist/retrospect/index.js"
|
|
46
|
-
},
|
|
47
|
-
"./verify": {
|
|
48
|
-
"types": "./dist/verify/index.d.ts",
|
|
49
|
-
"import": "./dist/verify/index.js",
|
|
50
|
-
"require": "./dist/verify/index.js"
|
|
51
|
-
},
|
|
52
|
-
"./core": {
|
|
53
|
-
"types": "./dist/core/index.d.ts",
|
|
54
|
-
"import": "./dist/core/index.js",
|
|
55
|
-
"require": "./dist/core/index.js"
|
|
56
|
-
},
|
|
57
|
-
"./lib": {
|
|
58
|
-
"types": "./dist/lib.d.ts",
|
|
59
|
-
"import": "./dist/lib.js",
|
|
60
|
-
"require": "./dist/lib.js"
|
|
61
|
-
},
|
|
62
|
-
"./weave": {
|
|
63
|
-
"types": "./dist/weave/index.d.ts",
|
|
64
|
-
"import": "./dist/weave/index.js",
|
|
65
|
-
"require": "./dist/weave/index.js"
|
|
66
|
-
},
|
|
67
|
-
"./gdc": {
|
|
68
|
-
"types": "./dist/weave/gdc.d.ts",
|
|
69
|
-
"import": "./dist/weave/gdc.js",
|
|
70
|
-
"require": "./dist/weave/gdc.js"
|
|
71
|
-
}
|
|
72
|
-
},
|
|
73
|
-
"scripts": {
|
|
74
|
-
"build": "tsc",
|
|
75
|
-
"clean": "rm -rf dist",
|
|
76
|
-
"dev": "tsc --watch",
|
|
77
|
-
"test": "vitest run",
|
|
78
|
-
"lint": "tsc --noEmit",
|
|
79
|
-
"postinstall": "node postinstall.mjs",
|
|
80
|
-
"prepublishOnly": "npm run build"
|
|
81
|
-
},
|
|
82
|
-
"keywords": [
|
|
83
|
-
"opencode",
|
|
84
|
-
"opencode-plugin",
|
|
85
|
-
"ai",
|
|
86
|
-
"persona",
|
|
87
|
-
"mask",
|
|
88
|
-
"expert",
|
|
89
|
-
"maskweaver",
|
|
90
|
-
"cli",
|
|
91
|
-
"embedding",
|
|
92
|
-
"memory",
|
|
93
|
-
"context",
|
|
94
|
-
"retrospect"
|
|
95
|
-
],
|
|
96
|
-
"author": "ULJI SOFT <ulgerang@gmail.com>",
|
|
97
|
-
"license": "MIT",
|
|
98
|
-
"repository": {
|
|
99
|
-
"type": "git",
|
|
100
|
-
"url": "git+https://github.com/ulgerang/maskweaver.git"
|
|
101
|
-
},
|
|
102
|
-
"homepage": "https://github.com/ulgerang/maskweaver#readme",
|
|
103
|
-
"bugs": {
|
|
104
|
-
"url": "https://github.com/ulgerang/maskweaver/issues"
|
|
105
|
-
},
|
|
106
|
-
"publishConfig": {
|
|
107
|
-
"access": "public"
|
|
108
|
-
},
|
|
109
|
-
"engines": {
|
|
110
|
-
"node": ">=18"
|
|
111
|
-
},
|
|
112
|
-
"dependencies": {
|
|
113
|
-
"bindings": "^1.5.0",
|
|
114
|
-
"commander": "^12.0.0",
|
|
115
|
-
"file-uri-to-path": "^2.0.0",
|
|
116
|
-
"jsonc-parser": "^3.2.0",
|
|
117
|
-
"sql.js": "^1.13.0",
|
|
118
|
-
"yaml": "^2.3.0",
|
|
119
|
-
"zod": "4.1.8"
|
|
120
|
-
},
|
|
121
|
-
"peerDependencies": {
|
|
122
|
-
"@opencode-ai/plugin": ">=1.0.0"
|
|
123
|
-
},
|
|
124
|
-
"peerDependenciesMeta": {
|
|
125
|
-
"@opencode-ai/plugin": {
|
|
126
|
-
"optional": true
|
|
127
|
-
}
|
|
128
|
-
},
|
|
129
|
-
"devDependencies": {
|
|
130
|
-
"@opencode-ai/plugin": "^1.1.59",
|
|
131
|
-
"@opencode-ai/sdk": "^1.1.48",
|
|
132
|
-
"@rollup/rollup-win32-x64-msvc": "^4.57.1",
|
|
133
|
-
"@types/better-sqlite3": "^7.6.13",
|
|
134
|
-
"@types/node": "^20.0.0",
|
|
135
|
-
"better-sqlite3": "^12.6.2",
|
|
136
|
-
"typescript": "^5.3.0",
|
|
137
|
-
"vitest": "^4.0.18"
|
|
138
|
-
},
|
|
139
|
-
"optionalDependencies": {
|
|
140
|
-
"better-sqlite3": "^9.6.0"
|
|
141
|
-
}
|
|
142
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "maskweaver",
|
|
3
|
+
"version": "0.9.0",
|
|
4
|
+
"description": "AI Expert Persona System - Give your AI coding assistant expert personalities (가면술사)",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"maskweaver": "dist/cli/install.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"masks",
|
|
14
|
+
"assets",
|
|
15
|
+
"postinstall.mjs"
|
|
16
|
+
],
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"import": "./dist/index.js",
|
|
21
|
+
"require": "./dist/index.js"
|
|
22
|
+
},
|
|
23
|
+
"./cli": {
|
|
24
|
+
"import": "./dist/cli/install.js",
|
|
25
|
+
"require": "./dist/cli/install.js"
|
|
26
|
+
},
|
|
27
|
+
"./plugin": {
|
|
28
|
+
"types": "./dist/plugin/index.d.ts",
|
|
29
|
+
"import": "./dist/plugin/index.js",
|
|
30
|
+
"require": "./dist/plugin/index.js"
|
|
31
|
+
},
|
|
32
|
+
"./memory": {
|
|
33
|
+
"types": "./dist/memory/index.d.ts",
|
|
34
|
+
"import": "./dist/memory/index.js",
|
|
35
|
+
"require": "./dist/memory/index.js"
|
|
36
|
+
},
|
|
37
|
+
"./context": {
|
|
38
|
+
"types": "./dist/context/index.d.ts",
|
|
39
|
+
"import": "./dist/context/index.js",
|
|
40
|
+
"require": "./dist/context/index.js"
|
|
41
|
+
},
|
|
42
|
+
"./retrospect": {
|
|
43
|
+
"types": "./dist/retrospect/index.d.ts",
|
|
44
|
+
"import": "./dist/retrospect/index.js",
|
|
45
|
+
"require": "./dist/retrospect/index.js"
|
|
46
|
+
},
|
|
47
|
+
"./verify": {
|
|
48
|
+
"types": "./dist/verify/index.d.ts",
|
|
49
|
+
"import": "./dist/verify/index.js",
|
|
50
|
+
"require": "./dist/verify/index.js"
|
|
51
|
+
},
|
|
52
|
+
"./core": {
|
|
53
|
+
"types": "./dist/core/index.d.ts",
|
|
54
|
+
"import": "./dist/core/index.js",
|
|
55
|
+
"require": "./dist/core/index.js"
|
|
56
|
+
},
|
|
57
|
+
"./lib": {
|
|
58
|
+
"types": "./dist/lib.d.ts",
|
|
59
|
+
"import": "./dist/lib.js",
|
|
60
|
+
"require": "./dist/lib.js"
|
|
61
|
+
},
|
|
62
|
+
"./weave": {
|
|
63
|
+
"types": "./dist/weave/index.d.ts",
|
|
64
|
+
"import": "./dist/weave/index.js",
|
|
65
|
+
"require": "./dist/weave/index.js"
|
|
66
|
+
},
|
|
67
|
+
"./gdc": {
|
|
68
|
+
"types": "./dist/weave/gdc.d.ts",
|
|
69
|
+
"import": "./dist/weave/gdc.js",
|
|
70
|
+
"require": "./dist/weave/gdc.js"
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"scripts": {
|
|
74
|
+
"build": "tsc",
|
|
75
|
+
"clean": "rm -rf dist",
|
|
76
|
+
"dev": "tsc --watch",
|
|
77
|
+
"test": "vitest run",
|
|
78
|
+
"lint": "tsc --noEmit",
|
|
79
|
+
"postinstall": "node postinstall.mjs",
|
|
80
|
+
"prepublishOnly": "npm run build"
|
|
81
|
+
},
|
|
82
|
+
"keywords": [
|
|
83
|
+
"opencode",
|
|
84
|
+
"opencode-plugin",
|
|
85
|
+
"ai",
|
|
86
|
+
"persona",
|
|
87
|
+
"mask",
|
|
88
|
+
"expert",
|
|
89
|
+
"maskweaver",
|
|
90
|
+
"cli",
|
|
91
|
+
"embedding",
|
|
92
|
+
"memory",
|
|
93
|
+
"context",
|
|
94
|
+
"retrospect"
|
|
95
|
+
],
|
|
96
|
+
"author": "ULJI SOFT <ulgerang@gmail.com>",
|
|
97
|
+
"license": "MIT",
|
|
98
|
+
"repository": {
|
|
99
|
+
"type": "git",
|
|
100
|
+
"url": "git+https://github.com/ulgerang/maskweaver.git"
|
|
101
|
+
},
|
|
102
|
+
"homepage": "https://github.com/ulgerang/maskweaver#readme",
|
|
103
|
+
"bugs": {
|
|
104
|
+
"url": "https://github.com/ulgerang/maskweaver/issues"
|
|
105
|
+
},
|
|
106
|
+
"publishConfig": {
|
|
107
|
+
"access": "public"
|
|
108
|
+
},
|
|
109
|
+
"engines": {
|
|
110
|
+
"node": ">=18"
|
|
111
|
+
},
|
|
112
|
+
"dependencies": {
|
|
113
|
+
"bindings": "^1.5.0",
|
|
114
|
+
"commander": "^12.0.0",
|
|
115
|
+
"file-uri-to-path": "^2.0.0",
|
|
116
|
+
"jsonc-parser": "^3.2.0",
|
|
117
|
+
"sql.js": "^1.13.0",
|
|
118
|
+
"yaml": "^2.3.0",
|
|
119
|
+
"zod": "4.1.8"
|
|
120
|
+
},
|
|
121
|
+
"peerDependencies": {
|
|
122
|
+
"@opencode-ai/plugin": ">=1.0.0"
|
|
123
|
+
},
|
|
124
|
+
"peerDependenciesMeta": {
|
|
125
|
+
"@opencode-ai/plugin": {
|
|
126
|
+
"optional": true
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
"devDependencies": {
|
|
130
|
+
"@opencode-ai/plugin": "^1.1.59",
|
|
131
|
+
"@opencode-ai/sdk": "^1.1.48",
|
|
132
|
+
"@rollup/rollup-win32-x64-msvc": "^4.57.1",
|
|
133
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
134
|
+
"@types/node": "^20.0.0",
|
|
135
|
+
"better-sqlite3": "^12.6.2",
|
|
136
|
+
"typescript": "^5.3.0",
|
|
137
|
+
"vitest": "^4.0.18"
|
|
138
|
+
},
|
|
139
|
+
"optionalDependencies": {
|
|
140
|
+
"better-sqlite3": "^9.6.0"
|
|
141
|
+
}
|
|
142
|
+
}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: 구현 전 계획 승인 게이트 통과
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# /weave-approve-plan - 계획 승인
|
|
6
|
-
|
|
7
|
-
## 개요
|
|
8
|
-
|
|
9
|
-
`/weave-approve-plan`은 **구현 시작 전 필수 승인 단계**입니다.
|
|
10
|
-
|
|
11
|
-
- 현재 active plan을 승인 상태로 전환
|
|
12
|
-
- 기본적으로 `tasks/plan-notes.md` 지시문을 먼저 자동 반영(refine) 시도
|
|
13
|
-
- 변경이 반영되면 승인 단계는 일시 중단되고, 검토 후 다시 approve 실행
|
|
14
|
-
- 필요 시 plan 메모를 승인 코멘트로 함께 기록
|
|
15
|
-
- 승인 전에는 `weave craft`/`weave flow` 실행이 차단됩니다
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## 사용법
|
|
20
|
-
|
|
21
|
-
```txt
|
|
22
|
-
/weave-approve-plan
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
짧은 리뷰 코멘트를 함께 남기려면:
|
|
26
|
-
|
|
27
|
-
```txt
|
|
28
|
-
weave command=approve-plan planReview="API signature는 변경하지 않는다"
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
자동 note 반영을 끄고 바로 승인하려면:
|
|
32
|
-
|
|
33
|
-
```txt
|
|
34
|
-
weave command=approve-plan applyNotes=false
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
## 내부 호출
|
|
40
|
-
|
|
41
|
-
```txt
|
|
42
|
-
weave command=approve-plan
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## 다음 단계
|
|
48
|
-
|
|
49
|
-
```txt
|
|
50
|
-
weave command=craft
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
또는 원커맨드로 이어서 진행:
|
|
54
|
-
|
|
55
|
-
```txt
|
|
56
|
-
weave command=flow
|
|
57
|
-
```
|
|
@@ -1,296 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: 요구사항 분석 및 Phase 계획 수립 (멀티 플랜)
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# /weave-design - 요구사항 분석 및 계획 수립
|
|
6
|
-
|
|
7
|
-
## 개요
|
|
8
|
-
|
|
9
|
-
유저의 요구사항 문서를 분석하고, Phase별 실행 계획을 수립합니다.
|
|
10
|
-
**멀티 플랜**: 하나의 프로젝트에서 여러 플랜을 동시에 관리할 수 있습니다.
|
|
11
|
-
|
|
12
|
-
큰 계획(phase/시간 규모가 큰 경우)은 자동으로 여러 shard plan 파일로 분할되며,
|
|
13
|
-
각 shard는 독립적으로 세부 설계(task/checklist)를 갖습니다.
|
|
14
|
-
|
|
15
|
-
**입력 방식**:
|
|
16
|
-
- 정확한 경로: `docs/`, `wiki/spec.md`
|
|
17
|
-
- 자연어 힌트: `기획 폴더`, `README`, `아까 만든 문서`
|
|
18
|
-
|
|
19
|
-
> AI가 자동으로 프로젝트를 탐색하여 관련 문서를 찾습니다.
|
|
20
|
-
|
|
21
|
-
**Maskweaver 통합**:
|
|
22
|
-
- **Memory**: 과거 유사 프로젝트 검색하여 계획 참조
|
|
23
|
-
- **Masks**: 아키텍처 분석에 Martin Fowler 마스크 자동 선택
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## 사전 조건
|
|
28
|
-
|
|
29
|
-
`/weave-init`이 실행되어 있어야 합니다.
|
|
30
|
-
실행되지 않았다면 자동으로 init을 먼저 수행합니다:
|
|
31
|
-
1. `.opencode/weave/state.yaml` 존재 여부 확인
|
|
32
|
-
2. 없으면 → `/weave-init` 절차 자동 실행 후 계속 진행
|
|
33
|
-
|
|
34
|
-
---
|
|
35
|
-
|
|
36
|
-
## Expert Summoning Strategy (Critical)
|
|
37
|
-
|
|
38
|
-
### Principle: Summon Named Experts for Quality
|
|
39
|
-
|
|
40
|
-
You are the **Mask Weaver**. Your power lies in summoning the right expert for the right task. Don't try to do everything yourself — **delegate to specialists**.
|
|
41
|
-
|
|
42
|
-
---
|
|
43
|
-
|
|
44
|
-
### 1. Architecture & Design Decisions → Expert Council
|
|
45
|
-
|
|
46
|
-
For **critical architectural decisions**, summon multiple experts for consultation:
|
|
47
|
-
|
|
48
|
-
```
|
|
49
|
-
Complex Architecture Decision:
|
|
50
|
-
|
|
51
|
-
Task(dummy-human):
|
|
52
|
-
Mask: Martin Fowler (Enterprise Architecture)
|
|
53
|
-
Task: "Analyze these requirements and propose a layer structure,
|
|
54
|
-
key components, and design patterns to use."
|
|
55
|
-
|
|
56
|
-
Task(dummy-human):
|
|
57
|
-
Mask: Linus Torvalds (System Performance)
|
|
58
|
-
Task: "Review the proposed architecture for performance bottlenecks
|
|
59
|
-
and scalability concerns."
|
|
60
|
-
|
|
61
|
-
→ Mask Weaver synthesizes both perspectives into final decision.
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
**Why This Works**:
|
|
65
|
-
- Each expert focuses on their domain of excellence
|
|
66
|
-
- You maintain strategic oversight without context pollution
|
|
67
|
-
- Multiple perspectives prevent blind spots
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
### 2. Technology Choices → Squad Parallel Analysis
|
|
72
|
-
|
|
73
|
-
For **important technology selections** (framework, database, etc.):
|
|
74
|
-
|
|
75
|
-
```
|
|
76
|
-
Mask Weaver:
|
|
77
|
-
1. squad start → "Optimal Tech Stack Decision"
|
|
78
|
-
2. squad squad (arch-squad) → "Martin Fowler: Maintainability analysis"
|
|
79
|
-
3. squad squad (perf-squad) → "Linus Torvalds: Performance analysis"
|
|
80
|
-
4. squad squad (dx-squad) → "Dan Abramov: Developer experience analysis"
|
|
81
|
-
|
|
82
|
-
→ Collect results → Weigh trade-offs → Final decision
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
### 3. When to Summon vs Handle Directly
|
|
88
|
-
|
|
89
|
-
| Situation | Action |
|
|
90
|
-
|-----------|--------|
|
|
91
|
-
| Reading & summarizing requirements | Handle directly |
|
|
92
|
-
| Obvious tech stack (project already decided) | Handle directly |
|
|
93
|
-
| Architecture trade-offs with long-term impact | **Summon Martin Fowler** |
|
|
94
|
-
| Performance-critical design | **Summon Linus Torvalds** |
|
|
95
|
-
| Multiple valid approaches, need comparison | **Squad council** |
|
|
96
|
-
|
|
97
|
-
> **Rule of Thumb**: If the decision will be hard to reverse later, summon experts. If it's tactical, handle it yourself.
|
|
98
|
-
|
|
99
|
-
---
|
|
100
|
-
|
|
101
|
-
## 실행 흐름
|
|
102
|
-
|
|
103
|
-
```
|
|
104
|
-
0. INIT CHECK (weave 초기화 확인)
|
|
105
|
-
↓
|
|
106
|
-
1. RESOLVE (입력 해석 → 실제 경로 찾기)
|
|
107
|
-
↓
|
|
108
|
-
2. INTAKE (문서 분석)
|
|
109
|
-
↓
|
|
110
|
-
3. CLARIFY (불명확한 부분 질문)
|
|
111
|
-
↓
|
|
112
|
-
4. PLAN (계획서 제시 + 플랜 이름 제안)
|
|
113
|
-
↓
|
|
114
|
-
5. FEEDBACK (유저 피드백 → 수정)
|
|
115
|
-
↓
|
|
116
|
-
6. APPROVE (승인 시 플랜 파일 생성 + 활성 플랜 설정)
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
---
|
|
120
|
-
|
|
121
|
-
## 단계별 상세
|
|
122
|
-
|
|
123
|
-
### Step 0: INIT CHECK
|
|
124
|
-
|
|
125
|
-
```
|
|
126
|
-
.opencode/weave/state.yaml 존재?
|
|
127
|
-
├─ YES → 계속 진행
|
|
128
|
-
└─ NO → /weave-init 자동 실행 후 계속
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
### Step 1: RESOLVE (경로 해석)
|
|
132
|
-
|
|
133
|
-
**입력 유형별 처리**:
|
|
134
|
-
|
|
135
|
-
| 입력 타입 | 예시 | 처리 방법 |
|
|
136
|
-
|----------|------|----------|
|
|
137
|
-
| 정확한 경로 | `docs/spec.md` | 그대로 사용 |
|
|
138
|
-
| 디렉토리 힌트 | `기획 폴더`, `스펙 폴더` | docs/, spec/, design/, wiki/ 등 탐색 |
|
|
139
|
-
| 파일 타입 힌트 | `README`, `기획서` | README.md, SPEC.md, *.spec.md 등 검색 |
|
|
140
|
-
| 시간 힌트 | `아까 만든`, `어제 정리한` | 최근 수정된 .md 파일 탐색 |
|
|
141
|
-
| 내용 힌트 | `요구사항`, `기능 목록` | 파일 내용 검색 (grep) |
|
|
142
|
-
|
|
143
|
-
**탐색 순서**:
|
|
144
|
-
1. 프로젝트 루트의 일반적 문서 위치 확인
|
|
145
|
-
- `docs/`, `doc/`, `wiki/`, `spec/`, `design/`
|
|
146
|
-
2. 키워드 매칭으로 후보 파일 탐색
|
|
147
|
-
3. 최근 수정 시간 고려 (시간 힌트가 있는 경우)
|
|
148
|
-
4. 후보가 여러 개면 유저에게 확인
|
|
149
|
-
|
|
150
|
-
---
|
|
151
|
-
|
|
152
|
-
### Step 2: INTAKE
|
|
153
|
-
|
|
154
|
-
**수행 작업**:
|
|
155
|
-
1. 해석된 경로의 모든 문서 읽기
|
|
156
|
-
2. 핵심 기능 추출
|
|
157
|
-
3. 기술적 요구사항 식별
|
|
158
|
-
4. 과거 유사 프로젝트 검색 (Memory 시스템)
|
|
159
|
-
|
|
160
|
-
---
|
|
161
|
-
|
|
162
|
-
### Step 3: CLARIFY
|
|
163
|
-
|
|
164
|
-
불명확한 부분을 유저에게 질문합니다.
|
|
165
|
-
|
|
166
|
-
---
|
|
167
|
-
|
|
168
|
-
### Step 4: PLAN
|
|
169
|
-
|
|
170
|
-
**Phase 크기 기준**:
|
|
171
|
-
- 한 Phase = 반나절 ~ 하루 작업량
|
|
172
|
-
- 끝나면 유저가 뭔가 "해볼 수 있어야" 함
|
|
173
|
-
|
|
174
|
-
**플랜 이름 제안**:
|
|
175
|
-
계획서와 함께 **플랜 이름(kebab-case)**을 제안합니다:
|
|
176
|
-
```markdown
|
|
177
|
-
## 📋 실행 계획서
|
|
178
|
-
|
|
179
|
-
**플랜 이름**: `emotion-diary` (변경 가능)
|
|
180
|
-
|
|
181
|
-
### 비전
|
|
182
|
-
[전체 목표 요약]
|
|
183
|
-
|
|
184
|
-
### Phase 계획
|
|
185
|
-
| Phase | 이름 | 완료 조건 | 예상 시간 |
|
|
186
|
-
|-------|------|----------|----------|
|
|
187
|
-
| P1 | [...] | [...] | 2-3시간 |
|
|
188
|
-
| P2 | [...] | [...] | 2-3시간 |
|
|
189
|
-
|
|
190
|
-
---
|
|
191
|
-
이 계획이 괜찮으세요? 플랜 이름을 바꾸고 싶다면 말씀해주세요.
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
---
|
|
195
|
-
|
|
196
|
-
### Step 5: APPROVE
|
|
197
|
-
|
|
198
|
-
**플랜 파일 생성**: `.opencode/weave/plans/{plan-name}.yaml`
|
|
199
|
-
|
|
200
|
-
> ⚠️ **YAML 작성 규칙 (반드시 준수)**
|
|
201
|
-
>
|
|
202
|
-
> `done_when`, `vision` 등 **긴 문자열 값**은 반드시 아래 규칙을 따릅니다:
|
|
203
|
-
>
|
|
204
|
-
> | 상황 | 사용할 표기법 | 예시 |
|
|
205
|
-
> |------|-------------|------|
|
|
206
|
-
> | 한 줄로 끝나는 짧은 값 | double-quote (`"`) | `done_when: "로그인 기능 동작"` |
|
|
207
|
-
> | 여러 줄 또는 긴 값 | block scalar (`\|`) | 아래 예시 참고 |
|
|
208
|
-
> | ❌ 절대 금지 | 여러 줄에 걸친 double-quote | `done_when: "1단계...\n2단계..."` |
|
|
209
|
-
>
|
|
210
|
-
> ```yaml
|
|
211
|
-
> # ✅ 올바른 예시 - 짧은 값
|
|
212
|
-
> done_when: "유저가 감정을 선택할 수 있다"
|
|
213
|
-
>
|
|
214
|
-
> # ✅ 올바른 예시 - 긴 값 (block scalar)
|
|
215
|
-
> done_when: |
|
|
216
|
-
> 1. 유저가 감정을 선택할 수 있다
|
|
217
|
-
> 2. 선택한 감정이 저장된다
|
|
218
|
-
> 3. 저장 확인 메시지가 표시된다
|
|
219
|
-
>
|
|
220
|
-
> # ❌ 잘못된 예시 - 닫는 따옴표가 다른 줄에 있음 (YAML 파싱 실패!)
|
|
221
|
-
> done_when: "1. 유저가 감정을 선택할 수 있다
|
|
222
|
-
> 2. 선택한 감정이 저장된다
|
|
223
|
-
> 3. 저장 확인 메시지가 표시된다"
|
|
224
|
-
> ```
|
|
225
|
-
>
|
|
226
|
-
> **핵심 원칙**: `"` 로 시작했으면 **같은 줄에서** `"` 로 닫아야 합니다. 줄바꿈이 필요하면 `|` 를 사용하세요.
|
|
227
|
-
|
|
228
|
-
```yaml
|
|
229
|
-
plan_name: "emotion-diary"
|
|
230
|
-
project_name: "감정 일기 앱"
|
|
231
|
-
created_at: "2026-02-06"
|
|
232
|
-
status: "active" # active | paused | completed | archived
|
|
233
|
-
|
|
234
|
-
vision: |
|
|
235
|
-
[전체 비전]
|
|
236
|
-
|
|
237
|
-
architecture:
|
|
238
|
-
frontend: "[...]"
|
|
239
|
-
backend: "[...]"
|
|
240
|
-
database: "[...]"
|
|
241
|
-
|
|
242
|
-
phases:
|
|
243
|
-
- id: "P1"
|
|
244
|
-
name: "[Phase 이름]"
|
|
245
|
-
status: "pending" # pending | in_progress | completed
|
|
246
|
-
done_when: "[짧으면 한 줄 double-quote, 길면 | 블록 스칼라 사용]"
|
|
247
|
-
started_at: null
|
|
248
|
-
completed_at: null
|
|
249
|
-
masks_used: []
|
|
250
|
-
checklist:
|
|
251
|
-
- "[체크 항목 1]"
|
|
252
|
-
- "[체크 항목 2]"
|
|
253
|
-
tasks: []
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
**state.yaml 업데이트**:
|
|
257
|
-
|
|
258
|
-
```yaml
|
|
259
|
-
active_plan: "emotion-diary"
|
|
260
|
-
```
|
|
261
|
-
|
|
262
|
-
**완료 메시지**:
|
|
263
|
-
```markdown
|
|
264
|
-
✅ 플랜이 승인되었습니다!
|
|
265
|
-
|
|
266
|
-
📁 생성된 파일: `.opencode/weave/plans/emotion-diary.yaml`
|
|
267
|
-
📌 활성 플랜으로 설정됨
|
|
268
|
-
|
|
269
|
-
### 다음 단계
|
|
270
|
-
Phase 1을 시작하려면:
|
|
271
|
-
`/weave-craft P1`
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
---
|
|
275
|
-
|
|
276
|
-
## 기존 플랜이 있는 경우
|
|
277
|
-
|
|
278
|
-
활성 플랜이 이미 존재하면:
|
|
279
|
-
```markdown
|
|
280
|
-
ℹ️ 현재 활성 플랜: `todo-app` (P2 진행 중)
|
|
281
|
-
|
|
282
|
-
새 플랜을 추가하면 기존 플랜은 유지되고, 새 플랜이 활성 플랜이 됩니다.
|
|
283
|
-
기존 플랜으로 돌아가려면: `/weave-switch todo-app`
|
|
284
|
-
|
|
285
|
-
계속 진행할까요?
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
---
|
|
289
|
-
|
|
290
|
-
## 주의사항
|
|
291
|
-
|
|
292
|
-
1. **Phase는 작게**: 큰 Phase는 분할
|
|
293
|
-
2. **복잡한 분석은 위임**: Task(dummy-human)으로 전문가 위임
|
|
294
|
-
3. **테스트 가능해야**: 각 Phase 끝에 유저가 확인할 수 있어야
|
|
295
|
-
4. **아키텍처는 유연하게**: "변경 가능"을 명시
|
|
296
|
-
5. **플랜 이름은 kebab-case**: 파일명이 되므로 영문 소문자, 하이픈만 사용
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: 원커맨드 실행 (prepare -> auto-approve -> craft -> verify -> finalize)
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
# /weave-flow - 원커맨드 실행
|
|
6
|
-
|
|
7
|
-
## 개요
|
|
8
|
-
|
|
9
|
-
`/weave-flow`는 Weave 기본 경로를 한 번에 실행합니다.
|
|
10
|
-
|
|
11
|
-
- `prepare` (필요 시): research + spec + plan 생성
|
|
12
|
-
- `refine-plan` (선택): `tasks/plan-notes.md` 지시문 반영
|
|
13
|
-
- `plan gate`: 실행 전 계획 품질 점검 (구현/테스트/검증 커버리지, 실패 시 경고 후 계속 진행)
|
|
14
|
-
- `auto-approve`: flow가 승인 단계를 자동 통과
|
|
15
|
-
- `craft`: 실행 대상 phase의 실행 컨텍스트를 준비
|
|
16
|
-
- `verify`: 기본 quick 검증 실행
|
|
17
|
-
- `finalize`: 검증 통과 시 phase 완료 처리
|
|
18
|
-
|
|
19
|
-
## 사용법
|
|
20
|
-
|
|
21
|
-
```txt
|
|
22
|
-
/weave-flow $ARGUMENTS
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
- 문서 경로를 넘기면 prepare부터 시작
|
|
26
|
-
- 비우면 기존 active plan 재사용
|
|
27
|
-
|
|
28
|
-
## 내부 호출
|
|
29
|
-
|
|
30
|
-
```txt
|
|
31
|
-
weave command=flow docsPath="$ARGUMENTS"
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
또는:
|
|
35
|
-
|
|
36
|
-
```txt
|
|
37
|
-
weave command=flow
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
## 산출물
|
|
41
|
-
|
|
42
|
-
- `tasks/todo.md`: 현재 plan/phase 체크리스트 + 최근 리뷰
|
|
43
|
-
- `tasks/lessons.md`: 실패 패턴과 재발 방지 규칙 기록
|
|
44
|
-
|
|
45
|
-
## 다음 단계
|
|
46
|
-
|
|
47
|
-
- 검증 실패 시 수정 후 `/weave-flow` 또는 `weave command=verify` 재실행
|
|
48
|
-
- 진행 상황 확인: `weave command=status`
|