@su-record/vibe 2.3.2 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.json +35 -35
- package/.claude/settings.local.json +30 -24
- 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/languages/dart-flutter.md +509 -509
- package/.claude/vibe/rules/languages/go.md +396 -396
- package/.claude/vibe/rules/languages/java-spring.md +586 -586
- package/.claude/vibe/rules/languages/kotlin-android.md +491 -491
- package/.claude/vibe/rules/languages/python-django.md +371 -371
- package/.claude/vibe/rules/languages/python-fastapi.md +386 -386
- package/.claude/vibe/rules/languages/rust.md +425 -425
- package/.claude/vibe/rules/languages/swift-ios.md +516 -516
- package/.claude/vibe/rules/languages/typescript-nextjs.md +441 -441
- package/.claude/vibe/rules/languages/typescript-node.md +375 -375
- package/.claude/vibe/rules/languages/typescript-nuxt.md +521 -521
- package/.claude/vibe/rules/languages/typescript-react-native.md +446 -446
- package/.claude/vibe/rules/languages/typescript-react.md +525 -525
- package/.claude/vibe/rules/languages/typescript-vue.md +353 -353
- 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/vibe/templates/constitution-template.md +184 -184
- package/.claude/vibe/templates/contract-backend-template.md +517 -517
- package/.claude/vibe/templates/contract-frontend-template.md +594 -594
- package/.claude/vibe/templates/feature-template.md +96 -96
- package/.claude/vibe/templates/spec-template.md +199 -199
- package/CLAUDE.md +345 -345
- package/LICENSE +21 -21
- package/README.md +817 -744
- package/agents/compounder.md +261 -261
- package/agents/diagrammer.md +178 -178
- package/agents/e2e-tester.md +266 -266
- package/agents/explorer.md +48 -48
- package/agents/implementer.md +53 -53
- package/agents/research/best-practices-agent.md +139 -139
- package/agents/research/codebase-patterns-agent.md +147 -147
- package/agents/research/framework-docs-agent.md +181 -181
- package/agents/research/security-advisory-agent.md +167 -167
- package/agents/review/architecture-reviewer.md +107 -107
- package/agents/review/complexity-reviewer.md +116 -116
- package/agents/review/data-integrity-reviewer.md +88 -88
- package/agents/review/git-history-reviewer.md +103 -103
- package/agents/review/performance-reviewer.md +86 -86
- package/agents/review/python-reviewer.md +152 -152
- package/agents/review/rails-reviewer.md +139 -139
- package/agents/review/react-reviewer.md +144 -144
- package/agents/review/security-reviewer.md +80 -80
- package/agents/review/simplicity-reviewer.md +140 -140
- package/agents/review/test-coverage-reviewer.md +116 -116
- package/agents/review/typescript-reviewer.md +127 -127
- package/agents/searcher.md +54 -54
- package/agents/simplifier.md +119 -119
- package/agents/tester.md +49 -49
- package/agents/ui-previewer.md +137 -137
- package/commands/vibe.analyze.md +260 -245
- package/commands/vibe.reason.md +223 -223
- package/commands/vibe.review.md +213 -200
- package/commands/vibe.run.md +842 -838
- package/commands/vibe.spec.md +405 -419
- package/commands/vibe.utils.md +101 -101
- package/commands/vibe.verify.md +282 -282
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +422 -385
- 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/orchestrator/agentDiscovery.d.ts +18 -0
- package/dist/orchestrator/agentDiscovery.d.ts.map +1 -0
- package/dist/orchestrator/agentDiscovery.js +174 -0
- package/dist/orchestrator/agentDiscovery.js.map +1 -0
- package/dist/orchestrator/backgroundAgent.d.ts +31 -0
- package/dist/orchestrator/backgroundAgent.d.ts.map +1 -0
- package/dist/orchestrator/backgroundAgent.js +325 -0
- package/dist/orchestrator/backgroundAgent.js.map +1 -0
- package/dist/orchestrator/index.d.ts +58 -0
- package/dist/orchestrator/index.d.ts.map +1 -0
- package/dist/orchestrator/index.js +115 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/orchestrator.d.ts +82 -0
- package/dist/orchestrator/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/orchestrator.js +257 -0
- package/dist/orchestrator/orchestrator.js.map +1 -0
- package/dist/orchestrator/parallelResearch.d.ts +19 -0
- package/dist/orchestrator/parallelResearch.d.ts.map +1 -0
- package/dist/orchestrator/parallelResearch.js +214 -0
- package/dist/orchestrator/parallelResearch.js.map +1 -0
- package/dist/orchestrator/types.d.ts +109 -0
- package/dist/orchestrator/types.d.ts.map +1 -0
- package/dist/orchestrator/types.js +5 -0
- package/dist/orchestrator/types.js.map +1 -0
- 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/hooks/hooks.json +121 -121
- package/package.json +75 -73
- package/skills/git-worktree.md +178 -178
- package/skills/priority-todos.md +236 -236
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orchestrator - 메인 오케스트레이터 클래스
|
|
3
|
+
* /vibe.* 명령어에서 사용할 중앙 오케스트레이션 로직
|
|
4
|
+
*/
|
|
5
|
+
import { promises as fs } from 'fs';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import { discoverAgents, loadAgent, listAgentsByCategory } from './agentDiscovery.js';
|
|
8
|
+
import { parallelResearch, createResearchTasks } from './parallelResearch.js';
|
|
9
|
+
import { launchBackgroundAgent, getBackgroundAgentResult, cancelBackgroundAgent, listActiveSessions, getSessionHistory, launchParallelAgents } from './backgroundAgent.js';
|
|
10
|
+
import { MemoryManager } from '../lib/MemoryManager.js';
|
|
11
|
+
/**
|
|
12
|
+
* Vibe Orchestrator
|
|
13
|
+
* 모든 /vibe.* 명령어의 오케스트레이션을 담당
|
|
14
|
+
*/
|
|
15
|
+
export class VibeOrchestrator {
|
|
16
|
+
options;
|
|
17
|
+
memoryManager;
|
|
18
|
+
constructor(options = {}) {
|
|
19
|
+
this.options = {
|
|
20
|
+
projectPath: process.cwd(),
|
|
21
|
+
verbose: false,
|
|
22
|
+
saveResults: true,
|
|
23
|
+
resultsPath: '.claude/vibe/orchestrator',
|
|
24
|
+
...options
|
|
25
|
+
};
|
|
26
|
+
this.memoryManager = MemoryManager.getInstance(this.options.projectPath);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 에이전트 탐색
|
|
30
|
+
*/
|
|
31
|
+
async discoverAgents(category) {
|
|
32
|
+
const result = await discoverAgents({
|
|
33
|
+
projectPath: this.options.projectPath,
|
|
34
|
+
category
|
|
35
|
+
});
|
|
36
|
+
if ('agents' in result) {
|
|
37
|
+
return result.agents;
|
|
38
|
+
}
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 특정 에이전트 로드
|
|
43
|
+
*/
|
|
44
|
+
async loadAgent(agentName) {
|
|
45
|
+
return loadAgent(agentName, this.options.projectPath);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 병렬 리서치 실행
|
|
49
|
+
*/
|
|
50
|
+
async runParallelResearch(args) {
|
|
51
|
+
const result = await parallelResearch({
|
|
52
|
+
...args,
|
|
53
|
+
projectPath: args.projectPath || this.options.projectPath
|
|
54
|
+
});
|
|
55
|
+
// 결과 저장
|
|
56
|
+
if (this.options.saveResults && 'results' in result) {
|
|
57
|
+
await this.saveOrchestratorResult('research', result);
|
|
58
|
+
}
|
|
59
|
+
if ('results' in result) {
|
|
60
|
+
return result;
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
results: [],
|
|
64
|
+
totalDuration: 0,
|
|
65
|
+
successCount: 0,
|
|
66
|
+
failureCount: 0
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 기능 기반 리서치 (간편 API)
|
|
71
|
+
*/
|
|
72
|
+
async researchFeature(feature, techStack = []) {
|
|
73
|
+
const tasks = createResearchTasks(feature, techStack);
|
|
74
|
+
return this.runParallelResearch({ tasks });
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 백그라운드 에이전트 시작
|
|
78
|
+
*/
|
|
79
|
+
async launchAgent(args) {
|
|
80
|
+
const result = await launchBackgroundAgent({
|
|
81
|
+
...args,
|
|
82
|
+
projectPath: args.projectPath || this.options.projectPath
|
|
83
|
+
});
|
|
84
|
+
if ('handle' in result) {
|
|
85
|
+
return result.handle;
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* 여러 에이전트 동시 실행
|
|
91
|
+
*/
|
|
92
|
+
async launchAgents(configs) {
|
|
93
|
+
const result = await launchParallelAgents(configs.map(c => ({
|
|
94
|
+
...c,
|
|
95
|
+
projectPath: c.projectPath || this.options.projectPath
|
|
96
|
+
})));
|
|
97
|
+
if ('handles' in result) {
|
|
98
|
+
return result.handles;
|
|
99
|
+
}
|
|
100
|
+
return [];
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 에이전트 결과 조회
|
|
104
|
+
*/
|
|
105
|
+
async getAgentResult(sessionId) {
|
|
106
|
+
const result = await getBackgroundAgentResult(sessionId);
|
|
107
|
+
if ('result' in result) {
|
|
108
|
+
return result.result;
|
|
109
|
+
}
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* 에이전트 취소
|
|
114
|
+
*/
|
|
115
|
+
cancelAgent(sessionId) {
|
|
116
|
+
const result = cancelBackgroundAgent(sessionId);
|
|
117
|
+
return result.content[0].text.includes('cancelled');
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* 활성 세션 목록
|
|
121
|
+
*/
|
|
122
|
+
getActiveSessions() {
|
|
123
|
+
return listActiveSessions();
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* 세션 히스토리
|
|
127
|
+
*/
|
|
128
|
+
getHistory(limit = 10) {
|
|
129
|
+
return getSessionHistory(limit);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* 리뷰 에이전트 병렬 실행
|
|
133
|
+
* /vibe.review에서 사용
|
|
134
|
+
*/
|
|
135
|
+
async runParallelReview(filePaths, techStack = []) {
|
|
136
|
+
// 리뷰 에이전트 탐색
|
|
137
|
+
const reviewAgents = await listAgentsByCategory('review', this.options.projectPath);
|
|
138
|
+
// 기술 스택에 맞는 에이전트만 필터링
|
|
139
|
+
const relevantAgents = this.filterRelevantAgents(reviewAgents, techStack);
|
|
140
|
+
// 각 에이전트에 대한 프롬프트 생성
|
|
141
|
+
const agentConfigs = relevantAgents.map(agent => ({
|
|
142
|
+
agentName: agent.name,
|
|
143
|
+
prompt: this.buildReviewPrompt(agent, filePaths),
|
|
144
|
+
model: 'claude-haiku-3-5', // 리뷰는 빠른 모델
|
|
145
|
+
maxTurns: 3,
|
|
146
|
+
allowedTools: ['Read', 'Glob', 'Grep']
|
|
147
|
+
}));
|
|
148
|
+
// 병렬 실행
|
|
149
|
+
const handles = await this.launchAgents(agentConfigs);
|
|
150
|
+
// 모든 결과 수집
|
|
151
|
+
const results = [];
|
|
152
|
+
for (const handle of handles) {
|
|
153
|
+
const result = await handle.getResult();
|
|
154
|
+
results.push(result);
|
|
155
|
+
}
|
|
156
|
+
// 결과 저장
|
|
157
|
+
if (this.options.saveResults) {
|
|
158
|
+
await this.saveOrchestratorResult('review', { results, filePaths, techStack });
|
|
159
|
+
}
|
|
160
|
+
return results;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* 기술 스택에 맞는 에이전트 필터링
|
|
164
|
+
*/
|
|
165
|
+
filterRelevantAgents(agents, techStack) {
|
|
166
|
+
// 항상 실행할 코어 리뷰어
|
|
167
|
+
const coreReviewers = [
|
|
168
|
+
'security-reviewer',
|
|
169
|
+
'performance-reviewer',
|
|
170
|
+
'architecture-reviewer',
|
|
171
|
+
'complexity-reviewer',
|
|
172
|
+
'simplicity-reviewer',
|
|
173
|
+
'data-integrity-reviewer',
|
|
174
|
+
'test-coverage-reviewer',
|
|
175
|
+
'git-history-reviewer'
|
|
176
|
+
];
|
|
177
|
+
// 스택별 리뷰어 매핑
|
|
178
|
+
const stackReviewers = {
|
|
179
|
+
typescript: ['typescript-reviewer'],
|
|
180
|
+
python: ['python-reviewer'],
|
|
181
|
+
react: ['react-reviewer'],
|
|
182
|
+
rails: ['rails-reviewer'],
|
|
183
|
+
ruby: ['rails-reviewer']
|
|
184
|
+
};
|
|
185
|
+
const relevantNames = new Set(coreReviewers);
|
|
186
|
+
// 기술 스택에 맞는 리뷰어 추가
|
|
187
|
+
for (const tech of techStack) {
|
|
188
|
+
const reviewers = stackReviewers[tech.toLowerCase()];
|
|
189
|
+
if (reviewers) {
|
|
190
|
+
reviewers.forEach(r => relevantNames.add(r));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return agents.filter(agent => {
|
|
194
|
+
const normalizedName = agent.name.toLowerCase().replace(/\s+/g, '-');
|
|
195
|
+
return relevantNames.has(normalizedName) ||
|
|
196
|
+
Array.from(relevantNames).some(r => normalizedName.includes(r));
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* 리뷰 프롬프트 생성
|
|
201
|
+
*/
|
|
202
|
+
buildReviewPrompt(agent, filePaths) {
|
|
203
|
+
return `You are a ${agent.name}. Review the following files for issues in your domain:
|
|
204
|
+
|
|
205
|
+
Files to review:
|
|
206
|
+
${filePaths.map(f => `- ${f}`).join('\n')}
|
|
207
|
+
|
|
208
|
+
${agent.content}
|
|
209
|
+
|
|
210
|
+
Provide findings in this format:
|
|
211
|
+
- Priority: P1 (Critical), P2 (Important), P3 (Nice-to-have)
|
|
212
|
+
- Category: Your specialty area
|
|
213
|
+
- Location: file:line
|
|
214
|
+
- Issue: Description
|
|
215
|
+
- Fix: Recommendation`;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* 결과 저장
|
|
219
|
+
*/
|
|
220
|
+
async saveOrchestratorResult(type, data) {
|
|
221
|
+
const resultsDir = path.join(this.options.projectPath, this.options.resultsPath);
|
|
222
|
+
try {
|
|
223
|
+
await fs.mkdir(resultsDir, { recursive: true });
|
|
224
|
+
const filename = `${type}-${Date.now()}.json`;
|
|
225
|
+
const filepath = path.join(resultsDir, filename);
|
|
226
|
+
await fs.writeFile(filepath, JSON.stringify(data, null, 2));
|
|
227
|
+
if (this.options.verbose) {
|
|
228
|
+
console.log(`Saved orchestrator result: ${filepath}`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
console.error('Failed to save orchestrator result:', error);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* 메모리에 결과 저장
|
|
237
|
+
*/
|
|
238
|
+
saveToMemory(key, value, category = 'orchestrator') {
|
|
239
|
+
this.memoryManager.save(key, value, category);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* 메모리에서 결과 조회
|
|
243
|
+
*/
|
|
244
|
+
getFromMemory(key) {
|
|
245
|
+
const memory = this.memoryManager.recall(key);
|
|
246
|
+
return memory?.value || null;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
// 싱글톤 인스턴스 (선택적 사용)
|
|
250
|
+
let defaultOrchestrator = null;
|
|
251
|
+
export function getOrchestrator(options) {
|
|
252
|
+
if (!defaultOrchestrator || options) {
|
|
253
|
+
defaultOrchestrator = new VibeOrchestrator(options);
|
|
254
|
+
}
|
|
255
|
+
return defaultOrchestrator;
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parallel Research - 병렬 리서치 에이전트 실행
|
|
3
|
+
* Agent SDK의 query() 함수를 사용하여 여러 에이전트를 동시에 실행
|
|
4
|
+
*/
|
|
5
|
+
import { ParallelResearchArgs, ResearchTask } from './types.js';
|
|
6
|
+
import { ToolResult } from '../types/tool.js';
|
|
7
|
+
/**
|
|
8
|
+
* 기본 리서치 태스크 템플릿
|
|
9
|
+
*/
|
|
10
|
+
export declare function createResearchTasks(feature: string, techStack?: string[]): ResearchTask[];
|
|
11
|
+
/**
|
|
12
|
+
* 병렬 리서치 실행
|
|
13
|
+
*/
|
|
14
|
+
export declare function parallelResearch(args: ParallelResearchArgs): Promise<ToolResult>;
|
|
15
|
+
/**
|
|
16
|
+
* 기능 기반 병렬 리서치 (간편 API)
|
|
17
|
+
*/
|
|
18
|
+
export declare function researchFeature(feature: string, techStack?: string[], projectPath?: string): Promise<ToolResult>;
|
|
19
|
+
//# sourceMappingURL=parallelResearch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallelResearch.d.ts","sourceRoot":"","sources":["../../src/orchestrator/parallelResearch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,oBAAoB,EAEpB,YAAY,EAGb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAiB9C;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,MAAM,EAAO,GAAG,YAAY,EAAE,CAiD7F;AA4FD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,CAwEtF;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAM,EAAO,EACxB,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC,UAAU,CAAC,CAGrB"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parallel Research - 병렬 리서치 에이전트 실행
|
|
3
|
+
* Agent SDK의 query() 함수를 사용하여 여러 에이전트를 동시에 실행
|
|
4
|
+
*/
|
|
5
|
+
// Agent SDK 동적 import (설치되지 않았을 경우 폴백)
|
|
6
|
+
let agentSdkQuery = null;
|
|
7
|
+
async function getQueryFunction() {
|
|
8
|
+
if (agentSdkQuery)
|
|
9
|
+
return agentSdkQuery;
|
|
10
|
+
try {
|
|
11
|
+
const sdk = await import('@anthropic-ai/claude-agent-sdk');
|
|
12
|
+
agentSdkQuery = sdk.query;
|
|
13
|
+
return agentSdkQuery;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 기본 리서치 태스크 템플릿
|
|
21
|
+
*/
|
|
22
|
+
export function createResearchTasks(feature, techStack = []) {
|
|
23
|
+
const stackStr = techStack.length > 0 ? techStack.join(', ') : 'the project';
|
|
24
|
+
return [
|
|
25
|
+
{
|
|
26
|
+
name: 'best-practices-agent',
|
|
27
|
+
category: 'best-practices',
|
|
28
|
+
prompt: `Research best practices for implementing "${feature}" with ${stackStr}. Focus on:
|
|
29
|
+
1. Industry-standard patterns
|
|
30
|
+
2. Common pitfalls to avoid
|
|
31
|
+
3. Recommended libraries/tools
|
|
32
|
+
4. Testing strategies
|
|
33
|
+
|
|
34
|
+
Provide actionable recommendations.`
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'framework-docs-agent',
|
|
38
|
+
category: 'framework-docs',
|
|
39
|
+
prompt: `Find the latest documentation for ${stackStr} related to "${feature}". Include:
|
|
40
|
+
1. Official API references
|
|
41
|
+
2. Configuration options
|
|
42
|
+
3. Migration guides if applicable
|
|
43
|
+
4. Code examples from official docs
|
|
44
|
+
|
|
45
|
+
Use context7 MCP if available for up-to-date documentation.`
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: 'codebase-patterns-agent',
|
|
49
|
+
category: 'codebase-patterns',
|
|
50
|
+
prompt: `Analyze the current codebase for patterns related to "${feature}". Look for:
|
|
51
|
+
1. Similar existing implementations
|
|
52
|
+
2. Established conventions
|
|
53
|
+
3. Reusable utilities
|
|
54
|
+
4. Potential conflicts or dependencies
|
|
55
|
+
|
|
56
|
+
Use Glob and Grep to search the codebase.`
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'security-advisory-agent',
|
|
60
|
+
category: 'security-advisory',
|
|
61
|
+
prompt: `Review security considerations for "${feature}" with ${stackStr}. Check:
|
|
62
|
+
1. OWASP Top 10 relevance
|
|
63
|
+
2. Authentication/authorization requirements
|
|
64
|
+
3. Data validation needs
|
|
65
|
+
4. Known vulnerabilities in dependencies
|
|
66
|
+
|
|
67
|
+
Provide security recommendations.`
|
|
68
|
+
}
|
|
69
|
+
];
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* 단일 리서치 태스크 실행
|
|
73
|
+
*/
|
|
74
|
+
async function executeResearchTask(task, projectPath, timeout) {
|
|
75
|
+
const startTime = Date.now();
|
|
76
|
+
const query = await getQueryFunction();
|
|
77
|
+
// Agent SDK가 없으면 시뮬레이션 결과 반환
|
|
78
|
+
if (!query) {
|
|
79
|
+
return {
|
|
80
|
+
agentName: task.name,
|
|
81
|
+
sessionId: `simulated-${Date.now()}`,
|
|
82
|
+
result: `[Agent SDK not installed] Task "${task.name}" would execute: ${task.prompt.slice(0, 100)}...`,
|
|
83
|
+
success: true,
|
|
84
|
+
duration: Date.now() - startTime
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
let sessionId = '';
|
|
89
|
+
let result = '';
|
|
90
|
+
// Agent SDK query 실행
|
|
91
|
+
const response = query({
|
|
92
|
+
prompt: task.prompt,
|
|
93
|
+
options: {
|
|
94
|
+
model: 'claude-haiku-3-5', // 리서치는 빠른 모델 사용
|
|
95
|
+
maxTurns: 3,
|
|
96
|
+
allowedTools: ['Read', 'Glob', 'Grep', 'WebFetch', 'WebSearch'],
|
|
97
|
+
cwd: projectPath
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
// 타임아웃 처리
|
|
101
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
102
|
+
setTimeout(() => reject(new Error('Research task timeout')), timeout);
|
|
103
|
+
});
|
|
104
|
+
// 스트리밍 결과 수집
|
|
105
|
+
const collectResult = async () => {
|
|
106
|
+
for await (const message of response) {
|
|
107
|
+
const msg = message;
|
|
108
|
+
if (msg.type === 'system' && msg.subtype === 'init' && msg.session_id) {
|
|
109
|
+
sessionId = msg.session_id;
|
|
110
|
+
}
|
|
111
|
+
if (msg.type === 'result' && msg.result) {
|
|
112
|
+
result = msg.result;
|
|
113
|
+
}
|
|
114
|
+
if (msg.type === 'assistant' && msg.message?.content) {
|
|
115
|
+
const textContent = msg.message.content
|
|
116
|
+
.filter(block => block.type === 'text' && block.text)
|
|
117
|
+
.map(block => block.text)
|
|
118
|
+
.join('\n');
|
|
119
|
+
if (textContent) {
|
|
120
|
+
result += textContent;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
await Promise.race([collectResult(), timeoutPromise]);
|
|
126
|
+
return {
|
|
127
|
+
agentName: task.name,
|
|
128
|
+
sessionId,
|
|
129
|
+
result: result || 'No result collected',
|
|
130
|
+
success: true,
|
|
131
|
+
duration: Date.now() - startTime
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
return {
|
|
136
|
+
agentName: task.name,
|
|
137
|
+
sessionId: '',
|
|
138
|
+
result: '',
|
|
139
|
+
success: false,
|
|
140
|
+
error: error instanceof Error ? error.message : String(error),
|
|
141
|
+
duration: Date.now() - startTime
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* 병렬 리서치 실행
|
|
147
|
+
*/
|
|
148
|
+
export async function parallelResearch(args) {
|
|
149
|
+
const { tasks, projectPath = process.cwd(), maxConcurrency = 4, timeout = 60000 // 1분 기본 타임아웃
|
|
150
|
+
} = args;
|
|
151
|
+
const startTime = Date.now();
|
|
152
|
+
const results = [];
|
|
153
|
+
try {
|
|
154
|
+
// 동시성 제어를 위한 청크 분할
|
|
155
|
+
const chunks = [];
|
|
156
|
+
for (let i = 0; i < tasks.length; i += maxConcurrency) {
|
|
157
|
+
chunks.push(tasks.slice(i, i + maxConcurrency));
|
|
158
|
+
}
|
|
159
|
+
// 청크별 병렬 실행
|
|
160
|
+
for (const chunk of chunks) {
|
|
161
|
+
const chunkResults = await Promise.all(chunk.map(task => executeResearchTask(task, projectPath, timeout)));
|
|
162
|
+
results.push(...chunkResults);
|
|
163
|
+
}
|
|
164
|
+
const totalDuration = Date.now() - startTime;
|
|
165
|
+
const successCount = results.filter(r => r.success).length;
|
|
166
|
+
const failureCount = results.length - successCount;
|
|
167
|
+
// 결과 포맷팅
|
|
168
|
+
let summary = `## Parallel Research Results\n\n`;
|
|
169
|
+
summary += `**Duration**: ${(totalDuration / 1000).toFixed(1)}s\n`;
|
|
170
|
+
summary += `**Success**: ${successCount}/${results.length}\n\n`;
|
|
171
|
+
for (const result of results) {
|
|
172
|
+
const status = result.success ? '✅' : '❌';
|
|
173
|
+
summary += `### ${status} ${result.agentName}\n`;
|
|
174
|
+
summary += `Duration: ${(result.duration / 1000).toFixed(1)}s\n`;
|
|
175
|
+
if (result.success) {
|
|
176
|
+
// 결과 요약 (첫 500자)
|
|
177
|
+
const preview = result.result.length > 500
|
|
178
|
+
? result.result.slice(0, 500) + '...'
|
|
179
|
+
: result.result;
|
|
180
|
+
summary += `\n${preview}\n`;
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
summary += `Error: ${result.error}\n`;
|
|
184
|
+
}
|
|
185
|
+
summary += '\n---\n\n';
|
|
186
|
+
}
|
|
187
|
+
const fullResult = {
|
|
188
|
+
results,
|
|
189
|
+
totalDuration,
|
|
190
|
+
successCount,
|
|
191
|
+
failureCount
|
|
192
|
+
};
|
|
193
|
+
return {
|
|
194
|
+
content: [{ type: 'text', text: summary }],
|
|
195
|
+
...fullResult
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
return {
|
|
200
|
+
content: [{
|
|
201
|
+
type: 'text',
|
|
202
|
+
text: `Parallel research failed: ${error instanceof Error ? error.message : String(error)}`
|
|
203
|
+
}]
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* 기능 기반 병렬 리서치 (간편 API)
|
|
209
|
+
*/
|
|
210
|
+
export async function researchFeature(feature, techStack = [], projectPath = process.cwd()) {
|
|
211
|
+
const tasks = createResearchTasks(feature, techStack);
|
|
212
|
+
return parallelResearch({ tasks, projectPath });
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=parallelResearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallelResearch.js","sourceRoot":"","sources":["../../src/orchestrator/parallelResearch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orchestrator Types - Agent SDK 기반 오케스트레이션 타입 정의
|
|
3
|
+
*/
|
|
4
|
+
import { ToolResult } from '../types/tool.js';
|
|
5
|
+
export interface AgentConfig {
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
prompt: string;
|
|
9
|
+
model?: 'claude-sonnet-4-5' | 'claude-opus-4' | 'claude-haiku-3-5';
|
|
10
|
+
maxTurns?: number;
|
|
11
|
+
allowedTools?: string[];
|
|
12
|
+
systemPrompt?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface AgentResult {
|
|
15
|
+
agentName: string;
|
|
16
|
+
sessionId: string;
|
|
17
|
+
result: string;
|
|
18
|
+
success: boolean;
|
|
19
|
+
error?: string;
|
|
20
|
+
duration: number;
|
|
21
|
+
}
|
|
22
|
+
export interface ResearchTask {
|
|
23
|
+
name: string;
|
|
24
|
+
prompt: string;
|
|
25
|
+
category: 'best-practices' | 'framework-docs' | 'codebase-patterns' | 'security-advisory' | 'custom';
|
|
26
|
+
}
|
|
27
|
+
export interface ParallelResearchArgs {
|
|
28
|
+
tasks: ResearchTask[];
|
|
29
|
+
projectPath?: string;
|
|
30
|
+
maxConcurrency?: number;
|
|
31
|
+
timeout?: number;
|
|
32
|
+
}
|
|
33
|
+
export interface ParallelResearchResult {
|
|
34
|
+
results: AgentResult[];
|
|
35
|
+
totalDuration: number;
|
|
36
|
+
successCount: number;
|
|
37
|
+
failureCount: number;
|
|
38
|
+
}
|
|
39
|
+
export interface BackgroundAgentArgs {
|
|
40
|
+
prompt: string;
|
|
41
|
+
agentName?: string;
|
|
42
|
+
model?: 'claude-sonnet-4-5' | 'claude-opus-4' | 'claude-haiku-3-5';
|
|
43
|
+
maxTurns?: number;
|
|
44
|
+
allowedTools?: string[];
|
|
45
|
+
projectPath?: string;
|
|
46
|
+
onProgress?: (message: string) => void;
|
|
47
|
+
}
|
|
48
|
+
export interface BackgroundAgentHandle {
|
|
49
|
+
sessionId: string;
|
|
50
|
+
agentName: string;
|
|
51
|
+
status: 'running' | 'completed' | 'failed' | 'cancelled';
|
|
52
|
+
startTime: number;
|
|
53
|
+
getResult: () => Promise<AgentResult>;
|
|
54
|
+
cancel: () => void;
|
|
55
|
+
}
|
|
56
|
+
export interface DiscoveredAgent {
|
|
57
|
+
name: string;
|
|
58
|
+
path: string;
|
|
59
|
+
category: string;
|
|
60
|
+
description: string;
|
|
61
|
+
content: string;
|
|
62
|
+
}
|
|
63
|
+
export interface AgentDiscoveryArgs {
|
|
64
|
+
projectPath?: string;
|
|
65
|
+
category?: string;
|
|
66
|
+
pattern?: string;
|
|
67
|
+
}
|
|
68
|
+
export interface SessionInfo {
|
|
69
|
+
sessionId: string;
|
|
70
|
+
agentName: string;
|
|
71
|
+
status: 'active' | 'completed' | 'failed';
|
|
72
|
+
startTime: number;
|
|
73
|
+
endTime?: number;
|
|
74
|
+
prompt: string;
|
|
75
|
+
}
|
|
76
|
+
export interface SessionStore {
|
|
77
|
+
sessions: Map<string, SessionInfo>;
|
|
78
|
+
add: (session: SessionInfo) => void;
|
|
79
|
+
get: (sessionId: string) => SessionInfo | undefined;
|
|
80
|
+
list: () => SessionInfo[];
|
|
81
|
+
cleanup: (maxAge: number) => void;
|
|
82
|
+
}
|
|
83
|
+
export interface OrchestratorOptions {
|
|
84
|
+
projectPath?: string;
|
|
85
|
+
verbose?: boolean;
|
|
86
|
+
saveResults?: boolean;
|
|
87
|
+
resultsPath?: string;
|
|
88
|
+
}
|
|
89
|
+
export interface AgentMessage {
|
|
90
|
+
type: 'system' | 'assistant' | 'user' | 'result';
|
|
91
|
+
subtype?: 'init' | 'progress' | 'tool_use' | 'tool_result';
|
|
92
|
+
session_id?: string;
|
|
93
|
+
content?: string;
|
|
94
|
+
result?: string;
|
|
95
|
+
message?: {
|
|
96
|
+
content: Array<{
|
|
97
|
+
type: string;
|
|
98
|
+
text?: string;
|
|
99
|
+
}>;
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
export interface OrchestratorToolResult extends ToolResult {
|
|
103
|
+
metadata?: {
|
|
104
|
+
sessionId?: string;
|
|
105
|
+
duration?: number;
|
|
106
|
+
agentName?: string;
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/orchestrator/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/orchestrator/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -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',
|