@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.
- package/.claude/settings.json +152 -152
- package/.claude/vibe/constitution.md +184 -184
- package/.claude/vibe/rules/core/communication-guide.md +104 -104
- package/.claude/vibe/rules/core/development-philosophy.md +52 -52
- package/.claude/vibe/rules/core/quick-start.md +120 -120
- package/.claude/vibe/rules/quality/bdd-contract-testing.md +388 -388
- package/.claude/vibe/rules/quality/checklist.md +276 -276
- package/.claude/vibe/rules/quality/testing-strategy.md +437 -437
- package/.claude/vibe/rules/standards/anti-patterns.md +369 -369
- package/.claude/vibe/rules/standards/code-structure.md +291 -291
- package/.claude/vibe/rules/standards/complexity-metrics.md +312 -312
- package/.claude/vibe/rules/standards/naming-conventions.md +198 -198
- package/.claude/vibe/setup.sh +31 -31
- package/CLAUDE.md +323 -323
- package/LICENSE +21 -21
- package/README.md +724 -721
- package/agents/explorer.md +48 -0
- package/agents/implementer.md +53 -0
- package/agents/research/best-practices-agent.md +139 -0
- package/agents/research/codebase-patterns-agent.md +147 -0
- package/agents/research/framework-docs-agent.md +181 -0
- package/agents/research/security-advisory-agent.md +167 -0
- package/agents/review/architecture-reviewer.md +107 -0
- package/agents/review/complexity-reviewer.md +116 -0
- package/agents/review/data-integrity-reviewer.md +88 -0
- package/agents/review/git-history-reviewer.md +103 -0
- package/agents/review/performance-reviewer.md +86 -0
- package/agents/review/python-reviewer.md +152 -0
- package/agents/review/rails-reviewer.md +139 -0
- package/agents/review/react-reviewer.md +144 -0
- package/agents/review/security-reviewer.md +80 -0
- package/agents/review/simplicity-reviewer.md +140 -0
- package/agents/review/test-coverage-reviewer.md +116 -0
- package/agents/review/typescript-reviewer.md +127 -0
- package/agents/searcher.md +54 -0
- package/agents/simplifier.md +119 -0
- package/agents/tester.md +49 -0
- package/commands/vibe.analyze.md +239 -0
- package/commands/vibe.compound.md +261 -0
- package/commands/vibe.continue.md +88 -0
- package/commands/vibe.diagram.md +178 -0
- package/commands/vibe.e2e.md +266 -0
- package/commands/vibe.reason.md +306 -0
- package/commands/vibe.review.md +324 -0
- package/commands/vibe.run.md +836 -0
- package/commands/vibe.setup.md +97 -0
- package/commands/vibe.spec.md +383 -0
- package/commands/vibe.ui.md +137 -0
- package/commands/vibe.verify.md +238 -0
- package/dist/cli/index.js +389 -389
- package/dist/cli/index.js.map +1 -1
- package/dist/lib/MemoryManager.js +92 -92
- package/dist/lib/PythonParser.js +108 -108
- package/dist/lib/gemini-mcp.js +15 -15
- package/dist/lib/gemini-oauth.js +35 -35
- package/dist/lib/gpt-mcp.js +17 -17
- package/dist/lib/gpt-oauth.js +44 -44
- package/dist/tools/analytics/getUsageAnalytics.js +12 -12
- package/dist/tools/memory/createMemoryTimeline.js +10 -10
- package/dist/tools/memory/getMemoryGraph.js +12 -12
- package/dist/tools/memory/getSessionContext.js +9 -9
- package/dist/tools/memory/linkMemories.js +14 -14
- package/dist/tools/memory/listMemories.js +4 -4
- package/dist/tools/memory/recallMemory.js +4 -4
- package/dist/tools/memory/saveMemory.js +4 -4
- package/dist/tools/memory/searchMemoriesAdvanced.js +22 -22
- package/dist/tools/planning/generatePrd.js +46 -46
- package/dist/tools/prompt/enhancePromptGemini.js +160 -160
- package/dist/tools/reasoning/applyReasoningFramework.js +56 -56
- package/dist/tools/semantic/analyzeDependencyGraph.js +12 -12
- package/package.json +69 -66
- package/skills/git-worktree.md +178 -0
- package/skills/priority-todos.md +236 -0
- package/templates/constitution-template.md +184 -184
- package/templates/contract-backend-template.md +517 -517
- package/templates/contract-frontend-template.md +594 -594
- package/templates/feature-template.md +96 -96
- package/templates/hooks-template.json +103 -103
- package/templates/spec-template.md +199 -199
- package/.claude/vibe/rules/tools/mcp-hi-ai-guide.md +0 -665
- package/.claude/vibe/rules/tools/mcp-workflow.md +0 -51
package/dist/lib/gpt-mcp.js
CHANGED
|
@@ -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',
|
package/dist/lib/gpt-oauth.js
CHANGED
|
@@ -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 }]
|