@tekton-ui/mcp-server 0.3.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 (179) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +980 -0
  3. package/dist/auth/cache.d.ts +28 -0
  4. package/dist/auth/cache.d.ts.map +1 -0
  5. package/dist/auth/cache.js +48 -0
  6. package/dist/auth/cache.js.map +1 -0
  7. package/dist/auth/guard.d.ts +13 -0
  8. package/dist/auth/guard.d.ts.map +1 -0
  9. package/dist/auth/guard.js +21 -0
  10. package/dist/auth/guard.js.map +1 -0
  11. package/dist/auth/state.d.ts +32 -0
  12. package/dist/auth/state.d.ts.map +1 -0
  13. package/dist/auth/state.js +72 -0
  14. package/dist/auth/state.js.map +1 -0
  15. package/dist/auth/theme-access.d.ts +10 -0
  16. package/dist/auth/theme-access.d.ts.map +1 -0
  17. package/dist/auth/theme-access.js +24 -0
  18. package/dist/auth/theme-access.js.map +1 -0
  19. package/dist/auth/verify.d.ts +44 -0
  20. package/dist/auth/verify.d.ts.map +1 -0
  21. package/dist/auth/verify.js +77 -0
  22. package/dist/auth/verify.js.map +1 -0
  23. package/dist/cli/credentials.d.ts +29 -0
  24. package/dist/cli/credentials.d.ts.map +1 -0
  25. package/dist/cli/credentials.js +66 -0
  26. package/dist/cli/credentials.js.map +1 -0
  27. package/dist/cli/index.d.ts +7 -0
  28. package/dist/cli/index.d.ts.map +1 -0
  29. package/dist/cli/index.js +36 -0
  30. package/dist/cli/index.js.map +1 -0
  31. package/dist/cli/login.d.ts +9 -0
  32. package/dist/cli/login.d.ts.map +1 -0
  33. package/dist/cli/login.js +120 -0
  34. package/dist/cli/login.js.map +1 -0
  35. package/dist/cli/logout.d.ts +9 -0
  36. package/dist/cli/logout.d.ts.map +1 -0
  37. package/dist/cli/logout.js +18 -0
  38. package/dist/cli/logout.js.map +1 -0
  39. package/dist/cli/status.d.ts +9 -0
  40. package/dist/cli/status.d.ts.map +1 -0
  41. package/dist/cli/status.js +31 -0
  42. package/dist/cli/status.js.map +1 -0
  43. package/dist/data/component-registry.d.ts +30 -0
  44. package/dist/data/component-registry.d.ts.map +1 -0
  45. package/dist/data/component-registry.js +320 -0
  46. package/dist/data/component-registry.js.map +1 -0
  47. package/dist/data/examples/screen-examples.d.ts +38 -0
  48. package/dist/data/examples/screen-examples.d.ts.map +1 -0
  49. package/dist/data/examples/screen-examples.js +500 -0
  50. package/dist/data/examples/screen-examples.js.map +1 -0
  51. package/dist/data/hint-generator.d.ts +16 -0
  52. package/dist/data/hint-generator.d.ts.map +1 -0
  53. package/dist/data/hint-generator.js +298 -0
  54. package/dist/data/hint-generator.js.map +1 -0
  55. package/dist/data/recipe-resolver.d.ts +48 -0
  56. package/dist/data/recipe-resolver.d.ts.map +1 -0
  57. package/dist/data/recipe-resolver.js +226 -0
  58. package/dist/data/recipe-resolver.js.map +1 -0
  59. package/dist/data/template-matcher.d.ts +50 -0
  60. package/dist/data/template-matcher.d.ts.map +1 -0
  61. package/dist/data/template-matcher.js +240 -0
  62. package/dist/data/template-matcher.js.map +1 -0
  63. package/dist/generators/core-resolver.d.ts +56 -0
  64. package/dist/generators/core-resolver.d.ts.map +1 -0
  65. package/dist/generators/core-resolver.js +490 -0
  66. package/dist/generators/core-resolver.js.map +1 -0
  67. package/dist/generators/css-generator.d.ts +49 -0
  68. package/dist/generators/css-generator.d.ts.map +1 -0
  69. package/dist/generators/css-generator.js +294 -0
  70. package/dist/generators/css-generator.js.map +1 -0
  71. package/dist/generators/index.d.ts +13 -0
  72. package/dist/generators/index.d.ts.map +1 -0
  73. package/dist/generators/index.js +16 -0
  74. package/dist/generators/index.js.map +1 -0
  75. package/dist/generators/llm-generator.d.ts +96 -0
  76. package/dist/generators/llm-generator.d.ts.map +1 -0
  77. package/dist/generators/llm-generator.js +296 -0
  78. package/dist/generators/llm-generator.js.map +1 -0
  79. package/dist/index.d.ts +3 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +818 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/schemas/mcp-schemas.d.ts +4132 -0
  84. package/dist/schemas/mcp-schemas.d.ts.map +1 -0
  85. package/dist/schemas/mcp-schemas.js +946 -0
  86. package/dist/schemas/mcp-schemas.js.map +1 -0
  87. package/dist/storage/blueprint-storage.d.ts +68 -0
  88. package/dist/storage/blueprint-storage.d.ts.map +1 -0
  89. package/dist/storage/blueprint-storage.js +135 -0
  90. package/dist/storage/blueprint-storage.js.map +1 -0
  91. package/dist/storage/timestamp-manager.d.ts +32 -0
  92. package/dist/storage/timestamp-manager.d.ts.map +1 -0
  93. package/dist/storage/timestamp-manager.js +59 -0
  94. package/dist/storage/timestamp-manager.js.map +1 -0
  95. package/dist/tools/export-screen.d.ts +34 -0
  96. package/dist/tools/export-screen.d.ts.map +1 -0
  97. package/dist/tools/export-screen.js +344 -0
  98. package/dist/tools/export-screen.js.map +1 -0
  99. package/dist/tools/generate-blueprint.d.ts +15 -0
  100. package/dist/tools/generate-blueprint.d.ts.map +1 -0
  101. package/dist/tools/generate-blueprint.js +165 -0
  102. package/dist/tools/generate-blueprint.js.map +1 -0
  103. package/dist/tools/generate-screen.d.ts +13 -0
  104. package/dist/tools/generate-screen.d.ts.map +1 -0
  105. package/dist/tools/generate-screen.js +82 -0
  106. package/dist/tools/generate-screen.js.map +1 -0
  107. package/dist/tools/get-screen-generation-context.d.ts +11 -0
  108. package/dist/tools/get-screen-generation-context.d.ts.map +1 -0
  109. package/dist/tools/get-screen-generation-context.js +316 -0
  110. package/dist/tools/get-screen-generation-context.js.map +1 -0
  111. package/dist/tools/list-components.d.ts +15 -0
  112. package/dist/tools/list-components.d.ts.map +1 -0
  113. package/dist/tools/list-components.js +46 -0
  114. package/dist/tools/list-components.js.map +1 -0
  115. package/dist/tools/list-icon-libraries.d.ts +12 -0
  116. package/dist/tools/list-icon-libraries.d.ts.map +1 -0
  117. package/dist/tools/list-icon-libraries.js +48 -0
  118. package/dist/tools/list-icon-libraries.js.map +1 -0
  119. package/dist/tools/list-screen-templates.d.ts +15 -0
  120. package/dist/tools/list-screen-templates.d.ts.map +1 -0
  121. package/dist/tools/list-screen-templates.js +63 -0
  122. package/dist/tools/list-screen-templates.js.map +1 -0
  123. package/dist/tools/list-themes.d.ts +13 -0
  124. package/dist/tools/list-themes.d.ts.map +1 -0
  125. package/dist/tools/list-themes.js +42 -0
  126. package/dist/tools/list-themes.js.map +1 -0
  127. package/dist/tools/list-tokens.d.ts +13 -0
  128. package/dist/tools/list-tokens.d.ts.map +1 -0
  129. package/dist/tools/list-tokens.js +92 -0
  130. package/dist/tools/list-tokens.js.map +1 -0
  131. package/dist/tools/preview-component.d.ts +18 -0
  132. package/dist/tools/preview-component.d.ts.map +1 -0
  133. package/dist/tools/preview-component.js +178 -0
  134. package/dist/tools/preview-component.js.map +1 -0
  135. package/dist/tools/preview-icon-library.d.ts +13 -0
  136. package/dist/tools/preview-icon-library.d.ts.map +1 -0
  137. package/dist/tools/preview-icon-library.js +63 -0
  138. package/dist/tools/preview-icon-library.js.map +1 -0
  139. package/dist/tools/preview-screen-template.d.ts +18 -0
  140. package/dist/tools/preview-screen-template.d.ts.map +1 -0
  141. package/dist/tools/preview-screen-template.js +101 -0
  142. package/dist/tools/preview-screen-template.js.map +1 -0
  143. package/dist/tools/preview-theme.d.ts +15 -0
  144. package/dist/tools/preview-theme.d.ts.map +1 -0
  145. package/dist/tools/preview-theme.js +71 -0
  146. package/dist/tools/preview-theme.js.map +1 -0
  147. package/dist/tools/validate-environment.d.ts +37 -0
  148. package/dist/tools/validate-environment.d.ts.map +1 -0
  149. package/dist/tools/validate-environment.js +153 -0
  150. package/dist/tools/validate-environment.js.map +1 -0
  151. package/dist/tools/validate-screen-definition.d.ts +10 -0
  152. package/dist/tools/validate-screen-definition.d.ts.map +1 -0
  153. package/dist/tools/validate-screen-definition.js +463 -0
  154. package/dist/tools/validate-screen-definition.js.map +1 -0
  155. package/dist/tools/validate-screen.d.ts +13 -0
  156. package/dist/tools/validate-screen.d.ts.map +1 -0
  157. package/dist/tools/validate-screen.js +106 -0
  158. package/dist/tools/validate-screen.js.map +1 -0
  159. package/dist/utils/dependency-extractor.d.ts +13 -0
  160. package/dist/utils/dependency-extractor.d.ts.map +1 -0
  161. package/dist/utils/dependency-extractor.js +232 -0
  162. package/dist/utils/dependency-extractor.js.map +1 -0
  163. package/dist/utils/error-handler.d.ts +29 -0
  164. package/dist/utils/error-handler.d.ts.map +1 -0
  165. package/dist/utils/error-handler.js +48 -0
  166. package/dist/utils/error-handler.js.map +1 -0
  167. package/dist/utils/logger.d.ts +8 -0
  168. package/dist/utils/logger.d.ts.map +1 -0
  169. package/dist/utils/logger.js +14 -0
  170. package/dist/utils/logger.js.map +1 -0
  171. package/dist/utils/package-json-reader.d.ts +37 -0
  172. package/dist/utils/package-json-reader.d.ts.map +1 -0
  173. package/dist/utils/package-json-reader.js +108 -0
  174. package/dist/utils/package-json-reader.js.map +1 -0
  175. package/dist/utils/tailwind-config-reader.d.ts +23 -0
  176. package/dist/utils/tailwind-config-reader.d.ts.map +1 -0
  177. package/dist/utils/tailwind-config-reader.js +81 -0
  178. package/dist/utils/tailwind-config-reader.js.map +1 -0
  179. package/package.json +72 -0
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Simple in-memory cache with TTL support
3
+ * SPEC-DEPLOY-001 Phase 4.1: MCP Server Authentication Layer
4
+ */
5
+ export declare class MemoryCache<T> {
6
+ private cache;
7
+ /**
8
+ * Set a cache entry with TTL in milliseconds
9
+ */
10
+ set(key: string, value: T, ttlMs: number): void;
11
+ /**
12
+ * Get a cache entry if it exists and hasn't expired
13
+ */
14
+ get(key: string): T | null;
15
+ /**
16
+ * Clear a specific cache entry
17
+ */
18
+ delete(key: string): void;
19
+ /**
20
+ * Clear all cache entries
21
+ */
22
+ clear(): void;
23
+ /**
24
+ * Get cache size
25
+ */
26
+ size(): number;
27
+ }
28
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/auth/cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,qBAAa,WAAW,CAAC,CAAC;IACxB,OAAO,CAAC,KAAK,CAAoC;IAEjD;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAK/C;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAgB1B;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,IAAI,IAAI,MAAM;CAGf"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Simple in-memory cache with TTL support
3
+ * SPEC-DEPLOY-001 Phase 4.1: MCP Server Authentication Layer
4
+ */
5
+ export class MemoryCache {
6
+ cache = new Map();
7
+ /**
8
+ * Set a cache entry with TTL in milliseconds
9
+ */
10
+ set(key, value, ttlMs) {
11
+ const expiresAt = Date.now() + ttlMs;
12
+ this.cache.set(key, { value, expiresAt });
13
+ }
14
+ /**
15
+ * Get a cache entry if it exists and hasn't expired
16
+ */
17
+ get(key) {
18
+ const entry = this.cache.get(key);
19
+ if (!entry) {
20
+ return null;
21
+ }
22
+ // Check if expired
23
+ if (Date.now() > entry.expiresAt) {
24
+ this.cache.delete(key);
25
+ return null;
26
+ }
27
+ return entry.value;
28
+ }
29
+ /**
30
+ * Clear a specific cache entry
31
+ */
32
+ delete(key) {
33
+ this.cache.delete(key);
34
+ }
35
+ /**
36
+ * Clear all cache entries
37
+ */
38
+ clear() {
39
+ this.cache.clear();
40
+ }
41
+ /**
42
+ * Get cache size
43
+ */
44
+ size() {
45
+ return this.cache.size;
46
+ }
47
+ }
48
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/auth/cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,OAAO,WAAW;IACd,KAAK,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEjD;;OAEG;IACH,GAAG,CAAC,GAAW,EAAE,KAAQ,EAAE,KAAa;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,GAAW;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAElC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mBAAmB;QACnB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 인증 가드 - 모든 도구 호출 전 인증 상태 확인
3
+ * SPEC-DEPLOY-001: 모든 테마 유료화, 인증 필수
4
+ */
5
+ export declare class AuthRequiredError extends Error {
6
+ constructor();
7
+ }
8
+ /**
9
+ * 인증 필수 가드
10
+ * 인증되지 않은 경우 AuthRequiredError를 throw
11
+ */
12
+ export declare function requireAuth(): void;
13
+ //# sourceMappingURL=guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../src/auth/guard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,qBAAa,iBAAkB,SAAQ,KAAK;;CAK3C;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAIlC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * 인증 가드 - 모든 도구 호출 전 인증 상태 확인
3
+ * SPEC-DEPLOY-001: 모든 테마 유료화, 인증 필수
4
+ */
5
+ import { isAuthenticated } from './state.js';
6
+ export class AuthRequiredError extends Error {
7
+ constructor() {
8
+ super('Authentication required. Run `tekton-mcp login` to authenticate, or set TEKTON_API_KEY environment variable.');
9
+ this.name = 'AuthRequiredError';
10
+ }
11
+ }
12
+ /**
13
+ * 인증 필수 가드
14
+ * 인증되지 않은 경우 AuthRequiredError를 throw
15
+ */
16
+ export function requireAuth() {
17
+ if (!isAuthenticated()) {
18
+ throw new AuthRequiredError();
19
+ }
20
+ }
21
+ //# sourceMappingURL=guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.js","sourceRoot":"","sources":["../../src/auth/guard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C;QACE,KAAK,CAAC,8GAA8G,CAAC,CAAC;QACtH,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,iBAAiB,EAAE,CAAC;IAChC,CAAC;AACH,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Global authentication state for MCP server
3
+ * SPEC-DEPLOY-001 Phase 4.1: MCP Server Authentication Layer
4
+ */
5
+ import type { VerifyResponse } from './verify.js';
6
+ /**
7
+ * Set authentication data and cache it
8
+ * @param authData - Verification response from API
9
+ */
10
+ export declare function setAuthData(authData: VerifyResponse | null): void;
11
+ /**
12
+ * Get current authentication data
13
+ * @returns Current authentication data or null if not authenticated
14
+ */
15
+ export declare function getAuthData(): VerifyResponse | null;
16
+ /**
17
+ * Clear authentication data and cache
18
+ */
19
+ export declare function clearAuthData(): void;
20
+ /**
21
+ * Check if user is authenticated
22
+ * @returns true if authenticated with valid data
23
+ */
24
+ export declare function isAuthenticated(): boolean;
25
+ /**
26
+ * Get accessible theme IDs based on current authentication
27
+ * 인증된 사용자의 라이선스 보유 테마만 반환
28
+ * @param allThemeIds - All available theme IDs
29
+ * @returns Array of accessible theme IDs (licensed only)
30
+ */
31
+ export declare function getAccessibleThemes(allThemeIds: string[]): string[];
32
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/auth/state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAalD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAOjE;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,cAAc,GAAG,IAAI,CAWnD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAIpC;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAcnE"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Global authentication state for MCP server
3
+ * SPEC-DEPLOY-001 Phase 4.1: MCP Server Authentication Layer
4
+ */
5
+ import { MemoryCache } from './cache.js';
6
+ import { info } from '../utils/logger.js';
7
+ // Cache TTL: 5 minutes (300,000 milliseconds)
8
+ const CACHE_TTL_MS = 5 * 60 * 1000;
9
+ // Global authentication data cache
10
+ const authCache = new MemoryCache();
11
+ // Current authentication state
12
+ let currentAuthData = null;
13
+ /**
14
+ * Set authentication data and cache it
15
+ * @param authData - Verification response from API
16
+ */
17
+ export function setAuthData(authData) {
18
+ currentAuthData = authData;
19
+ if (authData && authData.valid) {
20
+ authCache.set('auth', authData, CACHE_TTL_MS);
21
+ info('Authentication data cached for 5 minutes');
22
+ }
23
+ }
24
+ /**
25
+ * Get current authentication data
26
+ * @returns Current authentication data or null if not authenticated
27
+ */
28
+ export function getAuthData() {
29
+ // Try to get from cache first
30
+ const cachedAuth = authCache.get('auth');
31
+ if (cachedAuth) {
32
+ info('Using cached authentication data');
33
+ return cachedAuth;
34
+ }
35
+ // Return current state
36
+ return currentAuthData;
37
+ }
38
+ /**
39
+ * Clear authentication data and cache
40
+ */
41
+ export function clearAuthData() {
42
+ currentAuthData = null;
43
+ authCache.clear();
44
+ info('Authentication data cleared');
45
+ }
46
+ /**
47
+ * Check if user is authenticated
48
+ * @returns true if authenticated with valid data
49
+ */
50
+ export function isAuthenticated() {
51
+ const authData = getAuthData();
52
+ return authData !== null && authData.valid === true;
53
+ }
54
+ /**
55
+ * Get accessible theme IDs based on current authentication
56
+ * 인증된 사용자의 라이선스 보유 테마만 반환
57
+ * @param allThemeIds - All available theme IDs
58
+ * @returns Array of accessible theme IDs (licensed only)
59
+ */
60
+ export function getAccessibleThemes(allThemeIds) {
61
+ const authData = getAuthData();
62
+ // 인증 없음: 접근 가능 테마 없음
63
+ if (!authData || !authData.valid) {
64
+ return [];
65
+ }
66
+ // 인증됨: 라이선스 보유 테마만
67
+ const licensedThemes = authData.themes?.licensed || [];
68
+ const accessibleThemes = new Set(licensedThemes);
69
+ // 실제 존재하는 테마만 필터링
70
+ return allThemeIds.filter(id => accessibleThemes.has(id));
71
+ }
72
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/auth/state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,8CAA8C;AAC9C,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAEnC,mCAAmC;AACnC,MAAM,SAAS,GAAG,IAAI,WAAW,EAAkB,CAAC;AAEpD,+BAA+B;AAC/B,IAAI,eAAe,GAA0B,IAAI,CAAC;AAElD;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,QAA+B;IACzD,eAAe,GAAG,QAAQ,CAAC;IAE3B,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC/B,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC9C,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,8BAA8B;IAC9B,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEzC,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,CAAC,kCAAkC,CAAC,CAAC;QACzC,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,uBAAuB;IACvB,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,eAAe,GAAG,IAAI,CAAC;IACvB,SAAS,CAAC,KAAK,EAAE,CAAC;IAClB,IAAI,CAAC,6BAA6B,CAAC,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,OAAO,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC;AACtD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAqB;IACvD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,qBAAqB;IACrB,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,mBAAmB;IACnB,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAC;IACvD,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;IAEjD,kBAAkB;IAClB,OAAO,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Theme access configuration
3
+ * SPEC-DEPLOY-001: 모든 테마 유료 - 인증 필수
4
+ */
5
+ /**
6
+ * 모든 프리미엄 테마 목록
7
+ * 인증된 사용자만 라이선스 보유 테마에 접근 가능
8
+ */
9
+ export declare const PREMIUM_THEMES: string[];
10
+ //# sourceMappingURL=theme-access.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-access.d.ts","sourceRoot":"","sources":["../../src/auth/theme-access.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,eAAO,MAAM,cAAc,UAc1B,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Theme access configuration
3
+ * SPEC-DEPLOY-001: 모든 테마 유료 - 인증 필수
4
+ */
5
+ /**
6
+ * 모든 프리미엄 테마 목록
7
+ * 인증된 사용자만 라이선스 보유 테마에 접근 가능
8
+ */
9
+ export const PREMIUM_THEMES = [
10
+ 'calm-wellness',
11
+ 'dynamic-fitness',
12
+ 'korean-fintech',
13
+ 'media-streaming',
14
+ 'premium-editorial',
15
+ 'saas-dashboard',
16
+ 'warm-humanist',
17
+ 'next-tailwind-shadcn',
18
+ 'vite-tailwind-shadcn',
19
+ 'next-styled-components',
20
+ 'next-tailwind-radix',
21
+ 'saas-modern',
22
+ 'tech-startup',
23
+ ];
24
+ //# sourceMappingURL=theme-access.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-access.js","sourceRoot":"","sources":["../../src/auth/theme-access.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,eAAe;IACf,iBAAiB;IACjB,gBAAgB;IAChB,iBAAiB;IACjB,mBAAmB;IACnB,gBAAgB;IAChB,eAAe;IACf,sBAAsB;IACtB,sBAAsB;IACtB,wBAAwB;IACxB,qBAAqB;IACrB,aAAa;IACb,cAAc;CACf,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * API Key verification for Tekton MCP Server
3
+ * SPEC-DEPLOY-001 Phase 4.1: MCP Server Authentication Layer
4
+ */
5
+ export interface VerifyResponse {
6
+ valid: boolean;
7
+ user?: {
8
+ id: string;
9
+ email: string;
10
+ plan: string;
11
+ };
12
+ licenses?: Array<{
13
+ themeId: string;
14
+ tier: string;
15
+ isActive: boolean;
16
+ expiresAt: string | null;
17
+ }>;
18
+ themes?: {
19
+ licensed: string[];
20
+ /** @deprecated free 테마 개념 제거됨 - 하위 호환용 */
21
+ free?: string[];
22
+ };
23
+ error?: string;
24
+ }
25
+ /**
26
+ * Verify API key with Tekton backend
27
+ * @param apiKey - The API key to verify
28
+ * @returns VerifyResponse with user data and licenses
29
+ */
30
+ export declare function verifyApiKey(apiKey: string): Promise<VerifyResponse>;
31
+ /**
32
+ * Extract licensed theme IDs from verification response
33
+ * @param verifyResponse - Verification response from verifyApiKey
34
+ * @returns Array of licensed theme IDs
35
+ */
36
+ export declare function extractThemeAccess(verifyResponse: VerifyResponse): string[];
37
+ /**
38
+ * Check if a theme is accessible for the current authentication state
39
+ * @param themeId - Theme ID to check
40
+ * @param verifyResponse - Verification response (null for unauthenticated)
41
+ * @returns true if theme is in user's licenses
42
+ */
43
+ export declare function isThemeAccessible(themeId: string, verifyResponse: VerifyResponse | null): boolean;
44
+ //# sourceMappingURL=verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/auth/verify.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,QAAQ,CAAC,EAAE,KAAK,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,OAAO,CAAC;QAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,CAAC,CAAC;IACH,MAAM,CAAC,EAAE;QACP,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,0CAA0C;QAC1C,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAiD1E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,cAAc,GAAG,MAAM,EAAE,CAM3E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,cAAc,GAAG,IAAI,GACpC,OAAO,CAST"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * API Key verification for Tekton MCP Server
3
+ * SPEC-DEPLOY-001 Phase 4.1: MCP Server Authentication Layer
4
+ */
5
+ import { info, error as logError } from '../utils/logger.js';
6
+ /**
7
+ * Verify API key with Tekton backend
8
+ * @param apiKey - The API key to verify
9
+ * @returns VerifyResponse with user data and licenses
10
+ */
11
+ export async function verifyApiKey(apiKey) {
12
+ const apiUrl = process.env.TEKTON_API_URL || 'https://tekton-ui.com';
13
+ const endpoint = `${apiUrl}/api/mcp/verify`;
14
+ try {
15
+ info(`Verifying API key with endpoint: ${endpoint}`);
16
+ const response = await fetch(endpoint, {
17
+ method: 'GET',
18
+ headers: {
19
+ Authorization: `Bearer ${apiKey}`,
20
+ 'Content-Type': 'application/json',
21
+ },
22
+ });
23
+ if (!response.ok) {
24
+ const errorText = await response.text();
25
+ logError(`API key verification failed: ${response.status} ${response.statusText}`);
26
+ return {
27
+ valid: false,
28
+ error: `Verification failed: ${response.status} ${response.statusText} - ${errorText}`,
29
+ };
30
+ }
31
+ const data = (await response.json());
32
+ if (!data.valid) {
33
+ logError(`API key is invalid: ${data.error || 'Unknown reason'}`);
34
+ return {
35
+ valid: false,
36
+ error: data.error || 'API key is invalid',
37
+ };
38
+ }
39
+ info(`API key verified successfully for user: ${data.user?.email || 'unknown'} (plan: ${data.user?.plan || 'unknown'})`);
40
+ return data;
41
+ }
42
+ catch (err) {
43
+ const errorMessage = err instanceof Error ? err.message : String(err);
44
+ logError(`API key verification error: ${errorMessage}`);
45
+ return {
46
+ valid: false,
47
+ error: `Network error: ${errorMessage}`,
48
+ };
49
+ }
50
+ }
51
+ /**
52
+ * Extract licensed theme IDs from verification response
53
+ * @param verifyResponse - Verification response from verifyApiKey
54
+ * @returns Array of licensed theme IDs
55
+ */
56
+ export function extractThemeAccess(verifyResponse) {
57
+ if (!verifyResponse.valid || !verifyResponse.themes) {
58
+ return [];
59
+ }
60
+ return verifyResponse.themes.licensed || [];
61
+ }
62
+ /**
63
+ * Check if a theme is accessible for the current authentication state
64
+ * @param themeId - Theme ID to check
65
+ * @param verifyResponse - Verification response (null for unauthenticated)
66
+ * @returns true if theme is in user's licenses
67
+ */
68
+ export function isThemeAccessible(themeId, verifyResponse) {
69
+ // 인증 필수
70
+ if (!verifyResponse || !verifyResponse.valid) {
71
+ return false;
72
+ }
73
+ // 라이선스 보유 테마만 접근 가능
74
+ const licensed = extractThemeAccess(verifyResponse);
75
+ return licensed.includes(themeId);
76
+ }
77
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/auth/verify.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAuB7D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,uBAAuB,CAAC;IACrE,MAAM,QAAQ,GAAG,GAAG,MAAM,iBAAiB,CAAC;IAE5C,IAAI,CAAC;QACH,IAAI,CAAC,oCAAoC,QAAQ,EAAE,CAAC,CAAC;QAErD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YACrC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,EAAE;gBACjC,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,QAAQ,CAAC,gCAAgC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YAEnF,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,wBAAwB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,MAAM,SAAS,EAAE;aACvF,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAC;QAEvD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,QAAQ,CAAC,uBAAuB,IAAI,CAAC,KAAK,IAAI,gBAAgB,EAAE,CAAC,CAAC;YAClE,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,oBAAoB;aAC1C,CAAC;QACJ,CAAC;QAED,IAAI,CACF,2CAA2C,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,SAAS,WAAW,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,SAAS,GAAG,CACnH,CAAC;QAEF,OAAO,IAAI,CAAC;IACd,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,+BAA+B,YAAY,EAAE,CAAC,CAAC;QAExD,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,kBAAkB,YAAY,EAAE;SACxC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,cAA8B;IAC/D,IAAI,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;QACpD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,cAAc,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAe,EACf,cAAqC;IAErC,QAAQ;IACR,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,oBAAoB;IACpB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;IACpD,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * 크레덴셜 파일 관리
3
+ * ~/.tekton/credentials.json 읽기/쓰기/삭제
4
+ */
5
+ export interface TektonCredentials {
6
+ api_key: string;
7
+ api_url: string;
8
+ created_at: string;
9
+ user_email: string;
10
+ }
11
+ /**
12
+ * 크레덴셜 파일 경로 반환
13
+ */
14
+ export declare function getCredentialsPath(): string;
15
+ /**
16
+ * 크레덴셜 파일 로드
17
+ * @returns 크레덴셜 객체 또는 null (파일 없거나 파싱 실패 시)
18
+ */
19
+ export declare function loadCredentials(): TektonCredentials | null;
20
+ /**
21
+ * 크레덴셜 저장 (chmod 600)
22
+ */
23
+ export declare function saveCredentials(creds: TektonCredentials): void;
24
+ /**
25
+ * 크레덴셜 파일 삭제
26
+ * @returns true면 삭제 성공, false면 파일 없음
27
+ */
28
+ export declare function deleteCredentials(): boolean;
29
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/cli/credentials.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,iBAAiB,GAAG,IAAI,CAmB1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAW9D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAY3C"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * 크레덴셜 파일 관리
3
+ * ~/.tekton/credentials.json 읽기/쓰기/삭제
4
+ */
5
+ import fs from 'node:fs';
6
+ import path from 'node:path';
7
+ import os from 'node:os';
8
+ /**
9
+ * 크레덴셜 파일 경로 반환
10
+ */
11
+ export function getCredentialsPath() {
12
+ return path.join(os.homedir(), '.tekton', 'credentials.json');
13
+ }
14
+ /**
15
+ * 크레덴셜 파일 로드
16
+ * @returns 크레덴셜 객체 또는 null (파일 없거나 파싱 실패 시)
17
+ */
18
+ export function loadCredentials() {
19
+ const credPath = getCredentialsPath();
20
+ try {
21
+ if (!fs.existsSync(credPath)) {
22
+ return null;
23
+ }
24
+ const raw = fs.readFileSync(credPath, 'utf-8');
25
+ const data = JSON.parse(raw);
26
+ // 필수 필드 검증
27
+ if (!data.api_key || !data.api_url) {
28
+ return null;
29
+ }
30
+ return data;
31
+ }
32
+ catch {
33
+ return null;
34
+ }
35
+ }
36
+ /**
37
+ * 크레덴셜 저장 (chmod 600)
38
+ */
39
+ export function saveCredentials(creds) {
40
+ const credPath = getCredentialsPath();
41
+ const dir = path.dirname(credPath);
42
+ // ~/.tekton 디렉토리 자동 생성
43
+ fs.mkdirSync(dir, { recursive: true });
44
+ // 소유자만 읽기/쓰기 (0o600)
45
+ fs.writeFileSync(credPath, JSON.stringify(creds, null, 2) + '\n', {
46
+ mode: 0o600,
47
+ });
48
+ }
49
+ /**
50
+ * 크레덴셜 파일 삭제
51
+ * @returns true면 삭제 성공, false면 파일 없음
52
+ */
53
+ export function deleteCredentials() {
54
+ const credPath = getCredentialsPath();
55
+ try {
56
+ if (!fs.existsSync(credPath)) {
57
+ return false;
58
+ }
59
+ fs.unlinkSync(credPath);
60
+ return true;
61
+ }
62
+ catch {
63
+ return false;
64
+ }
65
+ }
66
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/cli/credentials.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AASzB;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;AAChE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IAEtC,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAsB,CAAC;QAElD,WAAW;QACX,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAwB;IACtD,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEnC,uBAAuB;IACvB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvC,qBAAqB;IACrB,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;QAChE,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IAEtC,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;QACD,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Tekton MCP CLI 라우터
4
+ * 서브커맨드: login, logout, status, (없으면 MCP 서버 시작)
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,CAAC"}
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Tekton MCP CLI 라우터
4
+ * 서브커맨드: login, logout, status, (없으면 MCP 서버 시작)
5
+ */
6
+ const command = process.argv[2];
7
+ switch (command) {
8
+ case 'login': {
9
+ const { loginCommand } = await import('./login.js');
10
+ try {
11
+ await loginCommand();
12
+ }
13
+ catch (err) {
14
+ console.error(err instanceof Error ? err.message : String(err));
15
+ process.exit(1);
16
+ }
17
+ break;
18
+ }
19
+ case 'logout': {
20
+ const { logoutCommand } = await import('./logout.js');
21
+ logoutCommand();
22
+ break;
23
+ }
24
+ case 'status': {
25
+ const { statusCommand } = await import('./status.js');
26
+ statusCommand();
27
+ break;
28
+ }
29
+ default: {
30
+ // 서브커맨드 없음 → MCP stdio 서버 시작 (기존 동작 유지)
31
+ await import('../index.js');
32
+ break;
33
+ }
34
+ }
35
+ export {};
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAIH,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,QAAQ,OAAO,EAAE,CAAC;IAChB,KAAK,OAAO,CAAC,CAAC,CAAC;QACb,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,YAAY,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM;IACR,CAAC;IAED,KAAK,QAAQ,CAAC,CAAC,CAAC;QACd,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACtD,aAAa,EAAE,CAAC;QAChB,MAAM;IACR,CAAC;IAED,KAAK,QAAQ,CAAC,CAAC,CAAC;QACd,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACtD,aAAa,EAAE,CAAC;QAChB,MAAM;IACR,CAAC;IAED,OAAO,CAAC,CAAC,CAAC;QACR,wCAAwC;QACxC,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAC5B,MAAM;IACR,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * tekton-mcp login 명령어
3
+ * 브라우저 OAuth → API Key 자동 저장
4
+ */
5
+ /**
6
+ * OAuth 로그인 플로우 실행
7
+ */
8
+ export declare function loginCommand(): Promise<void>;
9
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/cli/login.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAiCH;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAkGlD"}