@framingui/mcp-server 0.5.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 (206) hide show
  1. package/README.md +1027 -0
  2. package/dist/auth/cache.d.ts +28 -0
  3. package/dist/auth/cache.d.ts.map +1 -0
  4. package/dist/auth/cache.js +48 -0
  5. package/dist/auth/cache.js.map +1 -0
  6. package/dist/auth/guard.d.ts +22 -0
  7. package/dist/auth/guard.d.ts.map +1 -0
  8. package/dist/auth/guard.js +37 -0
  9. package/dist/auth/guard.js.map +1 -0
  10. package/dist/auth/state.d.ts +42 -0
  11. package/dist/auth/state.d.ts.map +1 -0
  12. package/dist/auth/state.js +96 -0
  13. package/dist/auth/state.js.map +1 -0
  14. package/dist/auth/theme-access.d.ts +21 -0
  15. package/dist/auth/theme-access.d.ts.map +1 -0
  16. package/dist/auth/theme-access.js +30 -0
  17. package/dist/auth/theme-access.js.map +1 -0
  18. package/dist/auth/verify.d.ts +44 -0
  19. package/dist/auth/verify.d.ts.map +1 -0
  20. package/dist/auth/verify.js +77 -0
  21. package/dist/auth/verify.js.map +1 -0
  22. package/dist/cli/agent-md-templates.d.ts +16 -0
  23. package/dist/cli/agent-md-templates.d.ts.map +1 -0
  24. package/dist/cli/agent-md-templates.js +311 -0
  25. package/dist/cli/agent-md-templates.js.map +1 -0
  26. package/dist/cli/credentials.d.ts +29 -0
  27. package/dist/cli/credentials.d.ts.map +1 -0
  28. package/dist/cli/credentials.js +66 -0
  29. package/dist/cli/credentials.js.map +1 -0
  30. package/dist/cli/guide-template.d.ts +10 -0
  31. package/dist/cli/guide-template.d.ts.map +1 -0
  32. package/dist/cli/guide-template.js +195 -0
  33. package/dist/cli/guide-template.js.map +1 -0
  34. package/dist/cli/index.d.ts +7 -0
  35. package/dist/cli/index.d.ts.map +1 -0
  36. package/dist/cli/index.js +41 -0
  37. package/dist/cli/index.js.map +1 -0
  38. package/dist/cli/init.d.ts +6 -0
  39. package/dist/cli/init.d.ts.map +1 -0
  40. package/dist/cli/init.js +319 -0
  41. package/dist/cli/init.js.map +1 -0
  42. package/dist/cli/login.d.ts +9 -0
  43. package/dist/cli/login.d.ts.map +1 -0
  44. package/dist/cli/login.js +121 -0
  45. package/dist/cli/login.js.map +1 -0
  46. package/dist/cli/logout.d.ts +9 -0
  47. package/dist/cli/logout.d.ts.map +1 -0
  48. package/dist/cli/logout.js +18 -0
  49. package/dist/cli/logout.js.map +1 -0
  50. package/dist/cli/status.d.ts +9 -0
  51. package/dist/cli/status.d.ts.map +1 -0
  52. package/dist/cli/status.js +31 -0
  53. package/dist/cli/status.js.map +1 -0
  54. package/dist/data/component-props.d.ts +30 -0
  55. package/dist/data/component-props.d.ts.map +1 -0
  56. package/dist/data/component-props.js +537 -0
  57. package/dist/data/component-props.js.map +1 -0
  58. package/dist/data/component-registry.d.ts +30 -0
  59. package/dist/data/component-registry.d.ts.map +1 -0
  60. package/dist/data/component-registry.js +320 -0
  61. package/dist/data/component-registry.js.map +1 -0
  62. package/dist/data/examples/screen-examples.d.ts +38 -0
  63. package/dist/data/examples/screen-examples.d.ts.map +1 -0
  64. package/dist/data/examples/screen-examples.js +500 -0
  65. package/dist/data/examples/screen-examples.js.map +1 -0
  66. package/dist/data/hint-generator.d.ts +16 -0
  67. package/dist/data/hint-generator.d.ts.map +1 -0
  68. package/dist/data/hint-generator.js +298 -0
  69. package/dist/data/hint-generator.js.map +1 -0
  70. package/dist/data/recipe-resolver.d.ts +48 -0
  71. package/dist/data/recipe-resolver.d.ts.map +1 -0
  72. package/dist/data/recipe-resolver.js +226 -0
  73. package/dist/data/recipe-resolver.js.map +1 -0
  74. package/dist/data/template-matcher.d.ts +50 -0
  75. package/dist/data/template-matcher.d.ts.map +1 -0
  76. package/dist/data/template-matcher.js +240 -0
  77. package/dist/data/template-matcher.js.map +1 -0
  78. package/dist/generators/core-resolver.d.ts +56 -0
  79. package/dist/generators/core-resolver.d.ts.map +1 -0
  80. package/dist/generators/core-resolver.js +490 -0
  81. package/dist/generators/core-resolver.js.map +1 -0
  82. package/dist/generators/css-generator.d.ts +49 -0
  83. package/dist/generators/css-generator.d.ts.map +1 -0
  84. package/dist/generators/css-generator.js +294 -0
  85. package/dist/generators/css-generator.js.map +1 -0
  86. package/dist/generators/index.d.ts +13 -0
  87. package/dist/generators/index.d.ts.map +1 -0
  88. package/dist/generators/index.js +16 -0
  89. package/dist/generators/index.js.map +1 -0
  90. package/dist/generators/llm-generator.d.ts +96 -0
  91. package/dist/generators/llm-generator.d.ts.map +1 -0
  92. package/dist/generators/llm-generator.js +296 -0
  93. package/dist/generators/llm-generator.js.map +1 -0
  94. package/dist/index.d.ts +3 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +965 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/prompts/getting-started.d.ts +18 -0
  99. package/dist/prompts/getting-started.d.ts.map +1 -0
  100. package/dist/prompts/getting-started.js +112 -0
  101. package/dist/prompts/getting-started.js.map +1 -0
  102. package/dist/prompts/screen-workflow.d.ts +17 -0
  103. package/dist/prompts/screen-workflow.d.ts.map +1 -0
  104. package/dist/prompts/screen-workflow.js +246 -0
  105. package/dist/prompts/screen-workflow.js.map +1 -0
  106. package/dist/schemas/mcp-schemas.d.ts +4342 -0
  107. package/dist/schemas/mcp-schemas.d.ts.map +1 -0
  108. package/dist/schemas/mcp-schemas.js +989 -0
  109. package/dist/schemas/mcp-schemas.js.map +1 -0
  110. package/dist/storage/blueprint-storage.d.ts +68 -0
  111. package/dist/storage/blueprint-storage.d.ts.map +1 -0
  112. package/dist/storage/blueprint-storage.js +135 -0
  113. package/dist/storage/blueprint-storage.js.map +1 -0
  114. package/dist/storage/timestamp-manager.d.ts +32 -0
  115. package/dist/storage/timestamp-manager.d.ts.map +1 -0
  116. package/dist/storage/timestamp-manager.js +59 -0
  117. package/dist/storage/timestamp-manager.js.map +1 -0
  118. package/dist/tools/export-screen.d.ts +34 -0
  119. package/dist/tools/export-screen.d.ts.map +1 -0
  120. package/dist/tools/export-screen.js +344 -0
  121. package/dist/tools/export-screen.js.map +1 -0
  122. package/dist/tools/generate-blueprint.d.ts +15 -0
  123. package/dist/tools/generate-blueprint.d.ts.map +1 -0
  124. package/dist/tools/generate-blueprint.js +165 -0
  125. package/dist/tools/generate-blueprint.js.map +1 -0
  126. package/dist/tools/generate-screen.d.ts +13 -0
  127. package/dist/tools/generate-screen.d.ts.map +1 -0
  128. package/dist/tools/generate-screen.js +82 -0
  129. package/dist/tools/generate-screen.js.map +1 -0
  130. package/dist/tools/get-screen-generation-context.d.ts +11 -0
  131. package/dist/tools/get-screen-generation-context.d.ts.map +1 -0
  132. package/dist/tools/get-screen-generation-context.js +325 -0
  133. package/dist/tools/get-screen-generation-context.js.map +1 -0
  134. package/dist/tools/list-components.d.ts +15 -0
  135. package/dist/tools/list-components.d.ts.map +1 -0
  136. package/dist/tools/list-components.js +46 -0
  137. package/dist/tools/list-components.js.map +1 -0
  138. package/dist/tools/list-icon-libraries.d.ts +12 -0
  139. package/dist/tools/list-icon-libraries.d.ts.map +1 -0
  140. package/dist/tools/list-icon-libraries.js +48 -0
  141. package/dist/tools/list-icon-libraries.js.map +1 -0
  142. package/dist/tools/list-screen-templates.d.ts +15 -0
  143. package/dist/tools/list-screen-templates.d.ts.map +1 -0
  144. package/dist/tools/list-screen-templates.js +61 -0
  145. package/dist/tools/list-screen-templates.js.map +1 -0
  146. package/dist/tools/list-themes.d.ts +13 -0
  147. package/dist/tools/list-themes.d.ts.map +1 -0
  148. package/dist/tools/list-themes.js +42 -0
  149. package/dist/tools/list-themes.js.map +1 -0
  150. package/dist/tools/list-tokens.d.ts +13 -0
  151. package/dist/tools/list-tokens.d.ts.map +1 -0
  152. package/dist/tools/list-tokens.js +92 -0
  153. package/dist/tools/list-tokens.js.map +1 -0
  154. package/dist/tools/preview-component.d.ts +18 -0
  155. package/dist/tools/preview-component.d.ts.map +1 -0
  156. package/dist/tools/preview-component.js +63 -0
  157. package/dist/tools/preview-component.js.map +1 -0
  158. package/dist/tools/preview-icon-library.d.ts +13 -0
  159. package/dist/tools/preview-icon-library.d.ts.map +1 -0
  160. package/dist/tools/preview-icon-library.js +63 -0
  161. package/dist/tools/preview-icon-library.js.map +1 -0
  162. package/dist/tools/preview-screen-template.d.ts +18 -0
  163. package/dist/tools/preview-screen-template.d.ts.map +1 -0
  164. package/dist/tools/preview-screen-template.js +99 -0
  165. package/dist/tools/preview-screen-template.js.map +1 -0
  166. package/dist/tools/preview-theme.d.ts +15 -0
  167. package/dist/tools/preview-theme.d.ts.map +1 -0
  168. package/dist/tools/preview-theme.js +172 -0
  169. package/dist/tools/preview-theme.js.map +1 -0
  170. package/dist/tools/validate-environment.d.ts +37 -0
  171. package/dist/tools/validate-environment.d.ts.map +1 -0
  172. package/dist/tools/validate-environment.js +153 -0
  173. package/dist/tools/validate-environment.js.map +1 -0
  174. package/dist/tools/validate-screen-definition.d.ts +10 -0
  175. package/dist/tools/validate-screen-definition.d.ts.map +1 -0
  176. package/dist/tools/validate-screen-definition.js +559 -0
  177. package/dist/tools/validate-screen-definition.js.map +1 -0
  178. package/dist/tools/validate-screen.d.ts +13 -0
  179. package/dist/tools/validate-screen.d.ts.map +1 -0
  180. package/dist/tools/validate-screen.js +106 -0
  181. package/dist/tools/validate-screen.js.map +1 -0
  182. package/dist/tools/whoami.d.ts +17 -0
  183. package/dist/tools/whoami.d.ts.map +1 -0
  184. package/dist/tools/whoami.js +65 -0
  185. package/dist/tools/whoami.js.map +1 -0
  186. package/dist/utils/dependency-extractor.d.ts +13 -0
  187. package/dist/utils/dependency-extractor.d.ts.map +1 -0
  188. package/dist/utils/dependency-extractor.js +232 -0
  189. package/dist/utils/dependency-extractor.js.map +1 -0
  190. package/dist/utils/error-handler.d.ts +29 -0
  191. package/dist/utils/error-handler.d.ts.map +1 -0
  192. package/dist/utils/error-handler.js +48 -0
  193. package/dist/utils/error-handler.js.map +1 -0
  194. package/dist/utils/logger.d.ts +8 -0
  195. package/dist/utils/logger.d.ts.map +1 -0
  196. package/dist/utils/logger.js +14 -0
  197. package/dist/utils/logger.js.map +1 -0
  198. package/dist/utils/package-json-reader.d.ts +37 -0
  199. package/dist/utils/package-json-reader.d.ts.map +1 -0
  200. package/dist/utils/package-json-reader.js +108 -0
  201. package/dist/utils/package-json-reader.js.map +1 -0
  202. package/dist/utils/tailwind-config-reader.d.ts +23 -0
  203. package/dist/utils/tailwind-config-reader.d.ts.map +1 -0
  204. package/dist/utils/tailwind-config-reader.js +81 -0
  205. package/dist/utils/tailwind-config-reader.js.map +1 -0
  206. package/package.json +103 -0
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Get Screen Generation Context MCP Tool
3
+ * SPEC-MCP-004 Phase 3.5: Provides complete context for AI agents to generate screen definitions
4
+ */
5
+ import type { GetScreenGenerationContextInput, GetScreenGenerationContextOutput } from '../schemas/mcp-schemas.js';
6
+ /**
7
+ * Get Screen Generation Context tool implementation
8
+ * Provides complete context for coding agents to generate screen definitions
9
+ */
10
+ export declare function getScreenGenerationContextTool(input: GetScreenGenerationContextInput): Promise<GetScreenGenerationContextOutput>;
11
+ //# sourceMappingURL=get-screen-generation-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-screen-generation-context.d.ts","sourceRoot":"","sources":["../../src/tools/get-screen-generation-context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EACV,+BAA+B,EAC/B,gCAAgC,EAMjC,MAAM,2BAA2B,CAAC;AAoNnC;;;GAGG;AACH,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,+BAA+B,GACrC,OAAO,CAAC,gCAAgC,CAAC,CAyI3C"}
@@ -0,0 +1,325 @@
1
+ /**
2
+ * Get Screen Generation Context MCP Tool
3
+ * SPEC-MCP-004 Phase 3.5: Provides complete context for AI agents to generate screen definitions
4
+ */
5
+ import { loadTheme } from '@framingui/core';
6
+ import { templateRegistry } from '@framingui/ui';
7
+ import { matchTemplates } from '../data/template-matcher.js';
8
+ import { getAllRecipes } from '../data/recipe-resolver.js';
9
+ import { getMatchingExamples } from '../data/examples/screen-examples.js';
10
+ import { generateHints } from '../data/hint-generator.js';
11
+ import { extractErrorMessage } from '../utils/error-handler.js';
12
+ import { getComponentById } from '../data/component-registry.js';
13
+ import { getComponentPropsData } from '../data/component-props.js';
14
+ /**
15
+ * Screen Definition JSON Schema for reference
16
+ */
17
+ const SCREEN_DEFINITION_SCHEMA = {
18
+ type: 'object',
19
+ required: ['id', 'shell', 'page', 'sections'],
20
+ properties: {
21
+ id: {
22
+ type: 'string',
23
+ pattern: '^[a-z0-9-]+$',
24
+ description: 'Unique screen identifier (lowercase alphanumeric with hyphens)',
25
+ },
26
+ name: {
27
+ type: 'string',
28
+ description: 'Human-readable screen name',
29
+ },
30
+ description: {
31
+ type: 'string',
32
+ description: 'Screen description for documentation',
33
+ },
34
+ shell: {
35
+ type: 'string',
36
+ pattern: '^shell\\.[a-z]+\\.[a-z-]+$',
37
+ description: 'Shell token (e.g., shell.web.dashboard, shell.web.auth)',
38
+ },
39
+ page: {
40
+ type: 'string',
41
+ pattern: '^page\\.[a-z-]+$',
42
+ description: 'Page token (e.g., page.dashboard, page.wizard)',
43
+ },
44
+ themeId: {
45
+ type: 'string',
46
+ pattern: '^[a-z0-9-]+$',
47
+ description: 'Theme ID for styling (optional)',
48
+ },
49
+ sections: {
50
+ type: 'array',
51
+ items: {
52
+ type: 'object',
53
+ required: ['id', 'pattern', 'components'],
54
+ properties: {
55
+ id: {
56
+ type: 'string',
57
+ description: 'Section identifier',
58
+ },
59
+ pattern: {
60
+ type: 'string',
61
+ pattern: '^section\\.[a-z0-9-]+$',
62
+ description: 'Section pattern (e.g., section.container, section.grid-4)',
63
+ },
64
+ slot: {
65
+ type: 'string',
66
+ enum: ['header', 'main', 'sidebar', 'footer'],
67
+ description: 'Layout slot to place this section',
68
+ },
69
+ components: {
70
+ type: 'array',
71
+ items: {
72
+ type: 'object',
73
+ required: ['type'],
74
+ properties: {
75
+ type: {
76
+ type: 'string',
77
+ description: 'Component type from component catalog',
78
+ },
79
+ props: {
80
+ type: 'object',
81
+ description: 'Component props',
82
+ },
83
+ children: {
84
+ oneOf: [{ type: 'string' }, { type: 'array' }],
85
+ description: 'Child content or nested components',
86
+ },
87
+ },
88
+ },
89
+ },
90
+ },
91
+ },
92
+ },
93
+ metadata: {
94
+ type: 'object',
95
+ properties: {
96
+ version: { type: 'string' },
97
+ author: { type: 'string' },
98
+ created: { type: 'string' },
99
+ updated: { type: 'string' },
100
+ },
101
+ },
102
+ },
103
+ };
104
+ /**
105
+ * Get component info from local registry
106
+ */
107
+ function getComponentInfo(componentIds) {
108
+ const components = [];
109
+ for (const id of componentIds) {
110
+ const component = getComponentById(id.toLowerCase());
111
+ if (component) {
112
+ const propsData = getComponentPropsData(id.toLowerCase());
113
+ // subComponents가 있으면 import에 함께 포함
114
+ let importStatement;
115
+ if (propsData?.subComponents && propsData.subComponents.length > 0) {
116
+ importStatement = `import { ${component.name}, ${propsData.subComponents.join(', ')} } from '@framingui/ui';`;
117
+ }
118
+ else {
119
+ importStatement = `import { ${component.name} } from '@framingui/ui';`;
120
+ }
121
+ components.push({
122
+ id: component.id,
123
+ name: component.name,
124
+ category: component.category,
125
+ description: component.description,
126
+ importStatement,
127
+ props: propsData?.props ?? [],
128
+ variants: propsData?.variants,
129
+ });
130
+ }
131
+ }
132
+ return components;
133
+ }
134
+ /**
135
+ * Extract component types from template skeleton
136
+ */
137
+ function extractComponentTypes(template) {
138
+ const types = new Set();
139
+ // Add required components from template
140
+ if (template.requiredComponents) {
141
+ for (const comp of template.requiredComponents) {
142
+ types.add(comp.toLowerCase());
143
+ }
144
+ }
145
+ // Add common components based on category
146
+ const categoryComponents = {
147
+ auth: ['card', 'input', 'button', 'text', 'heading', 'link'],
148
+ dashboard: ['card', 'heading', 'text', 'badge', 'avatar', 'table'],
149
+ form: ['form', 'input', 'button', 'text', 'heading', 'select'],
150
+ feedback: ['card', 'text', 'heading', 'button', 'icon'],
151
+ marketing: ['heading', 'text', 'button', 'image', 'card'],
152
+ };
153
+ const category = template.category;
154
+ if (category && categoryComponents[category]) {
155
+ for (const comp of categoryComponents[category]) {
156
+ types.add(comp);
157
+ }
158
+ }
159
+ return Array.from(types);
160
+ }
161
+ /**
162
+ * Get theme recipe info
163
+ */
164
+ function getThemeRecipeInfo(themeId) {
165
+ const recipes = [];
166
+ try {
167
+ const allRecipes = getAllRecipes(themeId);
168
+ // Group recipes by component type
169
+ const grouped = {};
170
+ for (const [path, className] of Object.entries(allRecipes)) {
171
+ // Parse path: recipes.card.glass -> card, glass
172
+ const parts = path.replace('recipes.', '').split('.');
173
+ if (parts.length >= 1) {
174
+ const componentType = parts[0] || 'unknown';
175
+ const variant = parts[1] || 'default';
176
+ if (!grouped[componentType]) {
177
+ grouped[componentType] = { variants: [] };
178
+ }
179
+ if (variant === 'default' || variant === 'base') {
180
+ grouped[componentType].defaultClassName = className;
181
+ }
182
+ else {
183
+ grouped[componentType].variants.push(variant);
184
+ }
185
+ }
186
+ }
187
+ // Convert to array
188
+ for (const [componentType, data] of Object.entries(grouped)) {
189
+ recipes.push({
190
+ componentType,
191
+ variants: data.variants,
192
+ defaultClassName: data.defaultClassName,
193
+ });
194
+ }
195
+ }
196
+ catch {
197
+ // Theme not found or no recipes
198
+ }
199
+ return recipes;
200
+ }
201
+ /**
202
+ * Get Screen Generation Context tool implementation
203
+ * Provides complete context for coding agents to generate screen definitions
204
+ */
205
+ export async function getScreenGenerationContextTool(input) {
206
+ try {
207
+ // 1. Match templates based on description
208
+ const templateMatches = matchTemplates(input.description, 3);
209
+ let bestMatch;
210
+ let componentTypes = [];
211
+ if (templateMatches.length > 0) {
212
+ const match = templateMatches[0];
213
+ if (match) {
214
+ const templateData = templateRegistry.get(match.templateId);
215
+ bestMatch = {
216
+ templateId: match.templateId,
217
+ templateName: match.templateName,
218
+ category: match.category,
219
+ confidence: match.confidence,
220
+ matchedKeywords: match.matchedKeywords,
221
+ skeleton: templateData?.skeleton,
222
+ requiredComponents: templateData?.requiredComponents,
223
+ };
224
+ // Extract component types from template
225
+ if (templateData) {
226
+ componentTypes = extractComponentTypes(templateData);
227
+ }
228
+ }
229
+ }
230
+ // 2. Get component information
231
+ // Add common components if no specific match
232
+ if (componentTypes.length === 0) {
233
+ componentTypes = ['card', 'heading', 'text', 'button'];
234
+ }
235
+ const components = getComponentInfo(componentTypes);
236
+ // 3. Get examples if requested
237
+ let examples;
238
+ if (input.includeExamples !== false) {
239
+ examples = getMatchingExamples(input.description, 2);
240
+ }
241
+ // 4. Get theme recipes if theme specified
242
+ let themeRecipes;
243
+ if (input.themeId) {
244
+ const theme = loadTheme(input.themeId);
245
+ if (theme) {
246
+ themeRecipes = getThemeRecipeInfo(input.themeId);
247
+ }
248
+ }
249
+ // 5. Generate contextual hints
250
+ const hints = generateHints(input.description, input.themeId);
251
+ // 6. Generate workflow guide
252
+ const workflow = {
253
+ title: 'Screen Generation Workflow',
254
+ description: 'Follow these steps to generate a screen from natural language description',
255
+ steps: [
256
+ {
257
+ step: 1,
258
+ action: 'Review Context',
259
+ description: 'Review the templateMatch, components (with inline props/variants), schema, examples, and hints provided in this response',
260
+ },
261
+ {
262
+ step: 2,
263
+ action: 'Generate Screen Definition',
264
+ description: 'Create a JSON Screen Definition following the schema structure. Use templateMatch.skeleton as a starting point if available.',
265
+ example: JSON.stringify({
266
+ id: 'my-screen',
267
+ shell: 'shell.web.app',
268
+ page: 'page.dashboard',
269
+ themeId: input.themeId || 'your-theme-id',
270
+ sections: [{ id: 'main', pattern: 'section.container', components: [] }],
271
+ }, null, 2),
272
+ },
273
+ {
274
+ step: 3,
275
+ action: 'Validate Definition',
276
+ tool: 'validate-screen-definition',
277
+ description: 'Call validate-screen-definition with your generated definition to check for errors. Apply autoFixPatches if provided.',
278
+ example: '{ "definition": <your-screen-definition>, "strict": true }',
279
+ },
280
+ {
281
+ step: 4,
282
+ action: 'Fix Validation Errors',
283
+ description: 'If validation fails, apply autoFixPatches or manually fix errors and re-validate',
284
+ },
285
+ {
286
+ step: 5,
287
+ action: 'Write React Code',
288
+ description: 'Write production-ready React code DIRECTLY using the components and props from this context. Use the import statements provided in the components field.',
289
+ },
290
+ {
291
+ step: 6,
292
+ action: 'Save File',
293
+ description: 'Write the code to the target file path (e.g., app/page.tsx)',
294
+ },
295
+ ],
296
+ notes: [
297
+ 'Use components from the "components" field - they include inline props and variants',
298
+ 'Apply theme recipes by setting variant props on components',
299
+ 'Write React code directly using the components and context provided',
300
+ 'Check hints for layout and component recommendations',
301
+ 'Use validate-environment to verify project dependencies before delivering code',
302
+ ],
303
+ };
304
+ return {
305
+ success: true,
306
+ templateMatch: bestMatch,
307
+ components: components.length > 0 ? components : undefined,
308
+ schema: {
309
+ screenDefinition: SCREEN_DEFINITION_SCHEMA,
310
+ description: 'JSON Schema for Screen Definition - use this structure to create valid screen definitions',
311
+ },
312
+ examples: examples && examples.length > 0 ? examples : undefined,
313
+ themeRecipes: themeRecipes && themeRecipes.length > 0 ? themeRecipes : undefined,
314
+ hints: hints.length > 0 ? hints : undefined,
315
+ workflow,
316
+ };
317
+ }
318
+ catch (error) {
319
+ return {
320
+ success: false,
321
+ error: extractErrorMessage(error),
322
+ };
323
+ }
324
+ }
325
+ //# sourceMappingURL=get-screen-generation-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-screen-generation-context.js","sourceRoot":"","sources":["../../src/tools/get-screen-generation-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * List Components MCP Tool (SPEC-MCP-003)
3
+ * [TAG-MCP003-006] List all available UI components
4
+ *
5
+ * Lists all UI components from @framingui/ui with metadata
6
+ * including category, tier, and variant information
7
+ */
8
+ import type { ListComponentsInput, ListComponentsOutput } from '../schemas/mcp-schemas.js';
9
+ /**
10
+ * List all available UI components
11
+ * @param input - Filter options (category, search)
12
+ * @returns Component metadata list with category counts
13
+ */
14
+ export declare function listComponentsTool(input: ListComponentsInput): Promise<ListComponentsOutput>;
15
+ //# sourceMappingURL=list-components.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-components.d.ts","sourceRoot":"","sources":["../../src/tools/list-components.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAG3F;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAmC/B"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * List Components MCP Tool (SPEC-MCP-003)
3
+ * [TAG-MCP003-006] List all available UI components
4
+ *
5
+ * Lists all UI components from @framingui/ui with metadata
6
+ * including category, tier, and variant information
7
+ */
8
+ import { getAllComponents, getComponentsByCategory, searchComponents, } from '../data/component-registry.js';
9
+ import { extractErrorMessage } from '../utils/error-handler.js';
10
+ /**
11
+ * List all available UI components
12
+ * @param input - Filter options (category, search)
13
+ * @returns Component metadata list with category counts
14
+ */
15
+ export async function listComponentsTool(input) {
16
+ try {
17
+ // Get components based on filters
18
+ let components = input.category === 'all' || !input.category
19
+ ? getAllComponents()
20
+ : getComponentsByCategory(input.category);
21
+ // Apply search filter if provided
22
+ if (input.search) {
23
+ components = searchComponents(input.search).filter(c => input.category === 'all' || !input.category ? true : c.category === input.category);
24
+ }
25
+ // Calculate category counts
26
+ const allComponents = getAllComponents();
27
+ const categories = {
28
+ core: allComponents.filter(c => c.category === 'core').length,
29
+ complex: allComponents.filter(c => c.category === 'complex').length,
30
+ advanced: allComponents.filter(c => c.category === 'advanced').length,
31
+ };
32
+ return {
33
+ success: true,
34
+ components,
35
+ count: components.length,
36
+ categories,
37
+ };
38
+ }
39
+ catch (error) {
40
+ return {
41
+ success: false,
42
+ error: extractErrorMessage(error),
43
+ };
44
+ }
45
+ }
46
+ //# sourceMappingURL=list-components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-components.js","sourceRoot":"","sources":["../../src/tools/list-components.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAA0B;IAE1B,IAAI,CAAC;QACH,kCAAkC;QAClC,IAAI,UAAU,GACZ,KAAK,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ;YACzC,CAAC,CAAC,gBAAgB,EAAE;YACpB,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAE9C,kCAAkC;QAClC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACrD,KAAK,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CACnF,CAAC;QACJ,CAAC;QAED,4BAA4B;QAC5B,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG;YACjB,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;YAC7D,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM;YACnE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM;SACtE,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,IAAI;YACb,UAAU;YACV,KAAK,EAAE,UAAU,CAAC,MAAM;YACxB,UAAU;SACX,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC;SAClC,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * MCP Tool: list-icon-libraries
3
+ * List all available icon libraries from .moai/icon-libraries/generated/
4
+ * [SPEC-ICON-001]
5
+ */
6
+ import type { ListIconLibrariesOutput } from '../schemas/mcp-schemas.js';
7
+ /**
8
+ * List all available icon libraries
9
+ * @returns List of icon library metadata
10
+ */
11
+ export declare function listIconLibrariesTool(): Promise<ListIconLibrariesOutput>;
12
+ //# sourceMappingURL=list-icon-libraries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-icon-libraries.d.ts","sourceRoot":"","sources":["../../src/tools/list-icon-libraries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGzE;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAsC9E"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * MCP Tool: list-icon-libraries
3
+ * List all available icon libraries from .moai/icon-libraries/generated/
4
+ * [SPEC-ICON-001]
5
+ */
6
+ import { listIconLibraries } from '@framingui/core';
7
+ import { info, error as logError } from '../utils/logger.js';
8
+ /**
9
+ * List all available icon libraries
10
+ * @returns List of icon library metadata
11
+ */
12
+ export async function listIconLibrariesTool() {
13
+ info('list-icon-libraries: Fetching available icon libraries');
14
+ try {
15
+ const libraries = listIconLibraries();
16
+ if (libraries.length === 0) {
17
+ info('list-icon-libraries: No icon libraries found');
18
+ return {
19
+ success: true,
20
+ libraries: [],
21
+ count: 0,
22
+ };
23
+ }
24
+ info(`list-icon-libraries: Found ${libraries.length} icon libraries`);
25
+ return {
26
+ success: true,
27
+ libraries: libraries.map(lib => ({
28
+ id: lib.id,
29
+ name: lib.name,
30
+ description: lib.description,
31
+ version: lib.version,
32
+ license: lib.license,
33
+ totalIcons: lib.totalIcons,
34
+ categories: lib.categories,
35
+ })),
36
+ count: libraries.length,
37
+ };
38
+ }
39
+ catch (err) {
40
+ const errorMessage = err instanceof Error ? err.message : String(err);
41
+ logError(`list-icon-libraries: Failed to list libraries: ${errorMessage}`);
42
+ return {
43
+ success: false,
44
+ error: `Failed to list icon libraries: ${errorMessage}`,
45
+ };
46
+ }
47
+ }
48
+ //# sourceMappingURL=list-icon-libraries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-icon-libraries.js","sourceRoot":"","sources":["../../src/tools/list-icon-libraries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,IAAI,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE7D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,IAAI,CAAC,wDAAwD,CAAC,CAAC;IAE/D,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;QAEtC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,8CAA8C,CAAC,CAAC;YACrD,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,EAAE;gBACb,KAAK,EAAE,CAAC;aACT,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,8BAA8B,SAAS,CAAC,MAAM,iBAAiB,CAAC,CAAC;QAEtE,OAAO;YACL,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC/B,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;aAC3B,CAAC,CAAC;YACH,KAAK,EAAE,SAAS,CAAC,MAAM;SACxB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,YAAY,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACtE,QAAQ,CAAC,kDAAkD,YAAY,EAAE,CAAC,CAAC;QAC3E,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,kCAAkC,YAAY,EAAE;SACxD,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * List Screen Templates MCP Tool (SPEC-MCP-003)
3
+ * [TAG-MCP003-008] List all available screen templates
4
+ *
5
+ * Lists all screen templates from Template Registry
6
+ * with category filtering and search capabilities
7
+ */
8
+ import type { ListScreenTemplatesInput, ListScreenTemplatesOutput } from '../schemas/mcp-schemas.js';
9
+ /**
10
+ * List all available screen templates
11
+ * @param input - Filter options (category, search)
12
+ * @returns Template metadata list with category counts
13
+ */
14
+ export declare function listScreenTemplatesTool(input: ListScreenTemplatesInput): Promise<ListScreenTemplatesOutput>;
15
+ //# sourceMappingURL=list-screen-templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-screen-templates.d.ts","sourceRoot":"","sources":["../../src/tools/list-screen-templates.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EACV,wBAAwB,EACxB,yBAAyB,EAE1B,MAAM,2BAA2B,CAAC;AAGnC;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,wBAAwB,GAC9B,OAAO,CAAC,yBAAyB,CAAC,CAmDpC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * List Screen Templates MCP Tool (SPEC-MCP-003)
3
+ * [TAG-MCP003-008] List all available screen templates
4
+ *
5
+ * Lists all screen templates from Template Registry
6
+ * with category filtering and search capabilities
7
+ */
8
+ import { templateRegistry } from '@framingui/ui';
9
+ import { extractErrorMessage } from '../utils/error-handler.js';
10
+ /**
11
+ * List all available screen templates
12
+ * @param input - Filter options (category, search)
13
+ * @returns Template metadata list with category counts
14
+ */
15
+ export async function listScreenTemplatesTool(input) {
16
+ try {
17
+ // Get templates based on category filter
18
+ let templates = input.category === 'all' || !input.category
19
+ ? templateRegistry.getAll()
20
+ : templateRegistry.getByCategory(input.category);
21
+ // Apply search filter if provided
22
+ if (input.search) {
23
+ templates = templateRegistry
24
+ .search(input.search)
25
+ .filter((t) => input.category === 'all' || !input.category ? true : t.category === input.category);
26
+ }
27
+ // Calculate category counts
28
+ const allTemplates = templateRegistry.getAll();
29
+ const categories = {
30
+ auth: allTemplates.filter((t) => t.category === 'auth').length,
31
+ dashboard: allTemplates.filter((t) => t.category === 'dashboard').length,
32
+ form: allTemplates.filter((t) => t.category === 'form').length,
33
+ marketing: allTemplates.filter((t) => t.category === 'marketing').length,
34
+ feedback: allTemplates.filter((t) => t.category === 'feedback').length,
35
+ };
36
+ // Map templates to output format
37
+ const templateMetas = templates.map((t) => ({
38
+ id: t.id,
39
+ name: t.name,
40
+ category: t.category,
41
+ description: t.description,
42
+ requiredComponentsCount: t.requiredComponents.length,
43
+ layoutType: t.layout.type,
44
+ version: t.version,
45
+ tags: t.tags,
46
+ }));
47
+ return {
48
+ success: true,
49
+ templates: templateMetas,
50
+ count: templateMetas.length,
51
+ categories,
52
+ };
53
+ }
54
+ catch (error) {
55
+ return {
56
+ success: false,
57
+ error: extractErrorMessage(error),
58
+ };
59
+ }
60
+ }
61
+ //# sourceMappingURL=list-screen-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-screen-templates.js","sourceRoot":"","sources":["../../src/tools/list-screen-templates.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,KAA+B;IAE/B,IAAI,CAAC;QACH,yCAAyC;QACzC,IAAI,SAAS,GACX,KAAK,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ;YACzC,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE;YAC3B,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,CAAC,QAA4B,CAAC,CAAC;QAEzE,kCAAkC;QAClC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,SAAS,GAAG,gBAAgB;iBACzB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;iBACpB,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CACjB,KAAK,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CACnF,CAAC;QACN,CAAC;QAED,4BAA4B;QAC5B,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC;QAC/C,MAAM,UAAU,GAAG;YACjB,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;YACnE,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAC,MAAM;YAC7E,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;YACnE,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,WAAW,CAAC,CAAC,MAAM;YAC7E,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM;SAC5E,CAAC;QAEF,iCAAiC;QACjC,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YAC/C,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,CAAC,CAAC,QAA4B;YACxC,WAAW,EAAE,CAAC,CAAC,WAAW;YAC1B,uBAAuB,EAAE,CAAC,CAAC,kBAAkB,CAAC,MAAM;YACpD,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI;YACzB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,IAAI,EAAE,CAAC,CAAC,IAAI;SACb,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,aAAa;YACxB,KAAK,EAAE,aAAa,CAAC,MAAM;YAC3B,UAAU;SACX,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC;SAClC,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * List Themes MCP Tool (v2.1)
3
+ * Lists all available themes from .moai/themes/generated/
4
+ * SPEC-DEPLOY-001: 인증된 사용자의 라이선스 보유 테마만 반환
5
+ */
6
+ import type { ListThemesOutput } from '../schemas/mcp-schemas.js';
7
+ /**
8
+ * List available themes based on authentication status
9
+ * 인증된 사용자의 라이선스 보유 테마만 반환
10
+ * @returns Array of accessible theme metadata from .moai/themes/generated/
11
+ */
12
+ export declare function listThemesTool(): Promise<ListThemesOutput>;
13
+ //# sourceMappingURL=list-themes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-themes.d.ts","sourceRoot":"","sources":["../../src/tools/list-themes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAIlE;;;;GAIG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,gBAAgB,CAAC,CA6BhE"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * List Themes MCP Tool (v2.1)
3
+ * Lists all available themes from .moai/themes/generated/
4
+ * SPEC-DEPLOY-001: 인증된 사용자의 라이선스 보유 테마만 반환
5
+ */
6
+ import { listThemes } from '@framingui/core';
7
+ import { extractErrorMessage } from '../utils/error-handler.js';
8
+ import { getAccessibleThemes } from '../auth/state.js';
9
+ /**
10
+ * List available themes based on authentication status
11
+ * 인증된 사용자의 라이선스 보유 테마만 반환
12
+ * @returns Array of accessible theme metadata from .moai/themes/generated/
13
+ */
14
+ export async function listThemesTool() {
15
+ try {
16
+ // @framingui/core에서 전체 테마 로드
17
+ const allThemes = listThemes();
18
+ const allThemeIds = allThemes.map(theme => theme.id);
19
+ // 인증 기반 접근 가능 테마 필터링
20
+ const accessibleThemeIds = getAccessibleThemes(allThemeIds);
21
+ // 접근 가능한 테마만 반환
22
+ const filteredThemes = allThemes.filter(theme => accessibleThemeIds.includes(theme.id));
23
+ return {
24
+ success: true,
25
+ themes: filteredThemes.map(theme => ({
26
+ id: theme.id,
27
+ name: theme.name,
28
+ description: theme.description,
29
+ brandTone: theme.brandTone,
30
+ schemaVersion: theme.schemaVersion,
31
+ })),
32
+ count: filteredThemes.length,
33
+ };
34
+ }
35
+ catch (error) {
36
+ return {
37
+ success: false,
38
+ error: extractErrorMessage(error),
39
+ };
40
+ }
41
+ }
42
+ //# sourceMappingURL=list-themes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-themes.js","sourceRoot":"","sources":["../../src/tools/list-themes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC;QACH,6BAA6B;QAC7B,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAErD,qBAAqB;QACrB,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAE5D,gBAAgB;QAChB,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAExF,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACnC,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;aACnC,CAAC,CAAC;YACH,KAAK,EAAE,cAAc,CAAC,MAAM;SAC7B,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC;SAClC,CAAC;IACJ,CAAC;AACH,CAAC"}