@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,117 @@
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 __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.HelpService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const chalk_1 = __importDefault(require("chalk"));
15
+ const fs_1 = require("fs");
16
+ const path_1 = require("path");
17
+ let HelpService = class HelpService {
18
+ getPackageInfo() {
19
+ try {
20
+ const packagePath = (0, path_1.join)(process.cwd(), 'package.json');
21
+ const packageContent = (0, fs_1.readFileSync)(packagePath, 'utf8');
22
+ const packageJson = JSON.parse(packageContent);
23
+ return {
24
+ version: packageJson.version || '0.1.1',
25
+ repository: packageJson.repository?.url || 'https://github.com/sowonlabs/crewx'
26
+ };
27
+ }
28
+ catch (error) {
29
+ return {
30
+ version: '0.1.1',
31
+ repository: 'https://github.com/sowonlabs/crewx'
32
+ };
33
+ }
34
+ }
35
+ showHelp() {
36
+ const { version, repository } = this.getPackageInfo();
37
+ console.log(chalk_1.default.bold.cyan(`
38
+ CrewX CLI v${version} - AI-Powered Development Team at Your Fingertips
39
+ `));
40
+ console.log(chalk_1.default.bold('========================================================='));
41
+ console.log(chalk_1.default.yellow(`
42
+ Welcome to CrewX!
43
+
44
+ CrewX is a multi-AI agent collaboration platform designed to streamline your
45
+ development workflow. You can assign tasks to different AI agents, each with
46
+ their own specialization, and get results in parallel.
47
+ `));
48
+ console.log(chalk_1.default.bold.white('USAGE:'));
49
+ console.log(chalk_1.default.white(` $ crewx <command> [options] "[prompt] [@agent1 @agent2 ...]"
50
+ `));
51
+ console.log(chalk_1.default.bold.white('COMMANDS:'));
52
+ this.showCommandHelp('query, q', 'Ask a question or assign a high-level task. Ideal for analysis, design, and complex problem-solving.', [
53
+ 'crewx query "@claude Analyze our authentication flow for potential security vulnerabilities."',
54
+ 'crewx q "@claude:opus Design a database schema for a simple e-commerce site."',
55
+ 'crewx q "@copilot What are the best practices for building a scalable REST API in Node.js?"',
56
+ ]);
57
+ this.showCommandHelp('execute, x', 'Give a direct order to write or modify code. Best for implementation-focused tasks.', [
58
+ 'crewx execute "@gemini Implement a function that calculates the factorial of a number in TypeScript."',
59
+ 'crewx x "@copilot:gpt-5 Refactor the \'userService.ts\' file to use async/await instead of promises."',
60
+ 'crewx x "@copilot Create a new React component called \'UserProfile\' with a form to update user details."',
61
+ ]);
62
+ this.showCommandHelp('init', 'Initializes a new CrewX project, creating a default `crewx.yaml` configuration file.', ['crewx init']);
63
+ this.showCommandHelp('doctor', 'Checks the health and status of your configured AI providers (e.g., Gemini, Claude, Copilot).', ['crewx doctor']);
64
+ this.showCommandHelp('mcp', 'Starts the Model Context Protocol (MCP) server for integration with IDEs like VS Code.', ['crewx mcp']);
65
+ this.showCommandHelp('chat', 'Start an interactive chat session with conversation history. Maintains context across messages.', [
66
+ 'crewx chat',
67
+ 'crewx chat --thread my-session',
68
+ 'crewx chat --list',
69
+ 'crewx chat --delete my-session',
70
+ ]);
71
+ this.showCommandHelp('agent', 'Inspect available agents and their metadata.', [
72
+ 'crewx agent ls',
73
+ 'crewx agent ls --raw',
74
+ ]);
75
+ this.showCommandHelp('slack', 'Starts the Slack bot integration for team collaboration. Supports read-only query and execute modes.', [
76
+ 'crewx slack',
77
+ 'crewx slack --mode execute',
78
+ 'crewx slack --agent gemini',
79
+ 'crewx slack --agent copilot'
80
+ ]);
81
+ this.showCommandHelp('help', 'Shows this help message.', ['crewx help']);
82
+ console.log(chalk_1.default.bold.white('\nAGENT SPECIALIZATIONS:'));
83
+ console.log(chalk_1.default.white(`
84
+ You can direct tasks to agents by mentioning them with '@'. Each agent has a
85
+ unique strength:
86
+
87
+ - ${chalk_1.default.bold('@claude')} : Excels at complex reasoning, system design, and architectural decisions.
88
+ - ${chalk_1.default.bold('@copilot')} : Your go-to for implementation, best practices, and generating code.
89
+ - ${chalk_1.default.bold('@gemini')} : Specialized in performance analysis, data structures, and algorithms.
90
+
91
+ You can query multiple agents at once for a collaborative effort:
92
+ ${chalk_1.default.gray('$ crewx query "@claude @gemini Review this code for bugs and suggest performance improvements"')}
93
+ `));
94
+ console.log(chalk_1.default.bold.white('\nOPTIONS:'));
95
+ console.log(chalk_1.default.white(` -c, --config <file> Path to the agent configuration file (default: "crewx.yaml")`));
96
+ console.log(chalk_1.default.white(` --log Enable detailed logging for debugging.`));
97
+ console.log(chalk_1.default.white(` -h, --help Show this help message.`));
98
+ console.log(chalk_1.default.bold.cyan(`
99
+ For more information, visit: ${repository}`));
100
+ }
101
+ showCommandHelp(name, description, examples) {
102
+ console.log(chalk_1.default.bold.green(`
103
+ ${name}`));
104
+ console.log(chalk_1.default.white(` ${description}`));
105
+ if (examples.length > 0) {
106
+ console.log(chalk_1.default.gray(' Examples:'));
107
+ examples.forEach(example => {
108
+ console.log(chalk_1.default.gray(` $ ${example}`));
109
+ });
110
+ }
111
+ }
112
+ };
113
+ exports.HelpService = HelpService;
114
+ exports.HelpService = HelpService = __decorate([
115
+ (0, common_1.Injectable)()
116
+ ], HelpService);
117
+ //# sourceMappingURL=help.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.service.js","sourceRoot":"","sources":["../../src/services/help.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { ConversationThread } from '@sowonai/crewx-sdk';
2
+ export declare class IntelligentCompressionService {
3
+ private readonly logger;
4
+ compressConversationHistory(thread: ConversationThread, options?: {
5
+ maxTokens?: number;
6
+ maxMessages?: number;
7
+ preserveRecentCount?: number;
8
+ preserveImportant?: boolean;
9
+ }): Promise<string>;
10
+ private identifyImportantMessages;
11
+ private isImportantMessage;
12
+ private applyCompressionStrategy;
13
+ private summarizeImportantMessages;
14
+ private summarizeMessage;
15
+ private generateContextSummary;
16
+ private extractTopics;
17
+ private identifyPatterns;
18
+ private estimateTokens;
19
+ private applyFinalCompression;
20
+ }
@@ -0,0 +1,179 @@
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 IntelligentCompressionService_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.IntelligentCompressionService = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ let IntelligentCompressionService = IntelligentCompressionService_1 = class IntelligentCompressionService {
13
+ constructor() {
14
+ this.logger = new common_1.Logger(IntelligentCompressionService_1.name);
15
+ }
16
+ async compressConversationHistory(thread, options) {
17
+ const maxTokens = options?.maxTokens ?? 4000;
18
+ const maxMessages = options?.maxMessages ?? 20;
19
+ const preserveRecentCount = options?.preserveRecentCount ?? 5;
20
+ const preserveImportant = options?.preserveImportant ?? true;
21
+ if (thread.messages.length === 0) {
22
+ return '';
23
+ }
24
+ const recentMessages = thread.messages.slice(-preserveRecentCount);
25
+ const olderMessages = thread.messages.slice(0, -preserveRecentCount);
26
+ const importantMessages = preserveImportant
27
+ ? this.identifyImportantMessages(olderMessages)
28
+ : [];
29
+ const compressedHistory = await this.applyCompressionStrategy(olderMessages, importantMessages, recentMessages, maxTokens, maxMessages);
30
+ return compressedHistory;
31
+ }
32
+ identifyImportantMessages(messages) {
33
+ const important = [];
34
+ for (const message of messages) {
35
+ if (this.isImportantMessage(message)) {
36
+ important.push(message);
37
+ }
38
+ }
39
+ return important;
40
+ }
41
+ isImportantMessage(message) {
42
+ const text = message.text.toLowerCase();
43
+ const importantKeywords = [
44
+ 'error', 'bug', 'issue', 'problem', 'fix', 'solution',
45
+ 'implement', 'create', 'build', 'design', 'architecture',
46
+ 'requirement', 'specification', 'goal', 'objective',
47
+ 'decision', 'conclusion', 'summary', 'result'
48
+ ];
49
+ if (text.includes('```') || text.includes('`')) {
50
+ return true;
51
+ }
52
+ if (message.text.length > 200) {
53
+ return true;
54
+ }
55
+ if (importantKeywords.some(keyword => text.includes(keyword))) {
56
+ return true;
57
+ }
58
+ if (text.includes('?')) {
59
+ return true;
60
+ }
61
+ return false;
62
+ }
63
+ async applyCompressionStrategy(olderMessages, importantMessages, recentMessages, maxTokens, maxMessages) {
64
+ const sections = [];
65
+ if (importantMessages.length > 0) {
66
+ const importantSummary = this.summarizeImportantMessages(importantMessages);
67
+ sections.push(`## Key Discussion Points\n${importantSummary}`);
68
+ }
69
+ if (olderMessages.length > importantMessages.length) {
70
+ const contextSummary = this.generateContextSummary(olderMessages);
71
+ sections.push(`## Conversation Context\n${contextSummary}`);
72
+ }
73
+ if (recentMessages.length > 0) {
74
+ const recentText = recentMessages.map(msg => {
75
+ const role = msg.isAssistant ? 'Assistant' : 'User';
76
+ return `${role}: ${msg.text}`;
77
+ }).join('\n');
78
+ sections.push(`## Recent Messages\n${recentText}`);
79
+ }
80
+ const compressed = sections.join('\n\n');
81
+ if (this.estimateTokens(compressed) > maxTokens) {
82
+ return this.applyFinalCompression(compressed, maxTokens);
83
+ }
84
+ return compressed;
85
+ }
86
+ summarizeImportantMessages(messages) {
87
+ const summaries = [];
88
+ for (const message of messages.slice(0, 10)) {
89
+ const role = message.isAssistant ? 'Assistant' : 'User';
90
+ const summary = this.summarizeMessage(message.text);
91
+ summaries.push(`- ${role}: ${summary}`);
92
+ }
93
+ return summaries.join('\n');
94
+ }
95
+ summarizeMessage(text) {
96
+ if (text.includes('```')) {
97
+ const codeMatch = text.match(/```[\s\S]*?```/);
98
+ if (codeMatch) {
99
+ const beforeCode = text.substring(0, text.indexOf('```')).trim();
100
+ return beforeCode ? `${beforeCode.substring(0, 100)}... ${codeMatch[0]}` : codeMatch[0];
101
+ }
102
+ }
103
+ if (text.length > 150) {
104
+ return text.substring(0, 147) + '...';
105
+ }
106
+ return text;
107
+ }
108
+ generateContextSummary(messages) {
109
+ const topics = this.extractTopics(messages);
110
+ const messageCount = messages.length;
111
+ let summary = `Discussed ${messageCount} messages covering: ${topics.join(', ')}.`;
112
+ const patterns = this.identifyPatterns(messages);
113
+ if (patterns.length > 0) {
114
+ summary += ` Main patterns: ${patterns.join(', ')}.`;
115
+ }
116
+ return summary;
117
+ }
118
+ extractTopics(messages) {
119
+ const topics = new Set();
120
+ const commonTopics = [
121
+ 'implementation', 'bug fixing', 'design', 'architecture',
122
+ 'testing', 'optimization', 'configuration', 'deployment'
123
+ ];
124
+ for (const message of messages) {
125
+ const text = message.text.toLowerCase();
126
+ for (const topic of commonTopics) {
127
+ if (text.includes(topic) || text.includes(topic.replace(' ', ''))) {
128
+ topics.add(topic);
129
+ }
130
+ }
131
+ }
132
+ return Array.from(topics).slice(0, 5);
133
+ }
134
+ identifyPatterns(messages) {
135
+ const patterns = [];
136
+ let questionCount = 0;
137
+ let codeBlockCount = 0;
138
+ for (const message of messages) {
139
+ if (message.text.includes('?'))
140
+ questionCount++;
141
+ if (message.text.includes('```'))
142
+ codeBlockCount++;
143
+ }
144
+ if (questionCount > messages.length * 0.3) {
145
+ patterns.push('Q&A session');
146
+ }
147
+ if (codeBlockCount > 3) {
148
+ patterns.push('code-heavy discussion');
149
+ }
150
+ return patterns;
151
+ }
152
+ estimateTokens(text) {
153
+ return Math.ceil(text.length / 4);
154
+ }
155
+ applyFinalCompression(text, maxTokens) {
156
+ const estimatedTokens = this.estimateTokens(text);
157
+ if (estimatedTokens <= maxTokens) {
158
+ return text;
159
+ }
160
+ const ratio = maxTokens / estimatedTokens;
161
+ const targetLength = Math.floor(text.length * ratio * 0.9);
162
+ const sentences = text.split('. ');
163
+ let compressed = '';
164
+ for (const sentence of sentences) {
165
+ if (compressed.length + sentence.length + 2 <= targetLength) {
166
+ compressed += (compressed ? '. ' : '') + sentence;
167
+ }
168
+ else {
169
+ break;
170
+ }
171
+ }
172
+ return compressed + (compressed.endsWith('.') ? '' : '... [compressed]');
173
+ }
174
+ };
175
+ exports.IntelligentCompressionService = IntelligentCompressionService;
176
+ exports.IntelligentCompressionService = IntelligentCompressionService = IntelligentCompressionService_1 = __decorate([
177
+ (0, common_1.Injectable)()
178
+ ], IntelligentCompressionService);
179
+ //# sourceMappingURL=intelligent-compression.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intelligent-compression.service.js","sourceRoot":"","sources":["../../src/services/intelligent-compression.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface McpClientRequestOptions {
2
+ baseUrl: string;
3
+ apiKey?: string;
4
+ headers?: Record<string, string>;
5
+ timeoutMs?: number;
6
+ }
7
+ export interface McpJsonRpcResponse<T = any> {
8
+ jsonrpc: '2.0';
9
+ id: string;
10
+ result?: T;
11
+ error?: {
12
+ code: number;
13
+ message: string;
14
+ data?: any;
15
+ };
16
+ }
17
+ export declare class McpClientService {
18
+ private readonly logger;
19
+ private resolveEndpoint;
20
+ private buildHeaders;
21
+ sendRequest<T = any>(method: string, params: Record<string, any> | undefined, options: McpClientRequestOptions): Promise<T>;
22
+ listTools(options: McpClientRequestOptions): Promise<any>;
23
+ callTool(toolName: string, args: Record<string, any>, options: McpClientRequestOptions): Promise<any>;
24
+ queryAgent(payload: Record<string, any>, options: McpClientRequestOptions): Promise<any>;
25
+ executeAgent(payload: Record<string, any>, options: McpClientRequestOptions): Promise<any>;
26
+ }
@@ -0,0 +1,81 @@
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 McpClientService_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.McpClientService = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ let McpClientService = McpClientService_1 = class McpClientService {
13
+ constructor() {
14
+ this.logger = new common_1.Logger(McpClientService_1.name);
15
+ }
16
+ resolveEndpoint(baseUrl, path) {
17
+ const trimmed = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;
18
+ return `${trimmed}${path}`;
19
+ }
20
+ buildHeaders(options) {
21
+ const headers = {
22
+ 'Content-Type': 'application/json',
23
+ ...(options.headers || {}),
24
+ };
25
+ if (options.apiKey) {
26
+ headers['Authorization'] = `Bearer ${options.apiKey}`;
27
+ }
28
+ return headers;
29
+ }
30
+ async sendRequest(method, params = {}, options) {
31
+ const url = this.resolveEndpoint(options.baseUrl, '/mcp');
32
+ const requestBody = {
33
+ jsonrpc: '2.0',
34
+ id: `${method}-${Date.now()}`,
35
+ method,
36
+ params,
37
+ };
38
+ const controller = new AbortController();
39
+ const timeoutMs = options.timeoutMs ?? 15000;
40
+ const timeout = setTimeout(() => controller.abort(), timeoutMs);
41
+ try {
42
+ const response = await fetch(url, {
43
+ method: 'POST',
44
+ headers: this.buildHeaders(options),
45
+ body: JSON.stringify(requestBody),
46
+ signal: controller.signal,
47
+ });
48
+ clearTimeout(timeout);
49
+ if (!response.ok) {
50
+ const text = await response.text();
51
+ throw new Error(`HTTP ${response.status}: ${response.statusText} - ${text}`);
52
+ }
53
+ const payload = (await response.json());
54
+ if (payload.error) {
55
+ throw new Error(payload.error.message || 'MCP server returned an error');
56
+ }
57
+ return payload.result;
58
+ }
59
+ catch (error) {
60
+ this.logger.error(`MCP request failed (method: ${method}, url: ${url}): ${error.message || error}`);
61
+ throw error;
62
+ }
63
+ }
64
+ async listTools(options) {
65
+ return this.sendRequest('tools/list', {}, options);
66
+ }
67
+ async callTool(toolName, args, options) {
68
+ return this.sendRequest('tools/call', { name: toolName, arguments: args }, options);
69
+ }
70
+ async queryAgent(payload, options) {
71
+ return this.callTool('crewx_queryAgent', payload, options);
72
+ }
73
+ async executeAgent(payload, options) {
74
+ return this.callTool('crewx_executeAgent', payload, options);
75
+ }
76
+ };
77
+ exports.McpClientService = McpClientService;
78
+ exports.McpClientService = McpClientService = McpClientService_1 = __decorate([
79
+ (0, common_1.Injectable)()
80
+ ], McpClientService);
81
+ //# sourceMappingURL=mcp-client.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-client.service.js","sourceRoot":"","sources":["../../src/services/mcp-client.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ import { AIService } from '../ai.service';
2
+ import { TaskManagementService } from './task-management.service';
3
+ import { ConfigService } from './config.service';
4
+ interface AgentExecutionResult {
5
+ agentId: string;
6
+ success: boolean;
7
+ result?: any;
8
+ error?: string;
9
+ duration: number;
10
+ taskId?: string;
11
+ }
12
+ interface ParallelProcessingRequest {
13
+ agentId: string;
14
+ query?: string;
15
+ task?: string;
16
+ context?: string;
17
+ projectPath?: string;
18
+ messages?: Array<{
19
+ text: string;
20
+ isAssistant: boolean;
21
+ metadata?: Record<string, any>;
22
+ }>;
23
+ platform?: 'slack' | 'cli';
24
+ }
25
+ interface ParallelProcessingConfig {
26
+ maxConcurrency?: number;
27
+ timeout?: number;
28
+ failFast?: boolean;
29
+ }
30
+ export declare class ParallelProcessingService {
31
+ private readonly aiService;
32
+ private readonly taskManagementService;
33
+ private readonly configService;
34
+ private readonly logger;
35
+ private readonly timeoutConfig;
36
+ constructor(aiService: AIService, taskManagementService: TaskManagementService, configService: ConfigService);
37
+ private getProviderForAgent;
38
+ private getOptionsForAgent;
39
+ executeParallel(requests: ParallelProcessingRequest[], config?: ParallelProcessingConfig): Promise<{
40
+ results: AgentExecutionResult[];
41
+ summary: {
42
+ total: number;
43
+ successful: number;
44
+ failed: number;
45
+ totalDuration: number;
46
+ averageDuration: number;
47
+ };
48
+ }>;
49
+ queryAgentsParallel(queries: Array<{
50
+ agentId: string;
51
+ query: string;
52
+ context?: string;
53
+ projectPath?: string;
54
+ messages?: Array<{
55
+ text: string;
56
+ isAssistant: boolean;
57
+ metadata?: Record<string, any>;
58
+ }>;
59
+ platform?: 'slack' | 'cli';
60
+ }>, config?: ParallelProcessingConfig): Promise<{
61
+ results: AgentExecutionResult[];
62
+ summary: {
63
+ total: number;
64
+ successful: number;
65
+ failed: number;
66
+ totalDuration: number;
67
+ averageDuration: number;
68
+ };
69
+ }>;
70
+ executeAgentsParallel(tasks: Array<{
71
+ agentId: string;
72
+ task: string;
73
+ context?: string;
74
+ projectPath?: string;
75
+ }>, config?: ParallelProcessingConfig): Promise<{
76
+ results: AgentExecutionResult[];
77
+ summary: {
78
+ total: number;
79
+ successful: number;
80
+ failed: number;
81
+ totalDuration: number;
82
+ averageDuration: number;
83
+ };
84
+ }>;
85
+ private executeWithTimeout;
86
+ private chunkArray;
87
+ getPerformanceMetrics(results: AgentExecutionResult[]): {
88
+ totalAgents: number;
89
+ successRate: number;
90
+ averageExecutionTime: number;
91
+ fastestExecution: number;
92
+ slowestExecution: number;
93
+ successfulAgents?: undefined;
94
+ failedAgents?: undefined;
95
+ } | {
96
+ totalAgents: number;
97
+ successRate: number;
98
+ averageExecutionTime: number;
99
+ fastestExecution: number;
100
+ slowestExecution: number;
101
+ successfulAgents: string[];
102
+ failedAgents: {
103
+ agentId: string;
104
+ error: string | undefined;
105
+ }[];
106
+ };
107
+ }
108
+ export {};