@sowonai/crewx-cli 0.4.0-dev.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 (173) hide show
  1. package/README.md +529 -0
  2. package/dist/ai-provider.service.d.ts +36 -0
  3. package/dist/ai-provider.service.js +191 -0
  4. package/dist/ai-provider.service.js.map +1 -0
  5. package/dist/ai.service.d.ts +57 -0
  6. package/dist/ai.service.js +628 -0
  7. package/dist/ai.service.js.map +1 -0
  8. package/dist/app.module.d.ts +5 -0
  9. package/dist/app.module.js +103 -0
  10. package/dist/app.module.js.map +1 -0
  11. package/dist/cli/agent.handler.d.ts +2 -0
  12. package/dist/cli/agent.handler.js +140 -0
  13. package/dist/cli/agent.handler.js.map +1 -0
  14. package/dist/cli/chat.handler.d.ts +19 -0
  15. package/dist/cli/chat.handler.js +431 -0
  16. package/dist/cli/chat.handler.js.map +1 -0
  17. package/dist/cli/cli.handler.d.ts +4 -0
  18. package/dist/cli/cli.handler.js +97 -0
  19. package/dist/cli/cli.handler.js.map +1 -0
  20. package/dist/cli/doctor.handler.d.ts +36 -0
  21. package/dist/cli/doctor.handler.js +382 -0
  22. package/dist/cli/doctor.handler.js.map +1 -0
  23. package/dist/cli/execute.handler.d.ts +2 -0
  24. package/dist/cli/execute.handler.js +319 -0
  25. package/dist/cli/execute.handler.js.map +1 -0
  26. package/dist/cli/help.handler.d.ts +2 -0
  27. package/dist/cli/help.handler.js +10 -0
  28. package/dist/cli/help.handler.js.map +1 -0
  29. package/dist/cli/init.handler.d.ts +26 -0
  30. package/dist/cli/init.handler.js +450 -0
  31. package/dist/cli/init.handler.js.map +1 -0
  32. package/dist/cli/mcp.handler.d.ts +3 -0
  33. package/dist/cli/mcp.handler.js +121 -0
  34. package/dist/cli/mcp.handler.js.map +1 -0
  35. package/dist/cli/query.handler.d.ts +2 -0
  36. package/dist/cli/query.handler.js +380 -0
  37. package/dist/cli/query.handler.js.map +1 -0
  38. package/dist/cli/templates.handler.d.ts +2 -0
  39. package/dist/cli/templates.handler.js +100 -0
  40. package/dist/cli/templates.handler.js.map +1 -0
  41. package/dist/cli-options.d.ts +29 -0
  42. package/dist/cli-options.js +234 -0
  43. package/dist/cli-options.js.map +1 -0
  44. package/dist/config/timeout.config.d.ts +14 -0
  45. package/dist/config/timeout.config.js +34 -0
  46. package/dist/config/timeout.config.js.map +1 -0
  47. package/dist/conversation/base-conversation-history.provider.d.ts +12 -0
  48. package/dist/conversation/base-conversation-history.provider.js +45 -0
  49. package/dist/conversation/base-conversation-history.provider.js.map +1 -0
  50. package/dist/conversation/cli-conversation-history.provider.d.ts +16 -0
  51. package/dist/conversation/cli-conversation-history.provider.js +111 -0
  52. package/dist/conversation/cli-conversation-history.provider.js.map +1 -0
  53. package/dist/conversation/conversation-provider.factory.d.ts +10 -0
  54. package/dist/conversation/conversation-provider.factory.js +50 -0
  55. package/dist/conversation/conversation-provider.factory.js.map +1 -0
  56. package/dist/conversation/index.d.ts +6 -0
  57. package/dist/conversation/index.js +27 -0
  58. package/dist/conversation/index.js.map +1 -0
  59. package/dist/conversation/slack-conversation-history.provider.d.ts +28 -0
  60. package/dist/conversation/slack-conversation-history.provider.js +278 -0
  61. package/dist/conversation/slack-conversation-history.provider.js.map +1 -0
  62. package/dist/crewx.tool.d.ts +332 -0
  63. package/dist/crewx.tool.js +1461 -0
  64. package/dist/crewx.tool.js.map +1 -0
  65. package/dist/guards/bearer-auth.guard.d.ts +7 -0
  66. package/dist/guards/bearer-auth.guard.js +44 -0
  67. package/dist/guards/bearer-auth.guard.js.map +1 -0
  68. package/dist/health.controller.d.ts +6 -0
  69. package/dist/health.controller.js +32 -0
  70. package/dist/health.controller.js.map +1 -0
  71. package/dist/main.d.ts +1 -0
  72. package/dist/main.js +267 -0
  73. package/dist/main.js.map +1 -0
  74. package/dist/mcp.controller.d.ts +8 -0
  75. package/dist/mcp.controller.js +62 -0
  76. package/dist/mcp.controller.js.map +1 -0
  77. package/dist/project.service.d.ts +44 -0
  78. package/dist/project.service.js +299 -0
  79. package/dist/project.service.js.map +1 -0
  80. package/dist/providers/base-ai.provider.d.ts +50 -0
  81. package/dist/providers/base-ai.provider.js +624 -0
  82. package/dist/providers/base-ai.provider.js.map +1 -0
  83. package/dist/providers/claude.provider.d.ts +25 -0
  84. package/dist/providers/claude.provider.js +362 -0
  85. package/dist/providers/claude.provider.js.map +1 -0
  86. package/dist/providers/codex.provider.d.ts +17 -0
  87. package/dist/providers/codex.provider.js +99 -0
  88. package/dist/providers/codex.provider.js.map +1 -0
  89. package/dist/providers/copilot.provider.d.ts +25 -0
  90. package/dist/providers/copilot.provider.js +266 -0
  91. package/dist/providers/copilot.provider.js.map +1 -0
  92. package/dist/providers/dynamic-provider.factory.d.ts +55 -0
  93. package/dist/providers/dynamic-provider.factory.js +586 -0
  94. package/dist/providers/dynamic-provider.factory.js.map +1 -0
  95. package/dist/providers/gemini.provider.d.ts +22 -0
  96. package/dist/providers/gemini.provider.js +147 -0
  97. package/dist/providers/gemini.provider.js.map +1 -0
  98. package/dist/services/agent-loader.service.d.ts +29 -0
  99. package/dist/services/agent-loader.service.js +370 -0
  100. package/dist/services/agent-loader.service.js.map +1 -0
  101. package/dist/services/auth.service.d.ts +9 -0
  102. package/dist/services/auth.service.js +47 -0
  103. package/dist/services/auth.service.js.map +1 -0
  104. package/dist/services/config-validator.service.d.ts +28 -0
  105. package/dist/services/config-validator.service.js +467 -0
  106. package/dist/services/config-validator.service.js.map +1 -0
  107. package/dist/services/config.service.d.ts +45 -0
  108. package/dist/services/config.service.js +180 -0
  109. package/dist/services/config.service.js.map +1 -0
  110. package/dist/services/context-enhancement.service.d.ts +13 -0
  111. package/dist/services/context-enhancement.service.js +169 -0
  112. package/dist/services/context-enhancement.service.js.map +1 -0
  113. package/dist/services/document-loader.service.d.ts +16 -0
  114. package/dist/services/document-loader.service.js +137 -0
  115. package/dist/services/document-loader.service.js.map +1 -0
  116. package/dist/services/help.service.d.ts +5 -0
  117. package/dist/services/help.service.js +117 -0
  118. package/dist/services/help.service.js.map +1 -0
  119. package/dist/services/intelligent-compression.service.d.ts +20 -0
  120. package/dist/services/intelligent-compression.service.js +179 -0
  121. package/dist/services/intelligent-compression.service.js.map +1 -0
  122. package/dist/services/mcp-client.service.d.ts +26 -0
  123. package/dist/services/mcp-client.service.js +81 -0
  124. package/dist/services/mcp-client.service.js.map +1 -0
  125. package/dist/services/parallel-processing.service.d.ts +108 -0
  126. package/dist/services/parallel-processing.service.js +268 -0
  127. package/dist/services/parallel-processing.service.js.map +1 -0
  128. package/dist/services/remote-agent.service.d.ts +49 -0
  129. package/dist/services/remote-agent.service.js +215 -0
  130. package/dist/services/remote-agent.service.js.map +1 -0
  131. package/dist/services/result-formatter.service.d.ts +27 -0
  132. package/dist/services/result-formatter.service.js +126 -0
  133. package/dist/services/result-formatter.service.js.map +1 -0
  134. package/dist/services/task-management.service.d.ts +63 -0
  135. package/dist/services/task-management.service.js +272 -0
  136. package/dist/services/task-management.service.js.map +1 -0
  137. package/dist/services/template.service.d.ts +36 -0
  138. package/dist/services/template.service.js +195 -0
  139. package/dist/services/template.service.js.map +1 -0
  140. package/dist/services/tool-call.service.d.ts +53 -0
  141. package/dist/services/tool-call.service.js +1061 -0
  142. package/dist/services/tool-call.service.js.map +1 -0
  143. package/dist/slack/formatters/message.formatter.d.ts +25 -0
  144. package/dist/slack/formatters/message.formatter.js +246 -0
  145. package/dist/slack/formatters/message.formatter.js.map +1 -0
  146. package/dist/slack/slack-bot.d.ts +24 -0
  147. package/dist/slack/slack-bot.js +467 -0
  148. package/dist/slack/slack-bot.js.map +1 -0
  149. package/dist/stderr.logger.d.ts +8 -0
  150. package/dist/stderr.logger.js +26 -0
  151. package/dist/stderr.logger.js.map +1 -0
  152. package/dist/utils/config-utils.d.ts +15 -0
  153. package/dist/utils/config-utils.js +69 -0
  154. package/dist/utils/config-utils.js.map +1 -0
  155. package/dist/utils/mcp-installer.d.ts +20 -0
  156. package/dist/utils/mcp-installer.js +199 -0
  157. package/dist/utils/mcp-installer.js.map +1 -0
  158. package/dist/utils/mention-parser.d.ts +18 -0
  159. package/dist/utils/mention-parser.js +136 -0
  160. package/dist/utils/mention-parser.js.map +1 -0
  161. package/dist/utils/simple-security.d.ts +3 -0
  162. package/dist/utils/simple-security.js +20 -0
  163. package/dist/utils/simple-security.js.map +1 -0
  164. package/dist/utils/stdin-utils.d.ts +27 -0
  165. package/dist/utils/stdin-utils.js +130 -0
  166. package/dist/utils/stdin-utils.js.map +1 -0
  167. package/dist/utils/template-processor.d.ts +32 -0
  168. package/dist/utils/template-processor.js +202 -0
  169. package/dist/utils/template-processor.js.map +1 -0
  170. package/dist/version.d.ts +1 -0
  171. package/dist/version.js +17 -0
  172. package/dist/version.js.map +1 -0
  173. package/package.json +122 -0
@@ -0,0 +1,450 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.InitHandler = void 0;
13
+ exports.handleInit = handleInit;
14
+ const common_1 = require("@nestjs/common");
15
+ const fs_1 = require("fs");
16
+ const path_1 = require("path");
17
+ const task_management_service_1 = require("../services/task-management.service");
18
+ const result_formatter_service_1 = require("../services/result-formatter.service");
19
+ const template_service_1 = require("../services/template.service");
20
+ let InitHandler = class InitHandler {
21
+ constructor(taskManagementService, resultFormatterService, templateService) {
22
+ this.taskManagementService = taskManagementService;
23
+ this.resultFormatterService = resultFormatterService;
24
+ this.templateService = templateService;
25
+ }
26
+ async handle(options = {}) {
27
+ const taskId = this.taskManagementService.createTask({
28
+ type: 'init',
29
+ command: 'crewx init',
30
+ options: options
31
+ });
32
+ try {
33
+ this.taskManagementService.addTaskLog(taskId, {
34
+ level: 'info',
35
+ message: 'Starting CrewX project initialization'
36
+ });
37
+ const workingDir = options.workingDirectory || process.cwd();
38
+ const configPath = options.config || 'crewx.yaml';
39
+ const fullConfigPath = (0, path_1.join)(workingDir, configPath);
40
+ const templateName = options.template || 'default';
41
+ const templateVersion = options.templateVersion || 'main';
42
+ if ((0, fs_1.existsSync)(fullConfigPath) && !options.force) {
43
+ this.taskManagementService.addTaskLog(taskId, {
44
+ level: 'warn',
45
+ message: `Configuration file already exists: ${fullConfigPath}`
46
+ });
47
+ const message = `⚠️ CrewX configuration already exists at ${configPath}\n\nUse --force to overwrite existing configuration.`;
48
+ this.taskManagementService.completeTask(taskId, { message }, false);
49
+ return { success: false, message, taskId };
50
+ }
51
+ const logDir = (0, path_1.join)(workingDir, '.crewx', 'logs');
52
+ if (!(0, fs_1.existsSync)(logDir)) {
53
+ (0, fs_1.mkdirSync)(logDir, { recursive: true });
54
+ this.taskManagementService.addTaskLog(taskId, {
55
+ level: 'info',
56
+ message: `Created logs directory: ${logDir}`
57
+ });
58
+ }
59
+ const templatesDir = (0, path_1.join)(workingDir, '.crewx', 'templates');
60
+ if (!(0, fs_1.existsSync)(templatesDir)) {
61
+ (0, fs_1.mkdirSync)(templatesDir, { recursive: true });
62
+ this.taskManagementService.addTaskLog(taskId, {
63
+ level: 'info',
64
+ message: `Created templates directory: ${templatesDir}`
65
+ });
66
+ try {
67
+ const { readFileSync, writeFileSync } = require('fs');
68
+ const templateSource = (0, path_1.join)(__dirname, '..', '..', 'documents', 'templates', 'conversation-history-default.hbs');
69
+ const templateDest = (0, path_1.join)(templatesDir, 'conversation-history-default.hbs');
70
+ if ((0, fs_1.existsSync)(templateSource)) {
71
+ const content = readFileSync(templateSource, 'utf8');
72
+ writeFileSync(templateDest, content);
73
+ this.taskManagementService.addTaskLog(taskId, {
74
+ level: 'info',
75
+ message: `Copied default conversation template`
76
+ });
77
+ }
78
+ }
79
+ catch (error) {
80
+ this.taskManagementService.addTaskLog(taskId, {
81
+ level: 'warn',
82
+ message: `Could not copy default template (will use fallback): ${error instanceof Error ? error.message : String(error)}`
83
+ });
84
+ }
85
+ }
86
+ const claudeCommandsDir = (0, path_1.join)(workingDir, '.claude', 'commands');
87
+ if (!(0, fs_1.existsSync)(claudeCommandsDir)) {
88
+ (0, fs_1.mkdirSync)(claudeCommandsDir, { recursive: true });
89
+ this.taskManagementService.addTaskLog(taskId, {
90
+ level: 'info',
91
+ message: `Created Claude commands directory: ${claudeCommandsDir}`
92
+ });
93
+ try {
94
+ const commandContent = this.generateClaudeCommand(workingDir);
95
+ const commandFile = (0, path_1.join)(claudeCommandsDir, 'crewx-user.md');
96
+ (0, fs_1.writeFileSync)(commandFile, commandContent, 'utf8');
97
+ this.taskManagementService.addTaskLog(taskId, {
98
+ level: 'info',
99
+ message: `Created Claude Code command: ${commandFile}`
100
+ });
101
+ }
102
+ catch (error) {
103
+ this.taskManagementService.addTaskLog(taskId, {
104
+ level: 'warn',
105
+ message: `Could not create Claude command file: ${error instanceof Error ? error.message : String(error)}`
106
+ });
107
+ }
108
+ }
109
+ let configContent;
110
+ try {
111
+ this.taskManagementService.addTaskLog(taskId, {
112
+ level: 'info',
113
+ message: `Downloading template '${templateName}' from GitHub (${templateVersion})...`
114
+ });
115
+ configContent = await this.templateService.downloadTemplate(templateName, templateVersion);
116
+ this.taskManagementService.addTaskLog(taskId, {
117
+ level: 'info',
118
+ message: `✅ Successfully downloaded template from GitHub`
119
+ });
120
+ }
121
+ catch (downloadError) {
122
+ this.taskManagementService.addTaskLog(taskId, {
123
+ level: 'warn',
124
+ message: `Failed to download template: ${downloadError?.message || downloadError}`
125
+ });
126
+ this.taskManagementService.addTaskLog(taskId, {
127
+ level: 'info',
128
+ message: 'Using local default template as fallback...'
129
+ });
130
+ configContent = this.generateDefaultAgentsConfig(workingDir);
131
+ }
132
+ (0, fs_1.writeFileSync)(fullConfigPath, configContent, 'utf8');
133
+ this.taskManagementService.addTaskLog(taskId, {
134
+ level: 'info',
135
+ message: `Created configuration file: ${fullConfigPath}`
136
+ });
137
+ const successMessage = this.formatSuccessMessage(configPath, workingDir, templateName);
138
+ this.taskManagementService.completeTask(taskId, { message: successMessage }, true);
139
+ return { success: true, message: successMessage, taskId };
140
+ }
141
+ catch (error) {
142
+ const errorMessage = `Failed to initialize CrewX project: ${error instanceof Error ? error.message : String(error)}`;
143
+ this.taskManagementService.addTaskLog(taskId, {
144
+ level: 'error',
145
+ message: errorMessage
146
+ });
147
+ this.taskManagementService.completeTask(taskId, { error: errorMessage }, false);
148
+ return { success: false, message: errorMessage, taskId };
149
+ }
150
+ }
151
+ generateDefaultAgentsConfig(workingDir) {
152
+ return `# CrewX Agents Configuration
153
+ # Generated by 'crewx init'
154
+
155
+ agents:
156
+ # CrewX Assistant - Your guide to using CrewX
157
+ - id: "crewx"
158
+ name: "CrewX Assistant"
159
+ role: "assistant"
160
+ team: "CrewX"
161
+ working_directory: "./"
162
+ options:
163
+ query:
164
+ - "--add-dir=."
165
+ inline:
166
+ type: "agent"
167
+ provider: "claude" # Will fallback to gemini → copilot if claude is unavailable
168
+ system_prompt: |
169
+ You are the CrewX Assistant, designed to help users with:
170
+
171
+ 1. **Getting Started with CrewX**:
172
+ - Explain how to use crewx CLI commands (query, execute, init, doctor)
173
+ - Guide users through agent configuration in crewx.yaml
174
+ - Help with model selection using @agent:model syntax
175
+
176
+ 2. **Agent Configuration**:
177
+ - Assist with creating custom agents in crewx.yaml
178
+ - Explain inline configuration (provider, model, system_prompt)
179
+ - Help configure options for query and execute modes
180
+
181
+ 3. **Troubleshooting**:
182
+ - Diagnose CLI tool availability issues
183
+ - Explain error messages and suggest solutions
184
+ - Guide users through authentication setup for claude/gemini/copilot
185
+
186
+ 4. **Best Practices**:
187
+ - Recommend which models to use for different tasks
188
+ - Suggest parallel vs sequential execution strategies
189
+ - Advise on cost-effective model selection
190
+
191
+ Always be helpful, concise, and provide practical examples.
192
+ Focus on CrewX-specific guidance and tool usage.
193
+
194
+ # Built-in AI Assistants (Ready to use)
195
+ - id: "claude"
196
+ name: "Claude AI"
197
+ role: "AI Assistant"
198
+ team: "AI Team"
199
+ working_directory: "./"
200
+ inline:
201
+ type: "agent"
202
+ provider: "claude"
203
+ system_prompt: |
204
+ Claude AI assistant for general tasks, code analysis, and writing assistance.
205
+
206
+ Specialties: General AI, Code Analysis, Writing, Problem Solving
207
+ Capabilities: general_assistance, code_analysis, writing
208
+
209
+ - id: "gemini"
210
+ name: "Gemini AI"
211
+ role: "AI Assistant"
212
+ team: "AI Team"
213
+ working_directory: "./"
214
+ inline:
215
+ type: "agent"
216
+ provider: "gemini"
217
+ system_prompt: |
218
+ Google Gemini AI assistant for analysis, development, and problem-solving.
219
+
220
+ Specialties: Code Analysis, Architecture Design, Performance Optimization
221
+ Capabilities: code_analysis, architecture_design, optimization
222
+
223
+ - id: "copilot"
224
+ name: "GitHub Copilot"
225
+ role: "AI Assistant"
226
+ team: "AI Team"
227
+ working_directory: "./"
228
+ inline:
229
+ type: "agent"
230
+ provider: "copilot"
231
+ system_prompt: |
232
+ GitHub Copilot AI assistant for code development and engineering tasks.
233
+
234
+ Specialties: Code Development, Best Practices, Testing
235
+ Capabilities: code_development, testing, best_practices
236
+
237
+ # Custom Project Agents (Example configurations)
238
+ # Uncomment and customize the sections below for your project needs
239
+
240
+ # - id: "backend_developer"
241
+ # name: "Backend Developer"
242
+ # role: "developer"
243
+ # team: "Development Team"
244
+ # working_directory: "${workingDir}"
245
+ # options:
246
+ # - "--allowedTools=Edit,Bash,Computer"
247
+ # - "--add-dir=."
248
+ # inline:
249
+ # type: "agent"
250
+ # provider: "claude"
251
+ # system_prompt: |
252
+ # You are a senior backend developer specializing in server-side development.
253
+ # Focus on API design, database architecture, and system performance.
254
+ #
255
+ # Your expertise includes:
256
+ # - RESTful API development
257
+ # - Database design and optimization
258
+ # - Server architecture and scalability
259
+ # - Security best practices
260
+
261
+ # - id: "frontend_developer"
262
+ # name: "Frontend Developer"
263
+ # role: "developer"
264
+ # team: "Development Team"
265
+ # working_directory: "${workingDir}"
266
+ # options:
267
+ # - "--allow-tool=terminal"
268
+ # - "--allow-tool=files"
269
+ # - "--add-dir=."
270
+ # inline:
271
+ # type: "agent"
272
+ # provider: "copilot"
273
+ # system_prompt: |
274
+ # You are a senior frontend developer specializing in user interface development.
275
+ # Focus on user experience, responsive design, and modern frontend frameworks.
276
+ #
277
+ # Your expertise includes:
278
+ # - React, Vue, Angular development
279
+ # - CSS/SCSS and responsive design
280
+ # - JavaScript/TypeScript best practices
281
+ # - Performance optimization
282
+
283
+ # - id: "devops_engineer"
284
+ # name: "DevOps Engineer"
285
+ # role: "engineer"
286
+ # team: "Infrastructure Team"
287
+ # working_directory: "${workingDir}"
288
+ # inline:
289
+ # type: "agent"
290
+ # provider: "gemini"
291
+ # system_prompt: |
292
+ # You are a DevOps engineer specializing in infrastructure and deployment.
293
+ # Focus on automation, monitoring, and system reliability.
294
+ #
295
+ # Your expertise includes:
296
+ # - CI/CD pipeline design
297
+ # - Container orchestration (Docker, Kubernetes)
298
+ # - Cloud infrastructure (AWS, GCP, Azure)
299
+ # - Monitoring and logging systems
300
+
301
+ # Usage Examples:
302
+ # crewx query "@claude analyze this codebase"
303
+ # crewx query "@claude @gemini @copilot review security practices"
304
+ # crewx execute "@backend_developer create user authentication API"
305
+ # crewx execute "@frontend_developer @backend_developer implement OAuth flow"
306
+ `;
307
+ }
308
+ generateClaudeCommand(workingDir) {
309
+ return `# CrewX 사용자 커맨드
310
+
311
+ 당신은 CrewX 사용자 가이드 전문가입니다. CrewX를 처음 사용하는 분들이 쉽게 따라할 수 있도록 안내합니다.
312
+
313
+ ## 🎯 주요 역할
314
+
315
+ ### ✅ 도와줄 수 있는 일
316
+ - **CrewX 기본 사용법**: query, execute, init, doctor 명령어 가이드
317
+ - **에이전트 활용**: @claude, @gemini, @copilot 활용법
318
+ - **프로젝트 설정**: crewx.yaml 커스터마이징
319
+ - **문제 해결**: 일반적인 에러와 해결책
320
+
321
+ ## 🚀 빠른 시작 가이드
322
+
323
+ ### 1. 기본 명령어
324
+ \`\`\`bash
325
+ # 설치 확인
326
+ crewx doctor
327
+
328
+ # 간단한 질문
329
+ crewx query "@claude 이 코드를 설명해줘"
330
+
331
+ # 작업 실행
332
+ crewx execute "@claude 이 함수를 테스트 코드로 만들어줘"
333
+ \`\`\`
334
+
335
+ ### 2. 에이전트 활용
336
+ \`\`\`bash
337
+ # 멀티 에이전트 활용
338
+ crewx query "@claude @gemini 이 아키텍처를 검토해줘"
339
+
340
+ # 특정 작업에 적합한 에이전트
341
+ crewx execute "@copilot React 컴포넌트를 만들어줘"
342
+ crewx query "@gemini 성능 최적화 방법을 분석해줘"
343
+ \`\`\`
344
+
345
+ ### 3. 커스텀 에이전트
346
+ \`\`\`bash
347
+ # crewx.yaml에 추가한 커스텀 에이전트 활용
348
+ crewx query "@my_developer 이 기능을 구현해줘"
349
+ \`\`\`
350
+
351
+ ## 🔧 일반적인 문제 해결
352
+
353
+ ### 인증 문제
354
+ - **Claude**: ANTHROPIC_API_KEY 환경변수 설정
355
+ - **Gemini**: GOOGLE_API_KEY 환경변수 설정
356
+ - **Copilot**: GitHub 토큰 설정
357
+
358
+ ### 명령어 오류
359
+ - \`crewx doctor\`로 상태 확인
360
+ - \`crewx --help\`로 전체 명령어 확인
361
+
362
+ ## 📚 더 알아보기
363
+
364
+ ### 심화 활용
365
+ - 병렬 처리: 여러 에이전트에게 동시에 작업 요청
366
+ - 커스텀 프롬프트: crewx.yaml에서 system_prompt 수정
367
+ - 템플릿 활용: 개발, 운영 등 특정 목적의 에이전트 설정
368
+
369
+ 항상 친절하게 설명하고, 구체적인 예시를 들어주세요.
370
+ `;
371
+ }
372
+ formatSuccessMessage(configPath, workingDir, templateName) {
373
+ const templateInfo = templateName && templateName !== 'default'
374
+ ? `\n**Template Used:** \`${templateName}\``
375
+ : '';
376
+ return `🎉 **CrewX Project Initialized Successfully!**
377
+
378
+ **Configuration File Created:** \`${configPath}\`
379
+ **Working Directory:** \`${workingDir}\`
380
+ **Logs Directory:** \`.crewx/logs\`
381
+ **Claude Commands:** \`.claude/commands/crewx-user.md\`${templateInfo}
382
+
383
+ **Available Agents:**
384
+ • \`@claude\` - Claude AI Assistant (General purpose)
385
+ • \`@gemini\` - Gemini AI Assistant (Analysis & Architecture)
386
+ • \`@copilot\` - GitHub Copilot (Code Development)
387
+
388
+ **Claude Code Integration:**
389
+ • Use \`@crewx-user\` for quick help and guidance
390
+ • Built-in command for CrewX usage assistance
391
+
392
+ **Next Steps:**
393
+ 1. **Test your setup:**
394
+ \`crewx doctor\`
395
+
396
+ 2. **Try Claude Code:**
397
+ In Claude Code: \`@crewx-user how do I start?\`
398
+
399
+ 3. **Try a simple query:**
400
+ \`crewx query "@claude hello world"\`
401
+
402
+ 4. **Customize your agents:**
403
+ Edit \`${configPath}\` to add project-specific agents
404
+
405
+ 5. **Learn more:**
406
+ \`crewx --help\`
407
+
408
+ **Pro Tips:**
409
+ • Use multiple agents: \`crewx query "@claude @gemini analyze this code"\`
410
+ • Claude Code users: \`@crewx-user\` for instant guidance
411
+ • Add custom agents in \`${configPath}\` for specialized tasks
412
+
413
+ Happy coding with CrewX! 🚀`;
414
+ }
415
+ };
416
+ exports.InitHandler = InitHandler;
417
+ exports.InitHandler = InitHandler = __decorate([
418
+ (0, common_1.Injectable)(),
419
+ __metadata("design:paramtypes", [task_management_service_1.TaskManagementService,
420
+ result_formatter_service_1.ResultFormatterService,
421
+ template_service_1.TemplateService])
422
+ ], InitHandler);
423
+ const common_2 = require("@nestjs/common");
424
+ const logger = new common_2.Logger('InitHandler');
425
+ async function handleInit(app, args) {
426
+ logger.log('Init command received');
427
+ try {
428
+ const initHandler = app.get(InitHandler);
429
+ console.log('🚀 Initializing CrewX project...');
430
+ const result = await initHandler.handle({
431
+ config: args.config,
432
+ workingDirectory: process.cwd(),
433
+ force: args.force || false,
434
+ template: args.template || 'default',
435
+ templateVersion: args.templateVersion || 'main',
436
+ });
437
+ console.log(result.message);
438
+ if (!result.success) {
439
+ process.exit(1);
440
+ }
441
+ }
442
+ catch (error) {
443
+ logger.error(`Init failed: ${error instanceof Error ? error.message : error}`);
444
+ console.log('❌ Failed to initialize CrewX project');
445
+ console.log(` Error: ${error instanceof Error ? error.message : error}`);
446
+ console.log(' Try running with --force or check file permissions');
447
+ process.exit(1);
448
+ }
449
+ }
450
+ //# sourceMappingURL=init.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.handler.js","sourceRoot":"","sources":["../../src/cli/init.handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { CliOptions } from '../cli-options';
2
+ export declare function handleMcpCallTool(args: CliOptions): Promise<number>;
3
+ export declare function handleMcpListTools(args: CliOptions): Promise<number>;
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleMcpCallTool = handleMcpCallTool;
4
+ exports.handleMcpListTools = handleMcpListTools;
5
+ const common_1 = require("@nestjs/common");
6
+ const core_1 = require("@nestjs/core");
7
+ const app_module_1 = require("../app.module");
8
+ const stderr_logger_1 = require("../stderr.logger");
9
+ const tool_call_service_1 = require("../services/tool-call.service");
10
+ const config_service_1 = require("../services/config.service");
11
+ const ai_provider_service_1 = require("../ai-provider.service");
12
+ const logger = new common_1.Logger('McpCliHandler');
13
+ function parseToolParams(paramString) {
14
+ if (!paramString || !paramString.trim()) {
15
+ return {};
16
+ }
17
+ try {
18
+ const parsed = JSON.parse(paramString);
19
+ if (parsed === null || typeof parsed !== 'object') {
20
+ throw new Error('JSON root must be an object');
21
+ }
22
+ return parsed;
23
+ }
24
+ catch (error) {
25
+ throw new Error(`Invalid JSON provided via --params: ${error.message || String(error)}`);
26
+ }
27
+ }
28
+ async function prepareApplicationContext(args) {
29
+ const app = await core_1.NestFactory.createApplicationContext(app_module_1.AppModule.forRoot(args), {
30
+ logger: args.log ? new stderr_logger_1.StderrLogger('CrewXMCP', { timestamp: true }) : false,
31
+ });
32
+ if (args.config) {
33
+ const configService = app.get(config_service_1.ConfigService);
34
+ const aiProviderService = app.get(ai_provider_service_1.AIProviderService);
35
+ configService.setConfigPath(args.config);
36
+ configService.loadAgentConfigs();
37
+ await aiProviderService.reloadPluginProviders();
38
+ }
39
+ return app;
40
+ }
41
+ async function handleMcpCallTool(args) {
42
+ if (!args.mcpToolName) {
43
+ console.error('❌ Missing tool name. Usage: crewx mcp call_tool "<tool_name>" --params \'{"key":"value"}\'');
44
+ return 1;
45
+ }
46
+ let app;
47
+ let exitCode = 0;
48
+ try {
49
+ const input = parseToolParams(args.mcpParams);
50
+ app = await prepareApplicationContext(args);
51
+ const toolCallService = app.get(tool_call_service_1.ToolCallService);
52
+ logger.log(`Invoking MCP tool '${args.mcpToolName}'`);
53
+ const result = await toolCallService.execute(args.mcpToolName, input, {
54
+ agentId: 'cli:mcp',
55
+ threadId: args.thread,
56
+ });
57
+ if (result.success) {
58
+ console.log(`✅ Tool '${args.mcpToolName}' executed successfully`);
59
+ if (result.data !== undefined) {
60
+ const output = typeof result.data === 'string' ? result.data : JSON.stringify(result.data, null, 2);
61
+ console.log(output);
62
+ }
63
+ if (result.metadata) {
64
+ console.log('');
65
+ console.log('ℹ️ Metadata:');
66
+ console.log(JSON.stringify(result.metadata, null, 2));
67
+ }
68
+ exitCode = 0;
69
+ }
70
+ else {
71
+ console.error(`❌ Tool '${args.mcpToolName}' execution failed`);
72
+ if (result.error) {
73
+ console.error(`Error: ${result.error}`);
74
+ }
75
+ if (result.data) {
76
+ console.error('Partial data:');
77
+ console.error(JSON.stringify(result.data, null, 2));
78
+ }
79
+ exitCode = 1;
80
+ }
81
+ }
82
+ catch (error) {
83
+ console.error(`❌ Failed to execute tool '${args.mcpToolName}': ${error.message || error}`);
84
+ exitCode = 1;
85
+ }
86
+ finally {
87
+ if (app) {
88
+ await app.close();
89
+ }
90
+ }
91
+ return exitCode;
92
+ }
93
+ async function handleMcpListTools(args) {
94
+ let app;
95
+ let exitCode = 0;
96
+ try {
97
+ app = await prepareApplicationContext(args);
98
+ const toolCallService = app.get(tool_call_service_1.ToolCallService);
99
+ const tools = toolCallService.list();
100
+ if (!tools || tools.length === 0) {
101
+ console.log('ℹ️ No MCP tools are registered.');
102
+ return exitCode;
103
+ }
104
+ console.log(`🔧 Registered MCP tools (${tools.length}):`);
105
+ tools.forEach((tool) => {
106
+ console.log(`- ${tool.name}: ${tool.description}`);
107
+ });
108
+ exitCode = 0;
109
+ }
110
+ catch (error) {
111
+ console.error(`❌ Failed to list MCP tools: ${error.message || error}`);
112
+ exitCode = 1;
113
+ }
114
+ finally {
115
+ if (app) {
116
+ await app.close();
117
+ }
118
+ }
119
+ return exitCode;
120
+ }
121
+ //# sourceMappingURL=mcp.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.handler.js","sourceRoot":"","sources":["../../src/cli/mcp.handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { CliOptions } from '../cli-options';
2
+ export declare function handleQuery(app: any, args: CliOptions): Promise<void>;