@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.
- package/README.md +1027 -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 +22 -0
- package/dist/auth/guard.d.ts.map +1 -0
- package/dist/auth/guard.js +37 -0
- package/dist/auth/guard.js.map +1 -0
- package/dist/auth/state.d.ts +42 -0
- package/dist/auth/state.d.ts.map +1 -0
- package/dist/auth/state.js +96 -0
- package/dist/auth/state.js.map +1 -0
- package/dist/auth/theme-access.d.ts +21 -0
- package/dist/auth/theme-access.d.ts.map +1 -0
- package/dist/auth/theme-access.js +30 -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/agent-md-templates.d.ts +16 -0
- package/dist/cli/agent-md-templates.d.ts.map +1 -0
- package/dist/cli/agent-md-templates.js +311 -0
- package/dist/cli/agent-md-templates.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/guide-template.d.ts +10 -0
- package/dist/cli/guide-template.d.ts.map +1 -0
- package/dist/cli/guide-template.js +195 -0
- package/dist/cli/guide-template.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 +41 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +6 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +319 -0
- package/dist/cli/init.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 +121 -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-props.d.ts +30 -0
- package/dist/data/component-props.d.ts.map +1 -0
- package/dist/data/component-props.js +537 -0
- package/dist/data/component-props.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 +965 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/getting-started.d.ts +18 -0
- package/dist/prompts/getting-started.d.ts.map +1 -0
- package/dist/prompts/getting-started.js +112 -0
- package/dist/prompts/getting-started.js.map +1 -0
- package/dist/prompts/screen-workflow.d.ts +17 -0
- package/dist/prompts/screen-workflow.d.ts.map +1 -0
- package/dist/prompts/screen-workflow.js +246 -0
- package/dist/prompts/screen-workflow.js.map +1 -0
- package/dist/schemas/mcp-schemas.d.ts +4342 -0
- package/dist/schemas/mcp-schemas.d.ts.map +1 -0
- package/dist/schemas/mcp-schemas.js +989 -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 +325 -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 +61 -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 +63 -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 +99 -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 +172 -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 +559 -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/tools/whoami.d.ts +17 -0
- package/dist/tools/whoami.d.ts.map +1 -0
- package/dist/tools/whoami.js +65 -0
- package/dist/tools/whoami.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 +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"}
|