@framingui/mcp-server 0.6.0 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +24 -40
- package/dist/__tests__/data-client.test.d.ts +4 -4
- package/dist/__tests__/data-client.test.js +158 -66
- package/dist/__tests__/data-client.test.js.map +1 -1
- package/dist/api/api-result.d.ts +30 -0
- package/dist/api/api-result.d.ts.map +1 -0
- package/dist/api/api-result.js +50 -0
- package/dist/api/api-result.js.map +1 -0
- package/dist/api/data-client.d.ts +24 -26
- package/dist/api/data-client.d.ts.map +1 -1
- package/dist/api/data-client.js +209 -220
- package/dist/api/data-client.js.map +1 -1
- package/dist/data/recipe-resolver.d.ts.map +1 -1
- package/dist/data/recipe-resolver.js +6 -4
- package/dist/data/recipe-resolver.js.map +1 -1
- package/dist/data/template-matcher.d.ts.map +1 -1
- package/dist/data/template-matcher.js +2 -1
- package/dist/data/template-matcher.js.map +1 -1
- package/dist/generators/css-generator.js +4 -4
- package/dist/generators/css-generator.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/tools/get-screen-generation-context.d.ts.map +1 -1
- package/dist/tools/get-screen-generation-context.js +9 -6
- package/dist/tools/get-screen-generation-context.js.map +1 -1
- package/dist/tools/list-components.d.ts.map +1 -1
- package/dist/tools/list-components.js +6 -1
- package/dist/tools/list-components.js.map +1 -1
- package/dist/tools/list-icon-libraries.d.ts.map +1 -1
- package/dist/tools/list-icon-libraries.js +5 -8
- package/dist/tools/list-icon-libraries.js.map +1 -1
- package/dist/tools/list-screen-templates.d.ts.map +1 -1
- package/dist/tools/list-screen-templates.js +8 -2
- package/dist/tools/list-screen-templates.js.map +1 -1
- package/dist/tools/list-themes.d.ts.map +1 -1
- package/dist/tools/list-themes.js +6 -1
- package/dist/tools/list-themes.js.map +1 -1
- package/dist/tools/list-tokens.d.ts.map +1 -1
- package/dist/tools/list-tokens.js +6 -1
- package/dist/tools/list-tokens.js.map +1 -1
- package/dist/tools/preview-component.d.ts.map +1 -1
- package/dist/tools/preview-component.js +16 -9
- package/dist/tools/preview-component.js.map +1 -1
- package/dist/tools/preview-icon-library.d.ts.map +1 -1
- package/dist/tools/preview-icon-library.js +5 -7
- package/dist/tools/preview-icon-library.js.map +1 -1
- package/dist/tools/preview-screen-template.d.ts.map +1 -1
- package/dist/tools/preview-screen-template.js +17 -10
- package/dist/tools/preview-screen-template.js.map +1 -1
- package/dist/tools/preview-theme.d.ts.map +1 -1
- package/dist/tools/preview-theme.js +6 -15
- 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 +8 -4
- package/dist/tools/validate-screen-definition.js.map +1 -1
- package/package.json +17 -16
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-result.d.ts","sourceRoot":"","sources":["../../src/api/api-result.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,MAAM,MAAM,YAAY,GACpB,aAAa,GACb,WAAW,GACX,WAAW,GACX,cAAc,GACd,cAAc,GACd,eAAe,GACf,mBAAmB,CAAC;AAExB,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAA;CAAE,CAAC;AAElF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAcjE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAoBzE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Result 타입 시스템
|
|
3
|
+
* 에러 유형을 명확히 구분하여 tool 핸들러가 적절한 메시지를 반환할 수 있게 함
|
|
4
|
+
*
|
|
5
|
+
* 기존 문제: apiFetch가 모든 실패를 null로 반환 → "라이선스 없음"으로 오해
|
|
6
|
+
* 해결: 에러 코드 기반 분류로 auth/forbidden/not_found/server/network 구분
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* HTTP 상태 코드 → ApiErrorCode 매핑
|
|
10
|
+
*/
|
|
11
|
+
export function mapStatusToErrorCode(status) {
|
|
12
|
+
if (status === 401) {
|
|
13
|
+
return 'AUTH_FAILED';
|
|
14
|
+
}
|
|
15
|
+
if (status === 403) {
|
|
16
|
+
return 'FORBIDDEN';
|
|
17
|
+
}
|
|
18
|
+
if (status === 404) {
|
|
19
|
+
return 'NOT_FOUND';
|
|
20
|
+
}
|
|
21
|
+
if (status === 429) {
|
|
22
|
+
return 'RATE_LIMITED';
|
|
23
|
+
}
|
|
24
|
+
return 'SERVER_ERROR';
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Tool 핸들러용 에러 메시지 포맷터
|
|
28
|
+
* ApiError → 사용자 친화적 메시지 변환
|
|
29
|
+
*/
|
|
30
|
+
export function formatToolError(error, context) {
|
|
31
|
+
const prefix = context ? `[${context}] ` : '';
|
|
32
|
+
switch (error.code) {
|
|
33
|
+
case 'AUTH_FAILED':
|
|
34
|
+
case 'NOT_AUTHENTICATED':
|
|
35
|
+
return `${prefix}Authentication failed. Please run \`whoami\` first or check your API key.`;
|
|
36
|
+
case 'FORBIDDEN':
|
|
37
|
+
return `${prefix}${error.message}`;
|
|
38
|
+
case 'NOT_FOUND':
|
|
39
|
+
return `${prefix}${error.message}`;
|
|
40
|
+
case 'RATE_LIMITED':
|
|
41
|
+
return `${prefix}Rate limit exceeded. Please wait a moment and try again.`;
|
|
42
|
+
case 'SERVER_ERROR':
|
|
43
|
+
return `${prefix}Server error (${error.status || 'unknown'}). Please try again later. Details: ${error.message}`;
|
|
44
|
+
case 'NETWORK_ERROR':
|
|
45
|
+
return `${prefix}Network error: ${error.message}. Check your internet connection.`;
|
|
46
|
+
default:
|
|
47
|
+
return `${prefix}Unexpected error: ${error.message}`;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=api-result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-result.js","sourceRoot":"","sources":["../../src/api/api-result.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAqBH;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,KAAe,EAAE,OAAgB;IAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,aAAa,CAAC;QACnB,KAAK,mBAAmB;YACtB,OAAO,GAAG,MAAM,2EAA2E,CAAC;QAC9F,KAAK,WAAW;YACd,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QACrC,KAAK,WAAW;YACd,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;QACrC,KAAK,cAAc;YACjB,OAAO,GAAG,MAAM,0DAA0D,CAAC;QAC7E,KAAK,cAAc;YACjB,OAAO,GAAG,MAAM,iBAAiB,KAAK,CAAC,MAAM,IAAI,SAAS,uCAAuC,KAAK,CAAC,OAAO,EAAE,CAAC;QACnH,KAAK,eAAe;YAClB,OAAO,GAAG,MAAM,kBAAkB,KAAK,CAAC,OAAO,mCAAmC,CAAC;QACrF;YACE,OAAO,GAAG,MAAM,qBAAqB,KAAK,CAAC,OAAO,EAAE,CAAC;IACzD,CAAC;AACH,CAAC"}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* MCP 서버 API 데이터 클라이언트
|
|
3
|
-
*
|
|
2
|
+
* MCP 서버 API 데이터 클라이언트 (v2 - ApiResult 기반)
|
|
3
|
+
*
|
|
4
|
+
* 변경 이력:
|
|
5
|
+
* - v1: T | null 반환 → 모든 실패가 null로 통일되어 에러 유형 구분 불가
|
|
6
|
+
* - v2: ApiResult<T> 반환 → 에러 코드 기반 분류로 tool이 적절한 메시지 제공
|
|
4
7
|
*
|
|
5
8
|
* 기존 인프라 재사용:
|
|
6
9
|
* - resolveFraminguiApiUrl(): base URL 결정
|
|
7
|
-
* - getAuthData():
|
|
8
|
-
* -
|
|
10
|
+
* - getAuthData(): 인증 상태 확인
|
|
11
|
+
* - getRawApiKey(): Bearer 토큰
|
|
12
|
+
* - MemoryCache: 인메모리 캐시 (TTL: 10분, stale fallback 지원)
|
|
9
13
|
*/
|
|
14
|
+
import type { ApiResult } from './api-result.js';
|
|
10
15
|
export interface ThemeMeta {
|
|
11
16
|
id: string;
|
|
12
17
|
name: string;
|
|
@@ -70,55 +75,48 @@ export interface ScreenExample {
|
|
|
70
75
|
/**
|
|
71
76
|
* 테마 목록 조회 (라이선스 보유 테마만)
|
|
72
77
|
*/
|
|
73
|
-
export declare function fetchThemeList(): Promise<ThemeMeta[]
|
|
78
|
+
export declare function fetchThemeList(): Promise<ApiResult<ThemeMeta[]>>;
|
|
74
79
|
/**
|
|
75
80
|
* 단일 테마 상세 조회 (전체 ThemeV2 JSON)
|
|
76
81
|
*/
|
|
77
|
-
export declare function fetchTheme(themeId: string): Promise<any
|
|
82
|
+
export declare function fetchTheme(themeId: string): Promise<ApiResult<any>>;
|
|
78
83
|
/**
|
|
79
84
|
* 아이콘 라이브러리 목록 조회
|
|
80
85
|
*/
|
|
81
|
-
export declare function fetchIconLibraryList(): Promise<IconLibMeta[]
|
|
86
|
+
export declare function fetchIconLibraryList(): Promise<ApiResult<IconLibMeta[]>>;
|
|
82
87
|
/**
|
|
83
|
-
* 단일 아이콘 라이브러리 상세 조회
|
|
88
|
+
* 단일 아이콘 라이브러리 상세 조회
|
|
84
89
|
*/
|
|
85
|
-
export declare function fetchIconLibrary(libraryId: string): Promise<any
|
|
90
|
+
export declare function fetchIconLibrary(libraryId: string): Promise<ApiResult<any>>;
|
|
86
91
|
/**
|
|
87
92
|
* 스크린 템플릿 목록 조회
|
|
88
|
-
* [SPEC-MCP-007:E-001]
|
|
89
93
|
*/
|
|
90
94
|
export declare function fetchTemplateList(params?: {
|
|
91
95
|
category?: string;
|
|
92
96
|
search?: string;
|
|
93
|
-
}): Promise<TemplateMeta[]
|
|
97
|
+
}): Promise<ApiResult<TemplateMeta[]>>;
|
|
94
98
|
/**
|
|
95
99
|
* 단일 스크린 템플릿 상세 조회
|
|
96
|
-
* [SPEC-MCP-007:E-002]
|
|
97
100
|
*/
|
|
98
|
-
export declare function fetchTemplate(templateId: string): Promise<any
|
|
101
|
+
export declare function fetchTemplate(templateId: string): Promise<ApiResult<any>>;
|
|
99
102
|
/**
|
|
100
|
-
* UI 컴포넌트 목록 조회
|
|
101
|
-
* [SPEC-MCP-007:E-003]
|
|
103
|
+
* UI 컴포넌트 목록 조회
|
|
102
104
|
*/
|
|
103
|
-
export declare function fetchComponentList(): Promise<ComponentMeta[]
|
|
105
|
+
export declare function fetchComponentList(): Promise<ApiResult<ComponentMeta[]>>;
|
|
104
106
|
/**
|
|
105
|
-
* 단일 컴포넌트 상세
|
|
106
|
-
* [SPEC-MCP-007:E-004]
|
|
107
|
+
* 단일 컴포넌트 상세 조회
|
|
107
108
|
*/
|
|
108
|
-
export declare function fetchComponent(componentId: string): Promise<ComponentDetail
|
|
109
|
+
export declare function fetchComponent(componentId: string): Promise<ApiResult<ComponentDetail>>;
|
|
109
110
|
/**
|
|
110
|
-
* 레이아웃 토큰 목록 조회
|
|
111
|
-
* [SPEC-MCP-007:E-005]
|
|
111
|
+
* 레이아웃 토큰 목록 조회
|
|
112
112
|
*/
|
|
113
|
-
export declare function fetchTokenList(tokenType?: 'shell' | 'page' | 'section' | 'all'): Promise<TokenListResponse
|
|
113
|
+
export declare function fetchTokenList(tokenType?: 'shell' | 'page' | 'section' | 'all'): Promise<ApiResult<TokenListResponse>>;
|
|
114
114
|
/**
|
|
115
115
|
* 테마 CSS 변수 문자열 조회
|
|
116
|
-
* [SPEC-MCP-007:E-006]
|
|
117
116
|
*/
|
|
118
|
-
export declare function fetchCSSVariables(themeId: string): Promise<string
|
|
117
|
+
export declare function fetchCSSVariables(themeId: string): Promise<ApiResult<string>>;
|
|
119
118
|
/**
|
|
120
119
|
* 스크린 예제 정의 목록 조회
|
|
121
|
-
* [SPEC-MCP-007:E-007]
|
|
122
120
|
*/
|
|
123
|
-
export declare function fetchScreenExamples(): Promise<ScreenExample[]
|
|
121
|
+
export declare function fetchScreenExamples(): Promise<ApiResult<ScreenExample[]>>;
|
|
124
122
|
//# sourceMappingURL=data-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-client.d.ts","sourceRoot":"","sources":["../../src/api/data-client.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"data-client.d.ts","sourceRoot":"","sources":["../../src/api/data-client.ts"],"names":[],"mappings":"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"}
|