@framingui/mcp-server 0.5.5 → 0.6.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/dist/__tests__/cache.test.d.ts +6 -0
- package/dist/__tests__/cache.test.d.ts.map +1 -0
- package/dist/__tests__/cache.test.js +86 -0
- package/dist/__tests__/cache.test.js.map +1 -0
- package/dist/__tests__/data-client.test.d.ts +13 -0
- package/dist/__tests__/data-client.test.d.ts.map +1 -0
- package/dist/__tests__/data-client.test.js +323 -0
- package/dist/__tests__/data-client.test.js.map +1 -0
- package/dist/api/data-client.d.ts +124 -0
- package/dist/api/data-client.d.ts.map +1 -0
- package/dist/api/data-client.js +331 -0
- package/dist/api/data-client.js.map +1 -0
- package/dist/auth/cache.d.ts +5 -0
- package/dist/auth/cache.d.ts.map +1 -1
- package/dist/auth/cache.js +11 -0
- package/dist/auth/cache.js.map +1 -1
- package/dist/auth/state.d.ts +8 -0
- package/dist/auth/state.d.ts.map +1 -1
- package/dist/auth/state.js +15 -0
- package/dist/auth/state.js.map +1 -1
- package/dist/data/recipe-resolver.d.ts +6 -5
- package/dist/data/recipe-resolver.d.ts.map +1 -1
- package/dist/data/recipe-resolver.js +23 -18
- package/dist/data/recipe-resolver.js.map +1 -1
- package/dist/data/template-matcher.d.ts +7 -1
- package/dist/data/template-matcher.d.ts.map +1 -1
- package/dist/data/template-matcher.js +18 -5
- package/dist/data/template-matcher.js.map +1 -1
- package/dist/generators/core-resolver.d.ts +7 -13
- package/dist/generators/core-resolver.d.ts.map +1 -1
- package/dist/generators/core-resolver.js +7 -84
- package/dist/generators/core-resolver.js.map +1 -1
- package/dist/generators/css-generator.d.ts +8 -26
- package/dist/generators/css-generator.d.ts.map +1 -1
- package/dist/generators/css-generator.js +17 -265
- package/dist/generators/css-generator.js.map +1 -1
- package/dist/generators/index.d.ts +2 -2
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +4 -2
- package/dist/generators/index.js.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/schemas/mcp-schemas.d.ts +351 -351
- package/dist/tools/export-screen.d.ts.map +1 -1
- package/dist/tools/export-screen.js +8 -11
- package/dist/tools/export-screen.js.map +1 -1
- package/dist/tools/get-screen-generation-context.d.ts +1 -0
- package/dist/tools/get-screen-generation-context.d.ts.map +1 -1
- package/dist/tools/get-screen-generation-context.js +38 -27
- package/dist/tools/get-screen-generation-context.js.map +1 -1
- package/dist/tools/list-components.d.ts +2 -1
- package/dist/tools/list-components.d.ts.map +1 -1
- package/dist/tools/list-components.js +20 -14
- package/dist/tools/list-components.js.map +1 -1
- package/dist/tools/list-icon-libraries.d.ts +2 -1
- package/dist/tools/list-icon-libraries.d.ts.map +1 -1
- package/dist/tools/list-icon-libraries.js +4 -3
- package/dist/tools/list-icon-libraries.js.map +1 -1
- package/dist/tools/list-screen-templates.d.ts +2 -1
- package/dist/tools/list-screen-templates.d.ts.map +1 -1
- package/dist/tools/list-screen-templates.js +23 -25
- package/dist/tools/list-screen-templates.js.map +1 -1
- package/dist/tools/list-themes.d.ts +3 -4
- package/dist/tools/list-themes.d.ts.map +1 -1
- package/dist/tools/list-themes.js +7 -15
- package/dist/tools/list-themes.js.map +1 -1
- package/dist/tools/list-tokens.d.ts +2 -1
- package/dist/tools/list-tokens.d.ts.map +1 -1
- package/dist/tools/list-tokens.js +8 -37
- package/dist/tools/list-tokens.js.map +1 -1
- package/dist/tools/preview-component.d.ts +1 -0
- package/dist/tools/preview-component.d.ts.map +1 -1
- package/dist/tools/preview-component.js +21 -23
- package/dist/tools/preview-component.js.map +1 -1
- package/dist/tools/preview-icon-library.d.ts +2 -1
- package/dist/tools/preview-icon-library.d.ts.map +1 -1
- package/dist/tools/preview-icon-library.js +7 -13
- package/dist/tools/preview-icon-library.js.map +1 -1
- package/dist/tools/preview-screen-template.d.ts +1 -0
- package/dist/tools/preview-screen-template.d.ts.map +1 -1
- package/dist/tools/preview-screen-template.js +5 -3
- package/dist/tools/preview-screen-template.js.map +1 -1
- package/dist/tools/preview-theme.d.ts +2 -2
- package/dist/tools/preview-theme.d.ts.map +1 -1
- package/dist/tools/preview-theme.js +17 -14
- package/dist/tools/preview-theme.js.map +1 -1
- package/dist/tools/validate-screen-definition.d.ts.map +1 -1
- package/dist/tools/validate-screen-definition.js +49 -12
- package/dist/tools/validate-screen-definition.js.map +1 -1
- package/package.json +2 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-screen.d.ts","sourceRoot":"","sources":["../../src/tools/export-screen.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAEnB,MAAM,2BAA2B,CAAC;AAkFnC;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA8D5F;AA4GD;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"export-screen.d.ts","sourceRoot":"","sources":["../../src/tools/export-screen.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAEnB,MAAM,2BAA2B,CAAC;AAkFnC;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA8D5F;AA4GD;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0H5F;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,EAAE,CAEtD"}
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* SPEC-COMPONENT-001-D: Hybrid Export System
|
|
5
5
|
* SPEC-MCP-004 Phase 4: Theme Recipes Auto-Application
|
|
6
6
|
*/
|
|
7
|
-
import { render
|
|
7
|
+
import { render } from '@framingui/core';
|
|
8
8
|
import { createErrorResponse, extractErrorMessage } from '../utils/error-handler.js';
|
|
9
|
-
import { isTier1Component, resolveFromTier1, resolveFromTier2,
|
|
9
|
+
import { isTier1Component, resolveFromTier1, resolveFromTier2, generateCSSFromThemeId, TIER1_COMPONENTS, } from '../generators/index.js';
|
|
10
10
|
import { applyRecipesToBlueprint } from '../data/recipe-resolver.js';
|
|
11
11
|
/**
|
|
12
12
|
* Convert JSX code to TSX format with TypeScript annotations
|
|
@@ -87,7 +87,7 @@ export async function exportScreenTool(input) {
|
|
|
87
87
|
}
|
|
88
88
|
// SPEC-MCP-004 Phase 4: Apply theme recipes if themeId exists
|
|
89
89
|
if (blueprint.themeId && blueprint.components) {
|
|
90
|
-
const componentsWithRecipes = applyRecipesToBlueprint(blueprint.components, blueprint.themeId);
|
|
90
|
+
const componentsWithRecipes = await applyRecipesToBlueprint(blueprint.components, blueprint.themeId);
|
|
91
91
|
blueprint = {
|
|
92
92
|
...blueprint,
|
|
93
93
|
components: componentsWithRecipes,
|
|
@@ -239,15 +239,12 @@ export async function hybridExportTool(input) {
|
|
|
239
239
|
success: true,
|
|
240
240
|
components: [],
|
|
241
241
|
};
|
|
242
|
-
// CSS 생성 (요청된 경우)
|
|
242
|
+
// CSS 생성 (요청된 경우) - API 기반 [SPEC-MCP-007:E-006]
|
|
243
243
|
if (includeCSS && themeId) {
|
|
244
244
|
try {
|
|
245
|
-
const
|
|
246
|
-
if (
|
|
247
|
-
|
|
248
|
-
if (cssResult.success && cssResult.css) {
|
|
249
|
-
result.css = cssResult.css;
|
|
250
|
-
}
|
|
245
|
+
const cssResult = await generateCSSFromThemeId(themeId);
|
|
246
|
+
if (cssResult.success && cssResult.css) {
|
|
247
|
+
result.css = cssResult.css;
|
|
251
248
|
}
|
|
252
249
|
}
|
|
253
250
|
catch (cssError) {
|
|
@@ -289,7 +286,7 @@ export async function hybridExportTool(input) {
|
|
|
289
286
|
// SPEC-MCP-004 Phase 4: Apply theme recipes if themeId exists
|
|
290
287
|
if ((bp.themeId || themeId) && bp.components) {
|
|
291
288
|
const targetThemeId = bp.themeId || themeId;
|
|
292
|
-
const componentsWithRecipes = applyRecipesToBlueprint(bp.components, targetThemeId);
|
|
289
|
+
const componentsWithRecipes = await applyRecipesToBlueprint(bp.components, targetThemeId);
|
|
293
290
|
bp = {
|
|
294
291
|
...bp,
|
|
295
292
|
components: componentsWithRecipes,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export-screen.js","sourceRoot":"","sources":["../../src/tools/export-screen.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"export-screen.js","sourceRoot":"","sources":["../../src/tools/export-screen.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AASzC,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAErE;;;GAGG;AACH,SAAS,YAAY,CAAC,OAAe;IACnC,6DAA6D;IAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,oCAAoC;IACpC,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,uEAAuE;QACvE,IAAI,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,EAAE,CAAC;YACnD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,OAAe,EAAE,aAAqB;IAC1D,oDAAoD;IACpD,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5D,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC,CAAC,gDAAgD;IAClE,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEzC,iDAAiD;IACjD,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,wBAAwB;IAE3H,OAAO;EACP,WAAW;SACV,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;SACxB,IAAI,CAAC,IAAI,CAAC;;;;KAIR,aAAa;;;;;;CAMjB,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,aAAqB;IACjD,sDAAsD;IACtD,MAAM,OAAO,GAAG,aAAa;SAC1B,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;SAC9B,KAAK,CAAC,KAAK,CAAC;SACZ,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SACvE,IAAI,CAAC,EAAE,CAAC,CAAC;IAEZ,OAAO,OAAO,IAAI,oBAAoB,CAAC;AACzC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAwB;IAC7D,IAAI,CAAC;QACH,4EAA4E;QAC5E,IAAI,SAAS,GAAG,KAAK,CAAC,SAAsB,CAAC;QAE7C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,mBAAmB,CAAC,8BAA8B,CAAC,CAAC;QAC7D,CAAC;QAED,8DAA8D;QAC9D,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;YAC9C,MAAM,qBAAqB,GAAG,MAAM,uBAAuB,CACzD,SAAS,CAAC,UAAU,EACpB,SAAS,CAAC,OAAO,CAClB,CAAC;YACF,SAAS,GAAG;gBACV,GAAG,SAAS;gBACZ,UAAU,EAAE,qBAAqB;aAClC,CAAC;QACJ,CAAC;QAED,4EAA4E;QAC5E,uFAAuF;QACvF,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAEvC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAC1B,OAAO,mBAAmB,CAAC,kBAAkB,YAAY,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;QACxF,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,IAAI,EAAE,CAAC;QAExC,4EAA4E;QAC5E,IAAI,SAAiB,CAAC;QAEtB,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,KAAK;gBACR,sCAAsC;gBACtC,SAAS,GAAG,OAAO,CAAC;gBACpB,MAAM;YACR,KAAK,KAAK;gBACR,2CAA2C;gBAC3C,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjD,MAAM;YACR,KAAK,KAAK;gBACR,gCAAgC;gBAChC,SAAS,GAAG,YAAY,CAAC,OAAO,EAAE,oBAAoB,CAAC,SAAS,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;gBACvF,MAAM;YACR;gBACE,OAAO,mBAAmB,CAAC,uBAAuB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,qEAAqE;QACrE,OAAO;YACL,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,SAAS;SAChB,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;AAED,+EAA+E;AAC/E,8CAA8C;AAC9C,+EAA+E;AAE/E;;;;;;;GAOG;AACH,KAAK,UAAU,gBAAgB,CAC7B,aAAqB,EACrB,OAAmB,MAAM,EACzB,WAAoB;IAOpB,YAAY;IACZ,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE,CAAC;YACrC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,cAAc,aAAa,4CAA4C,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC5G,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAC/C,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC;IACJ,CAAC;IAED,YAAY;IACZ,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QAClE,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,OAAO;gBACpB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB;oBAC7B,CAAC,CAAC,WAAW;oBACb,CAAC,CAAC,YAAY;gBAChB,CAAC,CAAC,SAAS;YACb,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC;IACJ,CAAC;IAED,iCAAiC;IACjC,IAAI,gBAAgB,CAAC,aAAa,CAAC,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAC/C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IACvE,OAAO;QACL,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,MAAM,EAAE,WAAW,CAAC,OAAO;YACzB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB;gBAC7B,CAAC,CAAC,WAAW;gBACb,CAAC,CAAC,YAAY;YAChB,CAAC,CAAC,SAAS;QACb,KAAK,EAAE,WAAW,CAAC,KAAK;KACzB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,SAAoB;IACjD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,SAAS,QAAQ,CAAC,IAAqC;QACrD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBAChD,QAAQ,CAAC,KAAwC,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;QACnD,QAAQ,CAAC,SAAS,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAwB;IAC7D,IAAI,CAAC;QACH,MAAM,EACJ,SAAS,EACT,aAAa,EACb,oBAAoB,EACpB,MAAM,EACN,UAAU,GAAG,KAAK,EAClB,IAAI,GAAG,MAAM,EACb,OAAO,GACR,GAAG,KAAK,CAAC;QAEV,QAAQ;QACR,MAAM,MAAM,GAAuB;YACjC,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,EAAE;SACf,CAAC;QAEF,gDAAgD;QAChD,IAAI,UAAU,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,CAAC;gBACxD,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC;oBACvC,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC;gBAC7B,CAAC;YACH,CAAC;YAAC,OAAO,QAAQ,EAAE,CAAC;gBAClB,4BAA4B;gBAC5B,OAAO,CAAC,IAAI,CAAC,mDAAmD,OAAO,GAAG,EAAE,QAAQ,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;QAED,aAAa;QACb,IAAI,aAAa,IAAI,CAAC,SAAS,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,aAAa,EAAE,IAAI,EAAE,oBAAoB,CAAC,CAAC;YAErF,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,gCAAgC,aAAa,EAAE;iBAC3E,CAAC;YACJ,CAAC;YAED,IAAI,SAAS,GAAG,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC;YAEtC,QAAQ;YACR,IAAI,MAAM,KAAK,KAAK,IAAI,SAAS,EAAE,CAAC;gBAClC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;YACtC,CAAC;iBAAM,IAAI,MAAM,KAAK,KAAK,IAAI,SAAS,EAAE,CAAC;gBACzC,SAAS,GAAG,YAAY,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;YACrD,CAAC;YAED,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC;YACxB,MAAM,CAAC,QAAQ,GAAG,gBAAgB,CAAC,aAAa,CAAC,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YAC1F,MAAM,CAAC,UAAU,GAAG;gBAClB;oBACE,aAAa;oBACb,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,EAAE;oBAC3B,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,eAAe;iBAC7C;aACF,CAAC;YAEF,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,sBAAsB;QACtB,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,EAAE,GAAG,SAAsB,CAAC;YAEhC,8DAA8D;YAC9D,IAAI,CAAC,EAAE,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;gBAC7C,MAAM,aAAa,GAAG,EAAE,CAAC,OAAO,IAAI,OAAO,CAAC;gBAC5C,MAAM,qBAAqB,GAAG,MAAM,uBAAuB,CAAC,EAAE,CAAC,UAAU,EAAE,aAAc,CAAC,CAAC;gBAC3F,EAAE,GAAG;oBACH,GAAG,EAAE;oBACL,UAAU,EAAE,qBAAqB;iBAClC,CAAC;YACJ,CAAC;YAED,4BAA4B;YAC5B,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;YAEhC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC1B,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,kBAAkB,YAAY,CAAC,KAAK,IAAI,eAAe,EAAE;iBACjE,CAAC;YACJ,CAAC;YAED,IAAI,SAAS,GAAG,YAAY,CAAC,IAAI,IAAI,EAAE,CAAC;YAExC,QAAQ;YACR,IAAI,MAAM,KAAK,KAAK,IAAI,SAAS,EAAE,CAAC;gBAClC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;YACtC,CAAC;iBAAM,IAAI,MAAM,KAAK,KAAK,IAAI,SAAS,EAAE,CAAC;gBACzC,SAAS,GAAG,YAAY,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;YACpF,CAAC;YAED,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC;YACxB,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC,2BAA2B;YAEtD,6BAA6B;YAC7B,MAAM,cAAc,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAAC;YACjD,MAAM,CAAC,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC9C,aAAa,EAAE,IAAI;gBACnB,IAAI,EAAE,EAAE,EAAE,8BAA8B;gBACxC,MAAM,EAAE,eAAwB;aACjC,CAAC,CAAC,CAAC;YAEJ,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,QAAQ;QACR,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,+CAA+C;SACvD,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;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B;IACzC,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Get Screen Generation Context MCP Tool
|
|
3
3
|
* SPEC-MCP-004 Phase 3.5: Provides complete context for AI agents to generate screen definitions
|
|
4
|
+
* [SPEC-MCP-007] API 기반 데이터 소스로 마이그레이션
|
|
4
5
|
*/
|
|
5
6
|
import type { GetScreenGenerationContextInput, GetScreenGenerationContextOutput } from '../schemas/mcp-schemas.js';
|
|
6
7
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-screen-generation-context.d.ts","sourceRoot":"","sources":["../../src/tools/get-screen-generation-context.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"get-screen-generation-context.d.ts","sourceRoot":"","sources":["../../src/tools/get-screen-generation-context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EACV,+BAA+B,EAC/B,gCAAgC,EAMjC,MAAM,2BAA2B,CAAC;AAwMnC;;;GAGG;AACH,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,+BAA+B,GACrC,OAAO,CAAC,gCAAgC,CAAC,CAgK3C"}
|
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Get Screen Generation Context MCP Tool
|
|
3
3
|
* SPEC-MCP-004 Phase 3.5: Provides complete context for AI agents to generate screen definitions
|
|
4
|
+
* [SPEC-MCP-007] API 기반 데이터 소스로 마이그레이션
|
|
4
5
|
*/
|
|
5
|
-
import {
|
|
6
|
-
import { templateRegistry } from '@framingui/ui';
|
|
6
|
+
import { fetchTheme, fetchComponent, fetchScreenExamples, fetchTemplate, } from '../api/data-client.js';
|
|
7
7
|
import { matchTemplates } from '../data/template-matcher.js';
|
|
8
8
|
import { getAllRecipes } from '../data/recipe-resolver.js';
|
|
9
|
-
import { getMatchingExamples } from '../data/examples/screen-examples.js';
|
|
10
9
|
import { generateHints } from '../data/hint-generator.js';
|
|
11
10
|
import { extractErrorMessage } from '../utils/error-handler.js';
|
|
12
|
-
import { getComponentById } from '../data/component-registry.js';
|
|
13
|
-
import { getComponentPropsData } from '../data/component-props.js';
|
|
14
11
|
/**
|
|
15
12
|
* Screen Definition JSON Schema for reference
|
|
16
13
|
*/
|
|
@@ -102,30 +99,21 @@ const SCREEN_DEFINITION_SCHEMA = {
|
|
|
102
99
|
},
|
|
103
100
|
};
|
|
104
101
|
/**
|
|
105
|
-
*
|
|
102
|
+
* API에서 컴포넌트 정보 조회
|
|
106
103
|
*/
|
|
107
|
-
function getComponentInfo(componentIds) {
|
|
104
|
+
async function getComponentInfo(componentIds) {
|
|
108
105
|
const components = [];
|
|
109
106
|
for (const id of componentIds) {
|
|
110
|
-
const component =
|
|
107
|
+
const component = await fetchComponent(id.toLowerCase());
|
|
111
108
|
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
109
|
components.push({
|
|
122
110
|
id: component.id,
|
|
123
111
|
name: component.name,
|
|
124
112
|
category: component.category,
|
|
125
113
|
description: component.description,
|
|
126
|
-
importStatement
|
|
127
|
-
props:
|
|
128
|
-
variants:
|
|
114
|
+
importStatement: component.importStatement ?? `import { ${component.name} } from '@framingui/ui';`,
|
|
115
|
+
props: component.props ?? [],
|
|
116
|
+
variants: component.variants,
|
|
129
117
|
});
|
|
130
118
|
}
|
|
131
119
|
}
|
|
@@ -161,10 +149,10 @@ function extractComponentTypes(template) {
|
|
|
161
149
|
/**
|
|
162
150
|
* Get theme recipe info
|
|
163
151
|
*/
|
|
164
|
-
function getThemeRecipeInfo(themeId) {
|
|
152
|
+
async function getThemeRecipeInfo(themeId) {
|
|
165
153
|
const recipes = [];
|
|
166
154
|
try {
|
|
167
|
-
const allRecipes = getAllRecipes(themeId);
|
|
155
|
+
const allRecipes = await getAllRecipes(themeId);
|
|
168
156
|
// Group recipes by component type
|
|
169
157
|
const grouped = {};
|
|
170
158
|
for (const [path, className] of Object.entries(allRecipes)) {
|
|
@@ -211,7 +199,8 @@ export async function getScreenGenerationContextTool(input) {
|
|
|
211
199
|
if (templateMatches.length > 0) {
|
|
212
200
|
const match = templateMatches[0];
|
|
213
201
|
if (match) {
|
|
214
|
-
|
|
202
|
+
// API를 통해 템플릿 상세 정보 조회 [SPEC-MCP-007:E-002]
|
|
203
|
+
const templateData = await fetchTemplate(match.templateId);
|
|
215
204
|
bestMatch = {
|
|
216
205
|
templateId: match.templateId,
|
|
217
206
|
templateName: match.templateName,
|
|
@@ -232,18 +221,40 @@ export async function getScreenGenerationContextTool(input) {
|
|
|
232
221
|
if (componentTypes.length === 0) {
|
|
233
222
|
componentTypes = ['card', 'heading', 'text', 'button'];
|
|
234
223
|
}
|
|
235
|
-
const components = getComponentInfo(componentTypes);
|
|
224
|
+
const components = await getComponentInfo(componentTypes);
|
|
236
225
|
// 3. Get examples if requested
|
|
237
226
|
let examples;
|
|
238
227
|
if (input.includeExamples !== false) {
|
|
239
|
-
|
|
228
|
+
// API를 통해 스크린 예제 조회 [SPEC-MCP-007:E-007]
|
|
229
|
+
const allExamples = await fetchScreenExamples();
|
|
230
|
+
// 설명과 관련된 예제 필터링 (간단한 키워드 매칭)
|
|
231
|
+
const lowerDesc = input.description.toLowerCase();
|
|
232
|
+
const scored = allExamples.map((ex) => {
|
|
233
|
+
let score = 0;
|
|
234
|
+
const exWords = [
|
|
235
|
+
...ex.name.toLowerCase().split(' '),
|
|
236
|
+
...ex.description.toLowerCase().split(' '),
|
|
237
|
+
];
|
|
238
|
+
for (const word of exWords) {
|
|
239
|
+
if (word.length > 3 && lowerDesc.includes(word)) {
|
|
240
|
+
score++;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return { ex, score };
|
|
244
|
+
});
|
|
245
|
+
const filtered = scored
|
|
246
|
+
.filter((s) => s.score > 0)
|
|
247
|
+
.sort((a, b) => b.score - a.score)
|
|
248
|
+
.slice(0, 2)
|
|
249
|
+
.map((s) => s.ex);
|
|
250
|
+
examples = filtered.length > 0 ? filtered : undefined;
|
|
240
251
|
}
|
|
241
252
|
// 4. Get theme recipes if theme specified
|
|
242
253
|
let themeRecipes;
|
|
243
254
|
if (input.themeId) {
|
|
244
|
-
const theme =
|
|
255
|
+
const theme = await fetchTheme(input.themeId);
|
|
245
256
|
if (theme) {
|
|
246
|
-
themeRecipes = getThemeRecipeInfo(input.themeId);
|
|
257
|
+
themeRecipes = await getThemeRecipeInfo(input.themeId);
|
|
247
258
|
}
|
|
248
259
|
}
|
|
249
260
|
// 5. Generate contextual hints
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-screen-generation-context.js","sourceRoot":"","sources":["../../src/tools/get-screen-generation-context.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"get-screen-generation-context.js","sourceRoot":"","sources":["../../src/tools/get-screen-generation-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* List Components MCP Tool (SPEC-MCP-003)
|
|
3
3
|
* [TAG-MCP003-006] List all available UI components
|
|
4
|
+
* [SPEC-MCP-007:E-003] API 기반 데이터 소스로 마이그레이션
|
|
4
5
|
*
|
|
5
|
-
* Lists all UI components from
|
|
6
|
+
* Lists all UI components from framingui.com API with metadata
|
|
6
7
|
* including category, tier, and variant information
|
|
7
8
|
*/
|
|
8
9
|
import type { ListComponentsInput, ListComponentsOutput } from '../schemas/mcp-schemas.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-components.d.ts","sourceRoot":"","sources":["../../src/tools/list-components.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"list-components.d.ts","sourceRoot":"","sources":["../../src/tools/list-components.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAG3F;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAyC/B"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* List Components MCP Tool (SPEC-MCP-003)
|
|
3
3
|
* [TAG-MCP003-006] List all available UI components
|
|
4
|
+
* [SPEC-MCP-007:E-003] API 기반 데이터 소스로 마이그레이션
|
|
4
5
|
*
|
|
5
|
-
* Lists all UI components from
|
|
6
|
+
* Lists all UI components from framingui.com API with metadata
|
|
6
7
|
* including category, tier, and variant information
|
|
7
8
|
*/
|
|
8
|
-
import {
|
|
9
|
+
import { fetchComponentList } from '../api/data-client.js';
|
|
9
10
|
import { extractErrorMessage } from '../utils/error-handler.js';
|
|
10
11
|
/**
|
|
11
12
|
* List all available UI components
|
|
@@ -14,24 +15,29 @@ import { extractErrorMessage } from '../utils/error-handler.js';
|
|
|
14
15
|
*/
|
|
15
16
|
export async function listComponentsTool(input) {
|
|
16
17
|
try {
|
|
17
|
-
//
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
// API에서 전체 컴포넌트 목록 조회
|
|
19
|
+
const allComponents = await fetchComponentList();
|
|
20
|
+
// 카테고리 필터 적용
|
|
21
|
+
let components = allComponents;
|
|
22
|
+
if (input.category && input.category !== 'all') {
|
|
23
|
+
components = allComponents.filter((c) => c.category === input.category);
|
|
24
|
+
}
|
|
25
|
+
// 검색 필터 적용
|
|
22
26
|
if (input.search) {
|
|
23
|
-
|
|
27
|
+
const lowerSearch = input.search.toLowerCase();
|
|
28
|
+
components = components.filter((c) => c.id.includes(lowerSearch) ||
|
|
29
|
+
c.name.toLowerCase().includes(lowerSearch) ||
|
|
30
|
+
c.description.toLowerCase().includes(lowerSearch));
|
|
24
31
|
}
|
|
25
|
-
//
|
|
26
|
-
const allComponents = getAllComponents();
|
|
32
|
+
// 카테고리 카운트 계산
|
|
27
33
|
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,
|
|
34
|
+
core: allComponents.filter((c) => c.category === 'core').length,
|
|
35
|
+
complex: allComponents.filter((c) => c.category === 'complex').length,
|
|
36
|
+
advanced: allComponents.filter((c) => c.category === 'advanced').length,
|
|
31
37
|
};
|
|
32
38
|
return {
|
|
33
39
|
success: true,
|
|
34
|
-
components,
|
|
40
|
+
components: components,
|
|
35
41
|
count: components.length,
|
|
36
42
|
categories,
|
|
37
43
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-components.js","sourceRoot":"","sources":["../../src/tools/list-components.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"list-components.js","sourceRoot":"","sources":["../../src/tools/list-components.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAA0B;IAE1B,IAAI,CAAC;QACH,sBAAsB;QACtB,MAAM,aAAa,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAEjD,aAAa;QACb,IAAI,UAAU,GAAG,aAAa,CAAC;QAC/B,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC/C,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/E,CAAC;QAED,WAAW;QACX,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAC/C,UAAU,GAAG,UAAU,CAAC,MAAM,CAC5B,CAAC,CAAM,EAAE,EAAE,CACT,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAC1B,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAC1C,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CACpD,CAAC;QACJ,CAAC;QAED,cAAc;QACd,MAAM,UAAU,GAAG;YACjB,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;YACpE,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM;YAC1E,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM;SAC7E,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,UAAiB;YAC7B,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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP Tool: list-icon-libraries
|
|
3
|
-
*
|
|
3
|
+
* API 기반으로 아이콘 라이브러리 목록 반환
|
|
4
|
+
* (로컬 .moai/icon-libraries/generated/ 읽기 → framingui.com API fetch)
|
|
4
5
|
* [SPEC-ICON-001]
|
|
5
6
|
*/
|
|
6
7
|
import type { ListIconLibrariesOutput } from '../schemas/mcp-schemas.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-icon-libraries.d.ts","sourceRoot":"","sources":["../../src/tools/list-icon-libraries.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"list-icon-libraries.d.ts","sourceRoot":"","sources":["../../src/tools/list-icon-libraries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGzE;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAsC9E"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP Tool: list-icon-libraries
|
|
3
|
-
*
|
|
3
|
+
* API 기반으로 아이콘 라이브러리 목록 반환
|
|
4
|
+
* (로컬 .moai/icon-libraries/generated/ 읽기 → framingui.com API fetch)
|
|
4
5
|
* [SPEC-ICON-001]
|
|
5
6
|
*/
|
|
6
|
-
import {
|
|
7
|
+
import { fetchIconLibraryList } from '../api/data-client.js';
|
|
7
8
|
import { info, error as logError } from '../utils/logger.js';
|
|
8
9
|
/**
|
|
9
10
|
* List all available icon libraries
|
|
@@ -12,7 +13,7 @@ import { info, error as logError } from '../utils/logger.js';
|
|
|
12
13
|
export async function listIconLibrariesTool() {
|
|
13
14
|
info('list-icon-libraries: Fetching available icon libraries');
|
|
14
15
|
try {
|
|
15
|
-
const libraries =
|
|
16
|
+
const libraries = await fetchIconLibraryList();
|
|
16
17
|
if (libraries.length === 0) {
|
|
17
18
|
info('list-icon-libraries: No icon libraries found');
|
|
18
19
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-icon-libraries.js","sourceRoot":"","sources":["../../src/tools/list-icon-libraries.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"list-icon-libraries.js","sourceRoot":"","sources":["../../src/tools/list-icon-libraries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,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,MAAM,oBAAoB,EAAE,CAAC;QAE/C,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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* List Screen Templates MCP Tool (SPEC-MCP-003)
|
|
3
3
|
* [TAG-MCP003-008] List all available screen templates
|
|
4
|
+
* [SPEC-MCP-007:E-001] API 기반 데이터 소스로 마이그레이션
|
|
4
5
|
*
|
|
5
|
-
* Lists all screen templates from
|
|
6
|
+
* Lists all screen templates from framingui.com API
|
|
6
7
|
* with category filtering and search capabilities
|
|
7
8
|
*/
|
|
8
9
|
import type { ListScreenTemplatesInput, ListScreenTemplatesOutput } from '../schemas/mcp-schemas.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-screen-templates.d.ts","sourceRoot":"","sources":["../../src/tools/list-screen-templates.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"list-screen-templates.d.ts","sourceRoot":"","sources":["../../src/tools/list-screen-templates.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;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,CA4CpC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* List Screen Templates MCP Tool (SPEC-MCP-003)
|
|
3
3
|
* [TAG-MCP003-008] List all available screen templates
|
|
4
|
+
* [SPEC-MCP-007:E-001] API 기반 데이터 소스로 마이그레이션
|
|
4
5
|
*
|
|
5
|
-
* Lists all screen templates from
|
|
6
|
+
* Lists all screen templates from framingui.com API
|
|
6
7
|
* with category filtering and search capabilities
|
|
7
8
|
*/
|
|
8
|
-
import {
|
|
9
|
+
import { fetchTemplateList } from '../api/data-client.js';
|
|
9
10
|
import { extractErrorMessage } from '../utils/error-handler.js';
|
|
10
11
|
/**
|
|
11
12
|
* List all available screen templates
|
|
@@ -14,18 +15,17 @@ import { extractErrorMessage } from '../utils/error-handler.js';
|
|
|
14
15
|
*/
|
|
15
16
|
export async function listScreenTemplatesTool(input) {
|
|
16
17
|
try {
|
|
17
|
-
//
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
// API에서 템플릿 목록 조회
|
|
19
|
+
const params = {};
|
|
20
|
+
if (input.category && input.category !== 'all') {
|
|
21
|
+
params.category = input.category;
|
|
22
|
+
}
|
|
22
23
|
if (input.search) {
|
|
23
|
-
|
|
24
|
-
.search(input.search)
|
|
25
|
-
.filter((t) => input.category === 'all' || !input.category ? true : t.category === input.category);
|
|
24
|
+
params.search = input.search;
|
|
26
25
|
}
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
const templates = await fetchTemplateList(params);
|
|
27
|
+
// 전체 템플릿에서 카테고리 카운트 계산 (category 필터 없이 조회)
|
|
28
|
+
const allTemplates = await fetchTemplateList();
|
|
29
29
|
const categories = {
|
|
30
30
|
auth: allTemplates.filter((t) => t.category === 'auth').length,
|
|
31
31
|
dashboard: allTemplates.filter((t) => t.category === 'dashboard').length,
|
|
@@ -33,21 +33,19 @@ export async function listScreenTemplatesTool(input) {
|
|
|
33
33
|
marketing: allTemplates.filter((t) => t.category === 'marketing').length,
|
|
34
34
|
feedback: allTemplates.filter((t) => t.category === 'feedback').length,
|
|
35
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
36
|
return {
|
|
48
37
|
success: true,
|
|
49
|
-
templates:
|
|
50
|
-
|
|
38
|
+
templates: templates.map((t) => ({
|
|
39
|
+
id: t.id,
|
|
40
|
+
name: t.name,
|
|
41
|
+
category: t.category,
|
|
42
|
+
description: t.description,
|
|
43
|
+
requiredComponentsCount: t.requiredComponentsCount,
|
|
44
|
+
layoutType: t.layoutType,
|
|
45
|
+
version: t.version,
|
|
46
|
+
tags: t.tags,
|
|
47
|
+
})),
|
|
48
|
+
count: templates.length,
|
|
51
49
|
categories,
|
|
52
50
|
};
|
|
53
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-screen-templates.js","sourceRoot":"","sources":["../../src/tools/list-screen-templates.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"list-screen-templates.js","sourceRoot":"","sources":["../../src/tools/list-screen-templates.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAM1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,KAA+B;IAE/B,IAAI,CAAC;QACH,kBAAkB;QAClB,MAAM,MAAM,GAA2C,EAAE,CAAC;QAC1D,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC/C,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QACnC,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC/B,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAElD,2CAA2C;QAC3C,MAAM,YAAY,GAAG,MAAM,iBAAiB,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,OAAO;YACL,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;gBACpC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,QAAQ,EAAE,CAAC,CAAC,QAA4B;gBACxC,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,uBAAuB,EAAE,CAAC,CAAC,uBAAuB;gBAClD,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,IAAI,EAAE,CAAC,CAAC,IAAI;aACb,CAAC,CAAC;YACH,KAAK,EAAE,SAAS,CAAC,MAAM;YACvB,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"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* List Themes MCP Tool (v2.1)
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* API 기반으로 라이선스 보유 테마 목록 반환
|
|
4
|
+
* (로컬 .moai/themes/generated/ 읽기 → framingui.com API fetch)
|
|
5
5
|
*/
|
|
6
6
|
import type { ListThemesOutput } from '../schemas/mcp-schemas.js';
|
|
7
7
|
/**
|
|
8
8
|
* List available themes based on authentication status
|
|
9
|
-
*
|
|
10
|
-
* @returns Array of accessible theme metadata from .moai/themes/generated/
|
|
9
|
+
* API가 이미 라이선스 필터링을 수행하므로 추가 필터링 불필요
|
|
11
10
|
*/
|
|
12
11
|
export declare function listThemesTool(): Promise<ListThemesOutput>;
|
|
13
12
|
//# sourceMappingURL=list-themes.d.ts.map
|
|
@@ -1 +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;
|
|
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;AAGlE;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAqBhE"}
|
|
@@ -1,35 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* List Themes MCP Tool (v2.1)
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* API 기반으로 라이선스 보유 테마 목록 반환
|
|
4
|
+
* (로컬 .moai/themes/generated/ 읽기 → framingui.com API fetch)
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
6
|
+
import { fetchThemeList } from '../api/data-client.js';
|
|
7
7
|
import { extractErrorMessage } from '../utils/error-handler.js';
|
|
8
|
-
import { getAccessibleThemes } from '../auth/state.js';
|
|
9
8
|
/**
|
|
10
9
|
* List available themes based on authentication status
|
|
11
|
-
*
|
|
12
|
-
* @returns Array of accessible theme metadata from .moai/themes/generated/
|
|
10
|
+
* API가 이미 라이선스 필터링을 수행하므로 추가 필터링 불필요
|
|
13
11
|
*/
|
|
14
12
|
export async function listThemesTool() {
|
|
15
13
|
try {
|
|
16
|
-
|
|
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));
|
|
14
|
+
const themes = await fetchThemeList();
|
|
23
15
|
return {
|
|
24
16
|
success: true,
|
|
25
|
-
themes:
|
|
17
|
+
themes: themes.map(theme => ({
|
|
26
18
|
id: theme.id,
|
|
27
19
|
name: theme.name,
|
|
28
20
|
description: theme.description,
|
|
29
21
|
brandTone: theme.brandTone,
|
|
30
22
|
schemaVersion: theme.schemaVersion,
|
|
31
23
|
})),
|
|
32
|
-
count:
|
|
24
|
+
count: themes.length,
|
|
33
25
|
};
|
|
34
26
|
}
|
|
35
27
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-themes.js","sourceRoot":"","sources":["../../src/tools/list-themes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"list-themes.js","sourceRoot":"","sources":["../../src/tools/list-themes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;QAEtC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC3B,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,MAAM,CAAC,MAAM;SACrB,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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* List Tokens MCP Tool
|
|
3
3
|
* SPEC-LAYOUT-002 Phase 4: List available layout tokens from SPEC-LAYOUT-001
|
|
4
|
+
* [SPEC-MCP-007:E-005] API 기반 데이터 소스로 마이그레이션
|
|
4
5
|
*/
|
|
5
6
|
import type { ListTokensInput, ListTokensOutput } from '../schemas/mcp-schemas.js';
|
|
6
7
|
/**
|
|
7
|
-
* List available layout tokens from
|
|
8
|
+
* List available layout tokens from framingui.com API
|
|
8
9
|
*
|
|
9
10
|
* @param input - Token type filter and optional pattern filter
|
|
10
11
|
* @returns Categorized list of available tokens
|