@su-record/vibe 2.2.2 → 2.2.3

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 (81) hide show
  1. package/.claude/settings.json +152 -152
  2. package/.claude/vibe/constitution.md +184 -184
  3. package/.claude/vibe/rules/core/communication-guide.md +104 -104
  4. package/.claude/vibe/rules/core/development-philosophy.md +52 -52
  5. package/.claude/vibe/rules/core/quick-start.md +120 -120
  6. package/.claude/vibe/rules/quality/bdd-contract-testing.md +388 -388
  7. package/.claude/vibe/rules/quality/checklist.md +276 -276
  8. package/.claude/vibe/rules/quality/testing-strategy.md +437 -437
  9. package/.claude/vibe/rules/standards/anti-patterns.md +369 -369
  10. package/.claude/vibe/rules/standards/code-structure.md +291 -291
  11. package/.claude/vibe/rules/standards/complexity-metrics.md +312 -312
  12. package/.claude/vibe/rules/standards/naming-conventions.md +198 -198
  13. package/.claude/vibe/setup.sh +31 -31
  14. package/CLAUDE.md +323 -323
  15. package/LICENSE +21 -21
  16. package/README.md +724 -721
  17. package/agents/explorer.md +48 -0
  18. package/agents/implementer.md +53 -0
  19. package/agents/research/best-practices-agent.md +139 -0
  20. package/agents/research/codebase-patterns-agent.md +147 -0
  21. package/agents/research/framework-docs-agent.md +181 -0
  22. package/agents/research/security-advisory-agent.md +167 -0
  23. package/agents/review/architecture-reviewer.md +107 -0
  24. package/agents/review/complexity-reviewer.md +116 -0
  25. package/agents/review/data-integrity-reviewer.md +88 -0
  26. package/agents/review/git-history-reviewer.md +103 -0
  27. package/agents/review/performance-reviewer.md +86 -0
  28. package/agents/review/python-reviewer.md +152 -0
  29. package/agents/review/rails-reviewer.md +139 -0
  30. package/agents/review/react-reviewer.md +144 -0
  31. package/agents/review/security-reviewer.md +80 -0
  32. package/agents/review/simplicity-reviewer.md +140 -0
  33. package/agents/review/test-coverage-reviewer.md +116 -0
  34. package/agents/review/typescript-reviewer.md +127 -0
  35. package/agents/searcher.md +54 -0
  36. package/agents/simplifier.md +119 -0
  37. package/agents/tester.md +49 -0
  38. package/commands/vibe.analyze.md +239 -0
  39. package/commands/vibe.compound.md +261 -0
  40. package/commands/vibe.continue.md +88 -0
  41. package/commands/vibe.diagram.md +178 -0
  42. package/commands/vibe.e2e.md +266 -0
  43. package/commands/vibe.reason.md +306 -0
  44. package/commands/vibe.review.md +324 -0
  45. package/commands/vibe.run.md +836 -0
  46. package/commands/vibe.setup.md +97 -0
  47. package/commands/vibe.spec.md +383 -0
  48. package/commands/vibe.ui.md +137 -0
  49. package/commands/vibe.verify.md +238 -0
  50. package/dist/cli/index.js +389 -389
  51. package/dist/cli/index.js.map +1 -1
  52. package/dist/lib/MemoryManager.js +92 -92
  53. package/dist/lib/PythonParser.js +108 -108
  54. package/dist/lib/gemini-mcp.js +15 -15
  55. package/dist/lib/gemini-oauth.js +35 -35
  56. package/dist/lib/gpt-mcp.js +17 -17
  57. package/dist/lib/gpt-oauth.js +44 -44
  58. package/dist/tools/analytics/getUsageAnalytics.js +12 -12
  59. package/dist/tools/memory/createMemoryTimeline.js +10 -10
  60. package/dist/tools/memory/getMemoryGraph.js +12 -12
  61. package/dist/tools/memory/getSessionContext.js +9 -9
  62. package/dist/tools/memory/linkMemories.js +14 -14
  63. package/dist/tools/memory/listMemories.js +4 -4
  64. package/dist/tools/memory/recallMemory.js +4 -4
  65. package/dist/tools/memory/saveMemory.js +4 -4
  66. package/dist/tools/memory/searchMemoriesAdvanced.js +22 -22
  67. package/dist/tools/planning/generatePrd.js +46 -46
  68. package/dist/tools/prompt/enhancePromptGemini.js +160 -160
  69. package/dist/tools/reasoning/applyReasoningFramework.js +56 -56
  70. package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
  71. package/package.json +69 -66
  72. package/skills/git-worktree.md +178 -0
  73. package/skills/priority-todos.md +236 -0
  74. package/templates/constitution-template.md +184 -184
  75. package/templates/contract-backend-template.md +517 -517
  76. package/templates/contract-frontend-template.md +594 -594
  77. package/templates/feature-template.md +96 -96
  78. package/templates/hooks-template.json +103 -103
  79. package/templates/spec-template.md +199 -199
  80. package/.claude/vibe/rules/tools/mcp-hi-ai-guide.md +0 -665
  81. package/.claude/vibe/rules/tools/mcp-workflow.md +0 -51
@@ -159,15 +159,15 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
159
159
  }
160
160
  case 'gpt_analyze_architecture': {
161
161
  const { code, context } = args;
162
- const sysPrompt = `You are a senior software architect. Analyze the given code or architecture and provide detailed insights.
163
-
164
- ${context ? `Project context: ${context}` : ''}
165
-
166
- Respond in Korean and provide:
167
- 1. 아키텍처 요약
168
- 2. 강점
169
- 3. 잠재적 문제점
170
- 4. 개선 제안
162
+ const sysPrompt = `You are a senior software architect. Analyze the given code or architecture and provide detailed insights.
163
+
164
+ ${context ? `Project context: ${context}` : ''}
165
+
166
+ Respond in Korean and provide:
167
+ 1. 아키텍처 요약
168
+ 2. 강점
169
+ 3. 잠재적 문제점
170
+ 4. 개선 제안
171
171
  5. 확장성 평가`;
172
172
  const result = await gptApi.chat({
173
173
  model: 'gpt-5.2',
@@ -187,14 +187,14 @@ Respond in Korean and provide:
187
187
  }
188
188
  case 'gpt_debug': {
189
189
  const { code, error, language } = args;
190
- const sysPrompt = `You are an expert debugger. Analyze the given ${language || 'code'} and identify bugs.
191
-
192
- ${error ? `Error/Symptom: ${error}` : ''}
193
-
194
- Respond in Korean and provide:
195
- 1. 버그 식별
196
- 2. 원인 분석
197
- 3. 수정된 코드
190
+ const sysPrompt = `You are an expert debugger. Analyze the given ${language || 'code'} and identify bugs.
191
+
192
+ ${error ? `Error/Symptom: ${error}` : ''}
193
+
194
+ Respond in Korean and provide:
195
+ 1. 버그 식별
196
+ 2. 원인 분석
197
+ 3. 수정된 코드
198
198
  4. 예방 방법`;
199
199
  const result = await gptApi.chat({
200
200
  model: 'gpt-5.2-codex',
@@ -201,16 +201,16 @@ export function startOAuthFlow() {
201
201
  const errorDescription = url.searchParams.get('error_description');
202
202
  if (error) {
203
203
  res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });
204
- res.end(`
205
- <html>
206
- <head><title>인증 실패</title></head>
207
- <body style="font-family: sans-serif; text-align: center; padding-top: 50px;">
208
- <h1>인증 실패</h1>
209
- <p>오류: ${error}</p>
210
- <p>${errorDescription || ''}</p>
211
- <p>이 창을 닫고 다시 시도해주세요.</p>
212
- </body>
213
- </html>
204
+ res.end(`
205
+ <html>
206
+ <head><title>인증 실패</title></head>
207
+ <body style="font-family: sans-serif; text-align: center; padding-top: 50px;">
208
+ <h1>인증 실패</h1>
209
+ <p>오류: ${error}</p>
210
+ <p>${errorDescription || ''}</p>
211
+ <p>이 창을 닫고 다시 시도해주세요.</p>
212
+ </body>
213
+ </html>
214
214
  `);
215
215
  if (!isResolved) {
216
216
  isResolved = true;
@@ -222,14 +222,14 @@ export function startOAuthFlow() {
222
222
  // state 검증
223
223
  if (state !== auth.state) {
224
224
  res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });
225
- res.end(`
226
- <html>
227
- <head><title>인증 실패</title></head>
228
- <body style="font-family: sans-serif; text-align: center; padding-top: 50px;">
229
- <h1>인증 실패</h1>
230
- <p>State 불일치 - CSRF 공격 가능성</p>
231
- </body>
232
- </html>
225
+ res.end(`
226
+ <html>
227
+ <head><title>인증 실패</title></head>
228
+ <body style="font-family: sans-serif; text-align: center; padding-top: 50px;">
229
+ <h1>인증 실패</h1>
230
+ <p>State 불일치 - CSRF 공격 가능성</p>
231
+ </body>
232
+ </html>
233
233
  `);
234
234
  if (!isResolved) {
235
235
  isResolved = true;
@@ -240,14 +240,14 @@ export function startOAuthFlow() {
240
240
  }
241
241
  if (!code) {
242
242
  res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });
243
- res.end(`
244
- <html>
245
- <head><title>인증 실패</title></head>
246
- <body style="font-family: sans-serif; text-align: center; padding-top: 50px;">
247
- <h1>인증 실패</h1>
248
- <p>Authorization code가 없습니다.</p>
249
- </body>
250
- </html>
243
+ res.end(`
244
+ <html>
245
+ <head><title>인증 실패</title></head>
246
+ <body style="font-family: sans-serif; text-align: center; padding-top: 50px;">
247
+ <h1>인증 실패</h1>
248
+ <p>Authorization code가 없습니다.</p>
249
+ </body>
250
+ </html>
251
251
  `);
252
252
  if (!isResolved) {
253
253
  isResolved = true;
@@ -259,16 +259,16 @@ export function startOAuthFlow() {
259
259
  try {
260
260
  const tokens = await exchangeCodeForTokens(code, auth.verifier);
261
261
  res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
262
- res.end(`
263
- <html>
264
- <head><title>인증 성공</title></head>
265
- <body style="font-family: sans-serif; text-align: center; padding-top: 50px;">
266
- <h1>인증 성공!</h1>
267
- <p>${tokens.email}로 로그인되었습니다.</p>
268
- <p>이 창을 닫아도 됩니다.</p>
269
- <script>setTimeout(() => window.close(), 2000);</script>
270
- </body>
271
- </html>
262
+ res.end(`
263
+ <html>
264
+ <head><title>인증 성공</title></head>
265
+ <body style="font-family: sans-serif; text-align: center; padding-top: 50px;">
266
+ <h1>인증 성공!</h1>
267
+ <p>${tokens.email}로 로그인되었습니다.</p>
268
+ <p>이 창을 닫아도 됩니다.</p>
269
+ <script>setTimeout(() => window.close(), 2000);</script>
270
+ </body>
271
+ </html>
272
272
  `);
273
273
  if (!isResolved) {
274
274
  isResolved = true;
@@ -278,14 +278,14 @@ export function startOAuthFlow() {
278
278
  }
279
279
  catch (err) {
280
280
  res.writeHead(500, { 'Content-Type': 'text/html; charset=utf-8' });
281
- res.end(`
282
- <html>
283
- <head><title>인증 실패</title></head>
284
- <body style="font-family: sans-serif; text-align: center; padding-top: 50px;">
285
- <h1>인증 실패</h1>
286
- <p>${err.message}</p>
287
- </body>
288
- </html>
281
+ res.end(`
282
+ <html>
283
+ <head><title>인증 실패</title></head>
284
+ <body style="font-family: sans-serif; text-align: center; padding-top: 50px;">
285
+ <h1>인증 실패</h1>
286
+ <p>${err.message}</p>
287
+ </body>
288
+ </html>
289
289
  `);
290
290
  if (!isResolved) {
291
291
  isResolved = true;
@@ -2,18 +2,18 @@
2
2
  import { MemoryManager } from '../../lib/MemoryManager.js';
3
3
  export const getUsageAnalyticsDefinition = {
4
4
  name: 'get_usage_analytics',
5
- description: `도구 사용 분석 및 통계를 조회합니다.
6
-
7
- 키워드: 분석, 통계, 사용량, analytics, statistics, usage
8
-
9
- **제공 정보:**
10
- - 메모리 사용 통계
11
- - 카테고리별 분포
12
- - 시간별 사용 패턴
13
- - 그래프 관계 통계
14
-
15
- 사용 예시:
16
- - "사용 통계 보여줘"
5
+ description: `도구 사용 분석 및 통계를 조회합니다.
6
+
7
+ 키워드: 분석, 통계, 사용량, analytics, statistics, usage
8
+
9
+ **제공 정보:**
10
+ - 메모리 사용 통계
11
+ - 카테고리별 분포
12
+ - 시간별 사용 패턴
13
+ - 그래프 관계 통계
14
+
15
+ 사용 예시:
16
+ - "사용 통계 보여줘"
17
17
  - "메모리 분석"`,
18
18
  inputSchema: {
19
19
  type: 'object',
@@ -2,12 +2,12 @@
2
2
  import { MemoryManager } from '../../lib/MemoryManager.js';
3
3
  export const createMemoryTimelineDefinition = {
4
4
  name: 'create_memory_timeline',
5
- description: `메모리 타임라인을 생성합니다.
6
-
7
- 키워드: 타임라인, 시간순, 히스토리, timeline, history, chronological
8
-
9
- 사용 예시:
10
- - "최근 메모리 타임라인 보여줘"
5
+ description: `메모리 타임라인을 생성합니다.
6
+
7
+ 키워드: 타임라인, 시간순, 히스토리, timeline, history, chronological
8
+
9
+ 사용 예시:
10
+ - "최근 메모리 타임라인 보여줘"
11
11
  - "지난 7일간 메모리 히스토리"`,
12
12
  inputSchema: {
13
13
  type: 'object',
@@ -61,10 +61,10 @@ export async function createMemoryTimeline(args) {
61
61
  return {
62
62
  content: [{
63
63
  type: 'text',
64
- text: `✗ 지정된 기간에 메모리가 없습니다.
65
-
66
- ${startDate ? `**시작일**: ${startDate}` : ''}
67
- ${endDate ? `**종료일**: ${endDate}` : ''}
64
+ text: `✗ 지정된 기간에 메모리가 없습니다.
65
+
66
+ ${startDate ? `**시작일**: ${startDate}` : ''}
67
+ ${endDate ? `**종료일**: ${endDate}` : ''}
68
68
  ${category ? `**카테고리**: ${category}` : ''}`
69
69
  }]
70
70
  };
@@ -2,12 +2,12 @@
2
2
  import { MemoryManager } from '../../lib/MemoryManager.js';
3
3
  export const getMemoryGraphDefinition = {
4
4
  name: 'get_memory_graph',
5
- description: `메모리 지식 그래프를 조회합니다.
6
-
7
- 키워드: 그래프, 관계도, 연결 보기, memory graph, relations, connections
8
-
9
- 사용 예시:
10
- - "project-architecture의 관계 그래프 보여줘"
5
+ description: `메모리 지식 그래프를 조회합니다.
6
+
7
+ 키워드: 그래프, 관계도, 연결 보기, memory graph, relations, connections
8
+
9
+ 사용 예시:
10
+ - "project-architecture의 관계 그래프 보여줘"
11
11
  - "전체 메모리 그래프 조회"`,
12
12
  inputSchema: {
13
13
  type: 'object',
@@ -79,12 +79,12 @@ export async function getMemoryGraph(args) {
79
79
  output = generateTreeFormat(key, graph.nodes, filteredEdges);
80
80
  }
81
81
  // Add statistics
82
- const stats = `
83
- ---
84
- **통계**
85
- - 노드 수: ${graph.nodes.length}
86
- - 관계 수: ${filteredEdges.length}
87
- - 클러스터 수: ${graph.clusters.length}
82
+ const stats = `
83
+ ---
84
+ **통계**
85
+ - 노드 수: ${graph.nodes.length}
86
+ - 관계 수: ${filteredEdges.length}
87
+ - 클러스터 수: ${graph.clusters.length}
88
88
  ${graph.clusters.length > 0 ? `- 클러스터: ${graph.clusters.map(c => `[${c.join(', ')}]`).join(', ')}` : ''}`;
89
89
  return {
90
90
  content: [{
@@ -3,15 +3,15 @@
3
3
  import { MemoryManager } from '../../lib/MemoryManager.js';
4
4
  export const getSessionContextDefinition = {
5
5
  name: 'get_session_context',
6
- description: `🚀 [새 대화/세션 시작 시 자동 실행 권장] 이전 세션의 메모리, 지식 그래프, 최근 작업 내역을 한 번에 조회합니다.
7
-
8
- 이 도구는 새로운 대화를 시작할 때 가장 먼저 실행하면 좋습니다. 프로젝트의 컨텍스트를 빠르게 파악할 수 있습니다.
9
-
10
- 키워드: 세션 시작, 컨텍스트, 이전 작업, session start, context, previous work, what did we do
11
-
12
- 사용 예시:
13
- - "이전에 무슨 작업 했었지?"
14
- - "프로젝트 컨텍스트 알려줘"
6
+ description: `🚀 [새 대화/세션 시작 시 자동 실행 권장] 이전 세션의 메모리, 지식 그래프, 최근 작업 내역을 한 번에 조회합니다.
7
+
8
+ 이 도구는 새로운 대화를 시작할 때 가장 먼저 실행하면 좋습니다. 프로젝트의 컨텍스트를 빠르게 파악할 수 있습니다.
9
+
10
+ 키워드: 세션 시작, 컨텍스트, 이전 작업, session start, context, previous work, what did we do
11
+
12
+ 사용 예시:
13
+ - "이전에 무슨 작업 했었지?"
14
+ - "프로젝트 컨텍스트 알려줘"
15
15
  - "세션 컨텍스트 조회"`,
16
16
  inputSchema: {
17
17
  type: 'object',
@@ -2,12 +2,12 @@
2
2
  import { MemoryManager } from '../../lib/MemoryManager.js';
3
3
  export const linkMemoriesDefinition = {
4
4
  name: 'link_memories',
5
- description: `메모리 간 관계를 연결합니다 (지식 그래프).
6
-
7
- 키워드: 연결해, 관계 설정, 링크, connect memories, link, relate
8
-
9
- 사용 예시:
10
- - "project-architecture와 design-patterns를 연결해"
5
+ description: `메모리 간 관계를 연결합니다 (지식 그래프).
6
+
7
+ 키워드: 연결해, 관계 설정, 링크, connect memories, link, relate
8
+
9
+ 사용 예시:
10
+ - "project-architecture와 design-patterns를 연결해"
11
11
  - "이 두 메모리를 related_to로 링크해"`,
12
12
  inputSchema: {
13
13
  type: 'object',
@@ -88,14 +88,14 @@ export async function linkMemories(args) {
88
88
  if (bidirectional) {
89
89
  memoryManager.linkMemories(targetKey, sourceKey, relationType, strength);
90
90
  }
91
- const result = `✓ 메모리 관계가 연결되었습니다
92
-
93
- **소스**: ${sourceKey}
94
- **타겟**: ${targetKey}
95
- **관계 유형**: ${relationType}
96
- **강도**: ${strength}
97
- **양방향**: ${bidirectional ? '예' : '아니오'}
98
-
91
+ const result = `✓ 메모리 관계가 연결되었습니다
92
+
93
+ **소스**: ${sourceKey}
94
+ **타겟**: ${targetKey}
95
+ **관계 유형**: ${relationType}
96
+ **강도**: ${strength}
97
+ **양방향**: ${bidirectional ? '예' : '아니오'}
98
+
99
99
  이제 get_memory_graph로 관계를 시각화할 수 있습니다.`;
100
100
  return {
101
101
  content: [{
@@ -2,10 +2,10 @@
2
2
  import { MemoryManager } from '../../lib/MemoryManager.js';
3
3
  export const listMemoriesDefinition = {
4
4
  name: 'list_memories',
5
- description: `저장된 메모리 목록을 조회합니다. 카테고리별 필터링 가능.
6
-
7
- 키워드: 뭐 있었지, 저장된 거, 목록, what did I save, list memories, show saved
8
-
5
+ description: `저장된 메모리 목록을 조회합니다. 카테고리별 필터링 가능.
6
+
7
+ 키워드: 뭐 있었지, 저장된 거, 목록, what did I save, list memories, show saved
8
+
9
9
  💡 세션 시작 시 전체 컨텍스트가 필요하면 get_session_context를 사용하세요.`,
10
10
  inputSchema: {
11
11
  type: 'object',
@@ -2,10 +2,10 @@
2
2
  import { MemoryManager } from '../../lib/MemoryManager.js';
3
3
  export const recallMemoryDefinition = {
4
4
  name: 'recall_memory',
5
- description: `특정 메모리를 키로 조회합니다.
6
-
7
- 키워드: 떠올려, recall, 기억나, remember what, what was, remind
8
-
5
+ description: `특정 메모리를 키로 조회합니다.
6
+
7
+ 키워드: 떠올려, recall, 기억나, remember what, what was, remind
8
+
9
9
  💡 전체 컨텍스트가 필요하면 get_session_context를 먼저 사용하세요.`,
10
10
  inputSchema: {
11
11
  type: 'object',
@@ -2,10 +2,10 @@
2
2
  import { MemoryManager } from '../../lib/MemoryManager.js';
3
3
  export const saveMemoryDefinition = {
4
4
  name: 'save_memory',
5
- description: `중요한 정보를 장기 메모리에 저장합니다. 프로젝트 결정사항, 아키텍처, 설정 등을 기록하세요.
6
-
7
- 키워드: 기억해, remember, 저장해, save, memorize, keep
8
-
5
+ description: `중요한 정보를 장기 메모리에 저장합니다. 프로젝트 결정사항, 아키텍처, 설정 등을 기록하세요.
6
+
7
+ 키워드: 기억해, remember, 저장해, save, memorize, keep
8
+
9
9
  💡 저장 후 link_memories로 관련 메모리를 연결하면 지식 그래프가 구축됩니다.`,
10
10
  inputSchema: {
11
11
  type: 'object',
@@ -2,19 +2,19 @@
2
2
  import { MemoryManager } from '../../lib/MemoryManager.js';
3
3
  export const searchMemoriesAdvancedDefinition = {
4
4
  name: 'search_memories_advanced',
5
- description: `고급 멀티 전략 메모리 검색을 수행합니다.
6
-
7
- 키워드: 고급 검색, 찾아, 스마트 검색, advanced search, find memories
8
-
9
- **검색 전략:**
10
- - keyword: 전통적 키워드 검색
11
- - graph_traversal: 그래프 기반 관련 메모리 탐색
12
- - temporal: 시간순 정렬
13
- - priority: 우선순위 기반
14
- - context_aware: 복합 전략 (키워드 + 우선순위 + 최근성)
15
-
16
- 사용 예시:
17
- - "authentication 관련 메모리 고급 검색"
5
+ description: `고급 멀티 전략 메모리 검색을 수행합니다.
6
+
7
+ 키워드: 고급 검색, 찾아, 스마트 검색, advanced search, find memories
8
+
9
+ **검색 전략:**
10
+ - keyword: 전통적 키워드 검색
11
+ - graph_traversal: 그래프 기반 관련 메모리 탐색
12
+ - temporal: 시간순 정렬
13
+ - priority: 우선순위 기반
14
+ - context_aware: 복합 전략 (키워드 + 우선순위 + 최근성)
15
+
16
+ 사용 예시:
17
+ - "authentication 관련 메모리 고급 검색"
18
18
  - "그래프 탐색으로 project-architecture 관련 메모리 찾기"`,
19
19
  inputSchema: {
20
20
  type: 'object',
@@ -79,15 +79,15 @@ export async function searchMemoriesAdvanced(args) {
79
79
  return {
80
80
  content: [{
81
81
  type: 'text',
82
- text: `✗ "${query}"에 대한 검색 결과가 없습니다.
83
-
84
- **사용된 전략**: ${strategy}
85
- ${category ? `**카테고리 필터**: ${category}` : ''}
86
-
87
- 다른 검색 전략을 시도해보세요:
88
- - keyword: 기본 키워드 매칭
89
- - temporal: 최신 메모리 우선
90
- - priority: 중요 메모리 우선
82
+ text: `✗ "${query}"에 대한 검색 결과가 없습니다.
83
+
84
+ **사용된 전략**: ${strategy}
85
+ ${category ? `**카테고리 필터**: ${category}` : ''}
86
+
87
+ 다른 검색 전략을 시도해보세요:
88
+ - keyword: 기본 키워드 매칭
89
+ - temporal: 최신 메모리 우선
90
+ - priority: 중요 메모리 우선
91
91
  - context_aware: 종합 점수`
92
92
  }]
93
93
  };
@@ -107,52 +107,52 @@ export async function generatePrd(args) {
107
107
  ],
108
108
  status: 'success'
109
109
  };
110
- const formattedPrd = `# ${prd.document.title}
111
-
112
- **Version:** ${prd.document.version}
113
- **Date:** ${prd.document.date}
114
-
115
- ## ${prd.document.sections.executiveSummary.title}
116
- ${prd.document.sections.executiveSummary.content}
117
-
118
- ## ${prd.document.sections.productOverview.title}
119
- **Vision:** ${prd.document.sections.productOverview.vision}
120
- **Objectives:** ${prd.document.sections.productOverview.objectives}
121
- **Target Users:** ${prd.document.sections.productOverview.targetUsers}
122
-
123
- **Success Metrics:**
124
- ${prd.document.sections.productOverview.successMetrics.map(metric => `- ${metric}`).join('\n')}
125
-
126
- ## ${prd.document.sections.functionalRequirements.title}
127
- ${prd.document.sections.functionalRequirements.description}
128
-
129
- **Core Features:**
130
- ${prd.document.sections.functionalRequirements.coreFeatures.map(feature => `- ${feature}`).join('\n')}
131
-
132
- **User Flows:**
133
- ${prd.document.sections.functionalRequirements.userFlows.map(flow => `- ${flow}`).join('\n')}
134
-
135
- ## ${prd.document.sections.nonFunctionalRequirements.title}
136
- - **Performance:** ${prd.document.sections.nonFunctionalRequirements.performance}
137
- - **Security:** ${prd.document.sections.nonFunctionalRequirements.security}
138
- - **Scalability:** ${prd.document.sections.nonFunctionalRequirements.scalability}
139
- - **Usability:** ${prd.document.sections.nonFunctionalRequirements.usability}
140
- - **Compatibility:** ${prd.document.sections.nonFunctionalRequirements.compatibility}
141
-
142
- ## ${prd.document.sections.constraints.title}
143
- - **Technical:** ${prd.document.sections.constraints.technical}
144
- - **Timeline:** ${prd.document.sections.constraints.timeline}
145
- - **Budget:** ${prd.document.sections.constraints.budget}
146
- - **Resources:** ${prd.document.sections.constraints.resources}
147
-
148
- ## ${prd.document.sections.implementationPlan.title}
149
- **Development Phases:**
150
- ${prd.document.sections.implementationPlan.phases.map(phase => `- ${phase}`).join('\n')}
151
-
152
- **Risk Mitigation:**
153
- ${prd.document.sections.implementationPlan.riskMitigation.map(risk => `- ${risk}`).join('\n')}
154
-
155
- ## Recommendations
110
+ const formattedPrd = `# ${prd.document.title}
111
+
112
+ **Version:** ${prd.document.version}
113
+ **Date:** ${prd.document.date}
114
+
115
+ ## ${prd.document.sections.executiveSummary.title}
116
+ ${prd.document.sections.executiveSummary.content}
117
+
118
+ ## ${prd.document.sections.productOverview.title}
119
+ **Vision:** ${prd.document.sections.productOverview.vision}
120
+ **Objectives:** ${prd.document.sections.productOverview.objectives}
121
+ **Target Users:** ${prd.document.sections.productOverview.targetUsers}
122
+
123
+ **Success Metrics:**
124
+ ${prd.document.sections.productOverview.successMetrics.map(metric => `- ${metric}`).join('\n')}
125
+
126
+ ## ${prd.document.sections.functionalRequirements.title}
127
+ ${prd.document.sections.functionalRequirements.description}
128
+
129
+ **Core Features:**
130
+ ${prd.document.sections.functionalRequirements.coreFeatures.map(feature => `- ${feature}`).join('\n')}
131
+
132
+ **User Flows:**
133
+ ${prd.document.sections.functionalRequirements.userFlows.map(flow => `- ${flow}`).join('\n')}
134
+
135
+ ## ${prd.document.sections.nonFunctionalRequirements.title}
136
+ - **Performance:** ${prd.document.sections.nonFunctionalRequirements.performance}
137
+ - **Security:** ${prd.document.sections.nonFunctionalRequirements.security}
138
+ - **Scalability:** ${prd.document.sections.nonFunctionalRequirements.scalability}
139
+ - **Usability:** ${prd.document.sections.nonFunctionalRequirements.usability}
140
+ - **Compatibility:** ${prd.document.sections.nonFunctionalRequirements.compatibility}
141
+
142
+ ## ${prd.document.sections.constraints.title}
143
+ - **Technical:** ${prd.document.sections.constraints.technical}
144
+ - **Timeline:** ${prd.document.sections.constraints.timeline}
145
+ - **Budget:** ${prd.document.sections.constraints.budget}
146
+ - **Resources:** ${prd.document.sections.constraints.resources}
147
+
148
+ ## ${prd.document.sections.implementationPlan.title}
149
+ **Development Phases:**
150
+ ${prd.document.sections.implementationPlan.phases.map(phase => `- ${phase}`).join('\n')}
151
+
152
+ **Risk Mitigation:**
153
+ ${prd.document.sections.implementationPlan.riskMitigation.map(risk => `- ${risk}`).join('\n')}
154
+
155
+ ## Recommendations
156
156
  ${prd.recommendations.map(rec => `- ${rec}`).join('\n')}`;
157
157
  return {
158
158
  content: [{ type: 'text', text: formattedPrd }]