@su-record/vibe 2.4.36 → 2.4.41
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/README.md +26 -13
- package/dist/cli/auth.js +9 -9
- package/dist/cli/auth.js.map +1 -1
- package/dist/cli/collaborator.js +28 -28
- package/dist/cli/collaborator.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +57 -54
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/llm.js +20 -20
- package/dist/cli/llm.js.map +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +59 -44
- package/dist/cli/setup.js.map +1 -1
- package/dist/lib/gemini-api.d.ts +2 -2
- package/dist/lib/gemini-api.d.ts.map +1 -1
- package/dist/lib/gemini-api.js +9 -5
- package/dist/lib/gemini-api.js.map +1 -1
- package/dist/lib/gpt-api.d.ts +2 -2
- package/dist/lib/gpt-api.d.ts.map +1 -1
- package/dist/lib/gpt-api.js +12 -6
- package/dist/lib/gpt-api.js.map +1 -1
- package/dist/lib/utils.d.ts +15 -0
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +27 -0
- package/dist/lib/utils.js.map +1 -1
- package/dist/orchestrator/backgroundAgent.d.ts.map +1 -1
- package/dist/orchestrator/backgroundAgent.js +37 -1
- package/dist/orchestrator/backgroundAgent.js.map +1 -1
- package/dist/orchestrator/index.d.ts +112 -1
- package/dist/orchestrator/index.d.ts.map +1 -1
- package/dist/orchestrator/index.js +216 -0
- package/dist/orchestrator/index.js.map +1 -1
- package/dist/orchestrator/orchestrator.d.ts +115 -1
- package/dist/orchestrator/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator/orchestrator.js +358 -1
- package/dist/orchestrator/orchestrator.js.map +1 -1
- package/dist/orchestrator/types.d.ts +42 -0
- package/dist/orchestrator/types.d.ts.map +1 -1
- package/dist/orchestrator/types.js +10 -1
- package/dist/orchestrator/types.js.map +1 -1
- package/hooks/hooks.json +29 -29
- package/hooks/scripts/code-check.js +22 -0
- package/hooks/scripts/code-review.js +22 -0
- package/hooks/scripts/complexity.js +22 -0
- package/hooks/scripts/compound.js +23 -0
- package/hooks/scripts/context-save.js +33 -0
- package/hooks/scripts/llm-orchestrate.js +64 -0
- package/hooks/scripts/recall.js +22 -0
- package/hooks/scripts/session-start.js +30 -0
- package/hooks/scripts/utils.js +40 -0
- package/package.json +1 -1
- package/dist/lib/gemini-mcp.d.ts +0 -10
- package/dist/lib/gemini-mcp.d.ts.map +0 -1
- package/dist/lib/gemini-mcp.js +0 -353
- package/dist/lib/gemini-mcp.js.map +0 -1
- package/dist/lib/gpt-mcp.d.ts +0 -10
- package/dist/lib/gpt-mcp.d.ts.map +0 -1
- package/dist/lib/gpt-mcp.js +0 -352
- package/dist/lib/gpt-mcp.js.map +0 -1
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
* 사용법 (코드에서):
|
|
8
8
|
* import { VibeOrchestrator, parallelResearch } from '@su-record/vibe/orchestrator';
|
|
9
9
|
*/
|
|
10
|
+
// Smart Routing constants
|
|
11
|
+
export { TASK_LLM_PRIORITY } from './types.js';
|
|
10
12
|
// Agent Discovery
|
|
11
13
|
export { discoverAgents, loadAgent, listAgentsByCategory } from './agentDiscovery.js';
|
|
12
14
|
// Parallel Research
|
|
@@ -112,4 +114,218 @@ export function status() {
|
|
|
112
114
|
}]
|
|
113
115
|
};
|
|
114
116
|
}
|
|
117
|
+
// ============================================
|
|
118
|
+
// Multi-LLM Integration (GPT, Gemini)
|
|
119
|
+
// ============================================
|
|
120
|
+
import * as gptApi from '../lib/gpt-api.js';
|
|
121
|
+
import * as geminiApi from '../lib/gemini-api.js';
|
|
122
|
+
// ============================================
|
|
123
|
+
// GPT Integration (웹 검색, 아키텍처 분석)
|
|
124
|
+
// ============================================
|
|
125
|
+
/**
|
|
126
|
+
* GPT 웹 검색 (간편 API)
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* node -e "import('@su-record/vibe/orchestrator').then(o => o.gptSearch('React 19 features')).then(console.log)"
|
|
130
|
+
*/
|
|
131
|
+
export async function gptSearch(query) {
|
|
132
|
+
try {
|
|
133
|
+
const result = await gptApi.quickWebSearch(query);
|
|
134
|
+
return {
|
|
135
|
+
content: [{ type: 'text', text: result }],
|
|
136
|
+
success: true
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
return {
|
|
141
|
+
content: [{ type: 'text', text: `[GPT Error] ${error.message}` }],
|
|
142
|
+
success: false
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* GPT 오케스트레이션 (간편 API)
|
|
148
|
+
*
|
|
149
|
+
* @example
|
|
150
|
+
* node -e "import('@su-record/vibe/orchestrator').then(o => o.gpt('Analyze this architecture')).then(console.log)"
|
|
151
|
+
*/
|
|
152
|
+
export async function gpt(prompt, systemPrompt = 'You are a helpful assistant.') {
|
|
153
|
+
try {
|
|
154
|
+
const result = await gptApi.vibeGptOrchestrate(prompt, systemPrompt, { jsonMode: false });
|
|
155
|
+
return {
|
|
156
|
+
content: [{ type: 'text', text: result }],
|
|
157
|
+
success: true
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
return {
|
|
162
|
+
content: [{ type: 'text', text: `[GPT Error] ${error.message}` }],
|
|
163
|
+
success: false
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// ============================================
|
|
168
|
+
// Gemini Integration (UI/UX 분석, 코드 분석)
|
|
169
|
+
// ============================================
|
|
170
|
+
/**
|
|
171
|
+
* Gemini 웹 검색 (간편 API)
|
|
172
|
+
*
|
|
173
|
+
* @example
|
|
174
|
+
* node -e "import('@su-record/vibe/orchestrator').then(o => o.geminiSearch('React 19 features')).then(console.log)"
|
|
175
|
+
*/
|
|
176
|
+
export async function geminiSearch(query) {
|
|
177
|
+
try {
|
|
178
|
+
const result = await geminiApi.quickWebSearch(query);
|
|
179
|
+
return {
|
|
180
|
+
content: [{ type: 'text', text: result }],
|
|
181
|
+
success: true
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
return {
|
|
186
|
+
content: [{ type: 'text', text: `[Gemini Error] ${error.message}` }],
|
|
187
|
+
success: false
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Gemini 오케스트레이션 (간편 API)
|
|
193
|
+
*
|
|
194
|
+
* @example
|
|
195
|
+
* node -e "import('@su-record/vibe/orchestrator').then(o => o.gemini('Review this UI')).then(console.log)"
|
|
196
|
+
*/
|
|
197
|
+
export async function gemini(prompt, systemPrompt = 'You are a helpful assistant.') {
|
|
198
|
+
try {
|
|
199
|
+
const result = await geminiApi.vibeGeminiOrchestrate(prompt, systemPrompt, { jsonMode: false });
|
|
200
|
+
return {
|
|
201
|
+
content: [{ type: 'text', text: result }],
|
|
202
|
+
success: true
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
return {
|
|
207
|
+
content: [{ type: 'text', text: `[Gemini Error] ${error.message}` }],
|
|
208
|
+
success: false
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// ============================================
|
|
213
|
+
// Multi-LLM Orchestration
|
|
214
|
+
// ============================================
|
|
215
|
+
/**
|
|
216
|
+
* 멀티 LLM 병렬 쿼리 (간편 API)
|
|
217
|
+
* GPT, Gemini 동시 호출
|
|
218
|
+
*
|
|
219
|
+
* @example
|
|
220
|
+
* node -e "import('@su-record/vibe/orchestrator').then(o => o.multiLlm('Review this code')).then(console.log)"
|
|
221
|
+
*/
|
|
222
|
+
export async function multiLlm(prompt, options) {
|
|
223
|
+
const orchestrator = new VibeOrchestrator();
|
|
224
|
+
const results = await orchestrator.multiLlmQuery(prompt, options);
|
|
225
|
+
let summary = '## Multi-LLM Results\n\n';
|
|
226
|
+
if (results.gpt) {
|
|
227
|
+
summary += `### GPT\n${results.gpt}\n\n`;
|
|
228
|
+
}
|
|
229
|
+
if (results.gemini) {
|
|
230
|
+
summary += `### Gemini\n${results.gemini}\n\n`;
|
|
231
|
+
}
|
|
232
|
+
return {
|
|
233
|
+
content: [{ type: 'text', text: summary }],
|
|
234
|
+
results
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* LLM 상태 확인 (간편 API)
|
|
239
|
+
*
|
|
240
|
+
* @example
|
|
241
|
+
* node -e "import('@su-record/vibe/orchestrator').then(o => o.llmStatus()).then(console.log)"
|
|
242
|
+
*/
|
|
243
|
+
export async function llmStatus() {
|
|
244
|
+
const orchestrator = new VibeOrchestrator();
|
|
245
|
+
const llmStatusResult = await orchestrator.checkLlmStatus();
|
|
246
|
+
const gptIcon = llmStatusResult.gpt.available ? '✓' : '✗';
|
|
247
|
+
const geminiIcon = llmStatusResult.gemini.available ? '✓' : '✗';
|
|
248
|
+
let text = '## LLM Status\n\n';
|
|
249
|
+
text += `- GPT: ${gptIcon} ${llmStatusResult.gpt.available ? 'Available' : 'Unavailable'}\n`;
|
|
250
|
+
text += `- Gemini: ${geminiIcon} ${llmStatusResult.gemini.available ? 'Available' : 'Unavailable'}\n`;
|
|
251
|
+
return {
|
|
252
|
+
content: [{ type: 'text', text }],
|
|
253
|
+
status: llmStatusResult
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* 스마트 라우팅 - 작업 유형에 따라 최적의 LLM 선택 + 자동 fallback
|
|
258
|
+
*
|
|
259
|
+
* @example
|
|
260
|
+
* node -e "import('@su-record/vibe/orchestrator').then(o => o.smartRoute({type:'architecture',prompt:'Review this design'})).then(console.log)"
|
|
261
|
+
*/
|
|
262
|
+
export async function smartRoute(type, prompt, systemPrompt) {
|
|
263
|
+
const orchestrator = new VibeOrchestrator();
|
|
264
|
+
const result = await orchestrator.smartRoute({ type, prompt, systemPrompt });
|
|
265
|
+
const fallbackInfo = result.usedFallback
|
|
266
|
+
? ` (fallback from ${result.attemptedProviders.slice(0, -1).join(' → ')})`
|
|
267
|
+
: '';
|
|
268
|
+
return {
|
|
269
|
+
content: [{
|
|
270
|
+
type: 'text',
|
|
271
|
+
text: `[${result.provider.toUpperCase()}${fallbackInfo}]\n\n${result.content}`
|
|
272
|
+
}],
|
|
273
|
+
result
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* 아키텍처 분석 with fallback (GPT → Gemini → Claude)
|
|
278
|
+
*
|
|
279
|
+
* @example
|
|
280
|
+
* node -e "import('@su-record/vibe/orchestrator').then(o => o.smartArchitecture('Review this system design')).then(console.log)"
|
|
281
|
+
*/
|
|
282
|
+
export async function smartArchitecture(prompt) {
|
|
283
|
+
return smartRoute('architecture', prompt, 'You are a software architect. Analyze and review the architecture.');
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* UI/UX 분석 with fallback (Gemini → GPT → Claude)
|
|
287
|
+
*
|
|
288
|
+
* @example
|
|
289
|
+
* node -e "import('@su-record/vibe/orchestrator').then(o => o.smartUiux('Improve this form UX')).then(console.log)"
|
|
290
|
+
*/
|
|
291
|
+
export async function smartUiux(prompt) {
|
|
292
|
+
return smartRoute('uiux', prompt, 'You are a UI/UX expert. Analyze and provide feedback.');
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* 코드 분석 with fallback (Gemini → GPT → Claude)
|
|
296
|
+
*
|
|
297
|
+
* @example
|
|
298
|
+
* node -e "import('@su-record/vibe/orchestrator').then(o => o.smartCodeAnalysis('Analyze this code')).then(console.log)"
|
|
299
|
+
*/
|
|
300
|
+
export async function smartCodeAnalysis(prompt) {
|
|
301
|
+
return smartRoute('code-analysis', prompt, 'You are a code analysis expert. Review and analyze the code.');
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* 디버깅 with fallback (GPT → Gemini → Claude)
|
|
305
|
+
*
|
|
306
|
+
* @example
|
|
307
|
+
* node -e "import('@su-record/vibe/orchestrator').then(o => o.smartDebugging('Find bugs in this code')).then(console.log)"
|
|
308
|
+
*/
|
|
309
|
+
export async function smartDebugging(prompt) {
|
|
310
|
+
return smartRoute('debugging', prompt, 'You are a debugging expert. Find bugs and suggest fixes.');
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* 웹 검색 with fallback (GPT → Gemini → Claude)
|
|
314
|
+
*
|
|
315
|
+
* @example
|
|
316
|
+
* node -e "import('@su-record/vibe/orchestrator').then(o => o.smartWebSearch('React 19 new features')).then(console.log)"
|
|
317
|
+
*/
|
|
318
|
+
export async function smartWebSearch(query) {
|
|
319
|
+
return smartRoute('web-search', query, 'Search the web and provide relevant information.');
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* 코드 생성 with fallback (Claude 직접)
|
|
323
|
+
*
|
|
324
|
+
* @example
|
|
325
|
+
* node -e "import('@su-record/vibe/orchestrator').then(o => o.smartCodeGen('Create a React button component')).then(console.log)"
|
|
326
|
+
*/
|
|
327
|
+
export async function smartCodeGen(description, context) {
|
|
328
|
+
const prompt = context ? `${description}\n\nContext:\n${context}` : description;
|
|
329
|
+
return smartRoute('code-gen', prompt, 'Generate clean, well-documented code.');
|
|
330
|
+
}
|
|
115
331
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Orchestrator - 메인 오케스트레이터 클래스
|
|
3
3
|
* /vibe.* 명령어에서 사용할 중앙 오케스트레이션 로직
|
|
4
4
|
*/
|
|
5
|
-
import { OrchestratorOptions, AgentResult, BackgroundAgentArgs, BackgroundAgentHandle, ParallelResearchArgs, ParallelResearchResult, DiscoveredAgent } from './types.js';
|
|
5
|
+
import { OrchestratorOptions, AgentResult, BackgroundAgentArgs, BackgroundAgentHandle, ParallelResearchArgs, ParallelResearchResult, DiscoveredAgent, SmartRouteRequest, SmartRouteResult } from './types.js';
|
|
6
6
|
import { ToolResult } from '../types/tool.js';
|
|
7
7
|
/**
|
|
8
8
|
* Vibe Orchestrator
|
|
@@ -12,6 +12,70 @@ export declare class VibeOrchestrator {
|
|
|
12
12
|
private options;
|
|
13
13
|
private memoryManager;
|
|
14
14
|
constructor(options?: OrchestratorOptions);
|
|
15
|
+
/**
|
|
16
|
+
* 스마트 라우팅 - 작업 유형에 따라 최적의 LLM 선택 + fallback
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* const result = await orchestrator.smartRoute({
|
|
20
|
+
* type: 'architecture',
|
|
21
|
+
* prompt: 'Review this system design'
|
|
22
|
+
* });
|
|
23
|
+
*/
|
|
24
|
+
smartRoute(request: SmartRouteRequest): Promise<SmartRouteResult>;
|
|
25
|
+
/**
|
|
26
|
+
* LLM 호출 (provider별 분기)
|
|
27
|
+
*/
|
|
28
|
+
private callLlm;
|
|
29
|
+
/**
|
|
30
|
+
* 재시도 없이 즉시 다음 LLM으로 넘어가야 하는 에러인지 확인
|
|
31
|
+
* - Rate limit/Quota 에러
|
|
32
|
+
* - 인증 에러 (토큰/키 없음)
|
|
33
|
+
*/
|
|
34
|
+
private shouldSkipRetry;
|
|
35
|
+
/**
|
|
36
|
+
* LLM 가용성 확인 (캐시 기반)
|
|
37
|
+
*/
|
|
38
|
+
private isLlmUnavailable;
|
|
39
|
+
/**
|
|
40
|
+
* LLM 가용 상태로 마킹
|
|
41
|
+
*/
|
|
42
|
+
private markLlmAvailable;
|
|
43
|
+
/**
|
|
44
|
+
* LLM 불가용 상태로 마킹
|
|
45
|
+
*/
|
|
46
|
+
private markLlmUnavailable;
|
|
47
|
+
/**
|
|
48
|
+
* Fallback 메시지 생성 (Claude가 직접 처리하도록 안내)
|
|
49
|
+
*/
|
|
50
|
+
private buildFallbackMessage;
|
|
51
|
+
/**
|
|
52
|
+
* 지연 유틸리티
|
|
53
|
+
*/
|
|
54
|
+
private delay;
|
|
55
|
+
/**
|
|
56
|
+
* 웹 검색 with fallback (GPT → Gemini → Claude WebSearch)
|
|
57
|
+
*/
|
|
58
|
+
smartWebSearch(query: string): Promise<SmartRouteResult>;
|
|
59
|
+
/**
|
|
60
|
+
* 아키텍처 분석 with fallback
|
|
61
|
+
*/
|
|
62
|
+
smartArchitectureReview(prompt: string): Promise<SmartRouteResult>;
|
|
63
|
+
/**
|
|
64
|
+
* UI/UX 분석 with fallback
|
|
65
|
+
*/
|
|
66
|
+
smartUiuxReview(prompt: string): Promise<SmartRouteResult>;
|
|
67
|
+
/**
|
|
68
|
+
* 코드 분석 with fallback
|
|
69
|
+
*/
|
|
70
|
+
smartCodeAnalysis(prompt: string): Promise<SmartRouteResult>;
|
|
71
|
+
/**
|
|
72
|
+
* 디버깅 with fallback
|
|
73
|
+
*/
|
|
74
|
+
smartDebugging(prompt: string): Promise<SmartRouteResult>;
|
|
75
|
+
/**
|
|
76
|
+
* 코드 생성 with fallback (Claude 직접)
|
|
77
|
+
*/
|
|
78
|
+
smartCodeGen(description: string, context?: string): Promise<SmartRouteResult>;
|
|
15
79
|
/**
|
|
16
80
|
* 에이전트 탐색
|
|
17
81
|
*/
|
|
@@ -77,6 +141,56 @@ export declare class VibeOrchestrator {
|
|
|
77
141
|
* 메모리에서 결과 조회
|
|
78
142
|
*/
|
|
79
143
|
getFromMemory(key: string): string | null;
|
|
144
|
+
/**
|
|
145
|
+
* GPT 웹 검색
|
|
146
|
+
* @param query 검색 쿼리
|
|
147
|
+
*/
|
|
148
|
+
gptWebSearch(query: string): Promise<string>;
|
|
149
|
+
/**
|
|
150
|
+
* GPT 오케스트레이션
|
|
151
|
+
* @param prompt 프롬프트
|
|
152
|
+
* @param systemPrompt 시스템 프롬프트
|
|
153
|
+
* @param options 옵션 (jsonMode 등)
|
|
154
|
+
*/
|
|
155
|
+
gptOrchestrate(prompt: string, systemPrompt?: string, options?: {
|
|
156
|
+
jsonMode?: boolean;
|
|
157
|
+
}): Promise<string>;
|
|
158
|
+
/**
|
|
159
|
+
* Gemini 웹 검색
|
|
160
|
+
* @param query 검색 쿼리
|
|
161
|
+
*/
|
|
162
|
+
geminiWebSearch(query: string): Promise<string>;
|
|
163
|
+
/**
|
|
164
|
+
* Gemini 오케스트레이션
|
|
165
|
+
* @param prompt 프롬프트
|
|
166
|
+
* @param systemPrompt 시스템 프롬프트
|
|
167
|
+
* @param options 옵션 (jsonMode 등)
|
|
168
|
+
*/
|
|
169
|
+
geminiOrchestrate(prompt: string, systemPrompt?: string, options?: {
|
|
170
|
+
jsonMode?: boolean;
|
|
171
|
+
}): Promise<string>;
|
|
172
|
+
/**
|
|
173
|
+
* 멀티 LLM 병렬 쿼리
|
|
174
|
+
* GPT, Gemini 동시 호출하여 결과 비교
|
|
175
|
+
*/
|
|
176
|
+
multiLlmQuery(prompt: string, options?: {
|
|
177
|
+
useGpt?: boolean;
|
|
178
|
+
useGemini?: boolean;
|
|
179
|
+
}): Promise<{
|
|
180
|
+
gpt?: string;
|
|
181
|
+
gemini?: string;
|
|
182
|
+
}>;
|
|
183
|
+
/**
|
|
184
|
+
* LLM 상태 확인 (전체)
|
|
185
|
+
*/
|
|
186
|
+
checkLlmStatus(): Promise<{
|
|
187
|
+
gpt: {
|
|
188
|
+
available: boolean;
|
|
189
|
+
};
|
|
190
|
+
gemini: {
|
|
191
|
+
available: boolean;
|
|
192
|
+
};
|
|
193
|
+
}>;
|
|
80
194
|
}
|
|
81
195
|
export declare function getOrchestrator(options?: OrchestratorOptions): VibeOrchestrator;
|
|
82
196
|
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACL,mBAAmB,EAEnB,WAAW,EACX,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"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"}
|