@tekton-ui/mcp-server 0.3.0 → 0.3.1

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.
@@ -0,0 +1,10 @@
1
+ /**
2
+ * TEKTON-GUIDE.md 콘텐츠 템플릿
3
+ * 프레임워크별 맞춤 가이드 생성
4
+ */
5
+ export type Framework = 'nextjs' | 'vite';
6
+ /**
7
+ * TEKTON-GUIDE.md 콘텐츠 생성
8
+ */
9
+ export declare function generateGuide(framework: Framework): string;
10
+ //# sourceMappingURL=guide-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guide-template.d.ts","sourceRoot":"","sources":["../../src/cli/guide-template.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE1C;;GAEG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAmI1D"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * TEKTON-GUIDE.md 콘텐츠 템플릿
3
+ * 프레임워크별 맞춤 가이드 생성
4
+ */
5
+ /**
6
+ * TEKTON-GUIDE.md 콘텐츠 생성
7
+ */
8
+ export function generateGuide(framework) {
9
+ const importExample = framework === 'nextjs'
10
+ ? `// app/page.tsx
11
+ import { Button, Card, CardHeader, CardTitle, CardContent } from '@tekton-ui/ui';
12
+
13
+ export default function HomePage() {
14
+ return (
15
+ <Card>
16
+ <CardHeader>
17
+ <CardTitle>Welcome</CardTitle>
18
+ </CardHeader>
19
+ <CardContent>
20
+ <Button variant="default" size="lg">Get Started</Button>
21
+ </CardContent>
22
+ </Card>
23
+ );
24
+ }`
25
+ : `// src/App.tsx
26
+ import { Button, Card, CardHeader, CardTitle, CardContent } from '@tekton-ui/ui';
27
+
28
+ function App() {
29
+ return (
30
+ <Card>
31
+ <CardHeader>
32
+ <CardTitle>Welcome</CardTitle>
33
+ </CardHeader>
34
+ <CardContent>
35
+ <Button variant="default" size="lg">Get Started</Button>
36
+ </CardContent>
37
+ </Card>
38
+ );
39
+ }
40
+
41
+ export default App;`;
42
+ return `# Tekton UI Guide
43
+
44
+ > AI-powered design system for building production-ready UIs.
45
+
46
+ ---
47
+
48
+ ## Quick Start
49
+
50
+ ### Using Components
51
+
52
+ \`\`\`tsx
53
+ ${importExample}
54
+ \`\`\`
55
+
56
+ ### AI Screen Generation
57
+
58
+ Claude Code에서 MCP 서버가 연결되어 있으면, 자연어로 화면을 생성할 수 있습니다:
59
+
60
+ \`\`\`
61
+ "로그인 화면 만들어줘"
62
+ "대시보드 페이지를 카드 레이아웃으로 만들어줘"
63
+ "사용자 프로필 페이지를 만들어줘"
64
+ \`\`\`
65
+
66
+ ---
67
+
68
+ ## Components (30+)
69
+
70
+ ### Core
71
+ Button, Input, Label, Card, Badge, Avatar, Separator, Checkbox, RadioGroup, Switch, Textarea, Skeleton, ScrollArea, Select, Progress
72
+
73
+ ### Complex
74
+ Dialog, DropdownMenu, Table, Tabs, Toast, Tooltip, Popover, Sheet, AlertDialog, NavigationMenu
75
+
76
+ ### Advanced
77
+ Sidebar, Breadcrumb, Command, Calendar, Form
78
+
79
+ ### Usage
80
+
81
+ \`\`\`tsx
82
+ import { Button, Dialog, DialogTrigger, DialogContent } from '@tekton-ui/ui';
83
+ \`\`\`
84
+
85
+ ---
86
+
87
+ ## Screen Templates (13)
88
+
89
+ 프로덕션에서 바로 사용할 수 있는 완성된 화면 템플릿:
90
+
91
+ | Category | Templates |
92
+ |----------|-----------|
93
+ | Auth | Login, Signup, ForgotPassword, Verification |
94
+ | Core | Landing, Preferences, Profile |
95
+ | Feedback | Loading, Error, Empty, Confirmation, Success |
96
+ | Dashboard | Dashboard |
97
+
98
+ ---
99
+
100
+ ## Themes (6)
101
+
102
+ | Theme ID | Description |
103
+ |----------|-------------|
104
+ | \`classic-magazine\` | Classic magazine style |
105
+ | \`equinox-fitness\` | Fitness & wellness |
106
+ | \`minimal-workspace\` | Minimal workspace |
107
+ | \`neutral-humanism\` | Neutral humanism |
108
+ | \`round-minimal\` | Round minimal |
109
+ | \`square-minimalism\` | Square minimalism |
110
+
111
+ ### Applying a Theme
112
+
113
+ \`\`\`tsx
114
+ import { themeToCSS, injectThemeCSS } from '@tekton-ui/ui';
115
+
116
+ // Inject theme CSS at runtime
117
+ injectThemeCSS(themeData);
118
+ \`\`\`
119
+
120
+ ---
121
+
122
+ ## Utility: cn()
123
+
124
+ \`\`\`tsx
125
+ import { cn } from '@tekton-ui/ui';
126
+
127
+ <div className={cn('p-4 bg-white', isActive && 'bg-blue-500', className)} />
128
+ \`\`\`
129
+
130
+ ---
131
+
132
+ ## Links
133
+
134
+ - [npm: @tekton-ui/ui](https://www.npmjs.com/package/@tekton-ui/ui)
135
+ - [npm: @tekton-ui/mcp-server](https://www.npmjs.com/package/@tekton-ui/mcp-server)
136
+ `;
137
+ }
138
+ //# sourceMappingURL=guide-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guide-template.js","sourceRoot":"","sources":["../../src/cli/guide-template.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,SAAoB;IAChD,MAAM,aAAa,GACjB,SAAS,KAAK,QAAQ;QACpB,CAAC,CAAC;;;;;;;;;;;;;;EAcN;QACI,CAAC,CAAC;;;;;;;;;;;;;;;;oBAgBY,CAAC;IAEnB,OAAO;;;;;;;;;;;EAWP,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmFd,CAAC;AACF,CAAC"}
package/dist/cli/index.js CHANGED
@@ -26,6 +26,11 @@ switch (command) {
26
26
  statusCommand();
27
27
  break;
28
28
  }
29
+ case 'init': {
30
+ const { initCommand } = await import('./init.js');
31
+ await initCommand();
32
+ break;
33
+ }
29
34
  default: {
30
35
  // 서브커맨드 없음 → MCP stdio 서버 시작 (기존 동작 유지)
31
36
  await import('../index.js');
@@ -1 +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"}
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,KAAK,MAAM,CAAC,CAAC,CAAC;QACZ,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,WAAW,EAAE,CAAC;QACpB,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,6 @@
1
+ /**
2
+ * tekton-mcp init 명령어
3
+ * 프로젝트에 Tekton UI 디자인 시스템을 한 줄로 설정
4
+ */
5
+ export declare function initCommand(): Promise<void>;
6
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqQH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAyEjD"}
@@ -0,0 +1,272 @@
1
+ /**
2
+ * tekton-mcp init 명령어
3
+ * 프로젝트에 Tekton UI 디자인 시스템을 한 줄로 설정
4
+ */
5
+ import fs from 'node:fs';
6
+ import path from 'node:path';
7
+ import { execSync } from 'node:child_process';
8
+ import readline from 'node:readline';
9
+ import { generateGuide } from './guide-template.js';
10
+ // ─── 상수 ──────────────────────────────────────────────
11
+ const TEKTON_UI_CONTENT_PATH = './node_modules/@tekton-ui/ui/dist/**/*.{js,mjs}';
12
+ const TEKTON_STYLE_IMPORT = "@import '@tekton-ui/ui/styles';";
13
+ const PACKAGES_TO_INSTALL = ['@tekton-ui/ui', 'tailwindcss-animate'];
14
+ // ─── 유틸리티 ──────────────────────────────────────────
15
+ function log(step, total, message) {
16
+ console.log(`\n[${step}/${total}] ${message}`);
17
+ }
18
+ function logDetail(message) {
19
+ console.log(` ${message}`);
20
+ }
21
+ function fileExists(filePath) {
22
+ return fs.existsSync(filePath);
23
+ }
24
+ function findFile(dir, candidates) {
25
+ return candidates.find(c => fileExists(path.join(dir, c)));
26
+ }
27
+ /**
28
+ * stdin에서 사용자 선택을 받음
29
+ */
30
+ async function askUser(question, options) {
31
+ const rl = readline.createInterface({
32
+ input: process.stdin,
33
+ output: process.stdout,
34
+ });
35
+ const prompt = options.map((opt, i) => ` ${i + 1}) ${opt}`).join('\n');
36
+ return new Promise(resolve => {
37
+ rl.question(`${question}\n${prompt}\n> `, answer => {
38
+ rl.close();
39
+ const index = parseInt(answer, 10) - 1;
40
+ const selected = options[index];
41
+ resolve(selected ?? options[0]);
42
+ });
43
+ });
44
+ }
45
+ // ─── Step 1: 프로젝트 감지 ─────────────────────────────
46
+ function detectFramework(cwd) {
47
+ const nextConfigs = ['next.config.ts', 'next.config.js', 'next.config.mjs'];
48
+ const viteConfigs = ['vite.config.ts', 'vite.config.js', 'vite.config.mjs'];
49
+ if (findFile(cwd, nextConfigs)) {
50
+ return 'nextjs';
51
+ }
52
+ if (findFile(cwd, viteConfigs)) {
53
+ return 'vite';
54
+ }
55
+ return null;
56
+ }
57
+ function detectPackageManager(cwd) {
58
+ if (fileExists(path.join(cwd, 'pnpm-lock.yaml'))) {
59
+ return 'pnpm';
60
+ }
61
+ if (fileExists(path.join(cwd, 'yarn.lock'))) {
62
+ return 'yarn';
63
+ }
64
+ if (fileExists(path.join(cwd, 'bun.lock')) || fileExists(path.join(cwd, 'bun.lockb'))) {
65
+ return 'bun';
66
+ }
67
+ return 'npm';
68
+ }
69
+ function installPackages(cwd, pm) {
70
+ const cmd = `${pm} add ${PACKAGES_TO_INSTALL.join(' ')}`;
71
+ logDetail(cmd);
72
+ execSync(cmd, { cwd, stdio: 'inherit' });
73
+ }
74
+ // ─── Step 3: Tailwind CSS 설정 ──────────────────────────
75
+ const TAILWIND_CONFIG_CANDIDATES = [
76
+ 'tailwind.config.ts',
77
+ 'tailwind.config.js',
78
+ 'tailwind.config.mjs',
79
+ 'tailwind.config.cjs',
80
+ ];
81
+ function setupTailwind(cwd) {
82
+ const configName = findFile(cwd, TAILWIND_CONFIG_CANDIDATES);
83
+ if (configName) {
84
+ // 기존 파일 수정
85
+ const configPath = path.join(cwd, configName);
86
+ let content = fs.readFileSync(configPath, 'utf-8');
87
+ // content 배열에 @tekton-ui/ui 경로 추가
88
+ if (!content.includes('@tekton-ui/ui')) {
89
+ content = content.replace(/(content\s*:\s*\[)/, `$1\n '${TEKTON_UI_CONTENT_PATH}',`);
90
+ }
91
+ // plugins에 tailwindcss-animate 추가
92
+ if (!content.includes('tailwindcss-animate')) {
93
+ // plugins 배열이 있는 경우
94
+ if (/plugins\s*:\s*\[/.test(content)) {
95
+ content = content.replace(/(plugins\s*:\s*\[)/, `$1\n require('tailwindcss-animate'),`);
96
+ }
97
+ else {
98
+ // plugins가 없으면 content 닫는 ] 뒤에 추가
99
+ content = content.replace(/(content\s*:\s*\[[\s\S]*?\]\s*,?)/, `$1\n plugins: [require('tailwindcss-animate')],`);
100
+ }
101
+ }
102
+ fs.writeFileSync(configPath, content, 'utf-8');
103
+ logDetail(`${configName} 업데이트 완료`);
104
+ }
105
+ else {
106
+ // 새 파일 생성
107
+ const template = `import type { Config } from 'tailwindcss';
108
+
109
+ const config: Config = {
110
+ content: [
111
+ './app/**/*.{js,ts,jsx,tsx}',
112
+ './src/**/*.{js,ts,jsx,tsx}',
113
+ './components/**/*.{js,ts,jsx,tsx}',
114
+ '${TEKTON_UI_CONTENT_PATH}',
115
+ ],
116
+ plugins: [require('tailwindcss-animate')],
117
+ };
118
+
119
+ export default config;
120
+ `;
121
+ fs.writeFileSync(path.join(cwd, 'tailwind.config.ts'), template, 'utf-8');
122
+ logDetail('tailwind.config.ts 생성 완료');
123
+ }
124
+ }
125
+ // ─── Step 4: CSS 임포트 추가 ────────────────────────────
126
+ function setupCSS(cwd, framework) {
127
+ const candidates = framework === 'nextjs'
128
+ ? ['app/globals.css', 'src/app/globals.css', 'styles/globals.css']
129
+ : ['src/index.css', 'src/main.css', 'index.css'];
130
+ const cssFile = findFile(cwd, candidates);
131
+ if (!cssFile) {
132
+ logDetail('CSS 파일을 찾을 수 없습니다. 수동으로 추가해 주세요:');
133
+ logDetail(` ${TEKTON_STYLE_IMPORT}`);
134
+ return;
135
+ }
136
+ const cssPath = path.join(cwd, cssFile);
137
+ const content = fs.readFileSync(cssPath, 'utf-8');
138
+ if (content.includes(TEKTON_STYLE_IMPORT)) {
139
+ logDetail(`${cssFile} (이미 설정됨, skip)`);
140
+ return;
141
+ }
142
+ // 파일 상단에 import 추가
143
+ fs.writeFileSync(cssPath, `${TEKTON_STYLE_IMPORT}\n\n${content}`, 'utf-8');
144
+ logDetail(`${cssFile} 업데이트 완료`);
145
+ }
146
+ function setupMCP(cwd) {
147
+ const claudeDir = path.join(cwd, '.claude');
148
+ const mcpPath = path.join(claudeDir, 'mcp.json');
149
+ const tektonServer = {
150
+ command: 'npx',
151
+ args: ['@tekton-ui/mcp-server'],
152
+ };
153
+ if (fileExists(mcpPath)) {
154
+ // 기존 파일에 tekton 서버 추가
155
+ const raw = fs.readFileSync(mcpPath, 'utf-8');
156
+ const config = JSON.parse(raw);
157
+ if (!config.mcpServers) {
158
+ config.mcpServers = {};
159
+ }
160
+ if ('tekton' in config.mcpServers) {
161
+ logDetail('.claude/mcp.json (이미 설정됨, skip)');
162
+ return;
163
+ }
164
+ config.mcpServers['tekton'] = tektonServer;
165
+ fs.writeFileSync(mcpPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
166
+ logDetail('.claude/mcp.json 업데이트 완료');
167
+ }
168
+ else {
169
+ // 새 파일 생성
170
+ if (!fileExists(claudeDir)) {
171
+ fs.mkdirSync(claudeDir, { recursive: true });
172
+ }
173
+ const config = {
174
+ mcpServers: {
175
+ tekton: tektonServer,
176
+ },
177
+ };
178
+ fs.writeFileSync(mcpPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
179
+ logDetail('.claude/mcp.json 생성 완료');
180
+ }
181
+ }
182
+ // ─── Step 6: 가이드 문서 생성 ──────────────────────────
183
+ function setupGuide(cwd, framework) {
184
+ const guidePath = path.join(cwd, 'TEKTON-GUIDE.md');
185
+ if (fileExists(guidePath)) {
186
+ logDetail('TEKTON-GUIDE.md (이미 존재함, skip)');
187
+ return;
188
+ }
189
+ const content = generateGuide(framework);
190
+ fs.writeFileSync(guidePath, content, 'utf-8');
191
+ logDetail('TEKTON-GUIDE.md 생성 완료');
192
+ }
193
+ // ─── Step 7: 완료 메시지 ────────────────────────────────
194
+ function printSuccess() {
195
+ console.log(`
196
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
197
+
198
+ Tekton UI 설정 완료!
199
+
200
+ 다음 단계:
201
+ 1. Claude Code를 재시작하세요
202
+ 2. AI에게 요청하세요: "로그인 화면 만들어줘"
203
+ 3. TEKTON-GUIDE.md에서 전체 가이드를 확인하세요
204
+
205
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
206
+ }
207
+ // ─── 메인 ──────────────────────────────────────────────
208
+ export async function initCommand() {
209
+ const cwd = process.cwd();
210
+ const totalSteps = 6;
211
+ console.log('\n@tekton-ui/mcp-server init\n');
212
+ // package.json 확인
213
+ if (!fileExists(path.join(cwd, 'package.json'))) {
214
+ console.error('package.json을 찾을 수 없습니다. 프로젝트 루트에서 실행해 주세요.');
215
+ process.exit(1);
216
+ }
217
+ // Step 1: 프로젝트 감지
218
+ log(1, totalSteps, '프로젝트 감지 중...');
219
+ let framework = detectFramework(cwd);
220
+ if (!framework) {
221
+ const answer = await askUser('프로젝트 유형을 감지할 수 없습니다. 프레임워크를 선택해 주세요:', ['Next.js', 'Vite']);
222
+ framework = answer === 'Vite' ? 'vite' : 'nextjs';
223
+ }
224
+ const frameworkLabel = framework === 'nextjs' ? 'Next.js' : 'Vite';
225
+ logDetail(`${frameworkLabel} 프로젝트`);
226
+ // Step 2: 패키지 설치
227
+ log(2, totalSteps, '패키지 설치 중...');
228
+ const pm = detectPackageManager(cwd);
229
+ try {
230
+ installPackages(cwd, pm);
231
+ }
232
+ catch {
233
+ console.error('패키지 설치에 실패했습니다. 수동으로 설치해 주세요:');
234
+ console.error(` ${pm} add ${PACKAGES_TO_INSTALL.join(' ')}`);
235
+ }
236
+ // Step 3: Tailwind CSS 설정
237
+ log(3, totalSteps, 'Tailwind CSS 설정 중...');
238
+ try {
239
+ setupTailwind(cwd);
240
+ }
241
+ catch {
242
+ console.error('Tailwind CSS 설정에 실패했습니다. 수동으로 설정해 주세요.');
243
+ }
244
+ // Step 4: CSS 토큰 임포트
245
+ log(4, totalSteps, 'CSS 토큰 임포트 추가 중...');
246
+ try {
247
+ setupCSS(cwd, framework);
248
+ }
249
+ catch {
250
+ console.error('CSS 설정에 실패했습니다. 수동으로 추가해 주세요:');
251
+ console.error(` ${TEKTON_STYLE_IMPORT}`);
252
+ }
253
+ // Step 5: MCP 설정
254
+ log(5, totalSteps, 'Claude Code MCP 설정 중...');
255
+ try {
256
+ setupMCP(cwd);
257
+ }
258
+ catch {
259
+ console.error('MCP 설정에 실패했습니다. 수동으로 .claude/mcp.json을 생성해 주세요.');
260
+ }
261
+ // Step 6: 가이드 문서 생성
262
+ log(6, totalSteps, '가이드 문서 생성 중...');
263
+ try {
264
+ setupGuide(cwd, framework);
265
+ }
266
+ catch {
267
+ console.error('가이드 문서 생성에 실패했습니다.');
268
+ }
269
+ // 완료 메시지
270
+ printSuccess();
271
+ }
272
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}