@su-record/vibe 2.6.26 → 2.6.28

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 (287) hide show
  1. package/CLAUDE.md +202 -153
  2. package/LICENSE +21 -21
  3. package/README.md +267 -236
  4. package/agents/architect-low.md +41 -41
  5. package/agents/architect-medium.md +59 -59
  6. package/agents/architect.md +80 -80
  7. package/agents/build-error-resolver.md +115 -115
  8. package/agents/compounder.md +261 -261
  9. package/agents/diagrammer.md +178 -178
  10. package/agents/docs/api-documenter.md +99 -99
  11. package/agents/docs/changelog-writer.md +93 -93
  12. package/agents/e2e-tester.md +266 -266
  13. package/agents/explorer-low.md +42 -42
  14. package/agents/explorer-medium.md +59 -59
  15. package/agents/explorer.md +48 -48
  16. package/agents/implementer-low.md +43 -43
  17. package/agents/implementer-medium.md +52 -52
  18. package/agents/implementer.md +54 -54
  19. package/agents/planning/requirements-analyst.md +84 -84
  20. package/agents/planning/ux-advisor.md +83 -83
  21. package/agents/qa/acceptance-tester.md +86 -86
  22. package/agents/qa/edge-case-finder.md +93 -93
  23. package/agents/refactor-cleaner.md +143 -143
  24. package/agents/research/best-practices-agent.md +199 -199
  25. package/agents/research/codebase-patterns-agent.md +157 -157
  26. package/agents/research/framework-docs-agent.md +188 -188
  27. package/agents/research/security-advisory-agent.md +213 -213
  28. package/agents/review/architecture-reviewer.md +107 -107
  29. package/agents/review/complexity-reviewer.md +116 -116
  30. package/agents/review/data-integrity-reviewer.md +88 -88
  31. package/agents/review/git-history-reviewer.md +103 -103
  32. package/agents/review/performance-reviewer.md +86 -86
  33. package/agents/review/python-reviewer.md +150 -150
  34. package/agents/review/rails-reviewer.md +139 -139
  35. package/agents/review/react-reviewer.md +144 -144
  36. package/agents/review/security-reviewer.md +80 -80
  37. package/agents/review/simplicity-reviewer.md +140 -140
  38. package/agents/review/test-coverage-reviewer.md +116 -116
  39. package/agents/review/typescript-reviewer.md +127 -127
  40. package/agents/searcher.md +54 -54
  41. package/agents/simplifier.md +120 -120
  42. package/agents/tester.md +49 -49
  43. package/agents/ui-previewer.md +268 -268
  44. package/commands/vibe.analyze.md +356 -356
  45. package/commands/vibe.reason.md +329 -329
  46. package/commands/vibe.review.md +423 -423
  47. package/commands/vibe.run.md +1313 -1313
  48. package/commands/vibe.spec.md +1054 -1054
  49. package/commands/vibe.spec.review.md +412 -412
  50. package/commands/vibe.trace.md +161 -161
  51. package/commands/vibe.utils.md +376 -376
  52. package/commands/vibe.verify.md +375 -375
  53. package/dist/cli/collaborator.js +52 -52
  54. package/dist/cli/detect.js +32 -32
  55. package/dist/cli/hud.js +20 -20
  56. package/dist/cli/index.js +112 -112
  57. package/dist/cli/llm.js +144 -144
  58. package/dist/cli/mcp.d.ts +49 -0
  59. package/dist/cli/mcp.d.ts.map +1 -0
  60. package/dist/cli/mcp.js +169 -0
  61. package/dist/cli/mcp.js.map +1 -0
  62. package/dist/cli/postinstall.d.ts.map +1 -1
  63. package/dist/cli/postinstall.js +886 -858
  64. package/dist/cli/postinstall.js.map +1 -1
  65. package/dist/cli/setup/GlobalInstaller.d.ts +6 -0
  66. package/dist/cli/setup/GlobalInstaller.d.ts.map +1 -1
  67. package/dist/cli/setup/GlobalInstaller.js +26 -0
  68. package/dist/cli/setup/GlobalInstaller.js.map +1 -1
  69. package/dist/lib/DeepInit.js +24 -24
  70. package/dist/lib/IterationTracker.js +11 -11
  71. package/dist/lib/MemoryManager.d.ts +30 -0
  72. package/dist/lib/MemoryManager.d.ts.map +1 -1
  73. package/dist/lib/MemoryManager.js +74 -0
  74. package/dist/lib/MemoryManager.js.map +1 -1
  75. package/dist/lib/PythonParser.js +108 -108
  76. package/dist/lib/ReviewRace.js +96 -96
  77. package/dist/lib/SkillFrontmatter.js +28 -28
  78. package/dist/lib/SkillQualityGate.js +9 -9
  79. package/dist/lib/SkillRepository.js +159 -159
  80. package/dist/lib/UltraQA.js +77 -77
  81. package/dist/lib/gemini-api.js +5 -5
  82. package/dist/lib/gemini-mcp.d.ts +10 -0
  83. package/dist/lib/gemini-mcp.d.ts.map +1 -0
  84. package/dist/lib/gemini-mcp.js +353 -0
  85. package/dist/lib/gemini-mcp.js.map +1 -0
  86. package/dist/lib/gpt-api.js +4 -4
  87. package/dist/lib/gpt-mcp.d.ts +10 -0
  88. package/dist/lib/gpt-mcp.d.ts.map +1 -0
  89. package/dist/lib/gpt-mcp.js +352 -0
  90. package/dist/lib/gpt-mcp.js.map +1 -0
  91. package/dist/lib/memory/KnowledgeGraph.js +4 -4
  92. package/dist/lib/memory/MemorySearch.js +43 -43
  93. package/dist/lib/memory/MemoryStorage.js +130 -130
  94. package/dist/lib/memory/ObservationStore.js +28 -28
  95. package/dist/lib/memory/SessionRAGRetriever.d.ts +66 -0
  96. package/dist/lib/memory/SessionRAGRetriever.d.ts.map +1 -0
  97. package/dist/lib/memory/SessionRAGRetriever.js +196 -0
  98. package/dist/lib/memory/SessionRAGRetriever.js.map +1 -0
  99. package/dist/lib/memory/SessionRAGRetriever.test.d.ts +2 -0
  100. package/dist/lib/memory/SessionRAGRetriever.test.d.ts.map +1 -0
  101. package/dist/lib/memory/SessionRAGRetriever.test.js +180 -0
  102. package/dist/lib/memory/SessionRAGRetriever.test.js.map +1 -0
  103. package/dist/lib/memory/SessionRAGStore.d.ts +153 -0
  104. package/dist/lib/memory/SessionRAGStore.d.ts.map +1 -0
  105. package/dist/lib/memory/SessionRAGStore.js +673 -0
  106. package/dist/lib/memory/SessionRAGStore.js.map +1 -0
  107. package/dist/lib/memory/SessionRAGStore.test.d.ts +2 -0
  108. package/dist/lib/memory/SessionRAGStore.test.d.ts.map +1 -0
  109. package/dist/lib/memory/SessionRAGStore.test.js +326 -0
  110. package/dist/lib/memory/SessionRAGStore.test.js.map +1 -0
  111. package/dist/lib/memory/SessionSummarizer.js +9 -9
  112. package/dist/orchestrator/AgentManager.js +12 -12
  113. package/dist/orchestrator/MultiLlmResearch.js +8 -8
  114. package/dist/orchestrator/SmartRouter.js +11 -11
  115. package/dist/orchestrator/SwarmOrchestrator.test.js +16 -16
  116. package/dist/orchestrator/parallelResearch.js +24 -24
  117. package/dist/tools/analytics/getUsageAnalytics.d.ts +10 -0
  118. package/dist/tools/analytics/getUsageAnalytics.d.ts.map +1 -0
  119. package/dist/tools/analytics/getUsageAnalytics.js +246 -0
  120. package/dist/tools/analytics/getUsageAnalytics.js.map +1 -0
  121. package/dist/tools/analytics/index.d.ts +5 -0
  122. package/dist/tools/analytics/index.d.ts.map +1 -0
  123. package/dist/tools/analytics/index.js +5 -0
  124. package/dist/tools/analytics/index.js.map +1 -0
  125. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  126. package/dist/tools/convention/getCodingGuide.d.ts +7 -0
  127. package/dist/tools/convention/getCodingGuide.d.ts.map +1 -0
  128. package/dist/tools/convention/getCodingGuide.js +69 -0
  129. package/dist/tools/convention/getCodingGuide.js.map +1 -0
  130. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  131. package/dist/tools/index.d.ts +5 -0
  132. package/dist/tools/index.d.ts.map +1 -1
  133. package/dist/tools/index.js +4 -0
  134. package/dist/tools/index.js.map +1 -1
  135. package/dist/tools/memory/index.d.ts +3 -0
  136. package/dist/tools/memory/index.d.ts.map +1 -1
  137. package/dist/tools/memory/index.js +4 -0
  138. package/dist/tools/memory/index.js.map +1 -1
  139. package/dist/tools/memory/manageGoals.d.ts +11 -0
  140. package/dist/tools/memory/manageGoals.d.ts.map +1 -0
  141. package/dist/tools/memory/manageGoals.js +152 -0
  142. package/dist/tools/memory/manageGoals.js.map +1 -0
  143. package/dist/tools/memory/retrieveSessionContext.d.ts +9 -0
  144. package/dist/tools/memory/retrieveSessionContext.d.ts.map +1 -0
  145. package/dist/tools/memory/retrieveSessionContext.js +140 -0
  146. package/dist/tools/memory/retrieveSessionContext.js.map +1 -0
  147. package/dist/tools/memory/saveSessionItem.d.ts +26 -0
  148. package/dist/tools/memory/saveSessionItem.d.ts.map +1 -0
  149. package/dist/tools/memory/saveSessionItem.js +218 -0
  150. package/dist/tools/memory/saveSessionItem.js.map +1 -0
  151. package/dist/tools/memory/startSession.d.ts.map +1 -1
  152. package/dist/tools/memory/startSession.js +29 -0
  153. package/dist/tools/memory/startSession.js.map +1 -1
  154. package/dist/tools/planning/analyzeRequirements.d.ts +9 -0
  155. package/dist/tools/planning/analyzeRequirements.d.ts.map +1 -0
  156. package/dist/tools/planning/analyzeRequirements.js +171 -0
  157. package/dist/tools/planning/analyzeRequirements.js.map +1 -0
  158. package/dist/tools/planning/createUserStories.d.ts +9 -0
  159. package/dist/tools/planning/createUserStories.d.ts.map +1 -0
  160. package/dist/tools/planning/createUserStories.js +124 -0
  161. package/dist/tools/planning/createUserStories.js.map +1 -0
  162. package/dist/tools/planning/featureRoadmap.d.ts +10 -0
  163. package/dist/tools/planning/featureRoadmap.d.ts.map +1 -0
  164. package/dist/tools/planning/featureRoadmap.js +207 -0
  165. package/dist/tools/planning/featureRoadmap.js.map +1 -0
  166. package/dist/tools/planning/generatePrd.d.ts +11 -0
  167. package/dist/tools/planning/generatePrd.d.ts.map +1 -0
  168. package/dist/tools/planning/generatePrd.js +161 -0
  169. package/dist/tools/planning/generatePrd.js.map +1 -0
  170. package/dist/tools/planning/index.d.ts +8 -0
  171. package/dist/tools/planning/index.d.ts.map +1 -0
  172. package/dist/tools/planning/index.js +8 -0
  173. package/dist/tools/planning/index.js.map +1 -0
  174. package/dist/tools/prompt/analyzePrompt.d.ts +7 -0
  175. package/dist/tools/prompt/analyzePrompt.d.ts.map +1 -0
  176. package/dist/tools/prompt/analyzePrompt.js +150 -0
  177. package/dist/tools/prompt/analyzePrompt.js.map +1 -0
  178. package/dist/tools/prompt/enhancePrompt.d.ts +8 -0
  179. package/dist/tools/prompt/enhancePrompt.d.ts.map +1 -0
  180. package/dist/tools/prompt/enhancePrompt.js +110 -0
  181. package/dist/tools/prompt/enhancePrompt.js.map +1 -0
  182. package/dist/tools/prompt/enhancePromptGemini.d.ts +8 -0
  183. package/dist/tools/prompt/enhancePromptGemini.d.ts.map +1 -0
  184. package/dist/tools/prompt/enhancePromptGemini.js +332 -0
  185. package/dist/tools/prompt/enhancePromptGemini.js.map +1 -0
  186. package/dist/tools/prompt/index.d.ts +7 -0
  187. package/dist/tools/prompt/index.d.ts.map +1 -0
  188. package/dist/tools/prompt/index.js +7 -0
  189. package/dist/tools/prompt/index.js.map +1 -0
  190. package/dist/tools/reasoning/applyReasoningFramework.d.ts +8 -0
  191. package/dist/tools/reasoning/applyReasoningFramework.d.ts.map +1 -0
  192. package/dist/tools/reasoning/applyReasoningFramework.js +266 -0
  193. package/dist/tools/reasoning/applyReasoningFramework.js.map +1 -0
  194. package/dist/tools/reasoning/index.d.ts +5 -0
  195. package/dist/tools/reasoning/index.d.ts.map +1 -0
  196. package/dist/tools/reasoning/index.js +5 -0
  197. package/dist/tools/reasoning/index.js.map +1 -0
  198. package/dist/tools/spec/prdParser.test.js +171 -171
  199. package/dist/tools/spec/specGenerator.js +169 -169
  200. package/dist/tools/spec/traceabilityMatrix.js +64 -64
  201. package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
  202. package/dist/tools/thinking/analyzeProblem.d.ts +7 -0
  203. package/dist/tools/thinking/analyzeProblem.d.ts.map +1 -0
  204. package/dist/tools/thinking/analyzeProblem.js +55 -0
  205. package/dist/tools/thinking/analyzeProblem.js.map +1 -0
  206. package/dist/tools/thinking/breakDownProblem.d.ts +8 -0
  207. package/dist/tools/thinking/breakDownProblem.d.ts.map +1 -0
  208. package/dist/tools/thinking/breakDownProblem.js +145 -0
  209. package/dist/tools/thinking/breakDownProblem.js.map +1 -0
  210. package/dist/tools/thinking/createThinkingChain.d.ts +7 -0
  211. package/dist/tools/thinking/createThinkingChain.d.ts.map +1 -0
  212. package/dist/tools/thinking/createThinkingChain.js +44 -0
  213. package/dist/tools/thinking/createThinkingChain.js.map +1 -0
  214. package/dist/tools/thinking/formatAsPlan.d.ts +9 -0
  215. package/dist/tools/thinking/formatAsPlan.d.ts.map +1 -0
  216. package/dist/tools/thinking/formatAsPlan.js +78 -0
  217. package/dist/tools/thinking/formatAsPlan.js.map +1 -0
  218. package/dist/tools/thinking/index.d.ts +10 -0
  219. package/dist/tools/thinking/index.d.ts.map +1 -0
  220. package/dist/tools/thinking/index.js +10 -0
  221. package/dist/tools/thinking/index.js.map +1 -0
  222. package/dist/tools/thinking/stepByStepAnalysis.d.ts +8 -0
  223. package/dist/tools/thinking/stepByStepAnalysis.d.ts.map +1 -0
  224. package/dist/tools/thinking/stepByStepAnalysis.js +63 -0
  225. package/dist/tools/thinking/stepByStepAnalysis.js.map +1 -0
  226. package/dist/tools/thinking/thinkAloudProcess.d.ts +8 -0
  227. package/dist/tools/thinking/thinkAloudProcess.d.ts.map +1 -0
  228. package/dist/tools/thinking/thinkAloudProcess.js +80 -0
  229. package/dist/tools/thinking/thinkAloudProcess.js.map +1 -0
  230. package/hooks/hooks.json +115 -115
  231. package/hooks/scripts/code-check.js +70 -70
  232. package/hooks/scripts/code-review.js +22 -22
  233. package/hooks/scripts/complexity.js +22 -22
  234. package/hooks/scripts/compound.js +23 -23
  235. package/hooks/scripts/context-save.js +53 -53
  236. package/hooks/scripts/gemini-ui-gen.js +281 -281
  237. package/hooks/scripts/generate-brand-assets.js +474 -474
  238. package/hooks/scripts/hud-multiline.js +262 -262
  239. package/hooks/scripts/hud-status.js +291 -291
  240. package/hooks/scripts/keyword-detector.js +214 -214
  241. package/hooks/scripts/llm-orchestrate.js +171 -171
  242. package/hooks/scripts/post-edit.js +97 -97
  243. package/hooks/scripts/post-tool-verify.js +210 -210
  244. package/hooks/scripts/pre-tool-guard.js +125 -125
  245. package/hooks/scripts/prompt-dispatcher.js +161 -161
  246. package/hooks/scripts/recall.js +22 -22
  247. package/hooks/scripts/session-start.js +30 -30
  248. package/hooks/scripts/skill-injector.js +191 -191
  249. package/hooks/scripts/utils.js +97 -97
  250. package/languages/csharp-unity.md +515 -515
  251. package/languages/gdscript-godot.md +470 -470
  252. package/languages/ruby-rails.md +489 -489
  253. package/languages/typescript-angular.md +433 -433
  254. package/languages/typescript-astro.md +416 -416
  255. package/languages/typescript-electron.md +406 -406
  256. package/languages/typescript-nestjs.md +524 -524
  257. package/languages/typescript-svelte.md +407 -407
  258. package/languages/typescript-tauri.md +365 -365
  259. package/package.json +84 -84
  260. package/skills/brand-assets.md +141 -141
  261. package/skills/commerce-patterns.md +361 -361
  262. package/skills/context7-usage.md +102 -102
  263. package/skills/e2e-commerce.md +304 -304
  264. package/skills/frontend-design.md +92 -92
  265. package/skills/git-worktree.md +181 -181
  266. package/skills/parallel-research.md +77 -77
  267. package/skills/priority-todos.md +239 -239
  268. package/skills/seo-checklist.md +244 -244
  269. package/skills/tool-fallback.md +190 -190
  270. package/skills/vibe-capabilities.md +161 -161
  271. package/vibe/constitution.md +227 -227
  272. package/vibe/rules/core/communication-guide.md +98 -98
  273. package/vibe/rules/core/development-philosophy.md +52 -52
  274. package/vibe/rules/core/quick-start.md +102 -102
  275. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  276. package/vibe/rules/quality/checklist.md +276 -276
  277. package/vibe/rules/quality/testing-strategy.md +440 -440
  278. package/vibe/rules/standards/anti-patterns.md +541 -541
  279. package/vibe/rules/standards/code-structure.md +291 -291
  280. package/vibe/rules/standards/complexity-metrics.md +313 -313
  281. package/vibe/rules/standards/naming-conventions.md +198 -198
  282. package/vibe/setup.sh +31 -31
  283. package/vibe/templates/constitution-template.md +252 -252
  284. package/vibe/templates/contract-backend-template.md +526 -526
  285. package/vibe/templates/contract-frontend-template.md +599 -599
  286. package/vibe/templates/feature-template.md +96 -96
  287. package/vibe/templates/spec-template.md +221 -221
@@ -72,45 +72,45 @@ function generateSplitSpec(prd, featureName, phases, options) {
72
72
  function buildSpecContent(prd, featureName, phases, options) {
73
73
  const { techStack = [], relatedCodePaths = [], designReference, additionalConstraints = [], additionalOutputs = [] } = options;
74
74
  const now = new Date().toISOString();
75
- let content = `---
76
- status: pending
77
- currentPhase: 0
78
- totalPhases: ${phases.length}
79
- createdAt: ${now}
80
- lastUpdated: ${now}
81
- ---
82
-
83
- # SPEC: ${featureName}
84
-
85
- ## Persona
86
- <role>
87
- Senior developer implementing ${featureName}.
88
- - Follow existing code patterns and conventions
89
- - Write testable, maintainable code
90
- - Consider security and performance implications
91
- </role>
92
-
93
- ## Context
94
- <context>
95
- ### Background
96
- ${prd.description || `Implementation of ${prd.title}`}
97
-
98
- ### Tech Stack
99
- ${techStack.length > 0 ? techStack.map(t => `- ${t}`).join('\n') : '- (To be determined based on project)'}
100
-
101
- ### Related Code
102
- ${relatedCodePaths.length > 0 ? relatedCodePaths.map(p => `- \`${p}\``).join('\n') : '- (Analyze existing codebase for patterns)'}
103
-
104
- ### Design Reference
105
- ${designReference || '- (None specified)'}
106
-
107
- ### Requirements Source
108
- - Parsed from PRD: ${prd.requirements.length} requirements
109
- - Format: ${prd.metadata.format}
110
- </context>
111
-
112
- ## Task
113
- <task>
75
+ let content = `---
76
+ status: pending
77
+ currentPhase: 0
78
+ totalPhases: ${phases.length}
79
+ createdAt: ${now}
80
+ lastUpdated: ${now}
81
+ ---
82
+
83
+ # SPEC: ${featureName}
84
+
85
+ ## Persona
86
+ <role>
87
+ Senior developer implementing ${featureName}.
88
+ - Follow existing code patterns and conventions
89
+ - Write testable, maintainable code
90
+ - Consider security and performance implications
91
+ </role>
92
+
93
+ ## Context
94
+ <context>
95
+ ### Background
96
+ ${prd.description || `Implementation of ${prd.title}`}
97
+
98
+ ### Tech Stack
99
+ ${techStack.length > 0 ? techStack.map(t => `- ${t}`).join('\n') : '- (To be determined based on project)'}
100
+
101
+ ### Related Code
102
+ ${relatedCodePaths.length > 0 ? relatedCodePaths.map(p => `- \`${p}\``).join('\n') : '- (Analyze existing codebase for patterns)'}
103
+
104
+ ### Design Reference
105
+ ${designReference || '- (None specified)'}
106
+
107
+ ### Requirements Source
108
+ - Parsed from PRD: ${prd.requirements.length} requirements
109
+ - Format: ${prd.metadata.format}
110
+ </context>
111
+
112
+ ## Task
113
+ <task>
114
114
  `;
115
115
  // Phase별 태스크 추가
116
116
  for (let i = 0; i < phases.length; i++) {
@@ -122,47 +122,47 @@ ${designReference || '- (None specified)'}
122
122
  }
123
123
  content += '\n';
124
124
  }
125
- content += `</task>
126
-
127
- ## Constraints
128
- <constraints>
129
- ### Must Follow
130
- - Follow existing code patterns (ES Module, async/await)
131
- - Maintain backward compatibility
132
- - TypeScript strict mode compliance
133
- - No \`any\` type → Use \`unknown\` + type guards
134
- - Functions ≤30 lines recommended, ≤50 lines max
135
- - Nesting ≤3 levels
136
-
137
- ### Error Handling
138
- - Proper try-catch with meaningful error messages
139
- - Loading state handling for async operations
140
- - User-friendly error messages
141
-
142
- ### Security
143
- - Input validation for all user inputs
144
- - Authentication/authorization checks where needed
145
- - No sensitive data in logs
146
- ${additionalConstraints.map(c => `\n- ${c}`).join('')}
147
- </constraints>
148
-
149
- ## Output Format
150
- <output_format>
151
- ### Files to Create
152
- ${generateFileList(phases, 'create')}
153
-
154
- ### Files to Modify
155
- ${generateFileList(phases, 'modify')}
156
-
157
- ### Verification Commands
158
- - \`npm run build\` (build success)
159
- - \`npm test\` (tests pass)
160
- - \`tsc --noEmit\` (type check)
161
- ${additionalOutputs.map(o => `- ${o}`).join('\n')}
162
- </output_format>
163
-
164
- ## Acceptance Criteria
165
- <acceptance>
125
+ content += `</task>
126
+
127
+ ## Constraints
128
+ <constraints>
129
+ ### Must Follow
130
+ - Follow existing code patterns (ES Module, async/await)
131
+ - Maintain backward compatibility
132
+ - TypeScript strict mode compliance
133
+ - No \`any\` type → Use \`unknown\` + type guards
134
+ - Functions ≤30 lines recommended, ≤50 lines max
135
+ - Nesting ≤3 levels
136
+
137
+ ### Error Handling
138
+ - Proper try-catch with meaningful error messages
139
+ - Loading state handling for async operations
140
+ - User-friendly error messages
141
+
142
+ ### Security
143
+ - Input validation for all user inputs
144
+ - Authentication/authorization checks where needed
145
+ - No sensitive data in logs
146
+ ${additionalConstraints.map(c => `\n- ${c}`).join('')}
147
+ </constraints>
148
+
149
+ ## Output Format
150
+ <output_format>
151
+ ### Files to Create
152
+ ${generateFileList(phases, 'create')}
153
+
154
+ ### Files to Modify
155
+ ${generateFileList(phases, 'modify')}
156
+
157
+ ### Verification Commands
158
+ - \`npm run build\` (build success)
159
+ - \`npm test\` (tests pass)
160
+ - \`tsc --noEmit\` (type check)
161
+ ${additionalOutputs.map(o => `- ${o}`).join('\n')}
162
+ </output_format>
163
+
164
+ ## Acceptance Criteria
165
+ <acceptance>
166
166
  `;
167
167
  // 요구사항별 AC 추가
168
168
  for (const req of prd.requirements) {
@@ -177,11 +177,11 @@ ${additionalOutputs.map(o => `- ${o}`).join('\n')}
177
177
  }
178
178
  content += '\n';
179
179
  }
180
- content += `### Build & Test
181
- - [ ] \`npm run build\` succeeds
182
- - [ ] All tests pass
183
- - [ ] No TypeScript errors
184
- </acceptance>
180
+ content += `### Build & Test
181
+ - [ ] \`npm run build\` succeeds
182
+ - [ ] All tests pass
183
+ - [ ] No TypeScript errors
184
+ </acceptance>
185
185
  `;
186
186
  return content;
187
187
  }
@@ -190,53 +190,53 @@ ${additionalOutputs.map(o => `- ${o}`).join('\n')}
190
190
  */
191
191
  function buildMasterSpecContent(prd, featureName, phases, options) {
192
192
  const now = new Date().toISOString();
193
- let content = `---
194
- status: pending
195
- currentPhase: 0
196
- totalPhases: ${phases.length}
197
- createdAt: ${now}
198
- lastUpdated: ${now}
199
- isMaster: true
200
- ---
201
-
202
- # SPEC: ${featureName} (Master)
203
-
204
- ## Overview
205
- - **Feature**: ${prd.title}
206
- - **Total Phases**: ${phases.length}
207
- - **Total Requirements**: ${prd.requirements.length}
208
- - **Format**: Split SPEC (large scope)
209
-
210
- ## Sub-SPECs
211
-
212
- | Order | SPEC File | Description | Status |
213
- |-------|-----------|-------------|--------|
193
+ let content = `---
194
+ status: pending
195
+ currentPhase: 0
196
+ totalPhases: ${phases.length}
197
+ createdAt: ${now}
198
+ lastUpdated: ${now}
199
+ isMaster: true
200
+ ---
201
+
202
+ # SPEC: ${featureName} (Master)
203
+
204
+ ## Overview
205
+ - **Feature**: ${prd.title}
206
+ - **Total Phases**: ${phases.length}
207
+ - **Total Requirements**: ${prd.requirements.length}
208
+ - **Format**: Split SPEC (large scope)
209
+
210
+ ## Sub-SPECs
211
+
212
+ | Order | SPEC File | Description | Status |
213
+ |-------|-----------|-------------|--------|
214
214
  `;
215
215
  for (let i = 0; i < phases.length; i++) {
216
216
  const phase = phases[i];
217
217
  const fileName = `phase-${i + 1}-${normalizeFileName(phase.name)}.md`;
218
218
  content += `| ${i + 1} | ${fileName} | ${phase.name} | ⬜ |\n`;
219
219
  }
220
- content += `
221
- ## Shared Context
222
-
223
- ### Tech Stack
224
- ${options.techStack?.map(t => `- ${t}`).join('\n') || '- (See project configuration)'}
225
-
226
- ### Constraints (Apply to All Phases)
227
- - Follow existing code patterns
228
- - TypeScript strict mode
229
- - No \`any\` type
230
- - Functions ≤50 lines max
231
- ${options.additionalConstraints?.map(c => `- ${c}`).join('\n') || ''}
232
-
233
- ## Execution Order
234
- \`\`\`
235
- ${phases.map((p, i) => `Phase ${i + 1}: ${p.name}`).join(' → ')}
236
- \`\`\`
237
-
238
- ## Dependencies
239
- ${generateDependencyList(phases)}
220
+ content += `
221
+ ## Shared Context
222
+
223
+ ### Tech Stack
224
+ ${options.techStack?.map(t => `- ${t}`).join('\n') || '- (See project configuration)'}
225
+
226
+ ### Constraints (Apply to All Phases)
227
+ - Follow existing code patterns
228
+ - TypeScript strict mode
229
+ - No \`any\` type
230
+ - Functions ≤50 lines max
231
+ ${options.additionalConstraints?.map(c => `- ${c}`).join('\n') || ''}
232
+
233
+ ## Execution Order
234
+ \`\`\`
235
+ ${phases.map((p, i) => `Phase ${i + 1}: ${p.name}`).join(' → ')}
236
+ \`\`\`
237
+
238
+ ## Dependencies
239
+ ${generateDependencyList(phases)}
240
240
  `;
241
241
  return content;
242
242
  }
@@ -245,54 +245,54 @@ ${generateDependencyList(phases)}
245
245
  */
246
246
  function buildPhaseSpecContent(prd, featureName, phase, phaseNumber, totalPhases, options) {
247
247
  const now = new Date().toISOString();
248
- let content = `---
249
- status: pending
250
- phase: ${phaseNumber}
251
- totalPhases: ${totalPhases}
252
- masterSpec: _index.md
253
- createdAt: ${now}
254
- lastUpdated: ${now}
255
- ---
256
-
257
- # SPEC: ${featureName} - Phase ${phaseNumber}: ${phase.name}
258
-
259
- ## Persona
260
- <role>
261
- Developer implementing Phase ${phaseNumber} of ${featureName}.
262
- - Focus on ${phase.name}
263
- - Follow project conventions
264
- - Write testable code
265
- </role>
266
-
267
- ## Context
268
- <context>
269
- ### Phase Goal
270
- ${getPhaseGoal(phase)}
271
-
272
- ### Requirements (${phase.requirements.length})
273
- ${phase.requirements.map(r => `- ${r.id}: ${truncateText(r.description, 50)}`).join('\n')}
274
-
275
- ### Dependencies
276
- ${phaseNumber > 1 ? `- Requires Phase ${phaseNumber - 1} completion` : '- No dependencies (first phase)'}
277
- </context>
278
-
279
- ## Task
280
- <task>
248
+ let content = `---
249
+ status: pending
250
+ phase: ${phaseNumber}
251
+ totalPhases: ${totalPhases}
252
+ masterSpec: _index.md
253
+ createdAt: ${now}
254
+ lastUpdated: ${now}
255
+ ---
256
+
257
+ # SPEC: ${featureName} - Phase ${phaseNumber}: ${phase.name}
258
+
259
+ ## Persona
260
+ <role>
261
+ Developer implementing Phase ${phaseNumber} of ${featureName}.
262
+ - Focus on ${phase.name}
263
+ - Follow project conventions
264
+ - Write testable code
265
+ </role>
266
+
267
+ ## Context
268
+ <context>
269
+ ### Phase Goal
270
+ ${getPhaseGoal(phase)}
271
+
272
+ ### Requirements (${phase.requirements.length})
273
+ ${phase.requirements.map(r => `- ${r.id}: ${truncateText(r.description, 50)}`).join('\n')}
274
+
275
+ ### Dependencies
276
+ ${phaseNumber > 1 ? `- Requires Phase ${phaseNumber - 1} completion` : '- No dependencies (first phase)'}
277
+ </context>
278
+
279
+ ## Task
280
+ <task>
281
281
  `;
282
282
  for (const task of phase.tasks) {
283
283
  content += `1. [ ] ${task}\n`;
284
284
  }
285
- content += `</task>
286
-
287
- ## Acceptance Criteria
288
- <acceptance>
285
+ content += `</task>
286
+
287
+ ## Acceptance Criteria
288
+ <acceptance>
289
289
  `;
290
290
  for (const req of phase.requirements) {
291
291
  content += `- [ ] ${req.id}: ${truncateText(req.description, 60)}\n`;
292
292
  }
293
- content += `- [ ] Phase ${phaseNumber} build succeeds
294
- - [ ] Phase ${phaseNumber} tests pass
295
- </acceptance>
293
+ content += `- [ ] Phase ${phaseNumber} build succeeds
294
+ - [ ] Phase ${phaseNumber} tests pass
295
+ </acceptance>
296
296
  `;
297
297
  return content;
298
298
  }
@@ -385,11 +385,11 @@ function getPhaseGoal(phase) {
385
385
  function generateFileList(phases, type) {
386
386
  // 실제로는 요구사항을 분석해서 추론해야 하지만, 기본 템플릿 제공
387
387
  if (type === 'create') {
388
- return `- (To be determined based on implementation)
389
- - \`src/[feature]/index.ts\`
388
+ return `- (To be determined based on implementation)
389
+ - \`src/[feature]/index.ts\`
390
390
  - \`src/[feature]/[feature].test.ts\``;
391
391
  }
392
- return `- (Analyze existing codebase)
392
+ return `- (Analyze existing codebase)
393
393
  - Relevant existing files`;
394
394
  }
395
395
  /**
@@ -117,74 +117,74 @@ export function formatMatrixAsMarkdown(matrix) {
117
117
  * 매트릭스를 HTML로 출력
118
118
  */
119
119
  export function formatMatrixAsHtml(matrix) {
120
- let html = `<!DOCTYPE html>
121
- <html>
122
- <head>
123
- <title>RTM: ${matrix.featureName}</title>
124
- <style>
125
- body { font-family: -apple-system, BlinkMacSystemFont, sans-serif; margin: 2rem; }
126
- table { border-collapse: collapse; width: 100%; }
127
- th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
128
- th { background: #f5f5f5; }
129
- .full { background: #d4edda; }
130
- .partial { background: #fff3cd; }
131
- .none { background: #f8d7da; }
132
- .summary { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1rem; margin: 1rem 0; }
133
- .summary-card { padding: 1rem; border-radius: 8px; background: #f5f5f5; }
134
- .coverage-bar { height: 20px; background: #e0e0e0; border-radius: 4px; overflow: hidden; }
135
- .coverage-fill { height: 100%; background: #4caf50; }
136
- </style>
137
- </head>
138
- <body>
139
- <h1>RTM: ${matrix.featureName}</h1>
140
- <p>Generated: ${matrix.generatedAt}</p>
141
-
142
- <div class="summary">
143
- <div class="summary-card">
144
- <strong>Requirements</strong><br>${matrix.summary.totalRequirements}
145
- </div>
146
- <div class="summary-card">
147
- <strong>Feature Coverage</strong><br>${matrix.summary.featureCovered}/${matrix.summary.totalRequirements}
148
- </div>
149
- <div class="summary-card">
150
- <strong>Test Coverage</strong><br>${matrix.summary.testCovered}/${matrix.summary.totalRequirements}
151
- </div>
152
- <div class="summary-card">
153
- <strong>Overall</strong><br>
154
- <div class="coverage-bar">
155
- <div class="coverage-fill" style="width: ${matrix.summary.coveragePercent}%"></div>
156
- </div>
157
- ${matrix.summary.coveragePercent}%
158
- </div>
159
- </div>
160
-
161
- <table>
162
- <thead>
163
- <tr>
164
- <th>Requirement</th>
165
- <th>Description</th>
166
- <th>SPEC</th>
167
- <th>Feature</th>
168
- <th>Test</th>
169
- <th>Coverage</th>
170
- </tr>
171
- </thead>
172
- <tbody>
120
+ let html = `<!DOCTYPE html>
121
+ <html>
122
+ <head>
123
+ <title>RTM: ${matrix.featureName}</title>
124
+ <style>
125
+ body { font-family: -apple-system, BlinkMacSystemFont, sans-serif; margin: 2rem; }
126
+ table { border-collapse: collapse; width: 100%; }
127
+ th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
128
+ th { background: #f5f5f5; }
129
+ .full { background: #d4edda; }
130
+ .partial { background: #fff3cd; }
131
+ .none { background: #f8d7da; }
132
+ .summary { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1rem; margin: 1rem 0; }
133
+ .summary-card { padding: 1rem; border-radius: 8px; background: #f5f5f5; }
134
+ .coverage-bar { height: 20px; background: #e0e0e0; border-radius: 4px; overflow: hidden; }
135
+ .coverage-fill { height: 100%; background: #4caf50; }
136
+ </style>
137
+ </head>
138
+ <body>
139
+ <h1>RTM: ${matrix.featureName}</h1>
140
+ <p>Generated: ${matrix.generatedAt}</p>
141
+
142
+ <div class="summary">
143
+ <div class="summary-card">
144
+ <strong>Requirements</strong><br>${matrix.summary.totalRequirements}
145
+ </div>
146
+ <div class="summary-card">
147
+ <strong>Feature Coverage</strong><br>${matrix.summary.featureCovered}/${matrix.summary.totalRequirements}
148
+ </div>
149
+ <div class="summary-card">
150
+ <strong>Test Coverage</strong><br>${matrix.summary.testCovered}/${matrix.summary.totalRequirements}
151
+ </div>
152
+ <div class="summary-card">
153
+ <strong>Overall</strong><br>
154
+ <div class="coverage-bar">
155
+ <div class="coverage-fill" style="width: ${matrix.summary.coveragePercent}%"></div>
156
+ </div>
157
+ ${matrix.summary.coveragePercent}%
158
+ </div>
159
+ </div>
160
+
161
+ <table>
162
+ <thead>
163
+ <tr>
164
+ <th>Requirement</th>
165
+ <th>Description</th>
166
+ <th>SPEC</th>
167
+ <th>Feature</th>
168
+ <th>Test</th>
169
+ <th>Coverage</th>
170
+ </tr>
171
+ </thead>
172
+ <tbody>
173
173
  `;
174
174
  for (const item of matrix.items) {
175
- html += ` <tr class="${item.coverage}">
176
- <td>${item.requirementId}</td>
177
- <td>${escapeHtml(truncate(item.requirementDesc, 50))}</td>
178
- <td>${item.specSection ? '✅' : '❌'}</td>
179
- <td>${item.featureScenario ? '✅' : '❌'}</td>
180
- <td>${item.testName ? '✅' : '❌'}</td>
181
- <td>${getCoverageIcon(item.coverage)}</td>
182
- </tr>
175
+ html += ` <tr class="${item.coverage}">
176
+ <td>${item.requirementId}</td>
177
+ <td>${escapeHtml(truncate(item.requirementDesc, 50))}</td>
178
+ <td>${item.specSection ? '✅' : '❌'}</td>
179
+ <td>${item.featureScenario ? '✅' : '❌'}</td>
180
+ <td>${item.testName ? '✅' : '❌'}</td>
181
+ <td>${getCoverageIcon(item.coverage)}</td>
182
+ </tr>
183
183
  `;
184
184
  }
185
- html += ` </tbody>
186
- </table>
187
- </body>
185
+ html += ` </tbody>
186
+ </table>
187
+ </body>
188
188
  </html>`;
189
189
  return html;
190
190
  }
@@ -8,37 +8,37 @@ import { generateTraceabilityMatrix, formatMatrixAsMarkdown, formatMatrixAsHtml,
8
8
  vi.mock('fs', () => ({
9
9
  readFileSync: vi.fn((path) => {
10
10
  if (path.includes('test-feature.md')) {
11
- return `# SPEC: test-feature
12
-
13
- ## Task
14
-
15
- ### Phase 1: Setup
16
-
17
- 1. [ ] REQ-test-001: Setup authentication
18
- 2. [ ] REQ-test-002: Create login form
19
- 3. [ ] REQ-test-003: Implement validation
11
+ return `# SPEC: test-feature
12
+
13
+ ## Task
14
+
15
+ ### Phase 1: Setup
16
+
17
+ 1. [ ] REQ-test-001: Setup authentication
18
+ 2. [ ] REQ-test-002: Create login form
19
+ 3. [ ] REQ-test-003: Implement validation
20
20
  `;
21
21
  }
22
22
  if (path.includes('test-feature.feature')) {
23
- return `# Feature: test-feature
24
-
25
- ## Scenarios
26
-
27
- ### Scenario 1: User can login
28
- \`\`\`gherkin
29
- Given user is on login page
30
- When user enters valid credentials
31
- Then user is logged in
32
- \`\`\`
33
- **Verification**: REQ-test-001
34
-
35
- ### Scenario 2: Validation errors
36
- \`\`\`gherkin
37
- Given user is on login page
38
- When user enters invalid email
39
- Then error message is shown
40
- \`\`\`
41
- **Verification**: REQ-test-003
23
+ return `# Feature: test-feature
24
+
25
+ ## Scenarios
26
+
27
+ ### Scenario 1: User can login
28
+ \`\`\`gherkin
29
+ Given user is on login page
30
+ When user enters valid credentials
31
+ Then user is logged in
32
+ \`\`\`
33
+ **Verification**: REQ-test-001
34
+
35
+ ### Scenario 2: Validation errors
36
+ \`\`\`gherkin
37
+ Given user is on login page
38
+ When user enters invalid email
39
+ Then error message is shown
40
+ \`\`\`
41
+ **Verification**: REQ-test-003
42
42
  `;
43
43
  }
44
44
  throw new Error(`File not found: ${path}`);
@@ -0,0 +1,7 @@
1
+ import { ToolResult, ToolDefinition } from '../../types/tool.js';
2
+ export declare const analyzeProblemDefinition: ToolDefinition;
3
+ export declare function analyzeProblem(args: {
4
+ problem: string;
5
+ domain?: string;
6
+ }): Promise<ToolResult>;
7
+ //# sourceMappingURL=analyzeProblem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzeProblem.d.ts","sourceRoot":"","sources":["../../../src/tools/thinking/analyzeProblem.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEjE,eAAO,MAAM,wBAAwB,EAAE,cAmBtC,CAAC;AAEF,wBAAsB,cAAc,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAkCpG"}
@@ -0,0 +1,55 @@
1
+ // Sequential thinking tool - completely independent
2
+ export const analyzeProblemDefinition = {
3
+ name: 'analyze_problem',
4
+ description: '문제 분석|어떻게 접근|분석해줘|analyze this|how to approach|break this down - Break down complex problem into structured steps',
5
+ inputSchema: {
6
+ type: 'object',
7
+ properties: {
8
+ problem: { type: 'string', description: 'Problem to analyze' },
9
+ domain: { type: 'string', description: 'Problem domain' }
10
+ },
11
+ required: ['problem']
12
+ },
13
+ annotations: {
14
+ title: 'Analyze Problem',
15
+ audience: ['user', 'assistant'],
16
+ readOnlyHint: true,
17
+ destructiveHint: false,
18
+ idempotentHint: true,
19
+ openWorldHint: false
20
+ }
21
+ };
22
+ export async function analyzeProblem(args) {
23
+ const { problem, domain = 'general' } = args;
24
+ const problemAnalysis = {
25
+ action: 'analyze_problem',
26
+ problem,
27
+ domain,
28
+ analysis: {
29
+ breakdown: [
30
+ 'Define the problem clearly',
31
+ 'Identify key constraints and requirements',
32
+ 'Break down into smaller sub-problems',
33
+ 'Determine solution approach',
34
+ 'Plan implementation steps'
35
+ ],
36
+ considerations: [
37
+ 'What are the inputs and expected outputs?',
38
+ 'Are there any edge cases to consider?',
39
+ 'What are the performance requirements?',
40
+ 'How will this integrate with existing systems?'
41
+ ],
42
+ nextSteps: [
43
+ 'Research existing solutions',
44
+ 'Create detailed implementation plan',
45
+ 'Identify potential risks and mitigation strategies',
46
+ 'Define success criteria'
47
+ ]
48
+ },
49
+ status: 'success'
50
+ };
51
+ return {
52
+ content: [{ type: 'text', text: `Problem: ${problem}\nDomain: ${domain}\n\nBreakdown:\n${problemAnalysis.analysis.breakdown.map((b, i) => `${i + 1}. ${b}`).join('\n')}\n\nConsiderations:\n${problemAnalysis.analysis.considerations.map(c => `- ${c}`).join('\n')}\n\nNext Steps:\n${problemAnalysis.analysis.nextSteps.map(n => `- ${n}`).join('\n')}` }]
53
+ };
54
+ }
55
+ //# sourceMappingURL=analyzeProblem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzeProblem.js","sourceRoot":"","sources":["../../../src/tools/thinking/analyzeProblem.ts"],"names":[],"mappings":"AAAA,oDAAoD;AAIpD,MAAM,CAAC,MAAM,wBAAwB,GAAmB;IACtD,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,mHAAmH;IAChI,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE;YAC9D,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE;SAC1D;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;IACD,WAAW,EAAE;QACX,KAAK,EAAE,iBAAiB;QACxB,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;QAC/B,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,IAAI;QACpB,aAAa,EAAE,KAAK;KACrB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAA0C;IAC7E,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC;IAE7C,MAAM,eAAe,GAAG;QACtB,MAAM,EAAE,iBAAiB;QACzB,OAAO;QACP,MAAM;QACN,QAAQ,EAAE;YACR,SAAS,EAAE;gBACT,4BAA4B;gBAC5B,2CAA2C;gBAC3C,sCAAsC;gBACtC,6BAA6B;gBAC7B,2BAA2B;aAC5B;YACD,cAAc,EAAE;gBACd,2CAA2C;gBAC3C,uCAAuC;gBACvC,wCAAwC;gBACxC,gDAAgD;aACjD;YACD,SAAS,EAAE;gBACT,6BAA6B;gBAC7B,qCAAqC;gBACrC,oDAAoD;gBACpD,yBAAyB;aAC1B;SACF;QACD,MAAM,EAAE,SAAS;KAClB,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,OAAO,aAAa,MAAM,mBAAmB,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;KAC3V,CAAC;AACJ,CAAC"}