codevf 1.0.0 → 1.0.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.
Files changed (199) hide show
  1. package/LICENSE +30 -21
  2. package/README.md +6 -1
  3. package/bin/codevf-mcp.js +11 -0
  4. package/dist/commands/fix.d.ts +5 -1
  5. package/dist/commands/fix.d.ts.map +1 -1
  6. package/dist/commands/fix.js +170 -13
  7. package/dist/commands/fix.js.map +1 -1
  8. package/dist/commands/init.d.ts.map +1 -1
  9. package/dist/commands/init.js +72 -2
  10. package/dist/commands/init.js.map +1 -1
  11. package/dist/commands/mcp-tools.d.ts +17 -0
  12. package/dist/commands/mcp-tools.d.ts.map +1 -0
  13. package/dist/commands/mcp-tools.js +237 -0
  14. package/dist/commands/mcp-tools.js.map +1 -0
  15. package/dist/commands/setup.d.ts +8 -0
  16. package/dist/commands/setup.d.ts.map +1 -0
  17. package/dist/commands/setup.js +250 -0
  18. package/dist/commands/setup.js.map +1 -0
  19. package/dist/commands/welcome.d.ts +9 -0
  20. package/dist/commands/welcome.d.ts.map +1 -0
  21. package/dist/commands/welcome.js +175 -0
  22. package/dist/commands/welcome.js.map +1 -0
  23. package/dist/index.js +194 -149
  24. package/dist/index.js.map +1 -1
  25. package/dist/lib/api/client.d.ts +28 -0
  26. package/dist/lib/api/client.d.ts.map +1 -0
  27. package/dist/lib/api/client.js +66 -0
  28. package/dist/lib/api/client.js.map +1 -0
  29. package/dist/lib/api/tasks.d.ts +36 -0
  30. package/dist/lib/api/tasks.d.ts.map +1 -0
  31. package/dist/lib/api/tasks.js +62 -0
  32. package/dist/lib/api/tasks.js.map +1 -0
  33. package/dist/lib/api/websocket.d.ts +50 -0
  34. package/dist/lib/api/websocket.d.ts.map +1 -0
  35. package/dist/lib/api/websocket.js +153 -0
  36. package/dist/lib/api/websocket.js.map +1 -0
  37. package/dist/lib/auth/oauth-flow.d.ts +37 -0
  38. package/dist/lib/auth/oauth-flow.d.ts.map +1 -0
  39. package/dist/lib/auth/oauth-flow.js +119 -0
  40. package/dist/lib/auth/oauth-flow.js.map +1 -0
  41. package/dist/lib/auth/token-manager.d.ts +26 -0
  42. package/dist/lib/auth/token-manager.d.ts.map +1 -0
  43. package/dist/lib/auth/token-manager.js +87 -0
  44. package/dist/lib/auth/token-manager.js.map +1 -0
  45. package/dist/lib/config/manager.d.ts +50 -0
  46. package/dist/lib/config/manager.d.ts.map +1 -0
  47. package/dist/lib/config/manager.js +84 -0
  48. package/dist/lib/config/manager.js.map +1 -0
  49. package/dist/lib/utils/errors.d.ts +28 -0
  50. package/dist/lib/utils/errors.d.ts.map +1 -0
  51. package/dist/lib/utils/errors.js +44 -0
  52. package/dist/lib/utils/errors.js.map +1 -0
  53. package/dist/lib/utils/logger.d.ts +20 -0
  54. package/dist/lib/utils/logger.d.ts.map +1 -0
  55. package/dist/lib/utils/logger.js +40 -0
  56. package/dist/lib/utils/logger.js.map +1 -0
  57. package/dist/mcp/index.d.ts +7 -0
  58. package/dist/mcp/index.d.ts.map +1 -0
  59. package/dist/mcp/index.js +158 -0
  60. package/dist/mcp/index.js.map +1 -0
  61. package/dist/mcp/tools/chat.d.ts +30 -0
  62. package/dist/mcp/tools/chat.d.ts.map +1 -0
  63. package/dist/mcp/tools/chat.js +82 -0
  64. package/dist/mcp/tools/chat.js.map +1 -0
  65. package/dist/mcp/tools/instant.d.ts +36 -0
  66. package/dist/mcp/tools/instant.d.ts.map +1 -0
  67. package/dist/mcp/tools/instant.js +100 -0
  68. package/dist/mcp/tools/instant.js.map +1 -0
  69. package/dist/modules/aiAgent.d.ts +75 -0
  70. package/dist/modules/aiAgent.d.ts.map +1 -0
  71. package/dist/modules/aiAgent.js +707 -0
  72. package/dist/modules/aiAgent.js.map +1 -0
  73. package/dist/modules/api.d.ts +7 -0
  74. package/dist/modules/api.d.ts.map +1 -1
  75. package/dist/modules/api.js +13 -4
  76. package/dist/modules/api.js.map +1 -1
  77. package/dist/modules/commandHandler.d.ts +40 -0
  78. package/dist/modules/commandHandler.d.ts.map +1 -0
  79. package/dist/modules/commandHandler.js +345 -0
  80. package/dist/modules/commandHandler.js.map +1 -0
  81. package/dist/modules/config.d.ts +2 -0
  82. package/dist/modules/config.d.ts.map +1 -1
  83. package/dist/modules/config.js +9 -0
  84. package/dist/modules/config.js.map +1 -1
  85. package/dist/modules/constants.d.ts +83 -0
  86. package/dist/modules/constants.d.ts.map +1 -0
  87. package/dist/modules/constants.js +75 -0
  88. package/dist/modules/constants.js.map +1 -0
  89. package/dist/modules/permissions.d.ts +14 -0
  90. package/dist/modules/permissions.d.ts.map +1 -1
  91. package/dist/modules/permissions.js +94 -0
  92. package/dist/modules/permissions.js.map +1 -1
  93. package/dist/modules/toolRegistry.d.ts +50 -0
  94. package/dist/modules/toolRegistry.d.ts.map +1 -0
  95. package/dist/modules/toolRegistry.js +114 -0
  96. package/dist/modules/toolRegistry.js.map +1 -0
  97. package/dist/modules/tunnel.d.ts +33 -0
  98. package/dist/modules/tunnel.d.ts.map +1 -0
  99. package/dist/modules/tunnel.js +79 -0
  100. package/dist/modules/tunnel.js.map +1 -0
  101. package/dist/modules/vibeHelper.d.ts +16 -0
  102. package/dist/modules/vibeHelper.d.ts.map +1 -0
  103. package/dist/modules/vibeHelper.js +38 -0
  104. package/dist/modules/vibeHelper.js.map +1 -0
  105. package/dist/modules/websocket.d.ts +9 -0
  106. package/dist/modules/websocket.d.ts.map +1 -1
  107. package/dist/modules/websocket.js +70 -0
  108. package/dist/modules/websocket.js.map +1 -1
  109. package/dist/tools/consultEngineer.d.ts +13 -0
  110. package/dist/tools/consultEngineer.d.ts.map +1 -0
  111. package/dist/tools/consultEngineer.js +161 -0
  112. package/dist/tools/consultEngineer.js.map +1 -0
  113. package/dist/tools/realtimeChat.d.ts +9 -0
  114. package/dist/tools/realtimeChat.d.ts.map +1 -0
  115. package/dist/tools/realtimeChat.js +101 -0
  116. package/dist/tools/realtimeChat.js.map +1 -0
  117. package/dist/types/index.d.ts +183 -0
  118. package/dist/types/index.d.ts.map +1 -1
  119. package/dist/types/index.js.map +1 -1
  120. package/dist/ui/InteractiveApp.d.ts +13 -0
  121. package/dist/ui/InteractiveApp.d.ts.map +1 -0
  122. package/dist/ui/InteractiveApp.js +84 -0
  123. package/dist/ui/InteractiveApp.js.map +1 -0
  124. package/dist/ui/InteractivePrompt.d.ts +53 -0
  125. package/dist/ui/InteractivePrompt.d.ts.map +1 -0
  126. package/dist/ui/InteractivePrompt.js +422 -0
  127. package/dist/ui/InteractivePrompt.js.map +1 -0
  128. package/dist/ui/LiveSession.d.ts +2 -0
  129. package/dist/ui/LiveSession.d.ts.map +1 -1
  130. package/dist/ui/LiveSession.js +461 -180
  131. package/dist/ui/LiveSession.js.map +1 -1
  132. package/dist/ui/PromptInput.d.ts +14 -0
  133. package/dist/ui/PromptInput.d.ts.map +1 -0
  134. package/dist/ui/PromptInput.js +206 -0
  135. package/dist/ui/PromptInput.js.map +1 -0
  136. package/dist/ui/SessionUI.d.ts +40 -0
  137. package/dist/ui/SessionUI.d.ts.map +1 -0
  138. package/dist/ui/SessionUI.js +227 -0
  139. package/dist/ui/SessionUI.js.map +1 -0
  140. package/dist/ui/input/Command.d.ts +22 -0
  141. package/dist/ui/input/Command.d.ts.map +1 -0
  142. package/dist/ui/input/Command.js +30 -0
  143. package/dist/ui/input/Command.js.map +1 -0
  144. package/dist/ui/input/CustomInput.d.ts +15 -0
  145. package/dist/ui/input/CustomInput.d.ts.map +1 -0
  146. package/dist/ui/input/CustomInput.js +182 -0
  147. package/dist/ui/input/CustomInput.js.map +1 -0
  148. package/dist/ui/input/handlers/handleCursor.d.ts +22 -0
  149. package/dist/ui/input/handlers/handleCursor.d.ts.map +1 -0
  150. package/dist/ui/input/handlers/handleCursor.js +53 -0
  151. package/dist/ui/input/handlers/handleCursor.js.map +1 -0
  152. package/dist/ui/input/handlers/handleEdit.d.ts +18 -0
  153. package/dist/ui/input/handlers/handleEdit.d.ts.map +1 -0
  154. package/dist/ui/input/handlers/handleEdit.js +55 -0
  155. package/dist/ui/input/handlers/handleEdit.js.map +1 -0
  156. package/dist/ui/input/handlers/handleHistory.d.ts +18 -0
  157. package/dist/ui/input/handlers/handleHistory.d.ts.map +1 -0
  158. package/dist/ui/input/handlers/handleHistory.js +85 -0
  159. package/dist/ui/input/handlers/handleHistory.js.map +1 -0
  160. package/dist/ui/input/handlers/handlePaste.d.ts +19 -0
  161. package/dist/ui/input/handlers/handlePaste.d.ts.map +1 -0
  162. package/dist/ui/input/handlers/handlePaste.js +49 -0
  163. package/dist/ui/input/handlers/handlePaste.js.map +1 -0
  164. package/dist/ui/input/handlers/handleSubmit.d.ts +18 -0
  165. package/dist/ui/input/handlers/handleSubmit.d.ts.map +1 -0
  166. package/dist/ui/input/handlers/handleSubmit.js +39 -0
  167. package/dist/ui/input/handlers/handleSubmit.js.map +1 -0
  168. package/dist/ui/input/helpers.d.ts +4 -0
  169. package/dist/ui/input/helpers.d.ts.map +1 -0
  170. package/dist/ui/input/helpers.js +13 -0
  171. package/dist/ui/input/helpers.js.map +1 -0
  172. package/dist/ui/input/keyMatchers.d.ts +14 -0
  173. package/dist/ui/input/keyMatchers.d.ts.map +1 -0
  174. package/dist/ui/input/keyMatchers.js +49 -0
  175. package/dist/ui/input/keyMatchers.js.map +1 -0
  176. package/dist/ui/input/types.d.ts +33 -0
  177. package/dist/ui/input/types.d.ts.map +1 -0
  178. package/dist/ui/input/types.js +2 -0
  179. package/dist/ui/input/types.js.map +1 -0
  180. package/dist/ui/promptWithModes.d.ts +12 -0
  181. package/dist/ui/promptWithModes.d.ts.map +1 -0
  182. package/dist/ui/promptWithModes.js +24 -0
  183. package/dist/ui/promptWithModes.js.map +1 -0
  184. package/dist/ui/renderPrompt.d.ts +12 -0
  185. package/dist/ui/renderPrompt.d.ts.map +1 -0
  186. package/dist/ui/renderPrompt.js +14 -0
  187. package/dist/ui/renderPrompt.js.map +1 -0
  188. package/dist/ui/simplePrompt.d.ts +7 -0
  189. package/dist/ui/simplePrompt.d.ts.map +1 -0
  190. package/dist/ui/simplePrompt.js +38 -0
  191. package/dist/ui/simplePrompt.js.map +1 -0
  192. package/dist/ui/spinner.d.ts +7 -0
  193. package/dist/ui/spinner.d.ts.map +1 -0
  194. package/dist/ui/spinner.js +13 -0
  195. package/dist/ui/spinner.js.map +1 -0
  196. package/package.json +36 -25
  197. package/ARCHITECTURE.md +0 -285
  198. package/BUILD_SUMMARY.md +0 -340
  199. package/QUICKSTART.md +0 -180
@@ -0,0 +1,237 @@
1
+ /**
2
+ * MCP tool commands for interactive mode
3
+ * Provides /cvf, /cvf-instant and /cvf-chat slash commands
4
+ */
5
+ import chalk from 'chalk';
6
+ import prompts from 'prompts';
7
+ import { ConfigManager } from '../lib/config/manager.js';
8
+ import { TokenManager } from '../lib/auth/token-manager.js';
9
+ import { ApiClient } from '../lib/api/client.js';
10
+ import { TasksApi } from '../lib/api/tasks.js';
11
+ import { WebSocketClient } from '../lib/api/websocket.js';
12
+ import { logger } from '../lib/utils/logger.js';
13
+ /**
14
+ * Check if MCP is configured
15
+ */
16
+ function checkMcpConfig() {
17
+ const configManager = new ConfigManager('mcp-config.json');
18
+ if (!configManager.exists()) {
19
+ console.log(chalk.yellow(' [!] MCP not configured'));
20
+ console.log(chalk.dim(' Run: ') + chalk.white('codevf setup') + chalk.dim(' to configure'));
21
+ return { configured: false };
22
+ }
23
+ try {
24
+ const config = configManager.load();
25
+ return { configured: true, config, configManager };
26
+ }
27
+ catch (error) {
28
+ console.log(chalk.red(' [✗] Failed to load MCP config'));
29
+ return { configured: false };
30
+ }
31
+ }
32
+ /**
33
+ * Handle /cvf-instant command
34
+ */
35
+ export async function handleCvfInstant(message) {
36
+ // Check MCP configuration
37
+ const { configured, config, configManager } = checkMcpConfig();
38
+ if (!configured || !config || !configManager) {
39
+ return;
40
+ }
41
+ // Get message if not provided
42
+ let finalMessage = message;
43
+ if (!finalMessage) {
44
+ const response = await prompts({
45
+ type: 'text',
46
+ name: 'message',
47
+ message: chalk.cyan(' Question for engineer:'),
48
+ });
49
+ if (!response.message) {
50
+ console.log(chalk.dim(' Cancelled'));
51
+ return;
52
+ }
53
+ finalMessage = response.message;
54
+ }
55
+ // Get max credits
56
+ const { maxCredits } = await prompts({
57
+ type: 'number',
58
+ name: 'maxCredits',
59
+ message: chalk.cyan(' Max credits (1-10):'),
60
+ initial: 10,
61
+ min: 1,
62
+ max: 10,
63
+ });
64
+ if (!maxCredits) {
65
+ console.log(chalk.dim(' Cancelled'));
66
+ return;
67
+ }
68
+ try {
69
+ // Initialize components
70
+ const tokenManager = new TokenManager(configManager);
71
+ const apiClient = new ApiClient(config.baseUrl, tokenManager);
72
+ const defaultProjectId = config.defaults?.projectId || '1';
73
+ const tasksApi = new TasksApi(apiClient, config.baseUrl, defaultProjectId);
74
+ console.log(chalk.cyan(' [→] Creating instant query...'));
75
+ // Create task
76
+ const task = await tasksApi.create({
77
+ message: finalMessage,
78
+ taskMode: 'realtime_answer',
79
+ maxCredits,
80
+ });
81
+ if (task.warning) {
82
+ console.log(chalk.yellow(` [!] ${task.warning}`));
83
+ }
84
+ console.log(chalk.cyan(` [→] Connecting to engineer (Task ${task.taskId})...`));
85
+ // Connect WebSocket
86
+ const token = await tokenManager.getValidToken();
87
+ const wsProtocol = config.baseUrl.startsWith('https://') ? 'wss://' : 'ws://';
88
+ const host = config.baseUrl.replace(/^https?:\/\//, '');
89
+ const wsUrl = `${wsProtocol}${host}/ws?taskId=${task.taskId}&userType=customer&token=${token}`;
90
+ const ws = new WebSocketClient(wsUrl);
91
+ await ws.connect();
92
+ console.log(chalk.cyan(' [→] Waiting for engineer response...'));
93
+ // Wait for response (5 min timeout)
94
+ const response = await ws.waitForResponse(300000);
95
+ // Disconnect
96
+ ws.disconnect();
97
+ // Display response
98
+ console.log();
99
+ console.log(chalk.bold.green(' ✓ Engineer Response:'));
100
+ console.log();
101
+ console.log(chalk.white(' ' + response.text.split('\n').join('\n ')));
102
+ console.log();
103
+ console.log(chalk.dim(' ───────────────'));
104
+ console.log(chalk.dim(` Credits used: ${response.creditsUsed}`));
105
+ console.log(chalk.dim(` Session time: ${response.duration}`));
106
+ console.log();
107
+ }
108
+ catch (error) {
109
+ console.log(chalk.red(` [✗] Error: ${error.message || error}`));
110
+ logger.error('cvf-instant failed', error);
111
+ }
112
+ }
113
+ /**
114
+ * Handle /cvf-chat command
115
+ */
116
+ export async function handleCvfChat(message) {
117
+ // Check MCP configuration
118
+ const { configured, config, configManager } = checkMcpConfig();
119
+ if (!configured || !config || !configManager) {
120
+ return;
121
+ }
122
+ // Get message if not provided
123
+ let finalMessage = message;
124
+ if (!finalMessage) {
125
+ const response = await prompts({
126
+ type: 'text',
127
+ name: 'message',
128
+ message: chalk.cyan(' Problem description:'),
129
+ });
130
+ if (!response.message) {
131
+ console.log(chalk.dim(' Cancelled'));
132
+ return;
133
+ }
134
+ finalMessage = response.message;
135
+ }
136
+ // Get max credits
137
+ const { maxCredits } = await prompts({
138
+ type: 'number',
139
+ name: 'maxCredits',
140
+ message: chalk.cyan(' Max credits (4-1920):'),
141
+ initial: 240,
142
+ min: 4,
143
+ max: 1920,
144
+ });
145
+ if (!maxCredits) {
146
+ console.log(chalk.dim(' Cancelled'));
147
+ return;
148
+ }
149
+ try {
150
+ // Initialize components
151
+ const tokenManager = new TokenManager(configManager);
152
+ const apiClient = new ApiClient(config.baseUrl, tokenManager);
153
+ const defaultProjectId = config.defaults?.projectId || '1';
154
+ const tasksApi = new TasksApi(apiClient, config.baseUrl, defaultProjectId);
155
+ console.log(chalk.cyan(' [→] Starting chat session...'));
156
+ // Create task
157
+ const task = await tasksApi.create({
158
+ message: finalMessage,
159
+ taskMode: 'realtime_chat',
160
+ maxCredits,
161
+ });
162
+ if (task.warning) {
163
+ console.log(chalk.yellow(` [!] ${task.warning}`));
164
+ }
165
+ // Display session info
166
+ const sessionUrl = `${config.baseUrl}/session/${task.actionId}`;
167
+ const estimatedMinutes = Math.floor(maxCredits / 2);
168
+ console.log();
169
+ console.log(chalk.bold.green(' ✓ Chat session started!'));
170
+ console.log();
171
+ console.log(chalk.white(' Session URL: ') + chalk.cyan.underline(sessionUrl));
172
+ console.log();
173
+ console.log(chalk.dim(' ───────────────'));
174
+ console.log(chalk.dim(` Max credits: ${maxCredits}`));
175
+ console.log(chalk.dim(` Rate: 2 credits/minute`));
176
+ console.log(chalk.dim(` Estimated duration: ~${estimatedMinutes} minutes`));
177
+ console.log(chalk.dim(` Credits remaining: ${task.creditsRemaining}`));
178
+ console.log();
179
+ console.log(chalk.white(' Open the URL above to monitor the conversation.'));
180
+ console.log();
181
+ }
182
+ catch (error) {
183
+ console.log(chalk.red(` [✗] Error: ${error.message || error}`));
184
+ logger.error('cvf-chat failed', error);
185
+ }
186
+ }
187
+ /**
188
+ * Handle /cvf command - interactive menu
189
+ */
190
+ export async function handleCvf(message) {
191
+ // Check MCP configuration
192
+ const { configured } = checkMcpConfig();
193
+ if (!configured) {
194
+ return;
195
+ }
196
+ // If message provided, use instant by default
197
+ if (message) {
198
+ await handleCvfInstant(message);
199
+ return;
200
+ }
201
+ // Show menu
202
+ console.log();
203
+ console.log(chalk.bold.cyan(' 🤝 CodeVF Engineer Tools'));
204
+ console.log();
205
+ const { choice } = await prompts({
206
+ type: 'select',
207
+ name: 'choice',
208
+ message: 'Choose tool:',
209
+ choices: [
210
+ {
211
+ title: chalk.cyan('⚡ Instant') + chalk.dim(' - Quick validation (1-10 credits, ~2 min)'),
212
+ value: 'instant',
213
+ },
214
+ {
215
+ title: chalk.blue('💬 Chat') + chalk.dim(' - Extended session (4-1920 credits, up to 16 hours)'),
216
+ value: 'chat',
217
+ },
218
+ {
219
+ title: chalk.dim('Cancel'),
220
+ value: 'cancel',
221
+ },
222
+ ],
223
+ initial: 0,
224
+ });
225
+ if (!choice || choice === 'cancel') {
226
+ console.log(chalk.dim(' Cancelled'));
227
+ return;
228
+ }
229
+ console.log();
230
+ if (choice === 'instant') {
231
+ await handleCvfInstant();
232
+ }
233
+ else if (choice === 'chat') {
234
+ await handleCvfChat();
235
+ }
236
+ }
237
+ //# sourceMappingURL=mcp-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-tools.js","sourceRoot":"","sources":["../../src/commands/mcp-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Setup command for CodeVF MCP Server configuration
3
+ */
4
+ /**
5
+ * Setup command - configures MCP server for Claude Code
6
+ */
7
+ export declare function setupCommand(): Promise<void>;
8
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA;;GAEG;AA0LH;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CA2FlD"}
@@ -0,0 +1,250 @@
1
+ /**
2
+ * Setup command for CodeVF MCP Server configuration
3
+ */
4
+ import chalk from 'chalk';
5
+ import prompts from 'prompts';
6
+ import ora from 'ora';
7
+ import fs from 'fs';
8
+ import path from 'path';
9
+ import os from 'os';
10
+ import { ConfigManager } from '../lib/config/manager.js';
11
+ import { OAuthFlow } from '../lib/auth/oauth-flow.js';
12
+ /**
13
+ * Get Claude Code config path based on platform
14
+ */
15
+ function getClaudeCodeConfigPath() {
16
+ const platform = os.platform();
17
+ const homeDir = os.homedir();
18
+ if (platform === 'darwin' || platform === 'linux') {
19
+ return path.join(homeDir, '.claude.json');
20
+ }
21
+ else if (platform === 'win32') {
22
+ return path.join(homeDir, '.claude.json');
23
+ }
24
+ return null;
25
+ }
26
+ /**
27
+ * Create /cvf slash command for Claude Code
28
+ */
29
+ function createCvfSlashCommand() {
30
+ try {
31
+ const homeDir = os.homedir();
32
+ const commandsDir = path.join(homeDir, '.claude', 'commands');
33
+ const cvfCommandPath = path.join(commandsDir, 'cvf.md');
34
+ // Create commands directory if it doesn't exist
35
+ if (!fs.existsSync(commandsDir)) {
36
+ fs.mkdirSync(commandsDir, { recursive: true, mode: 0o755 });
37
+ }
38
+ // Check if cvf.md already exists
39
+ if (fs.existsSync(cvfCommandPath)) {
40
+ console.log(chalk.green('✅ /cvf slash command already exists'));
41
+ return true;
42
+ }
43
+ // Create the slash command file
44
+ const commandContent = `---
45
+ description: Ask a CodeVF engineer for help with code validation, debugging, or technical questions
46
+ ---
47
+
48
+ # CodeVF Engineer Assistance
49
+
50
+ Please help me with the following question or task by consulting a CodeVF engineer using the appropriate MCP tool:
51
+
52
+ **My request:**
53
+ {{PROMPT}}
54
+
55
+ ---
56
+
57
+ **Instructions for Claude:**
58
+
59
+ 1. **Analyze the request** to determine which CodeVF tool is most appropriate:
60
+ - Use \`codevf-instant\` for:
61
+ - Quick validation questions (1-10 credits, ~2 min response)
62
+ - "Does this fix work?"
63
+ - "Is this approach correct?"
64
+ - "Can you identify the error?"
65
+ - Simple technical questions
66
+
67
+ - Use \`codevf-chat\` for:
68
+ - Complex debugging requiring back-and-forth (4-1920 credits, 2 credits/min)
69
+ - Multi-step troubleshooting
70
+ - Architecture discussions
71
+ - Extended collaboration
72
+
73
+ 2. **Use the appropriate tool:**
74
+ - For instant queries: Call \`codevf-instant\` with the message and appropriate maxCredits (1-10)
75
+ - For extended sessions: Call \`codevf-chat\` with the message and appropriate maxCredits (suggest 240 for ~2 hours)
76
+
77
+ 3. **Present the response:**
78
+ - For instant queries: Share the engineer's response directly
79
+ - For chat sessions: Provide the session URL so the user can monitor the conversation
80
+
81
+ **Credit Guidelines:**
82
+ - Instant validation: 1-10 credits (typically 3-5 credits per question)
83
+ - Extended chat: 2 credits per minute (240 credits = 2 hours)
84
+
85
+ **Example Usage:**
86
+ - \`/cvf Does this authentication fix prevent the timing attack?\` → Use codevf-instant
87
+ - \`/cvf Complex race condition in WebSocket reconnection needs debugging\` → Use codevf-chat
88
+ `;
89
+ fs.writeFileSync(cvfCommandPath, commandContent, { mode: 0o644 });
90
+ console.log(chalk.green('✅ Created /cvf slash command for Claude Code'));
91
+ return true;
92
+ }
93
+ catch (error) {
94
+ console.log(chalk.yellow('⚠️ Could not create /cvf slash command:'), error.message);
95
+ return false;
96
+ }
97
+ }
98
+ /**
99
+ * Auto-configure Claude Code with MCP server
100
+ */
101
+ async function autoConfigureClaudeCode() {
102
+ console.log(chalk.bold('\n📋 Claude Code Configuration\n'));
103
+ const configPath = getClaudeCodeConfigPath();
104
+ if (!configPath) {
105
+ console.log(chalk.yellow('⚠️ Could not detect Claude Code config path'));
106
+ console.log(chalk.dim(' Please configure manually'));
107
+ return false;
108
+ }
109
+ // Ask user if they want auto-config
110
+ const { shouldConfigure } = await prompts({
111
+ type: 'confirm',
112
+ name: 'shouldConfigure',
113
+ message: 'Configure Claude Code to use CodeVF MCP server?',
114
+ initial: true,
115
+ });
116
+ if (!shouldConfigure) {
117
+ console.log(chalk.dim('\n💡 To configure manually, add to ~/.claude.json:'));
118
+ console.log(chalk.dim(' {'));
119
+ console.log(chalk.dim(' "mcpServers": {'));
120
+ console.log(chalk.dim(' "codevf": {'));
121
+ console.log(chalk.dim(' "command": "node",'));
122
+ console.log(chalk.dim(' "args": ["<path>/dist/mcp/index.js"]'));
123
+ console.log(chalk.dim(' }'));
124
+ console.log(chalk.dim(' }'));
125
+ console.log(chalk.dim(' }'));
126
+ return false;
127
+ }
128
+ try {
129
+ // Backup existing config
130
+ if (fs.existsSync(configPath)) {
131
+ const backupPath = `${configPath}.backup`;
132
+ console.log(chalk.dim('\n📋 Backing up existing config...'));
133
+ fs.copyFileSync(configPath, backupPath);
134
+ console.log(chalk.dim(` Backup: ${backupPath}`));
135
+ }
136
+ // Read or create config
137
+ let config = {};
138
+ if (fs.existsSync(configPath)) {
139
+ const content = fs.readFileSync(configPath, 'utf8');
140
+ config = JSON.parse(content);
141
+ }
142
+ // Get the installed codevf path
143
+ const codevfPath = process.argv[1]; // Path to codevf binary
144
+ const packageDir = path.dirname(path.dirname(codevfPath)); // Go up from dist/index.js
145
+ const mcpServerPath = path.join(packageDir, 'dist', 'mcp', 'index.js');
146
+ // Add or update codevf server
147
+ if (!config.mcpServers) {
148
+ config.mcpServers = {};
149
+ }
150
+ if (config.mcpServers.codevf) {
151
+ console.log(chalk.green('✅ CodeVF MCP server already configured!'));
152
+ }
153
+ else {
154
+ config.mcpServers.codevf = {
155
+ command: 'node',
156
+ args: [mcpServerPath],
157
+ };
158
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2), { mode: 0o600 });
159
+ console.log(chalk.green('✅ Claude Code configured successfully!'));
160
+ }
161
+ // Create /cvf slash command
162
+ createCvfSlashCommand();
163
+ return true;
164
+ }
165
+ catch (error) {
166
+ console.error(chalk.red('\n❌ Auto-config failed:'), error.message);
167
+ return false;
168
+ }
169
+ }
170
+ /**
171
+ * Setup command - configures MCP server for Claude Code
172
+ */
173
+ export async function setupCommand() {
174
+ console.log(chalk.bold.blue('\n╔═══════════════════════════════════════╗'));
175
+ console.log(chalk.bold.blue('║ CodeVF MCP Server Setup ║'));
176
+ console.log(chalk.bold.blue('╚═══════════════════════════════════════╝\n'));
177
+ const mcpConfigManager = new ConfigManager('mcp-config.json');
178
+ // Check if already configured and reuse base URL if present
179
+ let baseUrl = process.env.CODEVF_API_URL || 'https://app.codevf.com';
180
+ if (mcpConfigManager.exists()) {
181
+ const existingConfig = mcpConfigManager.load();
182
+ console.log(chalk.yellow('⚠️ MCP configuration already exists'));
183
+ console.log(chalk.dim(` User ID: ${existingConfig.auth?.userId || 'unknown'}`));
184
+ console.log(chalk.dim(` Base URL: ${existingConfig.baseUrl}\n`));
185
+ const { reconfigure } = await prompts({
186
+ type: 'confirm',
187
+ name: 'reconfigure',
188
+ message: 'Reconfigure authentication?',
189
+ initial: false,
190
+ });
191
+ if (!reconfigure) {
192
+ // Just update Claude Code config
193
+ await autoConfigureClaudeCode();
194
+ console.log(chalk.green('\n🎉 Setup complete!\n'));
195
+ return;
196
+ }
197
+ // Reuse existing base URL when reconfiguring (unless env override)
198
+ if (!process.env.CODEVF_API_URL && existingConfig.baseUrl) {
199
+ baseUrl = existingConfig.baseUrl;
200
+ }
201
+ }
202
+ console.log(chalk.dim(`Using CodeVF at: ${baseUrl}\n`));
203
+ const spinner = ora('Initializing authentication...').start();
204
+ try {
205
+ // Run OAuth flow with MCP type
206
+ spinner.text = 'Opening browser for authentication...';
207
+ const oauthFlow = new OAuthFlow(baseUrl, 'mcp');
208
+ const authResult = await oauthFlow.authenticate();
209
+ spinner.succeed('Authentication successful!');
210
+ // Prompt for default project ID
211
+ const { projectId } = await prompts({
212
+ type: 'text',
213
+ name: 'projectId',
214
+ message: 'Default project ID (optional):',
215
+ initial: '1',
216
+ });
217
+ // Save MCP configuration
218
+ mcpConfigManager.save({
219
+ baseUrl,
220
+ auth: {
221
+ accessToken: authResult.accessToken,
222
+ refreshToken: authResult.refreshToken,
223
+ expiresAt: authResult.expiresAt,
224
+ userId: authResult.userId,
225
+ },
226
+ defaults: {
227
+ maxCredits: 240,
228
+ projectId: projectId || undefined,
229
+ },
230
+ });
231
+ console.log(chalk.green('\n✅ Authentication complete!'));
232
+ console.log(chalk.dim('Configuration saved to:'), mcpConfigManager.getPath());
233
+ // Configure Claude Code
234
+ const configured = await autoConfigureClaudeCode();
235
+ console.log(chalk.bold.green('\n🎉 Setup complete!\n'));
236
+ if (configured) {
237
+ console.log(chalk.bold('Next steps:'));
238
+ console.log(chalk.dim('1. Restart Claude Code to load the MCP server'));
239
+ console.log(chalk.dim('2. Use the /cvf slash command in Claude Code:'));
240
+ console.log(chalk.dim(' Example: ') + chalk.white('/cvf Does this fix work?'));
241
+ console.log(chalk.dim('3. Or ask Claude to use codevf-instant or codevf-chat tools\n'));
242
+ }
243
+ }
244
+ catch (error) {
245
+ spinner.fail('Setup failed');
246
+ console.error(chalk.red('\n❌ Error:'), error.message);
247
+ process.exit(1);
248
+ }
249
+ }
250
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Welcome screen for first-time users
3
+ */
4
+ export declare function welcomeCommand(): Promise<void>;
5
+ /**
6
+ * Check if this is the first run
7
+ */
8
+ export declare function isFirstRun(): boolean;
9
+ //# sourceMappingURL=welcome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"welcome.d.ts","sourceRoot":"","sources":["../../src/commands/welcome.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsBH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAoDpD;AAuHD;;GAEG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAMpC"}