maskweaver 0.9.3 → 0.9.5

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.
Files changed (246) hide show
  1. package/README.ko.md +279 -325
  2. package/README.md +109 -113
  3. package/assets/commands/meta/commands.json +34 -34
  4. package/assets/commands/weave-agents.md +12 -52
  5. package/assets/commands/weave-approve.md +12 -51
  6. package/assets/commands/weave-archive.md +21 -0
  7. package/assets/commands/weave-build.md +20 -89
  8. package/assets/commands/weave-craft.md +22 -43
  9. package/assets/commands/weave-help.md +37 -106
  10. package/assets/commands/weave-init.md +26 -108
  11. package/assets/commands/weave-interview.md +13 -111
  12. package/assets/commands/weave-map.md +13 -99
  13. package/assets/commands/weave-prepare.md +23 -69
  14. package/assets/commands/weave-refine-plan.md +26 -59
  15. package/assets/commands/weave-repair.md +22 -70
  16. package/assets/commands/weave-status.md +22 -155
  17. package/assets/commands/weave-troubleshoot.md +11 -47
  18. package/assets/commands/weave-verify.md +23 -44
  19. package/assets/commands/weave-worktree.md +27 -69
  20. package/dist/cli/doctor.js +5 -21
  21. package/dist/cli/install.d.ts +0 -8
  22. package/dist/cli/install.js +0 -39
  23. package/dist/context/config.d.ts +0 -22
  24. package/dist/context/config.js +0 -28
  25. package/dist/context/feature.d.ts +0 -39
  26. package/dist/context/feature.js +0 -77
  27. package/dist/context/files.d.ts +0 -13
  28. package/dist/context/files.js +1 -24
  29. package/dist/context/index.d.ts +0 -7
  30. package/dist/context/index.js +0 -12
  31. package/dist/context/project.d.ts +0 -21
  32. package/dist/context/project.js +0 -30
  33. package/dist/context/types.d.ts +0 -48
  34. package/dist/context/types.js +0 -12
  35. package/dist/context/utils.d.ts +0 -18
  36. package/dist/context/utils.js +0 -27
  37. package/dist/core/engine/promptBuilder.d.ts +0 -17
  38. package/dist/core/engine/promptBuilder.js +0 -28
  39. package/dist/core/index.d.ts +0 -6
  40. package/dist/core/index.js +0 -9
  41. package/dist/core/loader/MaskLoader.d.ts +0 -23
  42. package/dist/core/loader/MaskLoader.js +0 -29
  43. package/dist/core/schema/types.d.ts +0 -47
  44. package/dist/core/schema/types.js +0 -6
  45. package/dist/core/schema/validator.d.ts +0 -14
  46. package/dist/core/schema/validator.js +0 -18
  47. package/dist/i18n/index.d.ts +0 -18
  48. package/dist/i18n/index.js +4 -23
  49. package/dist/index.d.ts +0 -8
  50. package/dist/index.js +0 -8
  51. package/dist/lib.d.ts +0 -5
  52. package/dist/lib.js +0 -12
  53. package/dist/memory/chunking.d.ts +0 -22
  54. package/dist/memory/chunking.js +2 -37
  55. package/dist/memory/core.d.ts +0 -29
  56. package/dist/memory/core.js +1 -52
  57. package/dist/memory/index.d.ts +0 -5
  58. package/dist/memory/index.js +0 -10
  59. package/dist/memory/indexer.d.ts +0 -21
  60. package/dist/memory/indexer.js +0 -44
  61. package/dist/memory/providers/examples.d.ts +0 -5
  62. package/dist/memory/providers/examples.js +4 -64
  63. package/dist/memory/providers/factory.d.ts +0 -44
  64. package/dist/memory/providers/factory.js +0 -46
  65. package/dist/memory/providers/index.d.ts +0 -26
  66. package/dist/memory/providers/index.js +0 -28
  67. package/dist/memory/providers/ollama.d.ts +0 -6
  68. package/dist/memory/providers/ollama.js +1 -8
  69. package/dist/memory/providers/openai.d.ts +0 -6
  70. package/dist/memory/providers/openai.js +1 -8
  71. package/dist/memory/providers/openrouter.d.ts +0 -6
  72. package/dist/memory/providers/openrouter.js +0 -8
  73. package/dist/memory/providers/text-only.d.ts +0 -13
  74. package/dist/memory/providers/text-only.js +0 -17
  75. package/dist/memory/providers/types.d.ts +0 -39
  76. package/dist/memory/providers/types.js +0 -7
  77. package/dist/memory/providers/voyage.d.ts +0 -22
  78. package/dist/memory/providers/voyage.js +1 -24
  79. package/dist/memory/search/hybrid.d.ts +0 -12
  80. package/dist/memory/search/hybrid.js +1 -22
  81. package/dist/memory/store/sqlite.d.ts +0 -72
  82. package/dist/memory/store/sqlite.js +4 -127
  83. package/dist/plugin/config/index.d.ts +0 -112
  84. package/dist/plugin/config/index.js +0 -115
  85. package/dist/plugin/index.d.ts +0 -13
  86. package/dist/plugin/index.js +1 -124
  87. package/dist/plugin/tools/command-registry.d.ts +0 -6
  88. package/dist/plugin/tools/command-registry.js +0 -14
  89. package/dist/plugin/tools/context.d.ts +0 -12
  90. package/dist/plugin/tools/context.js +0 -58
  91. package/dist/plugin/tools/maskSave.d.ts +0 -3
  92. package/dist/plugin/tools/maskSave.js +0 -3
  93. package/dist/plugin/tools/memoryGet.d.ts +0 -3
  94. package/dist/plugin/tools/memoryGet.js +0 -3
  95. package/dist/plugin/tools/memoryIndexer.d.ts +0 -3
  96. package/dist/plugin/tools/memoryIndexer.js +0 -10
  97. package/dist/plugin/tools/memorySearch.d.ts +0 -31
  98. package/dist/plugin/tools/memorySearch.js +0 -79
  99. package/dist/plugin/tools/memoryWrite.d.ts +0 -8
  100. package/dist/plugin/tools/memoryWrite.js +0 -32
  101. package/dist/plugin/tools/retrospect.d.ts +0 -3
  102. package/dist/plugin/tools/retrospect.js +0 -3
  103. package/dist/plugin/tools/slashcommand.d.ts +0 -11
  104. package/dist/plugin/tools/slashcommand.js +0 -38
  105. package/dist/plugin/tools/squad.d.ts +0 -12
  106. package/dist/plugin/tools/squad.js +11 -83
  107. package/dist/plugin/tools/weave.d.ts +0 -6
  108. package/dist/plugin/tools/weave.js +0 -78
  109. package/dist/plugin/types.d.ts +0 -20
  110. package/dist/plugin/types.js +0 -7
  111. package/dist/retrospect/index.d.ts +0 -7
  112. package/dist/retrospect/index.js +0 -9
  113. package/dist/retrospect/mask-save.d.ts +0 -12
  114. package/dist/retrospect/mask-save.js +1 -80
  115. package/dist/retrospect/retrospect.d.ts +0 -18
  116. package/dist/retrospect/retrospect.js +0 -63
  117. package/dist/retrospect/strategies/base.d.ts +0 -15
  118. package/dist/retrospect/strategies/base.js +0 -7
  119. package/dist/retrospect/strategies/deep.d.ts +0 -12
  120. package/dist/retrospect/strategies/deep.js +0 -24
  121. package/dist/retrospect/strategies/index.d.ts +0 -12
  122. package/dist/retrospect/strategies/index.js +0 -12
  123. package/dist/retrospect/strategies/quick.d.ts +0 -12
  124. package/dist/retrospect/strategies/quick.js +0 -19
  125. package/dist/retrospect/strategies/standard.d.ts +0 -12
  126. package/dist/retrospect/strategies/standard.js +0 -15
  127. package/dist/retrospect/types.d.ts +0 -7
  128. package/dist/retrospect/types.js +0 -7
  129. package/dist/shared/config.d.ts +0 -105
  130. package/dist/shared/config.js +0 -33
  131. package/dist/shared/errors.d.ts +0 -18
  132. package/dist/shared/errors.js +0 -19
  133. package/dist/shared/generate-agents.d.ts +0 -69
  134. package/dist/shared/generate-agents.js +2 -86
  135. package/dist/shared/image.d.ts +0 -67
  136. package/dist/shared/image.js +6 -104
  137. package/dist/shared/index.d.ts +0 -5
  138. package/dist/shared/index.js +0 -7
  139. package/dist/shared/model-registry.d.ts +0 -72
  140. package/dist/shared/model-registry.js +5 -95
  141. package/dist/shared/types.d.ts +0 -15
  142. package/dist/shared/types.js +0 -3
  143. package/dist/shared-context/dag.d.ts +0 -105
  144. package/dist/shared-context/dag.js +3 -114
  145. package/dist/shared-context/index.d.ts +0 -5
  146. package/dist/shared-context/index.js +0 -15
  147. package/dist/shared-context/logger.d.ts +0 -37
  148. package/dist/shared-context/logger.js +0 -41
  149. package/dist/shared-context/parallel-executor.d.ts +0 -54
  150. package/dist/shared-context/parallel-executor.js +4 -56
  151. package/dist/shared-context/session.d.ts +0 -56
  152. package/dist/shared-context/session.js +0 -47
  153. package/dist/shared-context/squad.d.ts +0 -68
  154. package/dist/shared-context/squad.js +0 -63
  155. package/dist/shared-context/storage.d.ts +0 -132
  156. package/dist/shared-context/storage.js +0 -116
  157. package/dist/shared-context/task.d.ts +0 -120
  158. package/dist/shared-context/task.js +0 -152
  159. package/dist/shared-context/test/dag.test.js +9 -14
  160. package/dist/shared-context/test/logger.test.d.ts +0 -8
  161. package/dist/shared-context/test/logger.test.js +0 -52
  162. package/dist/shared-context/test/session.test.d.ts +0 -7
  163. package/dist/shared-context/test/session.test.js +0 -63
  164. package/dist/shared-context/test/squad.test.d.ts +0 -10
  165. package/dist/shared-context/test/squad.test.js +2 -68
  166. package/dist/shared-context/test/storage.test.d.ts +0 -8
  167. package/dist/shared-context/test/storage.test.js +0 -68
  168. package/dist/shared-context/test/task.test.d.ts +0 -7
  169. package/dist/shared-context/test/task.test.js +0 -54
  170. package/dist/shared-context/test/watchdog.test.d.ts +0 -7
  171. package/dist/shared-context/test/watchdog.test.js +3 -58
  172. package/dist/shared-context/types.d.ts +0 -215
  173. package/dist/shared-context/types.js +0 -125
  174. package/dist/shared-context/watchdog.d.ts +0 -127
  175. package/dist/shared-context/watchdog.js +0 -148
  176. package/dist/shared-context/worktree.d.ts +0 -68
  177. package/dist/shared-context/worktree.js +2 -34
  178. package/dist/verify/budget.d.ts +0 -29
  179. package/dist/verify/budget.js +0 -34
  180. package/dist/verify/critical-files.d.ts +0 -17
  181. package/dist/verify/critical-files.js +0 -37
  182. package/dist/verify/escalation.d.ts +0 -20
  183. package/dist/verify/escalation.js +0 -22
  184. package/dist/verify/index.d.ts +0 -5
  185. package/dist/verify/index.js +0 -11
  186. package/dist/verify/prompts.d.ts +0 -20
  187. package/dist/verify/prompts.js +0 -20
  188. package/dist/verify/types.d.ts +0 -26
  189. package/dist/verify/types.js +1 -12
  190. package/dist/verify/verifier.d.ts +0 -29
  191. package/dist/verify/verifier.js +0 -54
  192. package/dist/version.d.ts +1 -16
  193. package/dist/version.js +1 -16
  194. package/dist/weave/bridge.d.ts +0 -35
  195. package/dist/weave/bridge.js +0 -51
  196. package/dist/weave/environment/detector.d.ts +0 -6
  197. package/dist/weave/environment/detector.js +4 -45
  198. package/dist/weave/environment/index.d.ts +0 -19
  199. package/dist/weave/environment/index.js +1 -39
  200. package/dist/weave/environment/issues.d.ts +0 -35
  201. package/dist/weave/environment/issues.js +0 -59
  202. package/dist/weave/git.d.ts +0 -8
  203. package/dist/weave/git.js +0 -8
  204. package/dist/weave/index.d.ts +0 -13
  205. package/dist/weave/index.js +2 -28
  206. package/dist/weave/knowledge/global.d.ts +0 -39
  207. package/dist/weave/knowledge/global.js +2 -78
  208. package/dist/weave/loop.js +0 -3
  209. package/dist/weave/orchestrator.d.ts +0 -69
  210. package/dist/weave/orchestrator.js +1 -101
  211. package/dist/weave/phase-manager.d.ts +0 -64
  212. package/dist/weave/phase-manager.js +0 -89
  213. package/dist/weave/security/secret-scan.d.ts +0 -14
  214. package/dist/weave/security/secret-scan.js +0 -19
  215. package/dist/weave/stages/build.js +0 -15
  216. package/dist/weave/stages/execute.d.ts +0 -42
  217. package/dist/weave/stages/execute.js +4 -86
  218. package/dist/weave/stages/handoff.d.ts +0 -7
  219. package/dist/weave/stages/handoff.js +0 -43
  220. package/dist/weave/stages/index.d.ts +0 -3
  221. package/dist/weave/stages/index.js +0 -3
  222. package/dist/weave/stages/intake.d.ts +0 -8
  223. package/dist/weave/stages/intake.js +5 -65
  224. package/dist/weave/stages/map.d.ts +0 -1
  225. package/dist/weave/stages/openspec.d.ts +0 -1
  226. package/dist/weave/stages/plan.d.ts +0 -11
  227. package/dist/weave/stages/plan.js +1 -53
  228. package/dist/weave/stages/refine.d.ts +0 -7
  229. package/dist/weave/stages/refine.js +0 -7
  230. package/dist/weave/stages/research.d.ts +0 -6
  231. package/dist/weave/stages/research.js +0 -6
  232. package/dist/weave/stages/spec.d.ts +0 -12
  233. package/dist/weave/stages/spec.js +0 -17
  234. package/dist/weave/types.d.ts +0 -20
  235. package/dist/weave/types.js +0 -5
  236. package/dist/weave/verification/commands.d.ts +0 -12
  237. package/dist/weave/verification/commands.js +0 -19
  238. package/dist/weave/verification/index.d.ts +0 -6
  239. package/dist/weave/verification/index.js +1 -19
  240. package/dist/weave/verification/playwright.d.ts +0 -47
  241. package/dist/weave/verification/playwright.js +1 -90
  242. package/dist/weave/worktree.d.ts +0 -16
  243. package/dist/weave/worktree.js +0 -23
  244. package/dist/weave/yaml-repair.d.ts +0 -39
  245. package/dist/weave/yaml-repair.js +13 -116
  246. package/package.json +1 -1
@@ -1,155 +1,22 @@
1
- ---
2
- description: 전체 플랜 목록 진행 상황 확인
3
- ---
4
-
5
- # /weave-status - 진행 상황 확인
6
-
7
- ## 개요
8
-
9
- 전체 플랜 목록과 활성 플랜의 Phase 진행 상황을 확인합니다.
10
-
11
- **사용법**:
12
- - `/weave-status` — 전체 개요 (모든 플랜 + 활성 플랜 상세)
13
- - `/weave-status $ARGUMENTS` — 특정 플랜 또는 Phase 상세
14
- - `$ARGUMENTS` = 플랜 이름 (예: `emotion-diary`)
15
- - `$ARGUMENTS` = Phase ID (예: `P2`, 활성 플랜의 Phase)
16
-
17
- ---
18
-
19
- ## 데이터 로드 방법 (필수)
20
-
21
- **반드시 이 순서로 파일을 읽어야 합니다**:
22
-
23
- ```
24
- 1. .opencode/weave/state.yaml 읽기 → active_plan 확인
25
- 2. .opencode/weave/plans/ 디렉토리의 모든 .yaml 파일 목록 확인
26
- 3. 각 플랜 파일 읽어서 상태 집계
27
- ```
28
-
29
- **state.yaml이 없는 경우**:
30
- ```markdown
31
- 📋 Weave가 초기화되지 않았습니다.
32
-
33
- 시작하려면: `/weave-init`
34
- ```
35
-
36
- **플랜이 하나도 없는 경우**:
37
- ```markdown
38
- 📋 아직 플랜이 없습니다.
39
-
40
- 새 플랜을 만들려면: `/weave-design [docs-path]`
41
- ```
42
-
43
- ---
44
-
45
- ## 출력: 전체 개요 (`/weave-status`)
46
-
47
- ```markdown
48
- ## 📊 Weave 상태
49
-
50
- ### 활성 플랜: `emotion-diary`
51
- **감정 일기 앱** — 진행률 40%
52
-
53
- [████████░░░░░░░░░░░░] 2/5
54
-
55
- | Phase | 이름 | 상태 | 마스크 |
56
- |-------|------|------|--------|
57
- | P1 | 감정 선택 UI | ✅ 완료 (2.5h) | kent-beck, dan-abramov |
58
- | P2 | 감정 저장 | 🔄 진행 중 | kent-beck |
59
- | P3 | 히스토리 뷰 | ⏳ 대기 | |
60
- | P4 | 통계 시각화 | ⏳ 대기 | |
61
- | P5 | 테마 설정 | ⏳ 대기 | |
62
-
63
- **다음**: `/weave-craft P2`
64
-
65
- ---
66
-
67
- ### 전체 플랜 목록
68
-
69
- | 플랜 | 프로젝트 | 상태 | 진행률 |
70
- |------|---------|------|--------|
71
- | 📌 `emotion-diary` | 감정 일기 앱 | active | 40% (2/5) |
72
- | `todo-app` | Todo 앱 | paused | 60% (3/5) |
73
- | `auth-module` | 인증 모듈 | completed | 100% (4/4) |
74
-
75
- 플랜 전환: `/weave-switch [플랜이름]`
76
- ```
77
-
78
- ---
79
-
80
- ## 출력: 특정 플랜 상세 (`/weave-status {plan-name}`)
81
-
82
- ```markdown
83
- ## 📊 플랜: `todo-app`
84
-
85
- **Todo 앱** — 상태: paused — 진행률 60%
86
-
87
- [████████████░░░░░░░░] 3/5
88
-
89
- ### 비전
90
- 사용자가 간단하게 할 일을 관리할 수 있는 웹 앱
91
-
92
- ### Phases
93
- | Phase | 이름 | 상태 | 소요 시간 | 마스크 |
94
- |-------|------|------|----------|--------|
95
- | P1 | 기본 UI | ✅ 완료 | 2h | dan-abramov |
96
- | P2 | CRUD API | ✅ 완료 | 3h | martin-fowler |
97
- | P3 | 필터/정렬 | ✅ 완료 | 1.5h | kent-beck |
98
- | P4 | 드래그 정렬 | ⏳ 대기 | | |
99
- | P5 | PWA 지원 | ⏳ 대기 | | |
100
-
101
- ### 아키텍처
102
- - Frontend: React + TypeScript
103
- - Backend: Express.js
104
- - Database: SQLite
105
-
106
- 이 플랜으로 전환: `/weave-switch todo-app`
107
- ```
108
-
109
- ---
110
-
111
- ## 출력: 특정 Phase 상세 (`/weave-status P2`)
112
-
113
- 활성 플랜의 해당 Phase를 상세 표시:
114
-
115
- ```markdown
116
- ## Phase P2: 감정 저장
117
-
118
- **플랜**: `emotion-diary`
119
- **상태**: 🔄 진행 중
120
- **시작**: 2026-02-06 10:30
121
- **경과**: 1.5시간
122
-
123
- ### 사용된 마스크
124
- - Kent Beck
125
-
126
- ### 발생한 이슈
127
- - 1회 재시도: JSON 직렬화 오류 → 해결됨
128
-
129
- ### 다음
130
- `/weave-craft P2` — 계속 진행
131
- ```
132
-
133
- ---
134
-
135
- ## 상태 아이콘
136
-
137
- | 아이콘 | 상태 |
138
- |--------|------|
139
- | ✅ | 완료 (completed) |
140
- | 🔄 | 진행 중 (in_progress) |
141
- | ⏳ | 대기 (pending) |
142
- | 🚫 | 차단됨 (의존성 미완료) |
143
- | 📌 | 활성 플랜 표시 |
144
- | ⏸️ | 일시정지 (paused) |
145
-
146
- ---
147
-
148
- ## 플랜 상태 종류
149
-
150
- | 상태 | 의미 |
151
- |------|------|
152
- | `active` | 현재 작업 중인 플랜 |
153
- | `paused` | 일시 중단 (다른 플랜 작업 중) |
154
- | `completed` | 모든 Phase 완료 |
155
- | `archived` | 보관됨 (목록에서 숨김, --all로 표시) |
1
+ ---
2
+ description: View plans, active phase, and progress
3
+ ---
4
+
5
+ # /weave-status
6
+
7
+ Show the current Weave state.
8
+
9
+ Use the `weave` tool:
10
+
11
+ ```txt
12
+ weave command=status
13
+ ```
14
+
15
+ ## What It Reports
16
+
17
+ - Whether Weave has been initialized.
18
+ - Active plan and available plans.
19
+ - Phase status and next recommended action.
20
+ - Blocked, paused, completed, or archived work.
21
+
22
+ Use this when resuming a project, switching plans, or checking whether a build or phase still needs verification.
@@ -1,57 +1,21 @@
1
1
  ---
2
- description: 글로벌 지식 검색 솔루션 기록
2
+ description: Search global knowledge for solutions or record a new one
3
3
  ---
4
4
 
5
- # /weave-troubleshoot - 트러블슈팅
5
+ # /weave-troubleshoot
6
6
 
7
- ## 개요
7
+ Search prior solution knowledge for an error, or record a new solution.
8
8
 
9
- 글로벌 지식베이스에서 유사한 문제의 해결책을 검색하거나, 새로운 해결책을 기록합니다.
9
+ Use the `weave` tool:
10
10
 
11
- **이전 명령어**: `record` (v0.9까지 deprecated alias, `--record` 플래그로 대체)
12
-
13
- ---
14
-
15
- ## 사용법
16
-
17
- ```bash
18
- # 해결책 검색
19
- /weave-troubleshoot "Cannot find module 'xyz'"
20
-
21
- # 새 해결책 기록
22
- /weave-troubleshoot --record error="..." solution="..."
23
- ```
24
-
25
- ---
26
-
27
- ## 입력
28
-
29
- ```yaml
30
- error: "..." # (검색 시 필수) 검색할 에러 메시지
31
- record: true # (선택) 기록 모드 활성화
32
- solution: "..." # (record 시 필수) 기록할 해결책
33
- context: "..." # (선택) 추가 맥락
11
+ ```txt
12
+ weave command=troubleshoot error="Cannot find module 'xyz'"
13
+ weave command=troubleshoot record=true error="..." solution="..." context="..."
34
14
  ```
35
15
 
36
- ---
37
-
38
- ## 출력 예시
16
+ ## Modes
39
17
 
40
- ### 검색
18
+ - Search mode: provide `error`.
19
+ - Record mode: set `record=true` and provide `solution`.
41
20
 
42
- ```markdown
43
- ## 💡 유사한 해결책 발견
44
-
45
- ### 1. (exact, 점수: 95%)
46
- **상황**: Cannot find module 'react'
47
- **해결책**: npm install react react-dom
48
- **효과성**: ⭐⭐⭐⭐⭐
49
- ```
50
-
51
- ### 기록
52
-
53
- ```markdown
54
- ✅ 트러블슈팅 솔루션이 기록되었습니다 (ID: 42)
55
-
56
- 다음에 비슷한 에러가 발생하면 자동으로 이 해결책을 제안합니다.
57
- ```
21
+ Record only solutions that were actually validated. Prefer the exact command, config change, or code path that fixed the issue.
@@ -1,44 +1,23 @@
1
- ---
2
- description: 프로젝트 유형 자동 감지 기반 검증 실행 (build/test)
3
- ---
4
-
5
- # /weave-verify - 검증 실행
6
-
7
- ## 개요
8
-
9
- 현재 worktree(프로젝트 루트)에서 **빌드/테스트 검증**을 실행합니다.
10
-
11
- Weave는 특정 생태계(npm)만 가정하지 않고, 프로젝트 루트의 증거를 기반으로 검증 커맨드를 추천/실행합니다.
12
-
13
- - Node: `package.json scripts` 기반(`npm|pnpm|yarn|bun` 자동 감지)
14
- - Go: `go build ./...`, `go test ./...`
15
- - Rust: `cargo check`, `cargo test`
16
- - Python: `pytest` 또는 `python -m unittest` (+ optional ruff/mypy)
17
- - .NET: `dotnet build`, `dotnet test`
18
-
19
- ---
20
-
21
- ## 실행
22
-
23
- ```txt
24
- weave command=verify
25
- ```
26
-
27
- 프로젝트 타입 힌트를 주고 싶으면:
28
-
29
- ```txt
30
- weave command=verify projectType="go"
31
- ```
32
-
33
- 빠르게(typecheck+tests만) 돌리려면:
34
-
35
- ```txt
36
- weave command=verify verifyMode="quick"
37
- ```
38
-
39
- ---
40
-
41
- ## 결과
42
-
43
- - PASS면 `✅ Verification passed.`
44
- - FAIL이면 실패한 레이어와 로그(tail)를 출력합니다
1
+ ---
2
+ description: Run build and test verification for the current worktree
3
+ ---
4
+
5
+ # /weave-verify
6
+
7
+ Run project-appropriate build and test checks in the current worktree.
8
+
9
+ Use the `weave` tool:
10
+
11
+ ```txt
12
+ weave command=verify
13
+ weave command=verify verifyMode=quick
14
+ weave command=verify projectType="go"
15
+ ```
16
+
17
+ ## Behavior
18
+
19
+ - Detects common project types from files in the project root.
20
+ - Recommends or runs build/test commands for Node, Go, Rust, Python, .NET, and similar stacks.
21
+ - Reports command output and failure tails so the next action is clear.
22
+
23
+ Verification evidence matters more than workflow metadata. Treat failing builds/tests as blockers unless the failure is clearly unrelated and already known.
@@ -1,69 +1,27 @@
1
- ---
2
- description: git worktree 기반 병렬 작업(기능/Phase) 관리
3
- ---
4
-
5
- # /weave-worktree - 병렬 작업용 worktree
6
-
7
- ## 개요
8
-
9
- `git worktree`를 이용해 **작업 디렉토리를 분리**하고, 여러 기능/Phase를 병렬로 진행할 수 있게 합니다.
10
-
11
- - 각 worktree는 서로 다른 브랜치 + 파일 시스템 분리
12
- - 충돌/오염을 줄이고, 동시에 여러 기능을 안전하게 개발할 수 있습니다
13
-
14
- Weave는 worktree 생성 시 `.opencode/weave` 아티팩트를 자동 bootstrap(복사/생성)하여,
15
- "weave init은 프로젝트당 1회" 원칙을 유지합니다.
16
-
17
- ---
18
-
19
- ## 사용법
20
-
21
- ### 1) worktree 생성
22
-
23
- ```txt
24
- weave command=worktree worktreeAction=create name="feature-login"
25
- ```
26
-
27
- ### 2) 목록 보기
28
-
29
- ```txt
30
- weave command=worktree worktreeAction=list
31
- ```
32
-
33
- ### 3) 경로 확인(열기)
34
-
35
- ```txt
36
- weave command=worktree worktreeAction=open name="feature-login"
37
- ```
38
-
39
- 해당 폴더로 이동한 뒤, 평소처럼 진행하면 됩니다:
40
-
41
- ```txt
42
- /weave-prepare docs/
43
- weave craft P1
44
- ```
45
-
46
- ### 4) 병합 가이드
47
-
48
- ```txt
49
- weave command=worktree worktreeAction=merge name="feature-login"
50
- ```
51
-
52
- ### 5) worktree 제거
53
-
54
- ```txt
55
- weave command=worktree worktreeAction=remove name="feature-login"
56
- ```
57
-
58
- 브랜치까지 삭제하려면:
59
-
60
- ```txt
61
- weave command=worktree worktreeAction=remove name="feature-login" deleteBranch=true
62
- ```
63
-
64
- ---
65
-
66
- ## 주의(권장 정책)
67
-
68
- - 같은 파일/설정(package-lock, tsconfig 등)을 동시에 바꾸는 작업은 병렬 worktree라도 merge conflict 가능성이 큽니다
69
- - DB 마이그레이션/스키마 변경은 원칙적으로 순차 진행을 권장합니다
1
+ ---
2
+ description: Manage git worktrees for parallel phase or feature work
3
+ ---
4
+
5
+ # /weave-worktree
6
+
7
+ Manage git worktrees so multiple phases or features can be worked on in separate directories.
8
+
9
+ Use the `weave` tool:
10
+
11
+ ```txt
12
+ weave command=worktree worktreeAction=create name="feature-login"
13
+ weave command=worktree worktreeAction=list
14
+ weave command=worktree worktreeAction=open name="feature-login"
15
+ weave command=worktree worktreeAction=merge name="feature-login"
16
+ weave command=worktree worktreeAction=remove name="feature-login"
17
+ weave command=worktree worktreeAction=remove name="feature-login" deleteBranch=true
18
+ ```
19
+
20
+ ## Policy
21
+
22
+ - Use worktrees for independent phases or features that can progress in parallel.
23
+ - Avoid parallel worktrees when multiple tasks will edit the same lockfile, schema, generated artifact, or central config.
24
+ - Bootstrap Weave artifacts into the new worktree so the user does not need to run `/weave-init` again.
25
+ - Merge from the main worktree, resolve conflicts, then run integration verification once.
26
+
27
+ This command explains git behavior without hiding it: each worktree has its own directory and branch, but merge conflicts are still possible when the same files change.
@@ -3,9 +3,6 @@ import * as path from "node:path";
3
3
  import * as os from "node:os";
4
4
  import { spawnSync } from "node:child_process";
5
5
  import { VERSION } from "../version.js";
6
- // ============================================================================
7
- // Constants
8
- // ============================================================================
9
6
  const MIN_OPENCODE_VERSION = "1.0.0";
10
7
  const PLUGIN_NAME = "maskweaver";
11
8
  const colors = {
@@ -18,9 +15,6 @@ const colors = {
18
15
  blue: "\x1b[34m",
19
16
  cyan: "\x1b[36m",
20
17
  };
21
- // ============================================================================
22
- // Utilities
23
- // ============================================================================
24
18
  function icon(status) {
25
19
  switch (status) {
26
20
  case "pass": return `${colors.green}✓${colors.reset}`;
@@ -56,9 +50,6 @@ function compareVersions(current, minimum) {
56
50
  }
57
51
  return true;
58
52
  }
59
- // ============================================================================
60
- // Checks
61
- // ============================================================================
62
53
  function checkOpenCodeVersion() {
63
54
  try {
64
55
  const result = spawnSync("opencode", ["--version"], {
@@ -107,7 +98,6 @@ function checkPluginRegistration() {
107
98
  const projectConfig = path.join(projectDir, "opencode.json");
108
99
  let foundIn = "";
109
100
  let legacyEntry = "";
110
- // Check global
111
101
  if (fs.existsSync(globalConfig)) {
112
102
  try {
113
103
  const config = JSON.parse(fs.readFileSync(globalConfig, "utf-8"));
@@ -120,9 +110,8 @@ function checkPluginRegistration() {
120
110
  }
121
111
  }
122
112
  }
123
- catch { /* ignore */ }
113
+ catch { }
124
114
  }
125
- // Check project
126
115
  if (!foundIn && fs.existsSync(projectConfig)) {
127
116
  try {
128
117
  const config = JSON.parse(fs.readFileSync(projectConfig, "utf-8"));
@@ -135,7 +124,7 @@ function checkPluginRegistration() {
135
124
  }
136
125
  }
137
126
  }
138
- catch { /* ignore */ }
127
+ catch { }
139
128
  }
140
129
  if (foundIn && legacyEntry) {
141
130
  return {
@@ -203,7 +192,7 @@ function checkMasksDirectory() {
203
192
  location = label;
204
193
  }
205
194
  }
206
- catch { /* ignore */ }
195
+ catch { }
207
196
  }
208
197
  }
209
198
  if (count > 0) {
@@ -230,7 +219,7 @@ function checkAgentFiles() {
230
219
  const files = fs.readdirSync(dir).filter((f) => f.endsWith(".md"));
231
220
  count += files.length;
232
221
  }
233
- catch { /* ignore */ }
222
+ catch { }
234
223
  }
235
224
  }
236
225
  if (count > 0) {
@@ -257,7 +246,7 @@ function checkCommandFiles() {
257
246
  const files = fs.readdirSync(dir).filter((f) => f.endsWith(".md"));
258
247
  count += files.length;
259
248
  }
260
- catch { /* ignore */ }
249
+ catch { }
261
250
  }
262
251
  }
263
252
  if (count > 0) {
@@ -276,7 +265,6 @@ function checkCommandFiles() {
276
265
  }
277
266
  function checkGdcIntegration() {
278
267
  const projectDir = getProjectDir();
279
- // Check for GDC-related files in .opencode
280
268
  const weaveDir = path.join(projectDir, "weave");
281
269
  if (fs.existsSync(weaveDir)) {
282
270
  return {
@@ -285,7 +273,6 @@ function checkGdcIntegration() {
285
273
  message: "weave/ 디렉토리 있음",
286
274
  };
287
275
  }
288
- // Check for AGENTS.md (used by /init-deep)
289
276
  const agentsMd = path.join(process.cwd(), "AGENTS.md");
290
277
  if (fs.existsSync(agentsMd)) {
291
278
  return {
@@ -301,9 +288,6 @@ function checkGdcIntegration() {
301
288
  hint: "/weave init 으로 초기화하세요",
302
289
  };
303
290
  }
304
- // ============================================================================
305
- // Doctor Command
306
- // ============================================================================
307
291
  export function runDoctor() {
308
292
  const results = [
309
293
  checkOpenCodeVersion(),
@@ -1,10 +1,2 @@
1
1
  #!/usr/bin/env node
2
- /**
3
- * Maskweaver CLI Installer
4
- *
5
- * Commands:
6
- * - maskweaver install - Register plugin in opencode.json
7
- * - maskweaver uninstall - Remove plugin from opencode.json
8
- * - maskweaver status - Show current installation status
9
- */
10
2
  export {};
@@ -1,12 +1,4 @@
1
1
  #!/usr/bin/env node
2
- /**
3
- * Maskweaver CLI Installer
4
- *
5
- * Commands:
6
- * - maskweaver install - Register plugin in opencode.json
7
- * - maskweaver uninstall - Remove plugin from opencode.json
8
- * - maskweaver status - Show current installation status
9
- */
10
2
  import { Command } from "commander";
11
3
  import * as fs from "node:fs";
12
4
  import * as path from "node:path";
@@ -14,14 +6,10 @@ import * as os from "node:os";
14
6
  import { VERSION } from "../version.js";
15
7
  import { runDoctor, printDoctorReport } from "./doctor.js";
16
8
  import { writeDefaultRuntimeConfig, writeDefaultPluginConfig } from "../shared/generate-agents.js";
17
- // ============================================================================
18
- // Constants
19
- // ============================================================================
20
9
  const PLUGIN_NAME = "maskweaver";
21
10
  const LEGACY_PLUGIN_NAMES = ["maskweaver/plugin", "@maskweaver/plugin"];
22
11
  const ALL_PLUGIN_NAMES = [PLUGIN_NAME, ...LEGACY_PLUGIN_NAMES];
23
12
  const CONFIG_NAME = "opencode.json";
24
- // ANSI Colors
25
13
  const colors = {
26
14
  reset: "\x1b[0m",
27
15
  bright: "\x1b[1m",
@@ -34,9 +22,6 @@ const colors = {
34
22
  cyan: "\x1b[36m",
35
23
  white: "\x1b[37m",
36
24
  };
37
- // ============================================================================
38
- // Utilities
39
- // ============================================================================
40
25
  function log(message, color) {
41
26
  const colorCode = color ? colors[color] : "";
42
27
  console.log(`${colorCode}${message}${colors.reset}`);
@@ -112,9 +97,6 @@ function normalizePluginEntries(config) {
112
97
  config.plugin = [...preserved, PLUGIN_NAME];
113
98
  return { migratedFrom, changed: true };
114
99
  }
115
- // ============================================================================
116
- // Commands
117
- // ============================================================================
118
100
  async function installPlugin(options) {
119
101
  const isLocal = options.local || false;
120
102
  const configPath = getConfigPath(isLocal);
@@ -126,9 +108,7 @@ async function installPlugin(options) {
126
108
  info(`설정 파일: ${configPath}`);
127
109
  log("");
128
110
  try {
129
- // Read or create config
130
111
  let config = readConfig(configPath);
131
- // Initialize plugin array if not exists
132
112
  if (!config.plugin) {
133
113
  config.plugin = [];
134
114
  }
@@ -140,20 +120,16 @@ async function installPlugin(options) {
140
120
  log("");
141
121
  return;
142
122
  }
143
- // Check if already installed
144
123
  if (config.plugin.includes(PLUGIN_NAME)) {
145
124
  warning(`플러그인이 이미 설치되어 있습니다.`);
146
125
  info(`현재 ${scope} 설정에 등록되어 있습니다: ${PLUGIN_NAME}`);
147
126
  log("");
148
127
  return;
149
128
  }
150
- // Add plugin
151
129
  config.plugin.push(PLUGIN_NAME);
152
- // Save config
153
130
  writeConfig(configPath, config);
154
131
  let createdRuntimeConfig = false;
155
132
  let createdPluginConfig = false;
156
- // Auto-create local maskweaver.config.json if not exists
157
133
  if (isLocal) {
158
134
  const runtimeCreated = writeDefaultRuntimeConfig(process.cwd());
159
135
  if (runtimeCreated) {
@@ -202,7 +178,6 @@ async function uninstallPlugin(options) {
202
178
  info(`설정 파일: ${configPath}`);
203
179
  log("");
204
180
  try {
205
- // Read config
206
181
  if (!fs.existsSync(configPath)) {
207
182
  warning(`설정 파일이 존재하지 않습니다.`);
208
183
  info(`플러그인이 설치되어 있지 않습니다.`);
@@ -210,19 +185,15 @@ async function uninstallPlugin(options) {
210
185
  return;
211
186
  }
212
187
  let config = readConfig(configPath);
213
- // Check if installed
214
188
  if (!isPluginInstalled(config)) {
215
189
  warning(`플러그인이 설치되어 있지 않습니다.`);
216
190
  log("");
217
191
  return;
218
192
  }
219
- // Remove plugin
220
193
  config.plugin = config.plugin.filter((p) => !ALL_PLUGIN_NAMES.includes(p));
221
- // Save config
222
194
  writeConfig(configPath, config);
223
195
  success(`플러그인이 성공적으로 제거되었습니다.`);
224
196
  log("");
225
- // Cleanup notice
226
197
  log(`📋 정리 안내`, "bright");
227
198
  log(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`, "dim");
228
199
  log("");
@@ -258,7 +229,6 @@ async function showStatus(options) {
258
229
  log(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`, "dim");
259
230
  log("");
260
231
  try {
261
- // Check global installation
262
232
  const globalPath = getConfigPath(false);
263
233
  const globalConfig = readConfig(globalPath);
264
234
  const globalInstalled = isPluginInstalled(globalConfig);
@@ -272,7 +242,6 @@ async function showStatus(options) {
272
242
  log(` ❌ 미설치`, "dim");
273
243
  }
274
244
  log("");
275
- // Check local installation
276
245
  const localPath = getConfigPath(true);
277
246
  const localConfig = fs.existsSync(localPath) ? readConfig(localPath) : {};
278
247
  const localInstalled = isPluginInstalled(localConfig);
@@ -286,7 +255,6 @@ async function showStatus(options) {
286
255
  log(` ❌ 미설치`, "dim");
287
256
  }
288
257
  log("");
289
- // Show plugin info
290
258
  if (globalInstalled || localInstalled) {
291
259
  log(`ℹ️ 플러그인 정보:`, "cyan");
292
260
  log(` 이름: ${PLUGIN_NAME}`, "dim");
@@ -299,7 +267,6 @@ async function showStatus(options) {
299
267
  }
300
268
  log("");
301
269
  }
302
- // Installation hint
303
270
  if (!globalInstalled && !localInstalled) {
304
271
  log(`설치하려면:`, "yellow");
305
272
  log(` maskweaver install # 전역 설치`, "dim");
@@ -313,9 +280,6 @@ async function showStatus(options) {
313
280
  process.exit(1);
314
281
  }
315
282
  }
316
- // ============================================================================
317
- // CLI Program
318
- // ============================================================================
319
283
  const program = new Command();
320
284
  program
321
285
  .name("maskweaver")
@@ -355,13 +319,10 @@ program
355
319
  printDoctorReport(report);
356
320
  process.exit(report.failed > 0 ? 1 : 0);
357
321
  });
358
- // Default action: show help
359
322
  program.action(() => {
360
323
  program.help();
361
324
  });
362
- // Parse command line arguments
363
325
  program.parse(process.argv);
364
- // Show help if no command provided
365
326
  if (!process.argv.slice(2).length) {
366
327
  program.help();
367
328
  }