autotunez 0.1.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/agent.d.ts +14 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +163 -0
- package/dist/agent.js.map +1 -0
- package/dist/api-client.d.ts +28 -0
- package/dist/api-client.d.ts.map +1 -0
- package/dist/api-client.js +69 -0
- package/dist/api-client.js.map +1 -0
- package/dist/config.d.ts +18 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +70 -0
- package/dist/config.js.map +1 -0
- package/dist/executor.d.ts +51 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +181 -0
- package/dist/executor.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +399 -0
- package/dist/index.js.map +1 -0
- package/dist/output-parser.d.ts +16 -0
- package/dist/output-parser.d.ts.map +1 -0
- package/dist/output-parser.js +32 -0
- package/dist/output-parser.js.map +1 -0
- package/dist/prompts.d.ts +5 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +91 -0
- package/dist/prompts.js.map +1 -0
- package/dist/setup.d.ts +18 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +267 -0
- package/dist/setup.js.map +1 -0
- package/package.json +67 -0
package/dist/setup.js
ADDED
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
// CLI initial setup — Phase 1 via CLI
|
|
2
|
+
// Detects missing project files and runs interactive interview + scaffolding
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import * as readline from 'readline';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import ora from 'ora';
|
|
8
|
+
import { EXTRACTION_PROMPT, formatConversation, parseProjectConfig, generateClaudeMd, generateScratchpad, generatePlanMd, } from '@autotunez/shared';
|
|
9
|
+
import { getInterviewPrompt } from './prompts.js';
|
|
10
|
+
import { ApiClient } from './api-client.js';
|
|
11
|
+
import { getAuthToken, getServerUrl } from './config.js';
|
|
12
|
+
const REQUIRED_FILES = ['CLAUDE.md', 'SCRATCHPAD.md', 'plan.md'];
|
|
13
|
+
/**
|
|
14
|
+
* Check if the current directory needs initial setup.
|
|
15
|
+
* Returns true if any required file is missing.
|
|
16
|
+
*/
|
|
17
|
+
export function needsSetup(cwd) {
|
|
18
|
+
return REQUIRED_FILES.some((file) => !fs.existsSync(path.join(cwd, file)));
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get list of missing files for diagnostic display.
|
|
22
|
+
*/
|
|
23
|
+
export function getMissingFiles(cwd) {
|
|
24
|
+
return REQUIRED_FILES.filter((file) => !fs.existsSync(path.join(cwd, file)));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Ask user to select skill level.
|
|
28
|
+
*/
|
|
29
|
+
function askSkillLevel(rl) {
|
|
30
|
+
return new Promise((resolve) => {
|
|
31
|
+
console.log('');
|
|
32
|
+
console.log(chalk.bold(' 어떤 모드로 진행할까요?'));
|
|
33
|
+
console.log(chalk.cyan(' 1) ') + '입문자 — 처음부터 차근차근 (풀 인터뷰)');
|
|
34
|
+
console.log(chalk.cyan(' 2) ') + '숙련자 — 핵심만 빠르게 (tech stack + MVP만)');
|
|
35
|
+
console.log('');
|
|
36
|
+
rl.question(chalk.blue(' 선택 (1/2): '), (answer) => {
|
|
37
|
+
const trimmed = answer.trim();
|
|
38
|
+
resolve(trimmed === '2' ? 'expert' : 'beginner');
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Ask a free-form question via readline.
|
|
44
|
+
*/
|
|
45
|
+
function askQuestion(rl, prompt) {
|
|
46
|
+
return new Promise((resolve) => {
|
|
47
|
+
rl.question(prompt, (answer) => {
|
|
48
|
+
resolve(answer.trim());
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Run the full setup flow:
|
|
54
|
+
* 1. Ask skill level
|
|
55
|
+
* 2. Interview to gather project info
|
|
56
|
+
* 3. Extract ProjectConfig
|
|
57
|
+
* 4. Generate and write files
|
|
58
|
+
*/
|
|
59
|
+
export async function runSetup(apiKey, cwd) {
|
|
60
|
+
const rl = readline.createInterface({
|
|
61
|
+
input: process.stdin,
|
|
62
|
+
output: process.stdout,
|
|
63
|
+
});
|
|
64
|
+
try {
|
|
65
|
+
// Step 1: Skill level
|
|
66
|
+
const level = await askSkillLevel(rl);
|
|
67
|
+
console.log('');
|
|
68
|
+
console.log(level === 'beginner'
|
|
69
|
+
? chalk.green('입문자 모드로 시작합니다. 편하게 이야기해주세요!')
|
|
70
|
+
: chalk.green('숙련자 모드로 시작합니다. 빠르게 진행할게요!'));
|
|
71
|
+
console.log('');
|
|
72
|
+
// Step 2: Interview + Extract
|
|
73
|
+
const authToken = getAuthToken();
|
|
74
|
+
let config;
|
|
75
|
+
if (authToken) {
|
|
76
|
+
// Server-mode: use autotunez server API
|
|
77
|
+
const result = await runInterviewServer(rl, level, authToken);
|
|
78
|
+
if (!result)
|
|
79
|
+
return false;
|
|
80
|
+
config = result;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
// Legacy mode: direct Anthropic SDK
|
|
84
|
+
const result = await runInterviewLegacy(rl, level, apiKey);
|
|
85
|
+
if (!result)
|
|
86
|
+
return false;
|
|
87
|
+
config = result;
|
|
88
|
+
}
|
|
89
|
+
// Step 3: Write files (shared by both modes)
|
|
90
|
+
const writeSpinner = ora('파일 생성 중...').start();
|
|
91
|
+
const files = [
|
|
92
|
+
{ name: 'CLAUDE.md', content: generateClaudeMd(config) },
|
|
93
|
+
{ name: 'SCRATCHPAD.md', content: generateScratchpad(config) },
|
|
94
|
+
{ name: 'plan.md', content: generatePlanMd(config) },
|
|
95
|
+
];
|
|
96
|
+
for (const file of files) {
|
|
97
|
+
fs.writeFileSync(path.join(cwd, file.name), file.content, 'utf-8');
|
|
98
|
+
}
|
|
99
|
+
writeSpinner.succeed('파일 생성 완료');
|
|
100
|
+
console.log('');
|
|
101
|
+
for (const file of files) {
|
|
102
|
+
console.log(chalk.green(` ✓ ${file.name}`));
|
|
103
|
+
}
|
|
104
|
+
console.log('');
|
|
105
|
+
console.log(chalk.bold.green('프로젝트 셋업 완료!'));
|
|
106
|
+
console.log(chalk.gray('이제 개발을 시작하세요. 아무 요청이나 입력해보세요.\n'));
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
if (error instanceof Error) {
|
|
111
|
+
console.log(chalk.red(`\n✗ 셋업 실패: ${error.message}`));
|
|
112
|
+
}
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
rl.close();
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Server-mode interview: uses autotunez server API.
|
|
121
|
+
* Returns ProjectConfig on success, null on cancellation.
|
|
122
|
+
*/
|
|
123
|
+
async function runInterviewServer(rl, level, authToken) {
|
|
124
|
+
const apiClient = new ApiClient({
|
|
125
|
+
authToken,
|
|
126
|
+
serverUrl: getServerUrl(),
|
|
127
|
+
});
|
|
128
|
+
const messages = [];
|
|
129
|
+
const initialMsg = level === 'beginner'
|
|
130
|
+
? '안녕하세요! 앱을 만들고 싶어요.'
|
|
131
|
+
: '프로젝트 셋업해줘.';
|
|
132
|
+
messages.push({ role: 'user', content: initialMsg });
|
|
133
|
+
const firstResponse = await apiClient.interview(messages, level);
|
|
134
|
+
messages.push({ role: 'assistant', content: firstResponse.message });
|
|
135
|
+
console.log(chalk.green('autotunez: ') + firstResponse.message);
|
|
136
|
+
console.log('');
|
|
137
|
+
if (!firstResponse.readyToGenerate) {
|
|
138
|
+
const MAX_TURNS = 10;
|
|
139
|
+
let readyToGenerate = false;
|
|
140
|
+
for (let turn = 0; turn < MAX_TURNS; turn++) {
|
|
141
|
+
const userInput = await askQuestion(rl, chalk.blue('You: '));
|
|
142
|
+
if (!userInput)
|
|
143
|
+
continue;
|
|
144
|
+
if (userInput.toLowerCase() === 'exit' || userInput.toLowerCase() === 'quit') {
|
|
145
|
+
console.log(chalk.gray('\n셋업을 취소합니다.'));
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
messages.push({ role: 'user', content: userInput });
|
|
149
|
+
const spinner = ora('생각 중...').start();
|
|
150
|
+
const response = await apiClient.interview(messages, level);
|
|
151
|
+
spinner.stop();
|
|
152
|
+
messages.push({ role: 'assistant', content: response.message });
|
|
153
|
+
if (response.readyToGenerate) {
|
|
154
|
+
if (response.message) {
|
|
155
|
+
console.log(chalk.green('\nautotunez: ') + response.message);
|
|
156
|
+
}
|
|
157
|
+
readyToGenerate = true;
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
console.log(chalk.green('\nautotunez: ') + response.message);
|
|
161
|
+
console.log('');
|
|
162
|
+
}
|
|
163
|
+
if (!readyToGenerate) {
|
|
164
|
+
console.log(chalk.yellow('\n대화가 길어졌습니다. 현재까지의 정보로 프로젝트를 생성합니다.'));
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Extract project info via server
|
|
168
|
+
console.log('');
|
|
169
|
+
const extractSpinner = ora('프로젝트 정보 추출 중...').start();
|
|
170
|
+
const extractResult = await apiClient.extract(messages);
|
|
171
|
+
extractSpinner.succeed(`프로젝트 추출 완료: ${extractResult.config.name}`);
|
|
172
|
+
return extractResult.config;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Legacy-mode interview: direct Anthropic SDK calls.
|
|
176
|
+
* Returns ProjectConfig on success, null on cancellation.
|
|
177
|
+
*/
|
|
178
|
+
async function runInterviewLegacy(rl, level, apiKey) {
|
|
179
|
+
const systemPrompt = getInterviewPrompt(level);
|
|
180
|
+
const { default: Anthropic } = await import('@anthropic-ai/sdk');
|
|
181
|
+
const client = new Anthropic({ apiKey });
|
|
182
|
+
const messages = [];
|
|
183
|
+
// First question from assistant
|
|
184
|
+
const initialMsg = level === 'beginner'
|
|
185
|
+
? '안녕하세요! 앱을 만들고 싶어요.'
|
|
186
|
+
: '프로젝트 셋업해줘.';
|
|
187
|
+
const firstResponse = await client.messages.create({
|
|
188
|
+
model: 'claude-sonnet-4-20250514',
|
|
189
|
+
max_tokens: 1024,
|
|
190
|
+
system: systemPrompt,
|
|
191
|
+
messages: [{ role: 'user', content: initialMsg }],
|
|
192
|
+
});
|
|
193
|
+
const firstContent = firstResponse.content[0];
|
|
194
|
+
if (firstContent.type !== 'text') {
|
|
195
|
+
console.log(chalk.red('✗ Unexpected response from AI'));
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
messages.push({ role: 'user', content: initialMsg });
|
|
199
|
+
messages.push({ role: 'assistant', content: firstContent.text });
|
|
200
|
+
console.log(chalk.green('autotunez: ') + firstContent.text);
|
|
201
|
+
console.log('');
|
|
202
|
+
// Conversation loop
|
|
203
|
+
const MAX_TURNS = 10;
|
|
204
|
+
let readyToGenerate = false;
|
|
205
|
+
for (let turn = 0; turn < MAX_TURNS; turn++) {
|
|
206
|
+
const userInput = await askQuestion(rl, chalk.blue('You: '));
|
|
207
|
+
if (!userInput)
|
|
208
|
+
continue;
|
|
209
|
+
if (userInput.toLowerCase() === 'exit' || userInput.toLowerCase() === 'quit') {
|
|
210
|
+
console.log(chalk.gray('\n셋업을 취소합니다.'));
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
messages.push({ role: 'user', content: userInput });
|
|
214
|
+
const spinner = ora('생각 중...').start();
|
|
215
|
+
const response = await client.messages.create({
|
|
216
|
+
model: 'claude-sonnet-4-20250514',
|
|
217
|
+
max_tokens: 1024,
|
|
218
|
+
system: systemPrompt,
|
|
219
|
+
messages: messages.map((m) => ({ role: m.role, content: m.content })),
|
|
220
|
+
});
|
|
221
|
+
spinner.stop();
|
|
222
|
+
const content = response.content[0];
|
|
223
|
+
if (content.type !== 'text') {
|
|
224
|
+
console.log(chalk.red('✗ Unexpected response'));
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
messages.push({ role: 'assistant', content: content.text });
|
|
228
|
+
// Check for ready marker
|
|
229
|
+
if (content.text.includes('[READY_TO_GENERATE]')) {
|
|
230
|
+
const cleanText = content.text.replace(/\[READY_TO_GENERATE\]/g, '').trim();
|
|
231
|
+
if (cleanText) {
|
|
232
|
+
console.log(chalk.green('\nautotunez: ') + cleanText);
|
|
233
|
+
}
|
|
234
|
+
readyToGenerate = true;
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
console.log(chalk.green('\nautotunez: ') + content.text);
|
|
238
|
+
console.log('');
|
|
239
|
+
}
|
|
240
|
+
if (!readyToGenerate) {
|
|
241
|
+
console.log(chalk.yellow('\n대화가 길어졌습니다. 현재까지의 정보로 프로젝트를 생성합니다.'));
|
|
242
|
+
}
|
|
243
|
+
// Extract project info
|
|
244
|
+
console.log('');
|
|
245
|
+
const extractSpinner = ora('프로젝트 정보 추출 중...').start();
|
|
246
|
+
const conversationText = formatConversation(messages);
|
|
247
|
+
const extractResponse = await client.messages.create({
|
|
248
|
+
model: 'claude-sonnet-4-20250514',
|
|
249
|
+
max_tokens: 1024,
|
|
250
|
+
messages: [
|
|
251
|
+
{
|
|
252
|
+
role: 'user',
|
|
253
|
+
content: `Extract project info from this conversation:\n\n${conversationText}`,
|
|
254
|
+
},
|
|
255
|
+
],
|
|
256
|
+
system: EXTRACTION_PROMPT,
|
|
257
|
+
});
|
|
258
|
+
const extractContent = extractResponse.content[0];
|
|
259
|
+
if (extractContent.type !== 'text') {
|
|
260
|
+
extractSpinner.fail('프로젝트 정보 추출 실패');
|
|
261
|
+
return null;
|
|
262
|
+
}
|
|
263
|
+
const config = parseProjectConfig(extractContent.text);
|
|
264
|
+
extractSpinner.succeed(`프로젝트 추출 완료: ${config.name}`);
|
|
265
|
+
return config;
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,6EAA6E;AAE7E,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,kBAAkB,EAAmB,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEzD,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;AAEjE;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,EAAsB;IAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,yBAAyB,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,mCAAmC,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE;YACjD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YAC9B,OAAO,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,EAAsB,EAAE,MAAc;IACzD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YAC7B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAAc,EAAE,GAAW;IACxD,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,sBAAsB;QACtB,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,EAAE,CAAC,CAAC;QAEtC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,UAAU;YAClB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC;YAC5C,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAC7C,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,8BAA8B;QAC9B,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;QACjC,IAAI,MAAqB,CAAC;QAE1B,IAAI,SAAS,EAAE,CAAC;YACd,wCAAwC;YACxC,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YAC9D,IAAI,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YAC1B,MAAM,GAAG,MAAM,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,oCAAoC;YACpC,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAC3D,IAAI,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YAC1B,MAAM,GAAG,MAAM,CAAC;QAClB,CAAC;QAED,6CAA6C;QAC7C,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC;QAE/C,MAAM,KAAK,GAA6C;YACtD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAAE;YACxD,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,kBAAkB,CAAC,MAAM,CAAC,EAAE;YAC9D,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE;SACrD,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACrE,CAAC;QAED,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAEjC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAE3D,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,kBAAkB,CAC/B,EAAsB,EACtB,KAAiB,EACjB,SAAiB;IAEjB,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC;QAC9B,SAAS;QACT,SAAS,EAAE,YAAY,EAAE;KAC1B,CAAC,CAAC;IAEH,MAAM,QAAQ,GAA2D,EAAE,CAAC;IAC5E,MAAM,UAAU,GACd,KAAK,KAAK,UAAU;QAClB,CAAC,CAAC,oBAAoB;QACtB,CAAC,CAAC,YAAY,CAAC;IAEnB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IAErD,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACjE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAErE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,IAAI,eAAe,GAAG,KAAK,CAAC;QAE5B,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAE7D,IAAI,CAAC,SAAS;gBAAE,SAAS;YACzB,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;gBAC7E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;gBACxC,OAAO,IAAI,CAAC;YACd,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YAEpD,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;YAEhE,IAAI,QAAQ,CAAC,eAAe,EAAE,CAAC;gBAC7B,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC/D,CAAC;gBACD,eAAe,GAAG,IAAI,CAAC;gBACvB,MAAM;YACR,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,cAAc,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEtD,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxD,cAAc,CAAC,OAAO,CAAC,eAAe,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAEnE,OAAO,aAAa,CAAC,MAAM,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,kBAAkB,CAC/B,EAAsB,EACtB,KAAiB,EACjB,MAAc;IAEd,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,MAAM,QAAQ,GAA2D,EAAE,CAAC;IAE5E,gCAAgC;IAChC,MAAM,UAAU,GACd,KAAK,KAAK,UAAU;QAClB,CAAC,CAAC,oBAAoB;QACtB,CAAC,CAAC,YAAY,CAAC;IAEnB,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACjD,KAAK,EAAE,0BAA0B;QACjC,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,YAAY;QACpB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;KAClD,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9C,IAAI,YAAY,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IACrD,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IAEjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,oBAAoB;IACpB,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,IAAI,eAAe,GAAG,KAAK,CAAC;IAE5B,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAE7D,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;YAC7E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAEpD,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC;QAEvC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5C,KAAK,EAAE,0BAA0B;YACjC,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,YAAY;YACpB,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;SACtE,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;YAChD,SAAS;QACX,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAE5D,yBAAyB;QACzB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACjD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5E,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,SAAS,CAAC,CAAC;YACxD,CAAC;YACD,eAAe,GAAG,IAAI,CAAC;YACvB,MAAM;QACR,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,uBAAuB;IACvB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,MAAM,cAAc,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC;IAEtD,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnD,KAAK,EAAE,0BAA0B;QACjC,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,mDAAmD,gBAAgB,EAAE;aAC/E;SACF;QACD,MAAM,EAAE,iBAAiB;KAC1B,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClD,IAAI,cAAc,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACnC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACvD,cAAc,CAAC,OAAO,CAAC,eAAe,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAErD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "autotunez",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "CLI for vibe coding with Claude - transform messy prompts into optimized Claude Code instructions",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"autotunez": "./dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"import": "./dist/index.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsc",
|
|
22
|
+
"start": "node dist/index.js",
|
|
23
|
+
"dev": "tsx src/index.ts",
|
|
24
|
+
"lint": "eslint src/",
|
|
25
|
+
"typecheck": "tsc --noEmit",
|
|
26
|
+
"test": "vitest run",
|
|
27
|
+
"prepublishOnly": "pnpm build"
|
|
28
|
+
},
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "git+https://github.com/kevin-hs-sohn/autotunez.git",
|
|
32
|
+
"directory": "packages/cli"
|
|
33
|
+
},
|
|
34
|
+
"keywords": [
|
|
35
|
+
"autotunez",
|
|
36
|
+
"claude",
|
|
37
|
+
"ai",
|
|
38
|
+
"cli",
|
|
39
|
+
"vibe-coding",
|
|
40
|
+
"prompt",
|
|
41
|
+
"assistant"
|
|
42
|
+
],
|
|
43
|
+
"author": "Kevin Sohn",
|
|
44
|
+
"license": "MIT",
|
|
45
|
+
"engines": {
|
|
46
|
+
"node": ">=18"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@autotunez/shared": "workspace:*",
|
|
50
|
+
"chalk": "^5.6.2",
|
|
51
|
+
"commander": "^14.0.2",
|
|
52
|
+
"ora": "^9.1.0"
|
|
53
|
+
},
|
|
54
|
+
"optionalDependencies": {
|
|
55
|
+
"@anthropic-ai/sdk": "^0.32.0"
|
|
56
|
+
},
|
|
57
|
+
"devDependencies": {
|
|
58
|
+
"@types/node": "^20.19.30",
|
|
59
|
+
"@typescript-eslint/eslint-plugin": "^8.53.1",
|
|
60
|
+
"@typescript-eslint/parser": "^8.53.1",
|
|
61
|
+
"eslint": "^9.39.2",
|
|
62
|
+
"tsx": "^4.0.0",
|
|
63
|
+
"typescript": "^5.3.0",
|
|
64
|
+
"typescript-eslint": "^8.53.1",
|
|
65
|
+
"vitest": "^4.0.18"
|
|
66
|
+
}
|
|
67
|
+
}
|