@tekton-ui/mcp-server 0.3.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/LICENSE +21 -0
- package/README.md +980 -0
- package/dist/auth/cache.d.ts +28 -0
- package/dist/auth/cache.d.ts.map +1 -0
- package/dist/auth/cache.js +48 -0
- package/dist/auth/cache.js.map +1 -0
- package/dist/auth/guard.d.ts +13 -0
- package/dist/auth/guard.d.ts.map +1 -0
- package/dist/auth/guard.js +21 -0
- package/dist/auth/guard.js.map +1 -0
- package/dist/auth/state.d.ts +32 -0
- package/dist/auth/state.d.ts.map +1 -0
- package/dist/auth/state.js +72 -0
- package/dist/auth/state.js.map +1 -0
- package/dist/auth/theme-access.d.ts +10 -0
- package/dist/auth/theme-access.d.ts.map +1 -0
- package/dist/auth/theme-access.js +24 -0
- package/dist/auth/theme-access.js.map +1 -0
- package/dist/auth/verify.d.ts +44 -0
- package/dist/auth/verify.d.ts.map +1 -0
- package/dist/auth/verify.js +77 -0
- package/dist/auth/verify.js.map +1 -0
- package/dist/cli/credentials.d.ts +29 -0
- package/dist/cli/credentials.d.ts.map +1 -0
- package/dist/cli/credentials.js +66 -0
- package/dist/cli/credentials.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +36 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/login.d.ts +9 -0
- package/dist/cli/login.d.ts.map +1 -0
- package/dist/cli/login.js +120 -0
- package/dist/cli/login.js.map +1 -0
- package/dist/cli/logout.d.ts +9 -0
- package/dist/cli/logout.d.ts.map +1 -0
- package/dist/cli/logout.js +18 -0
- package/dist/cli/logout.js.map +1 -0
- package/dist/cli/status.d.ts +9 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +31 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/data/component-registry.d.ts +30 -0
- package/dist/data/component-registry.d.ts.map +1 -0
- package/dist/data/component-registry.js +320 -0
- package/dist/data/component-registry.js.map +1 -0
- package/dist/data/examples/screen-examples.d.ts +38 -0
- package/dist/data/examples/screen-examples.d.ts.map +1 -0
- package/dist/data/examples/screen-examples.js +500 -0
- package/dist/data/examples/screen-examples.js.map +1 -0
- package/dist/data/hint-generator.d.ts +16 -0
- package/dist/data/hint-generator.d.ts.map +1 -0
- package/dist/data/hint-generator.js +298 -0
- package/dist/data/hint-generator.js.map +1 -0
- package/dist/data/recipe-resolver.d.ts +48 -0
- package/dist/data/recipe-resolver.d.ts.map +1 -0
- package/dist/data/recipe-resolver.js +226 -0
- package/dist/data/recipe-resolver.js.map +1 -0
- package/dist/data/template-matcher.d.ts +50 -0
- package/dist/data/template-matcher.d.ts.map +1 -0
- package/dist/data/template-matcher.js +240 -0
- package/dist/data/template-matcher.js.map +1 -0
- package/dist/generators/core-resolver.d.ts +56 -0
- package/dist/generators/core-resolver.d.ts.map +1 -0
- package/dist/generators/core-resolver.js +490 -0
- package/dist/generators/core-resolver.js.map +1 -0
- package/dist/generators/css-generator.d.ts +49 -0
- package/dist/generators/css-generator.d.ts.map +1 -0
- package/dist/generators/css-generator.js +294 -0
- package/dist/generators/css-generator.js.map +1 -0
- package/dist/generators/index.d.ts +13 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +16 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/llm-generator.d.ts +96 -0
- package/dist/generators/llm-generator.d.ts.map +1 -0
- package/dist/generators/llm-generator.js +296 -0
- package/dist/generators/llm-generator.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +818 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/mcp-schemas.d.ts +4132 -0
- package/dist/schemas/mcp-schemas.d.ts.map +1 -0
- package/dist/schemas/mcp-schemas.js +946 -0
- package/dist/schemas/mcp-schemas.js.map +1 -0
- package/dist/storage/blueprint-storage.d.ts +68 -0
- package/dist/storage/blueprint-storage.d.ts.map +1 -0
- package/dist/storage/blueprint-storage.js +135 -0
- package/dist/storage/blueprint-storage.js.map +1 -0
- package/dist/storage/timestamp-manager.d.ts +32 -0
- package/dist/storage/timestamp-manager.d.ts.map +1 -0
- package/dist/storage/timestamp-manager.js +59 -0
- package/dist/storage/timestamp-manager.js.map +1 -0
- package/dist/tools/export-screen.d.ts +34 -0
- package/dist/tools/export-screen.d.ts.map +1 -0
- package/dist/tools/export-screen.js +344 -0
- package/dist/tools/export-screen.js.map +1 -0
- package/dist/tools/generate-blueprint.d.ts +15 -0
- package/dist/tools/generate-blueprint.d.ts.map +1 -0
- package/dist/tools/generate-blueprint.js +165 -0
- package/dist/tools/generate-blueprint.js.map +1 -0
- package/dist/tools/generate-screen.d.ts +13 -0
- package/dist/tools/generate-screen.d.ts.map +1 -0
- package/dist/tools/generate-screen.js +82 -0
- package/dist/tools/generate-screen.js.map +1 -0
- package/dist/tools/get-screen-generation-context.d.ts +11 -0
- package/dist/tools/get-screen-generation-context.d.ts.map +1 -0
- package/dist/tools/get-screen-generation-context.js +316 -0
- package/dist/tools/get-screen-generation-context.js.map +1 -0
- package/dist/tools/list-components.d.ts +15 -0
- package/dist/tools/list-components.d.ts.map +1 -0
- package/dist/tools/list-components.js +46 -0
- package/dist/tools/list-components.js.map +1 -0
- package/dist/tools/list-icon-libraries.d.ts +12 -0
- package/dist/tools/list-icon-libraries.d.ts.map +1 -0
- package/dist/tools/list-icon-libraries.js +48 -0
- package/dist/tools/list-icon-libraries.js.map +1 -0
- package/dist/tools/list-screen-templates.d.ts +15 -0
- package/dist/tools/list-screen-templates.d.ts.map +1 -0
- package/dist/tools/list-screen-templates.js +63 -0
- package/dist/tools/list-screen-templates.js.map +1 -0
- package/dist/tools/list-themes.d.ts +13 -0
- package/dist/tools/list-themes.d.ts.map +1 -0
- package/dist/tools/list-themes.js +42 -0
- package/dist/tools/list-themes.js.map +1 -0
- package/dist/tools/list-tokens.d.ts +13 -0
- package/dist/tools/list-tokens.d.ts.map +1 -0
- package/dist/tools/list-tokens.js +92 -0
- package/dist/tools/list-tokens.js.map +1 -0
- package/dist/tools/preview-component.d.ts +18 -0
- package/dist/tools/preview-component.d.ts.map +1 -0
- package/dist/tools/preview-component.js +178 -0
- package/dist/tools/preview-component.js.map +1 -0
- package/dist/tools/preview-icon-library.d.ts +13 -0
- package/dist/tools/preview-icon-library.d.ts.map +1 -0
- package/dist/tools/preview-icon-library.js +63 -0
- package/dist/tools/preview-icon-library.js.map +1 -0
- package/dist/tools/preview-screen-template.d.ts +18 -0
- package/dist/tools/preview-screen-template.d.ts.map +1 -0
- package/dist/tools/preview-screen-template.js +101 -0
- package/dist/tools/preview-screen-template.js.map +1 -0
- package/dist/tools/preview-theme.d.ts +15 -0
- package/dist/tools/preview-theme.d.ts.map +1 -0
- package/dist/tools/preview-theme.js +71 -0
- package/dist/tools/preview-theme.js.map +1 -0
- package/dist/tools/validate-environment.d.ts +37 -0
- package/dist/tools/validate-environment.d.ts.map +1 -0
- package/dist/tools/validate-environment.js +153 -0
- package/dist/tools/validate-environment.js.map +1 -0
- package/dist/tools/validate-screen-definition.d.ts +10 -0
- package/dist/tools/validate-screen-definition.d.ts.map +1 -0
- package/dist/tools/validate-screen-definition.js +463 -0
- package/dist/tools/validate-screen-definition.js.map +1 -0
- package/dist/tools/validate-screen.d.ts +13 -0
- package/dist/tools/validate-screen.d.ts.map +1 -0
- package/dist/tools/validate-screen.js +106 -0
- package/dist/tools/validate-screen.js.map +1 -0
- package/dist/utils/dependency-extractor.d.ts +13 -0
- package/dist/utils/dependency-extractor.d.ts.map +1 -0
- package/dist/utils/dependency-extractor.js +232 -0
- package/dist/utils/dependency-extractor.js.map +1 -0
- package/dist/utils/error-handler.d.ts +29 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +48 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +14 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/package-json-reader.d.ts +37 -0
- package/dist/utils/package-json-reader.d.ts.map +1 -0
- package/dist/utils/package-json-reader.js +108 -0
- package/dist/utils/package-json-reader.js.map +1 -0
- package/dist/utils/tailwind-config-reader.d.ts +23 -0
- package/dist/utils/tailwind-config-reader.d.ts.map +1 -0
- package/dist/utils/tailwind-config-reader.js +81 -0
- package/dist/utils/tailwind-config-reader.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Generator for Tier 2 Export
|
|
3
|
+
* SPEC-COMPONENT-001-D: Hybrid Export System
|
|
4
|
+
*
|
|
5
|
+
* Tier 2: LLM을 사용하여 커스텀 컴포넌트 생성
|
|
6
|
+
* - Claude API를 사용한 코드 생성
|
|
7
|
+
* - 생성된 코드 검증
|
|
8
|
+
* - 최대 3회 재시도 로직
|
|
9
|
+
*/
|
|
10
|
+
import { getComponentSchema } from '@tekton-ui/core';
|
|
11
|
+
import { TIER1_COMPONENTS, getTier1Example } from './core-resolver.js';
|
|
12
|
+
/**
|
|
13
|
+
* 기본 설정
|
|
14
|
+
*/
|
|
15
|
+
const DEFAULT_CONFIG = {
|
|
16
|
+
apiKey: process.env.ANTHROPIC_API_KEY || '',
|
|
17
|
+
model: 'claude-sonnet-4-20250514',
|
|
18
|
+
maxRetries: 3,
|
|
19
|
+
timeout: 30000,
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* LLM 컨텍스트 빌드
|
|
23
|
+
* 컴포넌트 생성을 위한 프롬프트 구성
|
|
24
|
+
*
|
|
25
|
+
* @param componentName - 생성할 컴포넌트 이름
|
|
26
|
+
* @param description - 컴포넌트 설명
|
|
27
|
+
* @param schema - 컴포넌트 스키마 (있는 경우)
|
|
28
|
+
* @returns LLM 프롬프트
|
|
29
|
+
*/
|
|
30
|
+
export function buildLLMContext(componentName, description, schema) {
|
|
31
|
+
// Tier 1 예제들을 참조로 포함
|
|
32
|
+
const referenceExamples = TIER1_COMPONENTS.slice(0, 3)
|
|
33
|
+
.map(name => {
|
|
34
|
+
const result = getTier1Example(name);
|
|
35
|
+
return result.success ? `// Example: ${name}\n${result.code}` : '';
|
|
36
|
+
})
|
|
37
|
+
.filter(Boolean)
|
|
38
|
+
.join('\n\n');
|
|
39
|
+
let prompt = `Generate a React component following @tekton-ui/ui conventions.
|
|
40
|
+
|
|
41
|
+
## Component Name
|
|
42
|
+
${componentName}
|
|
43
|
+
|
|
44
|
+
## Description
|
|
45
|
+
${description || `A ${componentName} component`}
|
|
46
|
+
|
|
47
|
+
## Requirements
|
|
48
|
+
1. Use TypeScript with proper type definitions
|
|
49
|
+
2. Use CSS Variables for theming (var(--component-property))
|
|
50
|
+
3. Use @tekton-ui/ui imports where applicable
|
|
51
|
+
4. Follow WCAG 2.1 AA accessibility guidelines
|
|
52
|
+
5. Include proper aria attributes
|
|
53
|
+
6. Export the component as named export
|
|
54
|
+
|
|
55
|
+
## Reference Examples (from @tekton-ui/ui)
|
|
56
|
+
${referenceExamples}
|
|
57
|
+
|
|
58
|
+
`;
|
|
59
|
+
if (schema) {
|
|
60
|
+
prompt += `## Component Schema
|
|
61
|
+
\`\`\`json
|
|
62
|
+
${JSON.stringify(schema, null, 2)}
|
|
63
|
+
\`\`\`
|
|
64
|
+
|
|
65
|
+
`;
|
|
66
|
+
}
|
|
67
|
+
prompt += `## Output Format
|
|
68
|
+
Return ONLY the TypeScript code, no explanations. Start with imports.`;
|
|
69
|
+
return prompt;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* 생성된 코드에서 실제 코드 추출
|
|
73
|
+
* 마크다운 코드 블록 등을 처리
|
|
74
|
+
*
|
|
75
|
+
* @param response - LLM 응답 텍스트
|
|
76
|
+
* @returns 추출된 코드
|
|
77
|
+
*/
|
|
78
|
+
export function extractCodeFromResponse(response) {
|
|
79
|
+
// 마크다운 코드 블록 처리
|
|
80
|
+
const codeBlockMatch = response.match(/```(?:typescript|tsx|ts)?\n?([\s\S]*?)```/);
|
|
81
|
+
if (codeBlockMatch && codeBlockMatch[1]) {
|
|
82
|
+
return codeBlockMatch[1].trim();
|
|
83
|
+
}
|
|
84
|
+
// 코드 블록이 없으면 전체 응답 반환
|
|
85
|
+
return response.trim();
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 생성된 코드 검증
|
|
89
|
+
*
|
|
90
|
+
* @param code - 검증할 코드
|
|
91
|
+
* @param componentName - 컴포넌트 이름
|
|
92
|
+
* @returns 검증 결과
|
|
93
|
+
*/
|
|
94
|
+
export function validateGeneratedCode(code, componentName) {
|
|
95
|
+
const errors = [];
|
|
96
|
+
// 빈 코드 검사
|
|
97
|
+
if (!code || code.trim().length === 0) {
|
|
98
|
+
errors.push('Generated code is empty');
|
|
99
|
+
return { valid: false, errors };
|
|
100
|
+
}
|
|
101
|
+
// 최소 길이 검사
|
|
102
|
+
if (code.length < 50) {
|
|
103
|
+
errors.push('Generated code is too short (minimum 50 characters)');
|
|
104
|
+
}
|
|
105
|
+
// import 문 존재 확인
|
|
106
|
+
if (!code.includes('import')) {
|
|
107
|
+
errors.push('Missing import statements');
|
|
108
|
+
}
|
|
109
|
+
// export 문 존재 확인
|
|
110
|
+
if (!code.includes('export')) {
|
|
111
|
+
errors.push('Missing export statement');
|
|
112
|
+
}
|
|
113
|
+
// 컴포넌트 함수 정의 확인
|
|
114
|
+
const functionPatterns = [
|
|
115
|
+
new RegExp(`function\\s+${componentName}`),
|
|
116
|
+
new RegExp(`const\\s+${componentName}\\s*=`),
|
|
117
|
+
new RegExp(`export\\s+(default\\s+)?function\\s+${componentName}`),
|
|
118
|
+
];
|
|
119
|
+
const hasComponentDefinition = functionPatterns.some(pattern => pattern.test(code));
|
|
120
|
+
if (!hasComponentDefinition) {
|
|
121
|
+
errors.push(`Component "${componentName}" definition not found`);
|
|
122
|
+
}
|
|
123
|
+
// return 문 확인 (JSX 반환)
|
|
124
|
+
if (!code.includes('return')) {
|
|
125
|
+
errors.push('Missing return statement');
|
|
126
|
+
}
|
|
127
|
+
// JSX 문법 확인 (기본적인 < > 태그)
|
|
128
|
+
if (!/<[A-Za-z]/.test(code)) {
|
|
129
|
+
errors.push('No JSX elements found');
|
|
130
|
+
}
|
|
131
|
+
// 구문 오류 가능성 검사
|
|
132
|
+
const openBraces = (code.match(/{/g) || []).length;
|
|
133
|
+
const closeBraces = (code.match(/}/g) || []).length;
|
|
134
|
+
if (openBraces !== closeBraces) {
|
|
135
|
+
errors.push(`Mismatched braces: ${openBraces} open, ${closeBraces} close`);
|
|
136
|
+
}
|
|
137
|
+
const openParens = (code.match(/\(/g) || []).length;
|
|
138
|
+
const closeParens = (code.match(/\)/g) || []).length;
|
|
139
|
+
if (openParens !== closeParens) {
|
|
140
|
+
errors.push(`Mismatched parentheses: ${openParens} open, ${closeParens} close`);
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
valid: errors.length === 0,
|
|
144
|
+
errors,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* LLM을 사용하여 컴포넌트 생성 (재시도 로직 포함)
|
|
149
|
+
*
|
|
150
|
+
* @param componentName - 생성할 컴포넌트 이름
|
|
151
|
+
* @param description - 컴포넌트 설명
|
|
152
|
+
* @param config - LLM 설정
|
|
153
|
+
* @returns 생성 결과
|
|
154
|
+
*/
|
|
155
|
+
export async function generateWithLLM(componentName, description, config) {
|
|
156
|
+
const finalConfig = { ...DEFAULT_CONFIG, ...config };
|
|
157
|
+
// API 키 확인
|
|
158
|
+
if (!finalConfig.apiKey) {
|
|
159
|
+
return {
|
|
160
|
+
success: false,
|
|
161
|
+
componentName,
|
|
162
|
+
error: 'ANTHROPIC_API_KEY is not set. Please set it in environment variables.',
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
// 스키마 가져오기 (있는 경우)
|
|
166
|
+
let schema;
|
|
167
|
+
try {
|
|
168
|
+
schema = getComponentSchema(componentName);
|
|
169
|
+
}
|
|
170
|
+
catch {
|
|
171
|
+
// 스키마가 없어도 계속 진행
|
|
172
|
+
}
|
|
173
|
+
const prompt = buildLLMContext(componentName, description, schema);
|
|
174
|
+
let lastError;
|
|
175
|
+
let allValidationErrors = [];
|
|
176
|
+
for (let attempt = 1; attempt <= finalConfig.maxRetries; attempt++) {
|
|
177
|
+
try {
|
|
178
|
+
// Anthropic SDK 동적 import
|
|
179
|
+
const anthropicModule = await import('@anthropic-ai/sdk');
|
|
180
|
+
const Anthropic = anthropicModule.default || anthropicModule.Anthropic;
|
|
181
|
+
const client = new Anthropic({
|
|
182
|
+
apiKey: finalConfig.apiKey,
|
|
183
|
+
});
|
|
184
|
+
const response = await client.messages.create({
|
|
185
|
+
model: finalConfig.model,
|
|
186
|
+
max_tokens: 4096,
|
|
187
|
+
messages: [
|
|
188
|
+
{
|
|
189
|
+
role: 'user',
|
|
190
|
+
content: prompt +
|
|
191
|
+
(attempt > 1
|
|
192
|
+
? `\n\nPrevious attempt failed validation with errors: ${allValidationErrors.join(', ')}. Please fix these issues.`
|
|
193
|
+
: ''),
|
|
194
|
+
},
|
|
195
|
+
],
|
|
196
|
+
});
|
|
197
|
+
// 응답에서 텍스트 추출
|
|
198
|
+
const textContent = response.content.find((block) => block.type === 'text');
|
|
199
|
+
if (!textContent || textContent.type !== 'text') {
|
|
200
|
+
lastError = 'No text content in LLM response';
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
const rawCode = textContent.text;
|
|
204
|
+
const code = extractCodeFromResponse(rawCode);
|
|
205
|
+
// 코드 검증
|
|
206
|
+
const validation = validateGeneratedCode(code, componentName);
|
|
207
|
+
if (validation.valid) {
|
|
208
|
+
return {
|
|
209
|
+
success: true,
|
|
210
|
+
code,
|
|
211
|
+
componentName,
|
|
212
|
+
attempts: attempt,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
allValidationErrors = [...allValidationErrors, ...validation.errors];
|
|
216
|
+
lastError = `Validation failed: ${validation.errors.join(', ')}`;
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
lastError = error instanceof Error ? error.message : 'Unknown error during LLM generation';
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return {
|
|
223
|
+
success: false,
|
|
224
|
+
componentName,
|
|
225
|
+
attempts: finalConfig.maxRetries,
|
|
226
|
+
validationErrors: allValidationErrors,
|
|
227
|
+
error: lastError || 'Max retries exceeded',
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Mock LLM 생성 (테스트용)
|
|
232
|
+
* API 키가 없을 때 사용
|
|
233
|
+
*
|
|
234
|
+
* @param componentName - 컴포넌트 이름
|
|
235
|
+
* @param description - 컴포넌트 설명
|
|
236
|
+
* @returns Mock 생성 결과
|
|
237
|
+
*/
|
|
238
|
+
export function generateMockComponent(componentName, description) {
|
|
239
|
+
const mockCode = `import * as React from 'react';
|
|
240
|
+
import { cn } from '@tekton-ui/ui';
|
|
241
|
+
|
|
242
|
+
export interface ${componentName}Props extends React.HTMLAttributes<HTMLDivElement> {
|
|
243
|
+
/** 컴포넌트 설명: ${description || componentName} */
|
|
244
|
+
children?: React.ReactNode;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* ${componentName} Component
|
|
249
|
+
* ${description || `Auto-generated ${componentName} component`}
|
|
250
|
+
*/
|
|
251
|
+
export const ${componentName} = React.forwardRef<HTMLDivElement, ${componentName}Props>(
|
|
252
|
+
({ className, children, ...props }, ref) => {
|
|
253
|
+
return (
|
|
254
|
+
<div
|
|
255
|
+
ref={ref}
|
|
256
|
+
className={cn(
|
|
257
|
+
'bg-[var(--surface-primary)] text-[var(--foreground-primary)]',
|
|
258
|
+
'rounded-[var(--radius-md)] p-[var(--spacing-4)]',
|
|
259
|
+
className
|
|
260
|
+
)}
|
|
261
|
+
{...props}
|
|
262
|
+
>
|
|
263
|
+
{children}
|
|
264
|
+
</div>
|
|
265
|
+
);
|
|
266
|
+
}
|
|
267
|
+
);
|
|
268
|
+
|
|
269
|
+
${componentName}.displayName = '${componentName}';
|
|
270
|
+
`;
|
|
271
|
+
return {
|
|
272
|
+
success: true,
|
|
273
|
+
code: mockCode,
|
|
274
|
+
componentName,
|
|
275
|
+
attempts: 1,
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Tier 2 컴포넌트 해결
|
|
280
|
+
* LLM 생성 또는 Mock 생성 사용
|
|
281
|
+
*
|
|
282
|
+
* @param componentName - 컴포넌트 이름
|
|
283
|
+
* @param description - 컴포넌트 설명
|
|
284
|
+
* @param config - LLM 설정
|
|
285
|
+
* @returns 생성 결과
|
|
286
|
+
*/
|
|
287
|
+
export async function resolveFromTier2(componentName, description, config) {
|
|
288
|
+
const finalConfig = { ...DEFAULT_CONFIG, ...config };
|
|
289
|
+
// API 키가 없으면 Mock 사용
|
|
290
|
+
if (!finalConfig.apiKey) {
|
|
291
|
+
console.warn(`[LLM Generator] ANTHROPIC_API_KEY not set, using mock generation for ${componentName}`);
|
|
292
|
+
return generateMockComponent(componentName, description);
|
|
293
|
+
}
|
|
294
|
+
return generateWithLLM(componentName, description, finalConfig);
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=llm-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-generator.js","sourceRoot":"","sources":["../../src/generators/llm-generator.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|