@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.
Files changed (179) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +980 -0
  3. package/dist/auth/cache.d.ts +28 -0
  4. package/dist/auth/cache.d.ts.map +1 -0
  5. package/dist/auth/cache.js +48 -0
  6. package/dist/auth/cache.js.map +1 -0
  7. package/dist/auth/guard.d.ts +13 -0
  8. package/dist/auth/guard.d.ts.map +1 -0
  9. package/dist/auth/guard.js +21 -0
  10. package/dist/auth/guard.js.map +1 -0
  11. package/dist/auth/state.d.ts +32 -0
  12. package/dist/auth/state.d.ts.map +1 -0
  13. package/dist/auth/state.js +72 -0
  14. package/dist/auth/state.js.map +1 -0
  15. package/dist/auth/theme-access.d.ts +10 -0
  16. package/dist/auth/theme-access.d.ts.map +1 -0
  17. package/dist/auth/theme-access.js +24 -0
  18. package/dist/auth/theme-access.js.map +1 -0
  19. package/dist/auth/verify.d.ts +44 -0
  20. package/dist/auth/verify.d.ts.map +1 -0
  21. package/dist/auth/verify.js +77 -0
  22. package/dist/auth/verify.js.map +1 -0
  23. package/dist/cli/credentials.d.ts +29 -0
  24. package/dist/cli/credentials.d.ts.map +1 -0
  25. package/dist/cli/credentials.js +66 -0
  26. package/dist/cli/credentials.js.map +1 -0
  27. package/dist/cli/index.d.ts +7 -0
  28. package/dist/cli/index.d.ts.map +1 -0
  29. package/dist/cli/index.js +36 -0
  30. package/dist/cli/index.js.map +1 -0
  31. package/dist/cli/login.d.ts +9 -0
  32. package/dist/cli/login.d.ts.map +1 -0
  33. package/dist/cli/login.js +120 -0
  34. package/dist/cli/login.js.map +1 -0
  35. package/dist/cli/logout.d.ts +9 -0
  36. package/dist/cli/logout.d.ts.map +1 -0
  37. package/dist/cli/logout.js +18 -0
  38. package/dist/cli/logout.js.map +1 -0
  39. package/dist/cli/status.d.ts +9 -0
  40. package/dist/cli/status.d.ts.map +1 -0
  41. package/dist/cli/status.js +31 -0
  42. package/dist/cli/status.js.map +1 -0
  43. package/dist/data/component-registry.d.ts +30 -0
  44. package/dist/data/component-registry.d.ts.map +1 -0
  45. package/dist/data/component-registry.js +320 -0
  46. package/dist/data/component-registry.js.map +1 -0
  47. package/dist/data/examples/screen-examples.d.ts +38 -0
  48. package/dist/data/examples/screen-examples.d.ts.map +1 -0
  49. package/dist/data/examples/screen-examples.js +500 -0
  50. package/dist/data/examples/screen-examples.js.map +1 -0
  51. package/dist/data/hint-generator.d.ts +16 -0
  52. package/dist/data/hint-generator.d.ts.map +1 -0
  53. package/dist/data/hint-generator.js +298 -0
  54. package/dist/data/hint-generator.js.map +1 -0
  55. package/dist/data/recipe-resolver.d.ts +48 -0
  56. package/dist/data/recipe-resolver.d.ts.map +1 -0
  57. package/dist/data/recipe-resolver.js +226 -0
  58. package/dist/data/recipe-resolver.js.map +1 -0
  59. package/dist/data/template-matcher.d.ts +50 -0
  60. package/dist/data/template-matcher.d.ts.map +1 -0
  61. package/dist/data/template-matcher.js +240 -0
  62. package/dist/data/template-matcher.js.map +1 -0
  63. package/dist/generators/core-resolver.d.ts +56 -0
  64. package/dist/generators/core-resolver.d.ts.map +1 -0
  65. package/dist/generators/core-resolver.js +490 -0
  66. package/dist/generators/core-resolver.js.map +1 -0
  67. package/dist/generators/css-generator.d.ts +49 -0
  68. package/dist/generators/css-generator.d.ts.map +1 -0
  69. package/dist/generators/css-generator.js +294 -0
  70. package/dist/generators/css-generator.js.map +1 -0
  71. package/dist/generators/index.d.ts +13 -0
  72. package/dist/generators/index.d.ts.map +1 -0
  73. package/dist/generators/index.js +16 -0
  74. package/dist/generators/index.js.map +1 -0
  75. package/dist/generators/llm-generator.d.ts +96 -0
  76. package/dist/generators/llm-generator.d.ts.map +1 -0
  77. package/dist/generators/llm-generator.js +296 -0
  78. package/dist/generators/llm-generator.js.map +1 -0
  79. package/dist/index.d.ts +3 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +818 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/schemas/mcp-schemas.d.ts +4132 -0
  84. package/dist/schemas/mcp-schemas.d.ts.map +1 -0
  85. package/dist/schemas/mcp-schemas.js +946 -0
  86. package/dist/schemas/mcp-schemas.js.map +1 -0
  87. package/dist/storage/blueprint-storage.d.ts +68 -0
  88. package/dist/storage/blueprint-storage.d.ts.map +1 -0
  89. package/dist/storage/blueprint-storage.js +135 -0
  90. package/dist/storage/blueprint-storage.js.map +1 -0
  91. package/dist/storage/timestamp-manager.d.ts +32 -0
  92. package/dist/storage/timestamp-manager.d.ts.map +1 -0
  93. package/dist/storage/timestamp-manager.js +59 -0
  94. package/dist/storage/timestamp-manager.js.map +1 -0
  95. package/dist/tools/export-screen.d.ts +34 -0
  96. package/dist/tools/export-screen.d.ts.map +1 -0
  97. package/dist/tools/export-screen.js +344 -0
  98. package/dist/tools/export-screen.js.map +1 -0
  99. package/dist/tools/generate-blueprint.d.ts +15 -0
  100. package/dist/tools/generate-blueprint.d.ts.map +1 -0
  101. package/dist/tools/generate-blueprint.js +165 -0
  102. package/dist/tools/generate-blueprint.js.map +1 -0
  103. package/dist/tools/generate-screen.d.ts +13 -0
  104. package/dist/tools/generate-screen.d.ts.map +1 -0
  105. package/dist/tools/generate-screen.js +82 -0
  106. package/dist/tools/generate-screen.js.map +1 -0
  107. package/dist/tools/get-screen-generation-context.d.ts +11 -0
  108. package/dist/tools/get-screen-generation-context.d.ts.map +1 -0
  109. package/dist/tools/get-screen-generation-context.js +316 -0
  110. package/dist/tools/get-screen-generation-context.js.map +1 -0
  111. package/dist/tools/list-components.d.ts +15 -0
  112. package/dist/tools/list-components.d.ts.map +1 -0
  113. package/dist/tools/list-components.js +46 -0
  114. package/dist/tools/list-components.js.map +1 -0
  115. package/dist/tools/list-icon-libraries.d.ts +12 -0
  116. package/dist/tools/list-icon-libraries.d.ts.map +1 -0
  117. package/dist/tools/list-icon-libraries.js +48 -0
  118. package/dist/tools/list-icon-libraries.js.map +1 -0
  119. package/dist/tools/list-screen-templates.d.ts +15 -0
  120. package/dist/tools/list-screen-templates.d.ts.map +1 -0
  121. package/dist/tools/list-screen-templates.js +63 -0
  122. package/dist/tools/list-screen-templates.js.map +1 -0
  123. package/dist/tools/list-themes.d.ts +13 -0
  124. package/dist/tools/list-themes.d.ts.map +1 -0
  125. package/dist/tools/list-themes.js +42 -0
  126. package/dist/tools/list-themes.js.map +1 -0
  127. package/dist/tools/list-tokens.d.ts +13 -0
  128. package/dist/tools/list-tokens.d.ts.map +1 -0
  129. package/dist/tools/list-tokens.js +92 -0
  130. package/dist/tools/list-tokens.js.map +1 -0
  131. package/dist/tools/preview-component.d.ts +18 -0
  132. package/dist/tools/preview-component.d.ts.map +1 -0
  133. package/dist/tools/preview-component.js +178 -0
  134. package/dist/tools/preview-component.js.map +1 -0
  135. package/dist/tools/preview-icon-library.d.ts +13 -0
  136. package/dist/tools/preview-icon-library.d.ts.map +1 -0
  137. package/dist/tools/preview-icon-library.js +63 -0
  138. package/dist/tools/preview-icon-library.js.map +1 -0
  139. package/dist/tools/preview-screen-template.d.ts +18 -0
  140. package/dist/tools/preview-screen-template.d.ts.map +1 -0
  141. package/dist/tools/preview-screen-template.js +101 -0
  142. package/dist/tools/preview-screen-template.js.map +1 -0
  143. package/dist/tools/preview-theme.d.ts +15 -0
  144. package/dist/tools/preview-theme.d.ts.map +1 -0
  145. package/dist/tools/preview-theme.js +71 -0
  146. package/dist/tools/preview-theme.js.map +1 -0
  147. package/dist/tools/validate-environment.d.ts +37 -0
  148. package/dist/tools/validate-environment.d.ts.map +1 -0
  149. package/dist/tools/validate-environment.js +153 -0
  150. package/dist/tools/validate-environment.js.map +1 -0
  151. package/dist/tools/validate-screen-definition.d.ts +10 -0
  152. package/dist/tools/validate-screen-definition.d.ts.map +1 -0
  153. package/dist/tools/validate-screen-definition.js +463 -0
  154. package/dist/tools/validate-screen-definition.js.map +1 -0
  155. package/dist/tools/validate-screen.d.ts +13 -0
  156. package/dist/tools/validate-screen.d.ts.map +1 -0
  157. package/dist/tools/validate-screen.js +106 -0
  158. package/dist/tools/validate-screen.js.map +1 -0
  159. package/dist/utils/dependency-extractor.d.ts +13 -0
  160. package/dist/utils/dependency-extractor.d.ts.map +1 -0
  161. package/dist/utils/dependency-extractor.js +232 -0
  162. package/dist/utils/dependency-extractor.js.map +1 -0
  163. package/dist/utils/error-handler.d.ts +29 -0
  164. package/dist/utils/error-handler.d.ts.map +1 -0
  165. package/dist/utils/error-handler.js +48 -0
  166. package/dist/utils/error-handler.js.map +1 -0
  167. package/dist/utils/logger.d.ts +8 -0
  168. package/dist/utils/logger.d.ts.map +1 -0
  169. package/dist/utils/logger.js +14 -0
  170. package/dist/utils/logger.js.map +1 -0
  171. package/dist/utils/package-json-reader.d.ts +37 -0
  172. package/dist/utils/package-json-reader.d.ts.map +1 -0
  173. package/dist/utils/package-json-reader.js +108 -0
  174. package/dist/utils/package-json-reader.js.map +1 -0
  175. package/dist/utils/tailwind-config-reader.d.ts +23 -0
  176. package/dist/utils/tailwind-config-reader.d.ts.map +1 -0
  177. package/dist/utils/tailwind-config-reader.js +81 -0
  178. package/dist/utils/tailwind-config-reader.js.map +1 -0
  179. package/package.json +72 -0
@@ -0,0 +1,344 @@
1
+ /**
2
+ * Export Screen MCP Tool
3
+ * SPEC-MCP-002: E-003 Screen Export Request
4
+ * SPEC-COMPONENT-001-D: Hybrid Export System
5
+ * SPEC-MCP-004 Phase 4: Theme Recipes Auto-Application
6
+ */
7
+ import { render, loadTheme } from '@tekton-ui/core';
8
+ import { createErrorResponse, extractErrorMessage } from '../utils/error-handler.js';
9
+ import { isTier1Component, resolveFromTier1, resolveFromTier2, generateCSS, TIER1_COMPONENTS, } from '../generators/index.js';
10
+ import { applyRecipesToBlueprint } from '../data/recipe-resolver.js';
11
+ /**
12
+ * Convert JSX code to TSX format with TypeScript annotations
13
+ * SPEC: S-004 Export Format Compatibility - TSX format
14
+ */
15
+ function convertToTSX(jsxCode) {
16
+ // Add React import and type annotation to function signature
17
+ const lines = jsxCode.split('\n');
18
+ const result = [];
19
+ // Add React import at the beginning
20
+ result.push("import React from 'react';");
21
+ for (const line of lines) {
22
+ // Convert function signature to include React.ReactElement return type
23
+ if (line.match(/^export default function \w+\(\)/)) {
24
+ result.push(line.replace('()', '(): React.ReactElement'));
25
+ }
26
+ else {
27
+ result.push(line);
28
+ }
29
+ }
30
+ return result.join('\n');
31
+ }
32
+ /**
33
+ * Convert JSX code to Vue 3 SFC format
34
+ * SPEC: S-004 Export Format Compatibility - Vue format
35
+ */
36
+ function convertToVue(jsxCode, componentName) {
37
+ // Extract the JSX content from the return statement
38
+ const returnMatch = jsxCode.match(/return \(([\s\S]*?)\);/);
39
+ if (!returnMatch || !returnMatch[1]) {
40
+ return jsxCode; // Fallback to original if pattern doesn't match
41
+ }
42
+ const jsxContent = returnMatch[1].trim();
43
+ // Convert React-style JSX to Vue template syntax
44
+ const vueTemplate = jsxContent.replace(/className=/g, 'class=').replace(/{([^}]+)}/g, '{{ $1 }}'); // Convert interpolation
45
+ return `<template>
46
+ ${vueTemplate
47
+ .split('\n')
48
+ .map(line => ' ' + line)
49
+ .join('\n')}
50
+ </template>
51
+
52
+ <script setup lang="ts">
53
+ // ${componentName} component
54
+ </script>
55
+
56
+ <style scoped>
57
+ /* Component styles */
58
+ </style>
59
+ `;
60
+ }
61
+ /**
62
+ * Extract component name from blueprint name or use default
63
+ */
64
+ function extractComponentName(blueprintName) {
65
+ // Convert to PascalCase and remove special characters
66
+ const cleaned = blueprintName
67
+ .replace(/[^a-zA-Z0-9\s]/g, '')
68
+ .split(/\s+/)
69
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
70
+ .join('');
71
+ return cleaned || 'GeneratedComponent';
72
+ }
73
+ /**
74
+ * Export screen MCP tool implementation
75
+ * SPEC: E-003 Screen Export Request
76
+ * SPEC-MCP-004 Phase 4: Apply theme recipes before rendering
77
+ *
78
+ * @param input - Blueprint object and export format
79
+ * @returns Generated code (MCP JSON-RPC format - no file write, no filePath)
80
+ */
81
+ export async function exportScreenTool(input) {
82
+ try {
83
+ // MCP JSON-RPC format: Accept blueprint object directly (no storage lookup)
84
+ let blueprint = input.blueprint;
85
+ if (!blueprint) {
86
+ return createErrorResponse('Blueprint object is required');
87
+ }
88
+ // SPEC-MCP-004 Phase 4: Apply theme recipes if themeId exists
89
+ if (blueprint.themeId && blueprint.components) {
90
+ const componentsWithRecipes = applyRecipesToBlueprint(blueprint.components, blueprint.themeId);
91
+ blueprint = {
92
+ ...blueprint,
93
+ components: componentsWithRecipes,
94
+ };
95
+ }
96
+ // SPEC: U-003 @tekton-ui/core Integration - Use render from @tekton-ui/core
97
+ // Note: render() returns complete JSX component code with imports and function wrapper
98
+ const renderResult = render(blueprint);
99
+ if (!renderResult.success) {
100
+ return createErrorResponse(`Render failed: ${renderResult.error || 'Unknown error'}`);
101
+ }
102
+ const jsxCode = renderResult.code || '';
103
+ // SPEC: S-004 Export Format Compatibility - Convert JSX to requested format
104
+ let finalCode;
105
+ switch (input.format) {
106
+ case 'jsx':
107
+ // render() already returns JSX format
108
+ finalCode = jsxCode;
109
+ break;
110
+ case 'tsx':
111
+ // Convert JSX imports to TypeScript format
112
+ finalCode = jsxCode ? convertToTSX(jsxCode) : '';
113
+ break;
114
+ case 'vue':
115
+ // Convert JSX to Vue SFC format
116
+ finalCode = convertToVue(jsxCode, extractComponentName(blueprint.name || 'Component'));
117
+ break;
118
+ default:
119
+ return createErrorResponse(`Unsupported format: ${input.format}`);
120
+ }
121
+ // MCP JSON-RPC format: Return code only (no file write, no filePath)
122
+ return {
123
+ success: true,
124
+ code: finalCode,
125
+ };
126
+ }
127
+ catch (error) {
128
+ return {
129
+ success: false,
130
+ error: extractErrorMessage(error),
131
+ };
132
+ }
133
+ }
134
+ // ============================================================================
135
+ // Hybrid Export System (SPEC-COMPONENT-001-D)
136
+ // ============================================================================
137
+ /**
138
+ * 컴포넌트 해결 - Tier 1 또는 Tier 2 자동 선택
139
+ *
140
+ * @param componentName - 컴포넌트 이름
141
+ * @param tier - 선호하는 tier (auto, tier1, tier2)
142
+ * @param description - 컴포넌트 설명 (tier2용)
143
+ * @returns 해결 결과
144
+ */
145
+ async function resolveComponent(componentName, tier = 'auto', description) {
146
+ // Tier 1 강제
147
+ if (tier === 'tier1') {
148
+ if (!isTier1Component(componentName)) {
149
+ return {
150
+ success: false,
151
+ error: `Component "${componentName}" is not available in Tier 1. Available: ${TIER1_COMPONENTS.join(', ')}`,
152
+ };
153
+ }
154
+ const result = resolveFromTier1(componentName);
155
+ return {
156
+ success: result.success,
157
+ code: result.code,
158
+ source: result.source,
159
+ error: result.error,
160
+ };
161
+ }
162
+ // Tier 2 강제
163
+ if (tier === 'tier2') {
164
+ const result = await resolveFromTier2(componentName, description);
165
+ return {
166
+ success: result.success,
167
+ code: result.code,
168
+ source: result.success
169
+ ? process.env.ANTHROPIC_API_KEY
170
+ ? 'tier2-llm'
171
+ : 'tier2-mock'
172
+ : undefined,
173
+ error: result.error,
174
+ };
175
+ }
176
+ // Auto: Tier 1 먼저 시도, 없으면 Tier 2
177
+ if (isTier1Component(componentName)) {
178
+ const result = resolveFromTier1(componentName);
179
+ if (result.success) {
180
+ return {
181
+ success: true,
182
+ code: result.code,
183
+ source: result.source,
184
+ };
185
+ }
186
+ }
187
+ // Fallback to Tier 2
188
+ const tier2Result = await resolveFromTier2(componentName, description);
189
+ return {
190
+ success: tier2Result.success,
191
+ code: tier2Result.code,
192
+ source: tier2Result.success
193
+ ? process.env.ANTHROPIC_API_KEY
194
+ ? 'tier2-llm'
195
+ : 'tier2-mock'
196
+ : undefined,
197
+ error: tier2Result.error,
198
+ };
199
+ }
200
+ /**
201
+ * Blueprint에서 사용된 컴포넌트 타입 추출
202
+ */
203
+ function extractComponentTypes(blueprint) {
204
+ const types = new Set();
205
+ function traverse(node) {
206
+ if (node.type) {
207
+ types.add(node.type);
208
+ }
209
+ if (Array.isArray(node.children)) {
210
+ for (const child of node.children) {
211
+ if (typeof child === 'object' && child !== null) {
212
+ traverse(child);
213
+ }
214
+ }
215
+ }
216
+ }
217
+ for (const component of blueprint.components || []) {
218
+ traverse(component);
219
+ }
220
+ return Array.from(types);
221
+ }
222
+ /**
223
+ * Hybrid Export MCP Tool
224
+ * SPEC-COMPONENT-001-D: Hybrid Export System
225
+ *
226
+ * 기능:
227
+ * - Tier 1/2 자동 라우팅
228
+ * - CSS Variables 생성
229
+ * - 컴포넌트 코드 + CSS 통합 출력
230
+ *
231
+ * @param input - Hybrid export 입력
232
+ * @returns Hybrid export 결과
233
+ */
234
+ export async function hybridExportTool(input) {
235
+ try {
236
+ const { blueprint, componentName, componentDescription, format, includeCSS = false, tier = 'auto', themeId, } = input;
237
+ // 결과 객체
238
+ const result = {
239
+ success: true,
240
+ components: [],
241
+ };
242
+ // CSS 생성 (요청된 경우)
243
+ if (includeCSS && themeId) {
244
+ try {
245
+ const theme = loadTheme(themeId);
246
+ if (theme) {
247
+ const cssResult = generateCSS(theme);
248
+ if (cssResult.success && cssResult.css) {
249
+ result.css = cssResult.css;
250
+ }
251
+ }
252
+ }
253
+ catch (cssError) {
254
+ // CSS 생성 실패는 경고만 (전체 실패 아님)
255
+ console.warn(`[Hybrid Export] CSS generation failed for theme ${themeId}:`, cssError);
256
+ }
257
+ }
258
+ // 단일 컴포넌트 요청
259
+ if (componentName && !blueprint) {
260
+ const resolution = await resolveComponent(componentName, tier, componentDescription);
261
+ if (!resolution.success) {
262
+ return {
263
+ success: false,
264
+ error: resolution.error || `Failed to resolve component: ${componentName}`,
265
+ };
266
+ }
267
+ let finalCode = resolution.code || '';
268
+ // 포맷 변환
269
+ if (format === 'tsx' && finalCode) {
270
+ finalCode = convertToTSX(finalCode);
271
+ }
272
+ else if (format === 'vue' && finalCode) {
273
+ finalCode = convertToVue(finalCode, componentName);
274
+ }
275
+ result.code = finalCode;
276
+ result.tierUsed = isTier1Component(componentName) && tier !== 'tier2' ? 'tier1' : 'tier2';
277
+ result.components = [
278
+ {
279
+ componentName,
280
+ code: resolution.code || '',
281
+ source: resolution.source || 'tier1-example',
282
+ },
283
+ ];
284
+ return result;
285
+ }
286
+ // Blueprint 기반 export
287
+ if (blueprint) {
288
+ let bp = blueprint;
289
+ // SPEC-MCP-004 Phase 4: Apply theme recipes if themeId exists
290
+ if ((bp.themeId || themeId) && bp.components) {
291
+ const targetThemeId = bp.themeId || themeId;
292
+ const componentsWithRecipes = applyRecipesToBlueprint(bp.components, targetThemeId);
293
+ bp = {
294
+ ...bp,
295
+ components: componentsWithRecipes,
296
+ };
297
+ }
298
+ // 기존 exportScreenTool 로직 사용
299
+ const renderResult = render(bp);
300
+ if (!renderResult.success) {
301
+ return {
302
+ success: false,
303
+ error: `Render failed: ${renderResult.error || 'Unknown error'}`,
304
+ };
305
+ }
306
+ let finalCode = renderResult.code || '';
307
+ // 포맷 변환
308
+ if (format === 'tsx' && finalCode) {
309
+ finalCode = convertToTSX(finalCode);
310
+ }
311
+ else if (format === 'vue' && finalCode) {
312
+ finalCode = convertToVue(finalCode, extractComponentName(bp.name || 'Component'));
313
+ }
314
+ result.code = finalCode;
315
+ result.tierUsed = 'tier1'; // Blueprint render는 Tier 1
316
+ // Blueprint에서 사용된 컴포넌트 정보 추가
317
+ const componentTypes = extractComponentTypes(bp);
318
+ result.components = componentTypes.map(type => ({
319
+ componentName: type,
320
+ code: '', // Blueprint render는 통합된 코드 반환
321
+ source: 'tier1-example',
322
+ }));
323
+ return result;
324
+ }
325
+ // 입력 없음
326
+ return {
327
+ success: false,
328
+ error: 'Either blueprint or componentName is required',
329
+ };
330
+ }
331
+ catch (error) {
332
+ return {
333
+ success: false,
334
+ error: extractErrorMessage(error),
335
+ };
336
+ }
337
+ }
338
+ /**
339
+ * 사용 가능한 Tier 1 컴포넌트 목록 조회
340
+ */
341
+ export function getAvailableTier1Components() {
342
+ return TIER1_COMPONENTS;
343
+ }
344
+ //# sourceMappingURL=export-screen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-screen.js","sourceRoot":"","sources":["../../src/tools/export-screen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Generate Blueprint MCP Tool
3
+ * SPEC-MCP-002: E-001 Blueprint Generation Request
4
+ * SPEC-MCP-004 Phase 3: Enhanced with Template Matching
5
+ */
6
+ import type { GenerateBlueprintInput, GenerateBlueprintOutput } from '../schemas/mcp-schemas.js';
7
+ /**
8
+ * Generate blueprint MCP tool implementation
9
+ * SPEC: E-001 Blueprint Generation Request
10
+ *
11
+ * @param input - Blueprint generation parameters
12
+ * @returns Generated blueprint (MCP JSON-RPC format - no preview URL)
13
+ */
14
+ export declare function generateBlueprintTool(input: GenerateBlueprintInput): Promise<GenerateBlueprintOutput>;
15
+ //# sourceMappingURL=generate-blueprint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-blueprint.d.ts","sourceRoot":"","sources":["../../src/tools/generate-blueprint.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,KAAK,EACV,sBAAsB,EACtB,uBAAuB,EAExB,MAAM,2BAA2B,CAAC;AA6FnC;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,sBAAsB,GAC5B,OAAO,CAAC,uBAAuB,CAAC,CAsFlC"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Generate Blueprint MCP Tool
3
+ * SPEC-MCP-002: E-001 Blueprint Generation Request
4
+ * SPEC-MCP-004 Phase 3: Enhanced with Template Matching
5
+ */
6
+ import { createBlueprint, validateBlueprint, loadTheme, listThemes, COMPONENT_CATALOG, iconLibraryExists, listIconLibraries, } from '@tekton-ui/core';
7
+ import { getDefaultStorage } from '../storage/blueprint-storage.js';
8
+ import { createThemeNotFoundError, createValidationError, extractErrorMessage, } from '../utils/error-handler.js';
9
+ import { matchTemplates } from '../data/template-matcher.js';
10
+ /**
11
+ * Parse natural language description to extract component hints
12
+ * Initial implementation: Simple keyword extraction
13
+ * TODO: Enhance with LLM-based parsing in future iterations
14
+ */
15
+ function parseDescriptionToComponents(description, componentHints) {
16
+ const lowerDesc = description.toLowerCase();
17
+ const components = [];
18
+ // If component hints provided, use them first
19
+ if (componentHints && componentHints.length > 0) {
20
+ for (const hint of componentHints) {
21
+ if (COMPONENT_CATALOG.includes(hint)) {
22
+ components.push({
23
+ type: hint,
24
+ slot: 'main',
25
+ children: [],
26
+ });
27
+ }
28
+ }
29
+ }
30
+ // Keyword-based component detection (fallback)
31
+ if (components.length === 0) {
32
+ const componentKeywords = {
33
+ Card: ['card', 'panel', 'container'],
34
+ Button: ['button', 'cta', 'action'],
35
+ Avatar: ['avatar', 'profile picture', 'user icon'],
36
+ Text: ['text', 'paragraph', 'description', 'bio'],
37
+ Heading: ['title', 'heading', 'header'],
38
+ Input: ['input', 'field', 'textbox'],
39
+ Form: ['form', 'signup', 'login'],
40
+ Image: ['image', 'photo', 'picture'],
41
+ Link: ['link', 'anchor'],
42
+ List: ['list', 'items'],
43
+ Table: ['table', 'grid', 'data'],
44
+ Modal: ['modal', 'dialog', 'popup'],
45
+ Tabs: ['tabs', 'tabbed'],
46
+ Badge: ['badge', 'tag', 'label'],
47
+ Dropdown: ['dropdown', 'select', 'menu'],
48
+ };
49
+ for (const [componentType, keywords] of Object.entries(componentKeywords)) {
50
+ if (keywords.some(kw => lowerDesc.includes(kw))) {
51
+ components.push({
52
+ type: componentType,
53
+ slot: 'main',
54
+ children: [],
55
+ });
56
+ }
57
+ }
58
+ }
59
+ // Default: Add at least one Card if no components detected
60
+ if (components.length === 0) {
61
+ components.push({
62
+ type: 'Card',
63
+ slot: 'main',
64
+ children: [
65
+ {
66
+ type: 'Text',
67
+ children: ['Generated content'],
68
+ },
69
+ ],
70
+ });
71
+ }
72
+ return components;
73
+ }
74
+ /**
75
+ * Extract screen name from description
76
+ */
77
+ function extractNameFromDescription(description) {
78
+ // Simple implementation: Use first 50 chars or first sentence
79
+ const firstSentence = description.split(/[.!?]/)[0];
80
+ return firstSentence?.substring(0, 50) || 'Generated Screen';
81
+ }
82
+ /**
83
+ * Generate blueprint MCP tool implementation
84
+ * SPEC: E-001 Blueprint Generation Request
85
+ *
86
+ * @param input - Blueprint generation parameters
87
+ * @returns Generated blueprint (MCP JSON-RPC format - no preview URL)
88
+ */
89
+ export async function generateBlueprintTool(input) {
90
+ try {
91
+ // SPEC: U-005 Theme Validation - Validate theme ID exists
92
+ const theme = loadTheme(input.themeId);
93
+ if (!theme) {
94
+ const availableThemes = listThemes().map((t) => t.id);
95
+ return createThemeNotFoundError(input.themeId, availableThemes);
96
+ }
97
+ // SPEC-ICON-001: Validate icon library exists (if provided)
98
+ if (input.iconLibrary && !iconLibraryExists(input.iconLibrary)) {
99
+ const availableLibraries = listIconLibraries().map((lib) => lib.id);
100
+ return {
101
+ success: false,
102
+ error: `Icon library "${input.iconLibrary}" not found. Available libraries: ${availableLibraries.join(', ')}`,
103
+ };
104
+ }
105
+ // Parse description to generate components
106
+ const components = parseDescriptionToComponents(input.description, input.componentHints);
107
+ // Extract name from description
108
+ const name = extractNameFromDescription(input.description);
109
+ // Generate timestamp for blueprint ID
110
+ const timestamp = Date.now();
111
+ // SPEC: U-003 @tekton-ui/core Integration - Use createBlueprint from @tekton-ui/core
112
+ const blueprint = createBlueprint({
113
+ name,
114
+ themeId: input.themeId,
115
+ layout: input.layout,
116
+ components,
117
+ });
118
+ // Add timestamp to blueprint
119
+ const blueprintWithTimestamp = {
120
+ ...blueprint,
121
+ timestamp,
122
+ };
123
+ // SPEC: U-003 @tekton-ui/core Integration - Use validateBlueprint from @tekton-ui/core
124
+ const validation = validateBlueprint(blueprint);
125
+ // SPEC: S-003 Blueprint Validation Result - Return errors without saving if invalid
126
+ if (!validation.valid) {
127
+ return createValidationError(validation.errors);
128
+ }
129
+ // SPEC: S-003 Blueprint Validation Result - Save blueprint if valid
130
+ const storage = getDefaultStorage();
131
+ const blueprintId = await storage.saveBlueprint(blueprintWithTimestamp);
132
+ // SPEC-MCP-004 Phase 3: Match templates based on description
133
+ const templateMatches = matchTemplates(input.description, 3);
134
+ const templateRecommendations = templateMatches.map(match => ({
135
+ templateId: match.templateId,
136
+ templateName: match.templateName,
137
+ category: match.category,
138
+ confidence: match.confidence,
139
+ matchedKeywords: match.matchedKeywords,
140
+ layoutRecommendation: match.layoutRecommendation,
141
+ }));
142
+ // MCP JSON-RPC format: Return blueprint data with template recommendations
143
+ return {
144
+ success: true,
145
+ blueprint: {
146
+ id: blueprintId,
147
+ name: blueprint.name,
148
+ themeId: blueprint.themeId,
149
+ iconLibrary: input.iconLibrary || 'lucide', // Default to lucide
150
+ layout: blueprint.layout,
151
+ components: blueprint.components,
152
+ timestamp,
153
+ },
154
+ // SPEC-MCP-004: Include template recommendations for LLM guidance
155
+ templateRecommendations: templateRecommendations.length > 0 ? templateRecommendations : undefined,
156
+ };
157
+ }
158
+ catch (error) {
159
+ return {
160
+ success: false,
161
+ error: extractErrorMessage(error),
162
+ };
163
+ }
164
+ }
165
+ //# sourceMappingURL=generate-blueprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-blueprint.js","sourceRoot":"","sources":["../../src/tools/generate-blueprint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Generate Screen MCP Tool
3
+ * SPEC-LAYOUT-002 Phase 4: Generate production code from JSON screen definition
4
+ */
5
+ import type { GenerateScreenInput, GenerateScreenOutput } from '../schemas/mcp-schemas.js';
6
+ /**
7
+ * Generate production-ready code from JSON screen definition
8
+ *
9
+ * @param input - Screen definition and generation options
10
+ * @returns Generated code with CSS variables and validation errors
11
+ */
12
+ export declare function generateScreenTool(input: GenerateScreenInput): Promise<GenerateScreenOutput>;
13
+ //# sourceMappingURL=generate-screen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-screen.d.ts","sourceRoot":"","sources":["../../src/tools/generate-screen.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAI3F;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAkF/B"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Generate Screen MCP Tool
3
+ * SPEC-LAYOUT-002 Phase 4: Generate production code from JSON screen definition
4
+ */
5
+ import { extractErrorMessage } from '../utils/error-handler.js';
6
+ import { extractDependencies } from '../utils/dependency-extractor.js';
7
+ /**
8
+ * Generate production-ready code from JSON screen definition
9
+ *
10
+ * @param input - Screen definition and generation options
11
+ * @returns Generated code with CSS variables and validation errors
12
+ */
13
+ export async function generateScreenTool(input) {
14
+ try {
15
+ const { screenDefinition, outputFormat, options } = input;
16
+ // Step 1: Validate screen definition
17
+ const { validateScreenDefinition } = await import('@tekton-ui/core');
18
+ const validation = validateScreenDefinition(screenDefinition);
19
+ if (!validation.valid) {
20
+ return {
21
+ success: false,
22
+ errors: validation.errors || ['Invalid screen definition'],
23
+ error: 'Screen definition validation failed',
24
+ };
25
+ }
26
+ // Step 2: Resolve screen with layout and components
27
+ const { resolveScreen } = await import('@tekton-ui/core');
28
+ const resolvedScreen = await resolveScreen(screenDefinition);
29
+ // Step 3: Prepare generator options
30
+ const generatorOptions = {
31
+ format: (options?.typescript !== false ? 'typescript' : 'javascript'),
32
+ prettier: options?.prettier ?? false,
33
+ };
34
+ // Step 4: Generate code based on output format
35
+ let code;
36
+ const cssVariables = undefined;
37
+ switch (outputFormat) {
38
+ case 'css-in-js': {
39
+ const { generateStyledComponents } = await import('@tekton-ui/core');
40
+ const cssFramework = options?.cssFramework || 'styled-components';
41
+ const result = generateStyledComponents(resolvedScreen, cssFramework, generatorOptions);
42
+ code = result.code;
43
+ break;
44
+ }
45
+ case 'tailwind': {
46
+ const { generateTailwindClasses } = await import('@tekton-ui/core');
47
+ const result = generateTailwindClasses(resolvedScreen, generatorOptions);
48
+ code = result.code;
49
+ break;
50
+ }
51
+ case 'react': {
52
+ const { generateReactComponent } = await import('@tekton-ui/core');
53
+ const result = generateReactComponent(resolvedScreen, generatorOptions);
54
+ code = result.code;
55
+ break;
56
+ }
57
+ default:
58
+ return {
59
+ success: false,
60
+ error: `Unsupported output format: ${outputFormat}`,
61
+ };
62
+ }
63
+ // Note: CSS variables generation is optional and depends on theme resolution
64
+ // For now, we return the generated code without separate CSS variables
65
+ // Future enhancement: Extract CSS variables from resolved screen
66
+ // Extract dependencies from generated code
67
+ const dependencies = extractDependencies(code);
68
+ return {
69
+ success: true,
70
+ code,
71
+ cssVariables,
72
+ dependencies,
73
+ };
74
+ }
75
+ catch (error) {
76
+ return {
77
+ success: false,
78
+ error: extractErrorMessage(error),
79
+ };
80
+ }
81
+ }
82
+ //# sourceMappingURL=generate-screen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-screen.js","sourceRoot":"","sources":["../../src/tools/generate-screen.ts"],"names":[],"mappings":"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"}