@framingui/mcp-server 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/README.md +1027 -0
  2. package/dist/auth/cache.d.ts +28 -0
  3. package/dist/auth/cache.d.ts.map +1 -0
  4. package/dist/auth/cache.js +48 -0
  5. package/dist/auth/cache.js.map +1 -0
  6. package/dist/auth/guard.d.ts +22 -0
  7. package/dist/auth/guard.d.ts.map +1 -0
  8. package/dist/auth/guard.js +37 -0
  9. package/dist/auth/guard.js.map +1 -0
  10. package/dist/auth/state.d.ts +42 -0
  11. package/dist/auth/state.d.ts.map +1 -0
  12. package/dist/auth/state.js +96 -0
  13. package/dist/auth/state.js.map +1 -0
  14. package/dist/auth/theme-access.d.ts +21 -0
  15. package/dist/auth/theme-access.d.ts.map +1 -0
  16. package/dist/auth/theme-access.js +30 -0
  17. package/dist/auth/theme-access.js.map +1 -0
  18. package/dist/auth/verify.d.ts +44 -0
  19. package/dist/auth/verify.d.ts.map +1 -0
  20. package/dist/auth/verify.js +77 -0
  21. package/dist/auth/verify.js.map +1 -0
  22. package/dist/cli/agent-md-templates.d.ts +16 -0
  23. package/dist/cli/agent-md-templates.d.ts.map +1 -0
  24. package/dist/cli/agent-md-templates.js +311 -0
  25. package/dist/cli/agent-md-templates.js.map +1 -0
  26. package/dist/cli/credentials.d.ts +29 -0
  27. package/dist/cli/credentials.d.ts.map +1 -0
  28. package/dist/cli/credentials.js +66 -0
  29. package/dist/cli/credentials.js.map +1 -0
  30. package/dist/cli/guide-template.d.ts +10 -0
  31. package/dist/cli/guide-template.d.ts.map +1 -0
  32. package/dist/cli/guide-template.js +195 -0
  33. package/dist/cli/guide-template.js.map +1 -0
  34. package/dist/cli/index.d.ts +7 -0
  35. package/dist/cli/index.d.ts.map +1 -0
  36. package/dist/cli/index.js +41 -0
  37. package/dist/cli/index.js.map +1 -0
  38. package/dist/cli/init.d.ts +6 -0
  39. package/dist/cli/init.d.ts.map +1 -0
  40. package/dist/cli/init.js +319 -0
  41. package/dist/cli/init.js.map +1 -0
  42. package/dist/cli/login.d.ts +9 -0
  43. package/dist/cli/login.d.ts.map +1 -0
  44. package/dist/cli/login.js +121 -0
  45. package/dist/cli/login.js.map +1 -0
  46. package/dist/cli/logout.d.ts +9 -0
  47. package/dist/cli/logout.d.ts.map +1 -0
  48. package/dist/cli/logout.js +18 -0
  49. package/dist/cli/logout.js.map +1 -0
  50. package/dist/cli/status.d.ts +9 -0
  51. package/dist/cli/status.d.ts.map +1 -0
  52. package/dist/cli/status.js +31 -0
  53. package/dist/cli/status.js.map +1 -0
  54. package/dist/data/component-props.d.ts +30 -0
  55. package/dist/data/component-props.d.ts.map +1 -0
  56. package/dist/data/component-props.js +537 -0
  57. package/dist/data/component-props.js.map +1 -0
  58. package/dist/data/component-registry.d.ts +30 -0
  59. package/dist/data/component-registry.d.ts.map +1 -0
  60. package/dist/data/component-registry.js +320 -0
  61. package/dist/data/component-registry.js.map +1 -0
  62. package/dist/data/examples/screen-examples.d.ts +38 -0
  63. package/dist/data/examples/screen-examples.d.ts.map +1 -0
  64. package/dist/data/examples/screen-examples.js +500 -0
  65. package/dist/data/examples/screen-examples.js.map +1 -0
  66. package/dist/data/hint-generator.d.ts +16 -0
  67. package/dist/data/hint-generator.d.ts.map +1 -0
  68. package/dist/data/hint-generator.js +298 -0
  69. package/dist/data/hint-generator.js.map +1 -0
  70. package/dist/data/recipe-resolver.d.ts +48 -0
  71. package/dist/data/recipe-resolver.d.ts.map +1 -0
  72. package/dist/data/recipe-resolver.js +226 -0
  73. package/dist/data/recipe-resolver.js.map +1 -0
  74. package/dist/data/template-matcher.d.ts +50 -0
  75. package/dist/data/template-matcher.d.ts.map +1 -0
  76. package/dist/data/template-matcher.js +240 -0
  77. package/dist/data/template-matcher.js.map +1 -0
  78. package/dist/generators/core-resolver.d.ts +56 -0
  79. package/dist/generators/core-resolver.d.ts.map +1 -0
  80. package/dist/generators/core-resolver.js +490 -0
  81. package/dist/generators/core-resolver.js.map +1 -0
  82. package/dist/generators/css-generator.d.ts +49 -0
  83. package/dist/generators/css-generator.d.ts.map +1 -0
  84. package/dist/generators/css-generator.js +294 -0
  85. package/dist/generators/css-generator.js.map +1 -0
  86. package/dist/generators/index.d.ts +13 -0
  87. package/dist/generators/index.d.ts.map +1 -0
  88. package/dist/generators/index.js +16 -0
  89. package/dist/generators/index.js.map +1 -0
  90. package/dist/generators/llm-generator.d.ts +96 -0
  91. package/dist/generators/llm-generator.d.ts.map +1 -0
  92. package/dist/generators/llm-generator.js +296 -0
  93. package/dist/generators/llm-generator.js.map +1 -0
  94. package/dist/index.d.ts +3 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +965 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/prompts/getting-started.d.ts +18 -0
  99. package/dist/prompts/getting-started.d.ts.map +1 -0
  100. package/dist/prompts/getting-started.js +112 -0
  101. package/dist/prompts/getting-started.js.map +1 -0
  102. package/dist/prompts/screen-workflow.d.ts +17 -0
  103. package/dist/prompts/screen-workflow.d.ts.map +1 -0
  104. package/dist/prompts/screen-workflow.js +246 -0
  105. package/dist/prompts/screen-workflow.js.map +1 -0
  106. package/dist/schemas/mcp-schemas.d.ts +4342 -0
  107. package/dist/schemas/mcp-schemas.d.ts.map +1 -0
  108. package/dist/schemas/mcp-schemas.js +989 -0
  109. package/dist/schemas/mcp-schemas.js.map +1 -0
  110. package/dist/storage/blueprint-storage.d.ts +68 -0
  111. package/dist/storage/blueprint-storage.d.ts.map +1 -0
  112. package/dist/storage/blueprint-storage.js +135 -0
  113. package/dist/storage/blueprint-storage.js.map +1 -0
  114. package/dist/storage/timestamp-manager.d.ts +32 -0
  115. package/dist/storage/timestamp-manager.d.ts.map +1 -0
  116. package/dist/storage/timestamp-manager.js +59 -0
  117. package/dist/storage/timestamp-manager.js.map +1 -0
  118. package/dist/tools/export-screen.d.ts +34 -0
  119. package/dist/tools/export-screen.d.ts.map +1 -0
  120. package/dist/tools/export-screen.js +344 -0
  121. package/dist/tools/export-screen.js.map +1 -0
  122. package/dist/tools/generate-blueprint.d.ts +15 -0
  123. package/dist/tools/generate-blueprint.d.ts.map +1 -0
  124. package/dist/tools/generate-blueprint.js +165 -0
  125. package/dist/tools/generate-blueprint.js.map +1 -0
  126. package/dist/tools/generate-screen.d.ts +13 -0
  127. package/dist/tools/generate-screen.d.ts.map +1 -0
  128. package/dist/tools/generate-screen.js +82 -0
  129. package/dist/tools/generate-screen.js.map +1 -0
  130. package/dist/tools/get-screen-generation-context.d.ts +11 -0
  131. package/dist/tools/get-screen-generation-context.d.ts.map +1 -0
  132. package/dist/tools/get-screen-generation-context.js +325 -0
  133. package/dist/tools/get-screen-generation-context.js.map +1 -0
  134. package/dist/tools/list-components.d.ts +15 -0
  135. package/dist/tools/list-components.d.ts.map +1 -0
  136. package/dist/tools/list-components.js +46 -0
  137. package/dist/tools/list-components.js.map +1 -0
  138. package/dist/tools/list-icon-libraries.d.ts +12 -0
  139. package/dist/tools/list-icon-libraries.d.ts.map +1 -0
  140. package/dist/tools/list-icon-libraries.js +48 -0
  141. package/dist/tools/list-icon-libraries.js.map +1 -0
  142. package/dist/tools/list-screen-templates.d.ts +15 -0
  143. package/dist/tools/list-screen-templates.d.ts.map +1 -0
  144. package/dist/tools/list-screen-templates.js +61 -0
  145. package/dist/tools/list-screen-templates.js.map +1 -0
  146. package/dist/tools/list-themes.d.ts +13 -0
  147. package/dist/tools/list-themes.d.ts.map +1 -0
  148. package/dist/tools/list-themes.js +42 -0
  149. package/dist/tools/list-themes.js.map +1 -0
  150. package/dist/tools/list-tokens.d.ts +13 -0
  151. package/dist/tools/list-tokens.d.ts.map +1 -0
  152. package/dist/tools/list-tokens.js +92 -0
  153. package/dist/tools/list-tokens.js.map +1 -0
  154. package/dist/tools/preview-component.d.ts +18 -0
  155. package/dist/tools/preview-component.d.ts.map +1 -0
  156. package/dist/tools/preview-component.js +63 -0
  157. package/dist/tools/preview-component.js.map +1 -0
  158. package/dist/tools/preview-icon-library.d.ts +13 -0
  159. package/dist/tools/preview-icon-library.d.ts.map +1 -0
  160. package/dist/tools/preview-icon-library.js +63 -0
  161. package/dist/tools/preview-icon-library.js.map +1 -0
  162. package/dist/tools/preview-screen-template.d.ts +18 -0
  163. package/dist/tools/preview-screen-template.d.ts.map +1 -0
  164. package/dist/tools/preview-screen-template.js +99 -0
  165. package/dist/tools/preview-screen-template.js.map +1 -0
  166. package/dist/tools/preview-theme.d.ts +15 -0
  167. package/dist/tools/preview-theme.d.ts.map +1 -0
  168. package/dist/tools/preview-theme.js +172 -0
  169. package/dist/tools/preview-theme.js.map +1 -0
  170. package/dist/tools/validate-environment.d.ts +37 -0
  171. package/dist/tools/validate-environment.d.ts.map +1 -0
  172. package/dist/tools/validate-environment.js +153 -0
  173. package/dist/tools/validate-environment.js.map +1 -0
  174. package/dist/tools/validate-screen-definition.d.ts +10 -0
  175. package/dist/tools/validate-screen-definition.d.ts.map +1 -0
  176. package/dist/tools/validate-screen-definition.js +559 -0
  177. package/dist/tools/validate-screen-definition.js.map +1 -0
  178. package/dist/tools/validate-screen.d.ts +13 -0
  179. package/dist/tools/validate-screen.d.ts.map +1 -0
  180. package/dist/tools/validate-screen.js +106 -0
  181. package/dist/tools/validate-screen.js.map +1 -0
  182. package/dist/tools/whoami.d.ts +17 -0
  183. package/dist/tools/whoami.d.ts.map +1 -0
  184. package/dist/tools/whoami.js +65 -0
  185. package/dist/tools/whoami.js.map +1 -0
  186. package/dist/utils/dependency-extractor.d.ts +13 -0
  187. package/dist/utils/dependency-extractor.d.ts.map +1 -0
  188. package/dist/utils/dependency-extractor.js +232 -0
  189. package/dist/utils/dependency-extractor.js.map +1 -0
  190. package/dist/utils/error-handler.d.ts +29 -0
  191. package/dist/utils/error-handler.d.ts.map +1 -0
  192. package/dist/utils/error-handler.js +48 -0
  193. package/dist/utils/error-handler.js.map +1 -0
  194. package/dist/utils/logger.d.ts +8 -0
  195. package/dist/utils/logger.d.ts.map +1 -0
  196. package/dist/utils/logger.js +14 -0
  197. package/dist/utils/logger.js.map +1 -0
  198. package/dist/utils/package-json-reader.d.ts +37 -0
  199. package/dist/utils/package-json-reader.d.ts.map +1 -0
  200. package/dist/utils/package-json-reader.js +108 -0
  201. package/dist/utils/package-json-reader.js.map +1 -0
  202. package/dist/utils/tailwind-config-reader.d.ts +23 -0
  203. package/dist/utils/tailwind-config-reader.d.ts.map +1 -0
  204. package/dist/utils/tailwind-config-reader.js +81 -0
  205. package/dist/utils/tailwind-config-reader.js.map +1 -0
  206. package/package.json +103 -0
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Package.json Reader
3
+ * SPEC-MCP-005 Phase 2: Read and parse package.json files
4
+ */
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ /**
8
+ * Simple cache for repeated reads
9
+ */
10
+ const packageJsonCache = new Map();
11
+ const CACHE_TTL = 5000; // 5 seconds
12
+ /**
13
+ * Read and parse package.json file
14
+ *
15
+ * @param projectPath - Path to package.json or project root directory
16
+ * @returns PackageJsonReadResult with parsed data or error
17
+ */
18
+ export function readPackageJson(projectPath) {
19
+ try {
20
+ // Resolve to package.json path
21
+ let packageJsonPath;
22
+ if (projectPath.endsWith('package.json')) {
23
+ packageJsonPath = projectPath;
24
+ }
25
+ else {
26
+ packageJsonPath = path.join(projectPath, 'package.json');
27
+ }
28
+ // Normalize path
29
+ packageJsonPath = path.resolve(packageJsonPath);
30
+ // Check cache
31
+ const cached = packageJsonCache.get(packageJsonPath);
32
+ if (cached && Date.now() - cached.timestamp < CACHE_TTL) {
33
+ return {
34
+ success: true,
35
+ packageJson: cached.data,
36
+ installedPackages: extractInstalledPackages(cached.data),
37
+ };
38
+ }
39
+ // Check if file exists
40
+ if (!fs.existsSync(packageJsonPath)) {
41
+ return {
42
+ success: false,
43
+ error: `package.json not found at: ${packageJsonPath}`,
44
+ };
45
+ }
46
+ // Read and parse file
47
+ const content = fs.readFileSync(packageJsonPath, 'utf-8');
48
+ const packageJson = JSON.parse(content);
49
+ // Validate basic structure
50
+ if (typeof packageJson !== 'object' || packageJson === null || Array.isArray(packageJson)) {
51
+ return {
52
+ success: false,
53
+ error: 'Invalid package.json: expected an object',
54
+ };
55
+ }
56
+ // Cache the result
57
+ packageJsonCache.set(packageJsonPath, {
58
+ data: packageJson,
59
+ timestamp: Date.now(),
60
+ });
61
+ return {
62
+ success: true,
63
+ packageJson,
64
+ installedPackages: extractInstalledPackages(packageJson),
65
+ };
66
+ }
67
+ catch (error) {
68
+ if (error instanceof SyntaxError) {
69
+ return {
70
+ success: false,
71
+ error: `Invalid JSON in package.json: ${error.message}`,
72
+ };
73
+ }
74
+ return {
75
+ success: false,
76
+ error: error instanceof Error ? error.message : String(error),
77
+ };
78
+ }
79
+ }
80
+ /**
81
+ * Extract all installed packages (dependencies + devDependencies + peerDependencies + optionalDependencies)
82
+ *
83
+ * @param packageJson - Parsed package.json object
84
+ * @returns Record of package names to versions
85
+ */
86
+ function extractInstalledPackages(packageJson) {
87
+ const installed = {};
88
+ // Merge all dependency types
89
+ const depTypes = [
90
+ packageJson.dependencies,
91
+ packageJson.devDependencies,
92
+ packageJson.peerDependencies,
93
+ packageJson.optionalDependencies,
94
+ ];
95
+ for (const deps of depTypes) {
96
+ if (deps && typeof deps === 'object') {
97
+ Object.assign(installed, deps);
98
+ }
99
+ }
100
+ return installed;
101
+ }
102
+ /**
103
+ * Clear package.json cache (useful for testing)
104
+ */
105
+ export function clearPackageJsonCache() {
106
+ packageJsonCache.clear();
107
+ }
108
+ //# sourceMappingURL=package-json-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-json-reader.js","sourceRoot":"","sources":["../../src/utils/package-json-reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Tailwind Config Reader
3
+ * SPEC-MCP-005: Tailwind CSS 설정 파일을 읽고 @framingui/ui 호환성 검증
4
+ */
5
+ /**
6
+ * Tailwind 설정 파일 읽기 결과
7
+ */
8
+ export interface TailwindConfigReadResult {
9
+ found: boolean;
10
+ configPath?: string;
11
+ hasUiContentPath: boolean;
12
+ hasAnimatePlugin: boolean;
13
+ rawContent?: string;
14
+ error?: string;
15
+ }
16
+ /**
17
+ * Tailwind 설정 파일을 찾아서 읽고 @framingui/ui 호환성을 검증
18
+ *
19
+ * @param projectPath - 프로젝트 루트 경로
20
+ * @returns TailwindConfigReadResult
21
+ */
22
+ export declare function readTailwindConfig(projectPath: string): TailwindConfigReadResult;
23
+ //# sourceMappingURL=tailwind-config-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind-config-reader.d.ts","sourceRoot":"","sources":["../../src/utils/tailwind-config-reader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA0BD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,wBAAwB,CAoDhF"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Tailwind Config Reader
3
+ * SPEC-MCP-005: Tailwind CSS 설정 파일을 읽고 @framingui/ui 호환성 검증
4
+ */
5
+ import * as fs from 'fs';
6
+ import * as path from 'path';
7
+ /** 지원되는 Tailwind 설정 파일명 */
8
+ const TAILWIND_CONFIG_FILES = [
9
+ 'tailwind.config.ts',
10
+ 'tailwind.config.js',
11
+ 'tailwind.config.mjs',
12
+ 'tailwind.config.cjs',
13
+ ];
14
+ /**
15
+ * @framingui/ui content 경로 패턴
16
+ * monorepo: ../../packages/ui/src/ 또는 packages/ui/src/
17
+ * standalone: node_modules/@framingui/ui/
18
+ * 직접 참조: @framingui/ui
19
+ */
20
+ const UI_CONTENT_PATTERNS = [/packages\/ui\/src\//, /node_modules\/@tekton\/ui\//, /@tekton\/ui/];
21
+ /**
22
+ * tailwindcss-animate 플러그인 패턴
23
+ * import animate from 'tailwindcss-animate'
24
+ * require('tailwindcss-animate')
25
+ * plugins: [require('tailwindcss-animate')]
26
+ */
27
+ const ANIMATE_PLUGIN_PATTERNS = [/tailwindcss-animate/];
28
+ /**
29
+ * Tailwind 설정 파일을 찾아서 읽고 @framingui/ui 호환성을 검증
30
+ *
31
+ * @param projectPath - 프로젝트 루트 경로
32
+ * @returns TailwindConfigReadResult
33
+ */
34
+ export function readTailwindConfig(projectPath) {
35
+ try {
36
+ // 프로젝트 루트 경로 정규화
37
+ const resolvedPath = path.resolve(projectPath);
38
+ // package.json 경로가 전달된 경우 디렉토리로 변환
39
+ const projectDir = resolvedPath.endsWith('package.json')
40
+ ? path.dirname(resolvedPath)
41
+ : resolvedPath;
42
+ // Tailwind 설정 파일 탐색
43
+ let configPath;
44
+ for (const configFile of TAILWIND_CONFIG_FILES) {
45
+ const fullPath = path.join(projectDir, configFile);
46
+ if (fs.existsSync(fullPath)) {
47
+ configPath = fullPath;
48
+ break;
49
+ }
50
+ }
51
+ if (!configPath) {
52
+ return {
53
+ found: false,
54
+ hasUiContentPath: false,
55
+ hasAnimatePlugin: false,
56
+ };
57
+ }
58
+ // 설정 파일 읽기
59
+ const rawContent = fs.readFileSync(configPath, 'utf-8');
60
+ // content 배열에서 @framingui/ui 경로 확인
61
+ const hasUiContentPath = UI_CONTENT_PATTERNS.some(pattern => pattern.test(rawContent));
62
+ // tailwindcss-animate 플러그인 확인
63
+ const hasAnimatePlugin = ANIMATE_PLUGIN_PATTERNS.some(pattern => pattern.test(rawContent));
64
+ return {
65
+ found: true,
66
+ configPath,
67
+ hasUiContentPath,
68
+ hasAnimatePlugin,
69
+ rawContent,
70
+ };
71
+ }
72
+ catch (error) {
73
+ return {
74
+ found: false,
75
+ hasUiContentPath: false,
76
+ hasAnimatePlugin: false,
77
+ error: error instanceof Error ? error.message : String(error),
78
+ };
79
+ }
80
+ }
81
+ //# sourceMappingURL=tailwind-config-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tailwind-config-reader.js","sourceRoot":"","sources":["../../src/utils/tailwind-config-reader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAc7B,2BAA2B;AAC3B,MAAM,qBAAqB,GAAG;IAC5B,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,qBAAqB;CACtB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,mBAAmB,GAAG,CAAC,qBAAqB,EAAE,6BAA6B,EAAE,aAAa,CAAC,CAAC;AAElG;;;;;GAKG;AACH,MAAM,uBAAuB,GAAG,CAAC,qBAAqB,CAAC,CAAC;AAExD;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,IAAI,CAAC;QACH,iBAAiB;QACjB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE/C,mCAAmC;QACnC,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC;YACtD,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YAC5B,CAAC,CAAC,YAAY,CAAC;QAEjB,oBAAoB;QACpB,IAAI,UAA8B,CAAC;QACnC,KAAK,MAAM,UAAU,IAAI,qBAAqB,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACnD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,UAAU,GAAG,QAAQ,CAAC;gBACtB,MAAM;YACR,CAAC;QACH,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,gBAAgB,EAAE,KAAK;gBACvB,gBAAgB,EAAE,KAAK;aACxB,CAAC;QACJ,CAAC;QAED,WAAW;QACX,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAExD,mCAAmC;QACnC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAEvF,8BAA8B;QAC9B,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAE3F,OAAO;YACL,KAAK,EAAE,IAAI;YACX,UAAU;YACV,gBAAgB;YAChB,gBAAgB;YAChB,UAAU;SACX,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,gBAAgB,EAAE,KAAK;YACvB,gBAAgB,EAAE,KAAK;YACvB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,103 @@
1
+ {
2
+ "name": "@framingui/mcp-server",
3
+ "version": "0.5.0",
4
+ "description": "Tekton MCP Server with Claude Code integration and timestamp-based preview system",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ },
13
+ "./schemas": {
14
+ "import": "./dist/schemas/mcp-schemas.js",
15
+ "types": "./dist/schemas/mcp-schemas.d.ts"
16
+ }
17
+ },
18
+ "bin": {
19
+ "tekton-mcp": "./dist/cli/index.js"
20
+ },
21
+ "files": [
22
+ "dist",
23
+ "README.md",
24
+ "package.json"
25
+ ],
26
+ "publishConfig": {
27
+ "access": "public",
28
+ "registry": "https://registry.npmjs.org/",
29
+ "linkWorkspace": false
30
+ },
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "https://github.com/soo-kate-yeon/tekton",
34
+ "directory": "packages/mcp-server"
35
+ },
36
+ "scripts": {
37
+ "build": "tsc",
38
+ "dev": "tsc --watch",
39
+ "test": "vitest run",
40
+ "test:watch": "vitest",
41
+ "test:coverage": "vitest run --coverage",
42
+ "start": "node dist/index.js",
43
+ "inspect": "npx @anthropic-ai/mcp-inspector node dist/index.js",
44
+ "lint": "eslint src __tests__ --ext .ts --ignore-pattern 'src/**/*.js' --ignore-pattern 'src/**/*.d.ts'",
45
+ "typecheck": "tsc --noEmit",
46
+ "typecheck:tests": "tsc --project tsconfig.test.json --noEmit",
47
+ "prepublishOnly": "pnpm build"
48
+ },
49
+ "dependencies": {
50
+ "@anthropic-ai/sdk": "^0.40.0",
51
+ "@babel/parser": "^7.28.6",
52
+ "@babel/traverse": "^7.28.6",
53
+ "@modelcontextprotocol/sdk": "^1.26.0",
54
+ "@framingui/core": "workspace:*",
55
+ "@framingui/ui": "workspace:*"
56
+ },
57
+ "devDependencies": {
58
+ "@babel/types": "^7.28.6",
59
+ "@hookform/resolvers": "^3.10.0",
60
+ "@radix-ui/react-alert-dialog": "^1.1.15",
61
+ "@radix-ui/react-avatar": "^1.1.11",
62
+ "@radix-ui/react-checkbox": "^1.3.3",
63
+ "@radix-ui/react-dialog": "^1.1.15",
64
+ "@radix-ui/react-dropdown-menu": "^2.1.16",
65
+ "@radix-ui/react-label": "^2.1.8",
66
+ "@radix-ui/react-navigation-menu": "^1.2.14",
67
+ "@radix-ui/react-popover": "^1.1.15",
68
+ "@radix-ui/react-progress": "^1.1.8",
69
+ "@radix-ui/react-radio-group": "^1.3.8",
70
+ "@radix-ui/react-scroll-area": "^1.2.10",
71
+ "@radix-ui/react-select": "^2.2.6",
72
+ "@radix-ui/react-separator": "^1.1.8",
73
+ "@radix-ui/react-slider": "^1.3.6",
74
+ "@radix-ui/react-slot": "^1.2.4",
75
+ "@radix-ui/react-switch": "^1.2.6",
76
+ "@radix-ui/react-tabs": "^1.1.13",
77
+ "@radix-ui/react-toast": "^1.2.15",
78
+ "@radix-ui/react-tooltip": "^1.2.8",
79
+ "@types/babel__traverse": "^7.28.0",
80
+ "@types/node": "^22.10.5",
81
+ "@typescript-eslint/eslint-plugin": "^8.20.0",
82
+ "@typescript-eslint/parser": "^8.20.0",
83
+ "@vitest/coverage-v8": "^2.1.8",
84
+ "class-variance-authority": "^0.7.1",
85
+ "clsx": "^2.1.1",
86
+ "cmdk": "^1.1.1",
87
+ "date-fns": "^4.1.0",
88
+ "eslint": "^9.18.0",
89
+ "framer-motion": "^12.34.0",
90
+ "globals": "^17.0.0",
91
+ "lucide-react": "^0.563.0",
92
+ "react-day-picker": "^9.13.2",
93
+ "react-hook-form": "^7.71.1",
94
+ "tailwind-merge": "^2.6.0",
95
+ "typescript": "^5.7.3",
96
+ "vitest": "^2.1.8",
97
+ "zod": "^3.23.8"
98
+ },
99
+ "engines": {
100
+ "node": ">=20.0.0"
101
+ },
102
+ "license": "MIT"
103
+ }