@su-record/vibe 2.5.12 → 2.5.13

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 (108) hide show
  1. package/commands/vibe.analyze.md +3 -3
  2. package/commands/vibe.review.md +3 -3
  3. package/commands/vibe.run.md +75 -9
  4. package/commands/vibe.spec.md +7 -7
  5. package/commands/vibe.utils.md +62 -5
  6. package/dist/cli/setup/GlobalInstaller.d.ts +24 -0
  7. package/dist/cli/setup/GlobalInstaller.d.ts.map +1 -0
  8. package/dist/cli/setup/GlobalInstaller.js +130 -0
  9. package/dist/cli/setup/GlobalInstaller.js.map +1 -0
  10. package/dist/cli/setup/LanguageDetector.d.ts +16 -0
  11. package/dist/cli/setup/LanguageDetector.d.ts.map +1 -0
  12. package/dist/cli/setup/LanguageDetector.js +49 -0
  13. package/dist/cli/setup/LanguageDetector.js.map +1 -0
  14. package/dist/cli/setup/LegacyMigration.d.ts +25 -0
  15. package/dist/cli/setup/LegacyMigration.d.ts.map +1 -0
  16. package/dist/cli/setup/LegacyMigration.js +162 -0
  17. package/dist/cli/setup/LegacyMigration.js.map +1 -0
  18. package/dist/cli/setup/ProjectSetup.d.ts +30 -0
  19. package/dist/cli/setup/ProjectSetup.d.ts.map +1 -0
  20. package/dist/cli/setup/ProjectSetup.js +238 -0
  21. package/dist/cli/setup/ProjectSetup.js.map +1 -0
  22. package/dist/cli/setup/index.d.ts +14 -0
  23. package/dist/cli/setup/index.d.ts.map +1 -0
  24. package/dist/cli/setup/index.js +18 -0
  25. package/dist/cli/setup/index.js.map +1 -0
  26. package/dist/cli/setup.d.ts +10 -77
  27. package/dist/cli/setup.d.ts.map +1 -1
  28. package/dist/cli/setup.js +15 -592
  29. package/dist/cli/setup.js.map +1 -1
  30. package/dist/lib/llm/auth/ApiKeyManager.d.ts +21 -0
  31. package/dist/lib/llm/auth/ApiKeyManager.d.ts.map +1 -0
  32. package/dist/lib/llm/auth/ApiKeyManager.js +43 -0
  33. package/dist/lib/llm/auth/ApiKeyManager.js.map +1 -0
  34. package/dist/lib/llm/auth/ConfigManager.d.ts +29 -0
  35. package/dist/lib/llm/auth/ConfigManager.d.ts.map +1 -0
  36. package/dist/lib/llm/auth/ConfigManager.js +67 -0
  37. package/dist/lib/llm/auth/ConfigManager.js.map +1 -0
  38. package/dist/lib/llm/auth/index.d.ts +25 -0
  39. package/dist/lib/llm/auth/index.d.ts.map +1 -0
  40. package/dist/lib/llm/auth/index.js +83 -0
  41. package/dist/lib/llm/auth/index.js.map +1 -0
  42. package/dist/lib/llm/index.d.ts +10 -0
  43. package/dist/lib/llm/index.d.ts.map +1 -0
  44. package/dist/lib/llm/index.js +12 -0
  45. package/dist/lib/llm/index.js.map +1 -0
  46. package/dist/lib/llm/types.d.ts +96 -0
  47. package/dist/lib/llm/types.d.ts.map +1 -0
  48. package/dist/lib/llm/types.js +17 -0
  49. package/dist/lib/llm/types.js.map +1 -0
  50. package/dist/lib/llm/utils/index.d.ts +6 -0
  51. package/dist/lib/llm/utils/index.d.ts.map +1 -0
  52. package/dist/lib/llm/utils/index.js +6 -0
  53. package/dist/lib/llm/utils/index.js.map +1 -0
  54. package/dist/lib/llm/utils/retry.d.ts +25 -0
  55. package/dist/lib/llm/utils/retry.d.ts.map +1 -0
  56. package/dist/lib/llm/utils/retry.js +72 -0
  57. package/dist/lib/llm/utils/retry.js.map +1 -0
  58. package/dist/lib/llm/utils/stream.d.ts +13 -0
  59. package/dist/lib/llm/utils/stream.d.ts.map +1 -0
  60. package/dist/lib/llm/utils/stream.js +110 -0
  61. package/dist/lib/llm/utils/stream.js.map +1 -0
  62. package/dist/orchestrator/AgentExecutor.d.ts +23 -0
  63. package/dist/orchestrator/AgentExecutor.d.ts.map +1 -0
  64. package/dist/orchestrator/AgentExecutor.js +231 -0
  65. package/dist/orchestrator/AgentExecutor.js.map +1 -0
  66. package/dist/orchestrator/AgentManager.d.ts +73 -0
  67. package/dist/orchestrator/AgentManager.d.ts.map +1 -0
  68. package/dist/orchestrator/AgentManager.js +184 -0
  69. package/dist/orchestrator/AgentManager.js.map +1 -0
  70. package/dist/orchestrator/LLMCluster.d.ts +70 -0
  71. package/dist/orchestrator/LLMCluster.d.ts.map +1 -0
  72. package/dist/orchestrator/LLMCluster.js +91 -0
  73. package/dist/orchestrator/LLMCluster.js.map +1 -0
  74. package/dist/orchestrator/MultiLlmResearch.d.ts +27 -0
  75. package/dist/orchestrator/MultiLlmResearch.d.ts.map +1 -0
  76. package/dist/orchestrator/MultiLlmResearch.js +145 -0
  77. package/dist/orchestrator/MultiLlmResearch.js.map +1 -0
  78. package/dist/orchestrator/SessionStore.d.ts +41 -0
  79. package/dist/orchestrator/SessionStore.d.ts.map +1 -0
  80. package/dist/orchestrator/SessionStore.js +117 -0
  81. package/dist/orchestrator/SessionStore.js.map +1 -0
  82. package/dist/orchestrator/SmartRouter.d.ts +68 -0
  83. package/dist/orchestrator/SmartRouter.d.ts.map +1 -0
  84. package/dist/orchestrator/SmartRouter.js +256 -0
  85. package/dist/orchestrator/SmartRouter.js.map +1 -0
  86. package/dist/orchestrator/backgroundAgent.d.ts +10 -27
  87. package/dist/orchestrator/backgroundAgent.d.ts.map +1 -1
  88. package/dist/orchestrator/backgroundAgent.js +11 -345
  89. package/dist/orchestrator/backgroundAgent.js.map +1 -1
  90. package/dist/orchestrator/index.d.ts +3 -0
  91. package/dist/orchestrator/index.d.ts.map +1 -1
  92. package/dist/orchestrator/index.js +4 -0
  93. package/dist/orchestrator/index.js.map +1 -1
  94. package/dist/orchestrator/orchestrator.d.ts +19 -154
  95. package/dist/orchestrator/orchestrator.d.ts.map +1 -1
  96. package/dist/orchestrator/orchestrator.js +90 -514
  97. package/dist/orchestrator/orchestrator.js.map +1 -1
  98. package/dist/orchestrator/parallelResearch.d.ts +5 -12
  99. package/dist/orchestrator/parallelResearch.d.ts.map +1 -1
  100. package/dist/orchestrator/parallelResearch.js +10 -193
  101. package/dist/orchestrator/parallelResearch.js.map +1 -1
  102. package/hooks/scripts/generate-brand-assets.js +472 -0
  103. package/package.json +1 -1
  104. package/skills/brand-assets.md +141 -0
  105. package/skills/commerce-patterns.md +361 -0
  106. package/skills/e2e-commerce.md +304 -0
  107. package/skills/frontend-design.md +92 -0
  108. package/skills/seo-checklist.md +244 -0
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Streaming utilities for LLM responses
3
+ */
4
+ /**
5
+ * Parse Server-Sent Events (SSE) stream
6
+ */
7
+ export async function parseSSEStream(stream) {
8
+ const reader = stream.getReader();
9
+ const decoder = new TextDecoder();
10
+ let buffer = '';
11
+ let result = '';
12
+ try {
13
+ while (true) {
14
+ const { done, value } = await reader.read();
15
+ if (done)
16
+ break;
17
+ buffer += decoder.decode(value, { stream: true });
18
+ const lines = buffer.split('\n');
19
+ buffer = lines.pop() || '';
20
+ for (const line of lines) {
21
+ if (line.startsWith('data: ')) {
22
+ const data = line.slice(6);
23
+ if (data === '[DONE]')
24
+ continue;
25
+ try {
26
+ const parsed = JSON.parse(data);
27
+ // Handle OpenAI format
28
+ if (parsed.choices?.[0]?.delta?.content) {
29
+ result += parsed.choices[0].delta.content;
30
+ }
31
+ // Handle Responses API format
32
+ if (parsed.type === 'response.output_text.delta' && parsed.delta) {
33
+ result += parsed.delta;
34
+ }
35
+ // Handle Gemini format
36
+ if (parsed.candidates?.[0]?.content?.parts?.[0]?.text) {
37
+ result += parsed.candidates[0].content.parts[0].text;
38
+ }
39
+ }
40
+ catch {
41
+ // Skip unparseable lines
42
+ }
43
+ }
44
+ }
45
+ }
46
+ }
47
+ finally {
48
+ reader.releaseLock();
49
+ }
50
+ return result;
51
+ }
52
+ /**
53
+ * Parse SSE stream as async generator
54
+ */
55
+ export async function* streamSSE(stream) {
56
+ const reader = stream.getReader();
57
+ const decoder = new TextDecoder();
58
+ let buffer = '';
59
+ try {
60
+ while (true) {
61
+ const { done, value } = await reader.read();
62
+ if (done) {
63
+ yield { type: 'done' };
64
+ break;
65
+ }
66
+ buffer += decoder.decode(value, { stream: true });
67
+ const lines = buffer.split('\n');
68
+ buffer = lines.pop() || '';
69
+ for (const line of lines) {
70
+ if (line.startsWith('data: ')) {
71
+ const data = line.slice(6);
72
+ if (data === '[DONE]') {
73
+ yield { type: 'done' };
74
+ continue;
75
+ }
76
+ try {
77
+ const parsed = JSON.parse(data);
78
+ let content;
79
+ // Handle different formats
80
+ if (parsed.choices?.[0]?.delta?.content) {
81
+ content = parsed.choices[0].delta.content;
82
+ }
83
+ else if (parsed.type === 'response.output_text.delta' && parsed.delta) {
84
+ content = parsed.delta;
85
+ }
86
+ else if (parsed.candidates?.[0]?.content?.parts?.[0]?.text) {
87
+ content = parsed.candidates[0].content.parts[0].text;
88
+ }
89
+ if (content) {
90
+ yield { type: 'delta', content };
91
+ }
92
+ }
93
+ catch {
94
+ // Skip unparseable lines
95
+ }
96
+ }
97
+ }
98
+ }
99
+ }
100
+ catch (error) {
101
+ yield {
102
+ type: 'error',
103
+ error: error instanceof Error ? error.message : String(error)
104
+ };
105
+ }
106
+ finally {
107
+ reader.releaseLock();
108
+ }
109
+ }
110
+ //# sourceMappingURL=stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../../../src/lib/llm/utils/stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * AgentExecutor - 백그라운드 에이전트 실행
3
+ * backgroundAgent.ts에서 추출 (v2.6.0)
4
+ */
5
+ import { BackgroundAgentArgs } from './types.js';
6
+ import { ToolResult } from '../types/tool.js';
7
+ /**
8
+ * 백그라운드 에이전트 시작
9
+ */
10
+ export declare function launchBackgroundAgent(args: BackgroundAgentArgs): Promise<ToolResult>;
11
+ /**
12
+ * 백그라운드 에이전트 결과 조회
13
+ */
14
+ export declare function getBackgroundAgentResult(sessionId: string): Promise<ToolResult>;
15
+ /**
16
+ * 백그라운드 에이전트 취소
17
+ */
18
+ export declare function cancelBackgroundAgent(sessionId: string): ToolResult;
19
+ /**
20
+ * 여러 백그라운드 에이전트 동시 실행
21
+ */
22
+ export declare function launchParallelAgents(agentConfigs: BackgroundAgentArgs[]): Promise<ToolResult>;
23
+ //# sourceMappingURL=AgentExecutor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentExecutor.d.ts","sourceRoot":"","sources":["../../src/orchestrator/AgentExecutor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,mBAAmB,EAIpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA4B9C;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAoI1F;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAmCrF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CAanE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,mBAAmB,EAAE,GAClC,OAAO,CAAC,UAAU,CAAC,CAuCrB"}
@@ -0,0 +1,231 @@
1
+ /**
2
+ * AgentExecutor - 백그라운드 에이전트 실행
3
+ * backgroundAgent.ts에서 추출 (v2.6.0)
4
+ */
5
+ import { getAgentSdkQuery } from '../lib/utils.js';
6
+ import { DEFAULT_MODELS, AGENT } from '../lib/constants.js';
7
+ import { sessionStore } from './SessionStore.js';
8
+ /**
9
+ * 시뮬레이션 핸들 생성 (Agent SDK 미설치 시)
10
+ */
11
+ function createSimulatedHandle(agentName, prompt) {
12
+ return {
13
+ sessionId: `simulated-${Date.now()}`,
14
+ agentName,
15
+ status: 'completed',
16
+ startTime: Date.now(),
17
+ getResult: async () => ({
18
+ agentName,
19
+ sessionId: `simulated-${Date.now()}`,
20
+ result: `[Agent SDK not installed] Would execute: ${prompt.slice(0, 100)}...`,
21
+ success: true,
22
+ duration: 0
23
+ }),
24
+ cancel: () => { }
25
+ };
26
+ }
27
+ /**
28
+ * 백그라운드 에이전트 시작
29
+ */
30
+ export async function launchBackgroundAgent(args) {
31
+ const { prompt, agentName = `agent-${Date.now()}`, model = DEFAULT_MODELS.BACKGROUND, maxTurns = AGENT.MAX_TURNS, allowedTools = AGENT.DEFAULT_ALLOWED_TOOLS, projectPath = process.cwd(), onProgress } = args;
32
+ const query = await getAgentSdkQuery();
33
+ // Agent SDK가 없으면 시뮬레이션
34
+ if (!query) {
35
+ const handle = createSimulatedHandle(agentName, prompt);
36
+ return {
37
+ content: [{
38
+ type: 'text',
39
+ text: `Background agent "${agentName}" started (simulated)\nSession ID: ${handle.sessionId}\n\nNote: Install @anthropic-ai/claude-agent-sdk for real execution.`
40
+ }],
41
+ handle
42
+ };
43
+ }
44
+ const startTime = Date.now();
45
+ const cancelController = new AbortController();
46
+ let sessionId = '';
47
+ let result = '';
48
+ let status = 'running';
49
+ // 결과 수집 Promise
50
+ const resultPromise = new Promise(async (resolve) => {
51
+ try {
52
+ const response = query({
53
+ prompt,
54
+ options: { model, maxTurns, allowedTools, cwd: projectPath }
55
+ });
56
+ for await (const message of response) {
57
+ if (cancelController.signal.aborted) {
58
+ status = 'cancelled';
59
+ resolve({
60
+ agentName, sessionId,
61
+ result: 'Cancelled by user',
62
+ success: false,
63
+ error: 'Cancelled',
64
+ duration: Date.now() - startTime
65
+ });
66
+ return;
67
+ }
68
+ const msg = message;
69
+ if (msg.type === 'system' && msg.subtype === 'init' && msg.session_id) {
70
+ sessionId = msg.session_id;
71
+ }
72
+ if (msg.type === 'system' && msg.subtype === 'progress' && onProgress) {
73
+ onProgress(msg.content || 'Processing...');
74
+ }
75
+ if (msg.type === 'result' && msg.result) {
76
+ result = msg.result;
77
+ }
78
+ if (msg.type === 'assistant' && msg.message?.content) {
79
+ const textContent = msg.message.content
80
+ .filter(block => block.type === 'text' && block.text)
81
+ .map(block => block.text)
82
+ .join('\n');
83
+ if (textContent)
84
+ result += textContent;
85
+ }
86
+ }
87
+ status = 'completed';
88
+ resolve({
89
+ agentName, sessionId,
90
+ result: result || 'No result',
91
+ success: true,
92
+ duration: Date.now() - startTime
93
+ });
94
+ }
95
+ catch (error) {
96
+ status = 'failed';
97
+ resolve({
98
+ agentName, sessionId,
99
+ result: '',
100
+ success: false,
101
+ error: error instanceof Error ? error.message : String(error),
102
+ duration: Date.now() - startTime
103
+ });
104
+ }
105
+ });
106
+ // 핸들 생성
107
+ const handle = {
108
+ sessionId: sessionId || `pending-${Date.now()}`,
109
+ agentName,
110
+ status,
111
+ startTime,
112
+ getResult: () => resultPromise,
113
+ cancel: () => {
114
+ cancelController.abort();
115
+ status = 'cancelled';
116
+ }
117
+ };
118
+ // 세션 등록
119
+ sessionStore.add(handle.sessionId, {
120
+ handle, resultPromise, cancelController, createdAt: startTime
121
+ });
122
+ // 완료 시 히스토리에 추가
123
+ resultPromise.then((agentResult) => {
124
+ sessionStore.addToHistory({
125
+ sessionId: agentResult.sessionId,
126
+ agentName: agentResult.agentName,
127
+ status: agentResult.success ? 'completed' : 'failed',
128
+ startTime,
129
+ endTime: Date.now(),
130
+ prompt
131
+ });
132
+ sessionStore.delete(handle.sessionId);
133
+ });
134
+ return {
135
+ content: [{
136
+ type: 'text',
137
+ text: `Background agent "${agentName}" started\nSession ID: ${handle.sessionId}\nModel: ${model}\nMax Turns: ${maxTurns}\n\nUse getBackgroundAgentResult("${handle.sessionId}") to check status.`
138
+ }],
139
+ handle
140
+ };
141
+ }
142
+ /**
143
+ * 백그라운드 에이전트 결과 조회
144
+ */
145
+ export async function getBackgroundAgentResult(sessionId) {
146
+ const session = sessionStore.get(sessionId);
147
+ if (!session) {
148
+ const historical = sessionStore.findInHistory(sessionId);
149
+ if (historical) {
150
+ return {
151
+ content: [{
152
+ type: 'text',
153
+ text: `Session "${sessionId}" completed at ${new Date(historical.endTime).toISOString()}\nStatus: ${historical.status}`
154
+ }]
155
+ };
156
+ }
157
+ return {
158
+ content: [{ type: 'text', text: `Session "${sessionId}" not found` }]
159
+ };
160
+ }
161
+ if (session.handle.status === 'running') {
162
+ return {
163
+ content: [{
164
+ type: 'text',
165
+ text: `Session "${sessionId}" is still running\nAgent: ${session.handle.agentName}\nStarted: ${new Date(session.handle.startTime).toISOString()}`
166
+ }]
167
+ };
168
+ }
169
+ const result = await session.resultPromise;
170
+ return {
171
+ content: [{
172
+ type: 'text',
173
+ text: `Session "${sessionId}" ${result.success ? 'completed' : 'failed'}\nDuration: ${(result.duration / 1000).toFixed(1)}s\n\nResult:\n${result.result}`
174
+ }],
175
+ result
176
+ };
177
+ }
178
+ /**
179
+ * 백그라운드 에이전트 취소
180
+ */
181
+ export function cancelBackgroundAgent(sessionId) {
182
+ const session = sessionStore.get(sessionId);
183
+ if (!session) {
184
+ return {
185
+ content: [{ type: 'text', text: `Session "${sessionId}" not found or already completed` }]
186
+ };
187
+ }
188
+ session.handle.cancel();
189
+ return {
190
+ content: [{ type: 'text', text: `Session "${sessionId}" cancelled` }]
191
+ };
192
+ }
193
+ /**
194
+ * 여러 백그라운드 에이전트 동시 실행
195
+ */
196
+ export async function launchParallelAgents(agentConfigs) {
197
+ const handles = [];
198
+ const errors = [];
199
+ const results = await Promise.all(agentConfigs.map(async (config) => {
200
+ try {
201
+ const result = await launchBackgroundAgent(config);
202
+ if ('handle' in result) {
203
+ return result.handle;
204
+ }
205
+ return null;
206
+ }
207
+ catch (error) {
208
+ errors.push(`${config.agentName}: ${error instanceof Error ? error.message : String(error)}`);
209
+ return null;
210
+ }
211
+ }));
212
+ for (const result of results) {
213
+ if (result)
214
+ handles.push(result);
215
+ }
216
+ let summary = `## Launched ${handles.length} Background Agents\n\n`;
217
+ for (const handle of handles) {
218
+ summary += `- ${handle.agentName}: ${handle.sessionId}\n`;
219
+ }
220
+ if (errors.length > 0) {
221
+ summary += `\n### Errors (${errors.length})\n`;
222
+ for (const error of errors) {
223
+ summary += `- ${error}\n`;
224
+ }
225
+ }
226
+ return {
227
+ content: [{ type: 'text', text: summary }],
228
+ handles
229
+ };
230
+ }
231
+ //# sourceMappingURL=AgentExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentExecutor.js","sourceRoot":"","sources":["../../src/orchestrator/AgentExecutor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * AgentManager - 에이전트 관리 및 실행
3
+ * orchestrator.ts에서 추출된 에이전트 관리 모듈
4
+ */
5
+ import { AgentResult, BackgroundAgentArgs, BackgroundAgentHandle, DiscoveredAgent } from './types.js';
6
+ import { ToolResult } from '../types/tool.js';
7
+ /**
8
+ * AgentManager 설정
9
+ */
10
+ export interface AgentManagerOptions {
11
+ projectPath?: string;
12
+ }
13
+ /**
14
+ * AgentManager - 에이전트 탐색, 실행, 결과 관리
15
+ */
16
+ export declare class AgentManager {
17
+ private projectPath;
18
+ constructor(options?: AgentManagerOptions);
19
+ /**
20
+ * 에이전트 탐색
21
+ */
22
+ discover(category?: string): Promise<DiscoveredAgent[]>;
23
+ /**
24
+ * 특정 에이전트 로드
25
+ */
26
+ load(agentName: string): Promise<DiscoveredAgent | null>;
27
+ /**
28
+ * 카테고리별 에이전트 목록
29
+ */
30
+ listByCategory(category: string): Promise<DiscoveredAgent[]>;
31
+ /**
32
+ * 백그라운드 에이전트 시작
33
+ */
34
+ launch(args: BackgroundAgentArgs): Promise<BackgroundAgentHandle | null>;
35
+ /**
36
+ * 여러 에이전트 동시 실행
37
+ */
38
+ launchParallel(configs: BackgroundAgentArgs[]): Promise<BackgroundAgentHandle[]>;
39
+ /**
40
+ * 에이전트 결과 조회
41
+ */
42
+ getResult(sessionId: string): Promise<AgentResult | null>;
43
+ /**
44
+ * 에이전트 취소
45
+ */
46
+ cancel(sessionId: string): boolean;
47
+ /**
48
+ * 활성 세션 목록
49
+ */
50
+ getActiveSessions(): ToolResult;
51
+ /**
52
+ * 세션 히스토리
53
+ */
54
+ getHistory(limit?: number): ToolResult;
55
+ /**
56
+ * 리뷰 에이전트 병렬 실행
57
+ */
58
+ runParallelReview(filePaths: string[], techStack?: string[]): Promise<AgentResult[]>;
59
+ /**
60
+ * 기술 스택에 맞는 에이전트 필터링
61
+ */
62
+ private filterRelevantAgents;
63
+ /**
64
+ * 리뷰 프롬프트 생성
65
+ */
66
+ private buildReviewPrompt;
67
+ /**
68
+ * 프로젝트 경로 업데이트
69
+ */
70
+ setProjectPath(path: string): void;
71
+ }
72
+ export declare function getAgentManager(options?: AgentManagerOptions): AgentManager;
73
+ //# sourceMappingURL=AgentManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentManager.d.ts","sourceRoot":"","sources":["../../src/orchestrator/AgentManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAY9C;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,GAAE,mBAAwB;IAI7C;;OAEG;IACG,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAY7D;;OAEG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAI9D;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAIlE;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAY9E;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IActF;;OAEG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAS/D;;OAEG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAKlC;;OAEG;IACH,iBAAiB,IAAI,UAAU;IAI/B;;OAEG;IACH,UAAU,CAAC,KAAK,GAAE,MAAW,GAAG,UAAU;IAI1C;;OAEG;IACG,iBAAiB,CACrB,SAAS,EAAE,MAAM,EAAE,EACnB,SAAS,GAAE,MAAM,EAAO,GACvB,OAAO,CAAC,WAAW,EAAE,CAAC;IAuBzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuC5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAGnC;AAKD,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,YAAY,CAK3E"}
@@ -0,0 +1,184 @@
1
+ /**
2
+ * AgentManager - 에이전트 관리 및 실행
3
+ * orchestrator.ts에서 추출된 에이전트 관리 모듈
4
+ */
5
+ import { discoverAgents, loadAgent, listAgentsByCategory } from './agentDiscovery.js';
6
+ import { launchBackgroundAgent, getBackgroundAgentResult, cancelBackgroundAgent, listActiveSessions, getSessionHistory, launchParallelAgents } from './backgroundAgent.js';
7
+ import { DEFAULT_MODELS } from '../lib/constants.js';
8
+ /**
9
+ * AgentManager - 에이전트 탐색, 실행, 결과 관리
10
+ */
11
+ export class AgentManager {
12
+ projectPath;
13
+ constructor(options = {}) {
14
+ this.projectPath = options.projectPath ?? process.cwd();
15
+ }
16
+ /**
17
+ * 에이전트 탐색
18
+ */
19
+ async discover(category) {
20
+ const result = await discoverAgents({
21
+ projectPath: this.projectPath,
22
+ category
23
+ });
24
+ if ('agents' in result) {
25
+ return result.agents;
26
+ }
27
+ return [];
28
+ }
29
+ /**
30
+ * 특정 에이전트 로드
31
+ */
32
+ async load(agentName) {
33
+ return loadAgent(agentName, this.projectPath);
34
+ }
35
+ /**
36
+ * 카테고리별 에이전트 목록
37
+ */
38
+ async listByCategory(category) {
39
+ return listAgentsByCategory(category, this.projectPath);
40
+ }
41
+ /**
42
+ * 백그라운드 에이전트 시작
43
+ */
44
+ async launch(args) {
45
+ const result = await launchBackgroundAgent({
46
+ ...args,
47
+ projectPath: args.projectPath || this.projectPath
48
+ });
49
+ if ('handle' in result) {
50
+ return result.handle;
51
+ }
52
+ return null;
53
+ }
54
+ /**
55
+ * 여러 에이전트 동시 실행
56
+ */
57
+ async launchParallel(configs) {
58
+ const result = await launchParallelAgents(configs.map(c => ({
59
+ ...c,
60
+ projectPath: c.projectPath || this.projectPath
61
+ })));
62
+ if ('handles' in result) {
63
+ return result.handles;
64
+ }
65
+ return [];
66
+ }
67
+ /**
68
+ * 에이전트 결과 조회
69
+ */
70
+ async getResult(sessionId) {
71
+ const result = await getBackgroundAgentResult(sessionId);
72
+ if ('result' in result) {
73
+ return result.result;
74
+ }
75
+ return null;
76
+ }
77
+ /**
78
+ * 에이전트 취소
79
+ */
80
+ cancel(sessionId) {
81
+ const result = cancelBackgroundAgent(sessionId);
82
+ return result.content[0].text.includes('cancelled');
83
+ }
84
+ /**
85
+ * 활성 세션 목록
86
+ */
87
+ getActiveSessions() {
88
+ return listActiveSessions();
89
+ }
90
+ /**
91
+ * 세션 히스토리
92
+ */
93
+ getHistory(limit = 10) {
94
+ return getSessionHistory(limit);
95
+ }
96
+ /**
97
+ * 리뷰 에이전트 병렬 실행
98
+ */
99
+ async runParallelReview(filePaths, techStack = []) {
100
+ const reviewAgents = await this.listByCategory('review');
101
+ const relevantAgents = this.filterRelevantAgents(reviewAgents, techStack);
102
+ const agentConfigs = relevantAgents.map(agent => ({
103
+ agentName: agent.name,
104
+ prompt: this.buildReviewPrompt(agent, filePaths),
105
+ model: DEFAULT_MODELS.REVIEW,
106
+ maxTurns: 3,
107
+ allowedTools: ['Read', 'Glob', 'Grep']
108
+ }));
109
+ const handles = await this.launchParallel(agentConfigs);
110
+ const results = [];
111
+ for (const handle of handles) {
112
+ const result = await handle.getResult();
113
+ results.push(result);
114
+ }
115
+ return results;
116
+ }
117
+ /**
118
+ * 기술 스택에 맞는 에이전트 필터링
119
+ */
120
+ filterRelevantAgents(agents, techStack) {
121
+ const coreReviewers = [
122
+ 'security-reviewer',
123
+ 'performance-reviewer',
124
+ 'architecture-reviewer',
125
+ 'complexity-reviewer',
126
+ 'simplicity-reviewer',
127
+ 'data-integrity-reviewer',
128
+ 'test-coverage-reviewer',
129
+ 'git-history-reviewer'
130
+ ];
131
+ const stackReviewers = {
132
+ typescript: ['typescript-reviewer'],
133
+ python: ['python-reviewer'],
134
+ react: ['react-reviewer'],
135
+ rails: ['rails-reviewer'],
136
+ ruby: ['rails-reviewer']
137
+ };
138
+ const relevantNames = new Set(coreReviewers);
139
+ for (const tech of techStack) {
140
+ const reviewers = stackReviewers[tech.toLowerCase()];
141
+ if (reviewers) {
142
+ reviewers.forEach(r => relevantNames.add(r));
143
+ }
144
+ }
145
+ return agents.filter(agent => {
146
+ const normalizedName = agent.name.toLowerCase().replace(/\s+/g, '-');
147
+ return relevantNames.has(normalizedName) ||
148
+ Array.from(relevantNames).some(r => normalizedName.includes(r));
149
+ });
150
+ }
151
+ /**
152
+ * 리뷰 프롬프트 생성
153
+ */
154
+ buildReviewPrompt(agent, filePaths) {
155
+ return `You are a ${agent.name}. Review the following files for issues in your domain:
156
+
157
+ Files to review:
158
+ ${filePaths.map(f => `- ${f}`).join('\n')}
159
+
160
+ ${agent.content}
161
+
162
+ Provide findings in this format:
163
+ - Priority: P1 (Critical), P2 (Important), P3 (Nice-to-have)
164
+ - Category: Your specialty area
165
+ - Location: file:line
166
+ - Issue: Description
167
+ - Fix: Recommendation`;
168
+ }
169
+ /**
170
+ * 프로젝트 경로 업데이트
171
+ */
172
+ setProjectPath(path) {
173
+ this.projectPath = path;
174
+ }
175
+ }
176
+ // 싱글톤 인스턴스
177
+ let defaultManager = null;
178
+ export function getAgentManager(options) {
179
+ if (!defaultManager || options) {
180
+ defaultManager = new AgentManager(options);
181
+ }
182
+ return defaultManager;
183
+ }
184
+ //# sourceMappingURL=AgentManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentManager.js","sourceRoot":"","sources":["../../src/orchestrator/AgentManager.ts"],"names":[],"mappings":"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"}