@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.
- package/README.md +529 -0
- package/dist/ai-provider.service.d.ts +36 -0
- package/dist/ai-provider.service.js +191 -0
- package/dist/ai-provider.service.js.map +1 -0
- package/dist/ai.service.d.ts +57 -0
- package/dist/ai.service.js +628 -0
- package/dist/ai.service.js.map +1 -0
- package/dist/app.module.d.ts +5 -0
- package/dist/app.module.js +103 -0
- package/dist/app.module.js.map +1 -0
- package/dist/cli/agent.handler.d.ts +2 -0
- package/dist/cli/agent.handler.js +140 -0
- package/dist/cli/agent.handler.js.map +1 -0
- package/dist/cli/chat.handler.d.ts +19 -0
- package/dist/cli/chat.handler.js +431 -0
- package/dist/cli/chat.handler.js.map +1 -0
- package/dist/cli/cli.handler.d.ts +4 -0
- package/dist/cli/cli.handler.js +97 -0
- package/dist/cli/cli.handler.js.map +1 -0
- package/dist/cli/doctor.handler.d.ts +36 -0
- package/dist/cli/doctor.handler.js +382 -0
- package/dist/cli/doctor.handler.js.map +1 -0
- package/dist/cli/execute.handler.d.ts +2 -0
- package/dist/cli/execute.handler.js +319 -0
- package/dist/cli/execute.handler.js.map +1 -0
- package/dist/cli/help.handler.d.ts +2 -0
- package/dist/cli/help.handler.js +10 -0
- package/dist/cli/help.handler.js.map +1 -0
- package/dist/cli/init.handler.d.ts +26 -0
- package/dist/cli/init.handler.js +450 -0
- package/dist/cli/init.handler.js.map +1 -0
- package/dist/cli/mcp.handler.d.ts +3 -0
- package/dist/cli/mcp.handler.js +121 -0
- package/dist/cli/mcp.handler.js.map +1 -0
- package/dist/cli/query.handler.d.ts +2 -0
- package/dist/cli/query.handler.js +380 -0
- package/dist/cli/query.handler.js.map +1 -0
- package/dist/cli/templates.handler.d.ts +2 -0
- package/dist/cli/templates.handler.js +100 -0
- package/dist/cli/templates.handler.js.map +1 -0
- package/dist/cli-options.d.ts +29 -0
- package/dist/cli-options.js +234 -0
- package/dist/cli-options.js.map +1 -0
- package/dist/config/timeout.config.d.ts +14 -0
- package/dist/config/timeout.config.js +34 -0
- package/dist/config/timeout.config.js.map +1 -0
- package/dist/conversation/base-conversation-history.provider.d.ts +12 -0
- package/dist/conversation/base-conversation-history.provider.js +45 -0
- package/dist/conversation/base-conversation-history.provider.js.map +1 -0
- package/dist/conversation/cli-conversation-history.provider.d.ts +16 -0
- package/dist/conversation/cli-conversation-history.provider.js +111 -0
- package/dist/conversation/cli-conversation-history.provider.js.map +1 -0
- package/dist/conversation/conversation-provider.factory.d.ts +10 -0
- package/dist/conversation/conversation-provider.factory.js +50 -0
- package/dist/conversation/conversation-provider.factory.js.map +1 -0
- package/dist/conversation/index.d.ts +6 -0
- package/dist/conversation/index.js +27 -0
- package/dist/conversation/index.js.map +1 -0
- package/dist/conversation/slack-conversation-history.provider.d.ts +28 -0
- package/dist/conversation/slack-conversation-history.provider.js +278 -0
- package/dist/conversation/slack-conversation-history.provider.js.map +1 -0
- package/dist/crewx.tool.d.ts +332 -0
- package/dist/crewx.tool.js +1461 -0
- package/dist/crewx.tool.js.map +1 -0
- package/dist/guards/bearer-auth.guard.d.ts +7 -0
- package/dist/guards/bearer-auth.guard.js +44 -0
- package/dist/guards/bearer-auth.guard.js.map +1 -0
- package/dist/health.controller.d.ts +6 -0
- package/dist/health.controller.js +32 -0
- package/dist/health.controller.js.map +1 -0
- package/dist/main.d.ts +1 -0
- package/dist/main.js +267 -0
- package/dist/main.js.map +1 -0
- package/dist/mcp.controller.d.ts +8 -0
- package/dist/mcp.controller.js +62 -0
- package/dist/mcp.controller.js.map +1 -0
- package/dist/project.service.d.ts +44 -0
- package/dist/project.service.js +299 -0
- package/dist/project.service.js.map +1 -0
- package/dist/providers/base-ai.provider.d.ts +50 -0
- package/dist/providers/base-ai.provider.js +624 -0
- package/dist/providers/base-ai.provider.js.map +1 -0
- package/dist/providers/claude.provider.d.ts +25 -0
- package/dist/providers/claude.provider.js +362 -0
- package/dist/providers/claude.provider.js.map +1 -0
- package/dist/providers/codex.provider.d.ts +17 -0
- package/dist/providers/codex.provider.js +99 -0
- package/dist/providers/codex.provider.js.map +1 -0
- package/dist/providers/copilot.provider.d.ts +25 -0
- package/dist/providers/copilot.provider.js +266 -0
- package/dist/providers/copilot.provider.js.map +1 -0
- package/dist/providers/dynamic-provider.factory.d.ts +55 -0
- package/dist/providers/dynamic-provider.factory.js +586 -0
- package/dist/providers/dynamic-provider.factory.js.map +1 -0
- package/dist/providers/gemini.provider.d.ts +22 -0
- package/dist/providers/gemini.provider.js +147 -0
- package/dist/providers/gemini.provider.js.map +1 -0
- package/dist/services/agent-loader.service.d.ts +29 -0
- package/dist/services/agent-loader.service.js +370 -0
- package/dist/services/agent-loader.service.js.map +1 -0
- package/dist/services/auth.service.d.ts +9 -0
- package/dist/services/auth.service.js +47 -0
- package/dist/services/auth.service.js.map +1 -0
- package/dist/services/config-validator.service.d.ts +28 -0
- package/dist/services/config-validator.service.js +467 -0
- package/dist/services/config-validator.service.js.map +1 -0
- package/dist/services/config.service.d.ts +45 -0
- package/dist/services/config.service.js +180 -0
- package/dist/services/config.service.js.map +1 -0
- package/dist/services/context-enhancement.service.d.ts +13 -0
- package/dist/services/context-enhancement.service.js +169 -0
- package/dist/services/context-enhancement.service.js.map +1 -0
- package/dist/services/document-loader.service.d.ts +16 -0
- package/dist/services/document-loader.service.js +137 -0
- package/dist/services/document-loader.service.js.map +1 -0
- package/dist/services/help.service.d.ts +5 -0
- package/dist/services/help.service.js +117 -0
- package/dist/services/help.service.js.map +1 -0
- package/dist/services/intelligent-compression.service.d.ts +20 -0
- package/dist/services/intelligent-compression.service.js +179 -0
- package/dist/services/intelligent-compression.service.js.map +1 -0
- package/dist/services/mcp-client.service.d.ts +26 -0
- package/dist/services/mcp-client.service.js +81 -0
- package/dist/services/mcp-client.service.js.map +1 -0
- package/dist/services/parallel-processing.service.d.ts +108 -0
- package/dist/services/parallel-processing.service.js +268 -0
- package/dist/services/parallel-processing.service.js.map +1 -0
- package/dist/services/remote-agent.service.d.ts +49 -0
- package/dist/services/remote-agent.service.js +215 -0
- package/dist/services/remote-agent.service.js.map +1 -0
- package/dist/services/result-formatter.service.d.ts +27 -0
- package/dist/services/result-formatter.service.js +126 -0
- package/dist/services/result-formatter.service.js.map +1 -0
- package/dist/services/task-management.service.d.ts +63 -0
- package/dist/services/task-management.service.js +272 -0
- package/dist/services/task-management.service.js.map +1 -0
- package/dist/services/template.service.d.ts +36 -0
- package/dist/services/template.service.js +195 -0
- package/dist/services/template.service.js.map +1 -0
- package/dist/services/tool-call.service.d.ts +53 -0
- package/dist/services/tool-call.service.js +1061 -0
- package/dist/services/tool-call.service.js.map +1 -0
- package/dist/slack/formatters/message.formatter.d.ts +25 -0
- package/dist/slack/formatters/message.formatter.js +246 -0
- package/dist/slack/formatters/message.formatter.js.map +1 -0
- package/dist/slack/slack-bot.d.ts +24 -0
- package/dist/slack/slack-bot.js +467 -0
- package/dist/slack/slack-bot.js.map +1 -0
- package/dist/stderr.logger.d.ts +8 -0
- package/dist/stderr.logger.js +26 -0
- package/dist/stderr.logger.js.map +1 -0
- package/dist/utils/config-utils.d.ts +15 -0
- package/dist/utils/config-utils.js +69 -0
- package/dist/utils/config-utils.js.map +1 -0
- package/dist/utils/mcp-installer.d.ts +20 -0
- package/dist/utils/mcp-installer.js +199 -0
- package/dist/utils/mcp-installer.js.map +1 -0
- package/dist/utils/mention-parser.d.ts +18 -0
- package/dist/utils/mention-parser.js +136 -0
- package/dist/utils/mention-parser.js.map +1 -0
- package/dist/utils/simple-security.d.ts +3 -0
- package/dist/utils/simple-security.js +20 -0
- package/dist/utils/simple-security.js.map +1 -0
- package/dist/utils/stdin-utils.d.ts +27 -0
- package/dist/utils/stdin-utils.js +130 -0
- package/dist/utils/stdin-utils.js.map +1 -0
- package/dist/utils/template-processor.d.ts +32 -0
- package/dist/utils/template-processor.js +202 -0
- package/dist/utils/template-processor.js.map +1 -0
- package/dist/version.d.ts +1 -0
- package/dist/version.js +17 -0
- package/dist/version.js.map +1 -0
- package/package.json +122 -0
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
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;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.DoctorHandler = void 0;
|
|
46
|
+
exports.handleDoctor = handleDoctor;
|
|
47
|
+
const common_1 = require("@nestjs/common");
|
|
48
|
+
const fs_1 = require("fs");
|
|
49
|
+
const path_1 = require("path");
|
|
50
|
+
const yaml = __importStar(require("js-yaml"));
|
|
51
|
+
const task_management_service_1 = require("../services/task-management.service");
|
|
52
|
+
const result_formatter_service_1 = require("../services/result-formatter.service");
|
|
53
|
+
const parallel_processing_service_1 = require("../services/parallel-processing.service");
|
|
54
|
+
const ai_provider_service_1 = require("../ai-provider.service");
|
|
55
|
+
let DoctorHandler = class DoctorHandler {
|
|
56
|
+
constructor(taskManagementService, resultFormatterService, parallelProcessingService, aiProviderService) {
|
|
57
|
+
this.taskManagementService = taskManagementService;
|
|
58
|
+
this.resultFormatterService = resultFormatterService;
|
|
59
|
+
this.parallelProcessingService = parallelProcessingService;
|
|
60
|
+
this.aiProviderService = aiProviderService;
|
|
61
|
+
}
|
|
62
|
+
async handle(options = {}) {
|
|
63
|
+
const taskId = this.taskManagementService.createTask({
|
|
64
|
+
type: 'doctor',
|
|
65
|
+
command: 'crewx doctor',
|
|
66
|
+
options: options
|
|
67
|
+
});
|
|
68
|
+
try {
|
|
69
|
+
this.taskManagementService.addTaskLog(taskId, {
|
|
70
|
+
level: 'info',
|
|
71
|
+
message: 'Starting CrewX system diagnosis'
|
|
72
|
+
});
|
|
73
|
+
const workingDir = options.workingDirectory || process.cwd();
|
|
74
|
+
let configPath = options.config;
|
|
75
|
+
if (!configPath) {
|
|
76
|
+
const crewConfigPath = (0, path_1.join)(workingDir, 'crewx.yaml');
|
|
77
|
+
const agentsYamlPath = (0, path_1.join)(workingDir, 'agents.yaml');
|
|
78
|
+
if ((0, fs_1.existsSync)(crewConfigPath)) {
|
|
79
|
+
configPath = 'crewx.yaml';
|
|
80
|
+
}
|
|
81
|
+
else if ((0, fs_1.existsSync)(agentsYamlPath)) {
|
|
82
|
+
configPath = 'agents.yaml';
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
configPath = 'crewx.yaml';
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const fullConfigPath = (0, path_1.join)(workingDir, configPath);
|
|
89
|
+
const diagnostics = [];
|
|
90
|
+
const configDiagnostic = await this.checkConfigurationFile(fullConfigPath);
|
|
91
|
+
diagnostics.push(configDiagnostic);
|
|
92
|
+
const logsDiagnostic = await this.checkLogsDirectory(workingDir);
|
|
93
|
+
diagnostics.push(logsDiagnostic);
|
|
94
|
+
const aiProviderDiagnostics = await this.checkAIProviders();
|
|
95
|
+
diagnostics.push(...aiProviderDiagnostics);
|
|
96
|
+
if (configDiagnostic.status === 'success') {
|
|
97
|
+
const testDiagnostics = await this.testAIProviders(fullConfigPath, taskId);
|
|
98
|
+
diagnostics.push(...testDiagnostics);
|
|
99
|
+
}
|
|
100
|
+
const overallHealth = this.assessOverallHealth(diagnostics);
|
|
101
|
+
const successMessage = this.formatDiagnosticReport(diagnostics, overallHealth);
|
|
102
|
+
const isHealthy = overallHealth.status !== 'error';
|
|
103
|
+
this.taskManagementService.completeTask(taskId, {
|
|
104
|
+
message: successMessage,
|
|
105
|
+
diagnostics,
|
|
106
|
+
health: overallHealth
|
|
107
|
+
}, isHealthy);
|
|
108
|
+
return {
|
|
109
|
+
success: isHealthy,
|
|
110
|
+
message: successMessage,
|
|
111
|
+
taskId,
|
|
112
|
+
diagnostics
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
const errorMessage = `Failed to complete system diagnosis: ${error instanceof Error ? error.message : String(error)}`;
|
|
117
|
+
this.taskManagementService.addTaskLog(taskId, {
|
|
118
|
+
level: 'error',
|
|
119
|
+
message: errorMessage
|
|
120
|
+
});
|
|
121
|
+
this.taskManagementService.completeTask(taskId, { error: errorMessage }, false);
|
|
122
|
+
return {
|
|
123
|
+
success: false,
|
|
124
|
+
message: errorMessage,
|
|
125
|
+
taskId,
|
|
126
|
+
diagnostics: [{
|
|
127
|
+
name: 'System Error',
|
|
128
|
+
status: 'error',
|
|
129
|
+
message: errorMessage
|
|
130
|
+
}]
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
async checkConfigurationFile(configPath) {
|
|
135
|
+
try {
|
|
136
|
+
if (!(0, fs_1.existsSync)(configPath)) {
|
|
137
|
+
return {
|
|
138
|
+
name: 'Configuration File',
|
|
139
|
+
status: 'error',
|
|
140
|
+
message: 'Configuration file not found',
|
|
141
|
+
details: `Run 'crewx init' to create configuration file at ${configPath}`
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
const configContent = (0, fs_1.readFileSync)(configPath, 'utf8');
|
|
145
|
+
const config = yaml.load(configContent);
|
|
146
|
+
if (!config || !config.agents || !Array.isArray(config.agents)) {
|
|
147
|
+
return {
|
|
148
|
+
name: 'Configuration File',
|
|
149
|
+
status: 'error',
|
|
150
|
+
message: 'Invalid configuration format',
|
|
151
|
+
details: 'Configuration file exists but has invalid structure'
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
if (config.agents.length === 0) {
|
|
155
|
+
return {
|
|
156
|
+
name: 'Configuration File',
|
|
157
|
+
status: 'warning',
|
|
158
|
+
message: 'No agents configured',
|
|
159
|
+
details: 'Configuration file exists but contains no agent definitions'
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
name: 'Configuration File',
|
|
164
|
+
status: 'success',
|
|
165
|
+
message: `Found ${config.agents.length} agent(s) configured`,
|
|
166
|
+
details: `Configuration loaded from ${configPath}`
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
return {
|
|
171
|
+
name: 'Configuration File',
|
|
172
|
+
status: 'error',
|
|
173
|
+
message: 'Failed to parse configuration',
|
|
174
|
+
details: `Error: ${error instanceof Error ? error.message : String(error)}`
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
async checkLogsDirectory(workingDir) {
|
|
179
|
+
const logsDir = (0, path_1.join)(workingDir, '.crewx', 'logs');
|
|
180
|
+
if (!(0, fs_1.existsSync)(logsDir)) {
|
|
181
|
+
return {
|
|
182
|
+
name: 'Logs Directory',
|
|
183
|
+
status: 'warning',
|
|
184
|
+
message: 'Logs directory not found',
|
|
185
|
+
details: `Directory will be created automatically: ${logsDir}`
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
name: 'Logs Directory',
|
|
190
|
+
status: 'success',
|
|
191
|
+
message: 'Logs directory exists',
|
|
192
|
+
details: `Logs available at ${logsDir}`
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
async checkAIProviders() {
|
|
196
|
+
const providers = ['claude', 'gemini', 'copilot', 'codex'];
|
|
197
|
+
const diagnostics = [];
|
|
198
|
+
for (const provider of providers) {
|
|
199
|
+
try {
|
|
200
|
+
const providerInstance = this.aiProviderService.getProvider(`cli/${provider}`);
|
|
201
|
+
const isAvailable = providerInstance ? await providerInstance.isAvailable() : false;
|
|
202
|
+
diagnostics.push({
|
|
203
|
+
name: `${provider.toUpperCase()} CLI`,
|
|
204
|
+
status: isAvailable ? 'success' : 'warning',
|
|
205
|
+
message: isAvailable ? 'Installed and available' : 'Not installed or not available',
|
|
206
|
+
details: isAvailable ?
|
|
207
|
+
`${provider} CLI is ready for use` :
|
|
208
|
+
`Install ${provider} CLI to use ${provider} agents`
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
diagnostics.push({
|
|
213
|
+
name: `${provider.toUpperCase()} CLI`,
|
|
214
|
+
status: 'error',
|
|
215
|
+
message: 'Check failed',
|
|
216
|
+
details: `Error checking ${provider}: ${error instanceof Error ? error.message : String(error)}`
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return diagnostics;
|
|
221
|
+
}
|
|
222
|
+
async testAIProviders(configPath, taskId) {
|
|
223
|
+
try {
|
|
224
|
+
this.taskManagementService.addTaskLog(taskId, {
|
|
225
|
+
level: 'info',
|
|
226
|
+
message: 'Testing AI providers with simple queries'
|
|
227
|
+
});
|
|
228
|
+
const configContent = (0, fs_1.readFileSync)(configPath, 'utf8');
|
|
229
|
+
const config = yaml.load(configContent);
|
|
230
|
+
const testQueries = config.agents
|
|
231
|
+
.filter((agent) => agent.inline?.provider)
|
|
232
|
+
.map((agent) => ({
|
|
233
|
+
agentId: agent.id,
|
|
234
|
+
query: 'Hello, please respond with "OK" to confirm you are working.',
|
|
235
|
+
context: 'System diagnostic test'
|
|
236
|
+
}));
|
|
237
|
+
if (testQueries.length === 0) {
|
|
238
|
+
return [{
|
|
239
|
+
name: 'AI Provider Testing',
|
|
240
|
+
status: 'warning',
|
|
241
|
+
message: 'No testable agents found',
|
|
242
|
+
details: 'No agents with provider configuration available for testing'
|
|
243
|
+
}];
|
|
244
|
+
}
|
|
245
|
+
const results = await this.parallelProcessingService.queryAgentsParallel(testQueries, {
|
|
246
|
+
timeout: 30000
|
|
247
|
+
});
|
|
248
|
+
const diagnostics = [];
|
|
249
|
+
results.results.forEach((result, index) => {
|
|
250
|
+
const agentId = testQueries[index].agentId;
|
|
251
|
+
if (result.success) {
|
|
252
|
+
diagnostics.push({
|
|
253
|
+
name: `Agent Test: ${agentId}`,
|
|
254
|
+
status: 'success',
|
|
255
|
+
message: 'Responding correctly',
|
|
256
|
+
details: `Agent ${agentId} successfully responded to test query`
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
const isSessionLimit = result.error?.includes('session limit') || result.error?.includes('Session limit');
|
|
261
|
+
diagnostics.push({
|
|
262
|
+
name: `Agent Test: ${agentId}`,
|
|
263
|
+
status: isSessionLimit ? 'warning' : 'error',
|
|
264
|
+
message: isSessionLimit ? 'Session limit reached' : 'Failed to respond',
|
|
265
|
+
details: result.error || 'Unknown error during test'
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
return diagnostics;
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
return [{
|
|
273
|
+
name: 'AI Provider Testing',
|
|
274
|
+
status: 'error',
|
|
275
|
+
message: 'Test execution failed',
|
|
276
|
+
details: `Error during AI provider testing: ${error instanceof Error ? error.message : String(error)}`
|
|
277
|
+
}];
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
assessOverallHealth(diagnostics) {
|
|
281
|
+
const errorCount = diagnostics.filter(d => d.status === 'error').length;
|
|
282
|
+
const warningCount = diagnostics.filter(d => d.status === 'warning').length;
|
|
283
|
+
const successCount = diagnostics.filter(d => d.status === 'success').length;
|
|
284
|
+
if (errorCount > 0) {
|
|
285
|
+
return {
|
|
286
|
+
status: 'error',
|
|
287
|
+
message: `System has ${errorCount} error(s) that need attention`
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
if (warningCount > 0) {
|
|
291
|
+
return {
|
|
292
|
+
status: 'warning',
|
|
293
|
+
message: `System is functional with ${warningCount} warning(s)`
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
return {
|
|
297
|
+
status: 'success',
|
|
298
|
+
message: `System is healthy - all ${successCount} checks passed`
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
formatDiagnosticReport(diagnostics, overallHealth) {
|
|
302
|
+
const statusIcon = (status) => {
|
|
303
|
+
switch (status) {
|
|
304
|
+
case 'success': return '✅';
|
|
305
|
+
case 'warning': return '⚠️';
|
|
306
|
+
case 'error': return '❌';
|
|
307
|
+
default: return '🔍';
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
const healthIcon = statusIcon(overallHealth.status);
|
|
311
|
+
let report = `${healthIcon} **CrewX System Diagnosis**\n\n`;
|
|
312
|
+
report += `**Overall Health:** ${overallHealth.message}\n\n`;
|
|
313
|
+
report += `**Diagnostic Results:**\n`;
|
|
314
|
+
diagnostics.forEach(diagnostic => {
|
|
315
|
+
const icon = statusIcon(diagnostic.status);
|
|
316
|
+
report += `${icon} **${diagnostic.name}:** ${diagnostic.message}\n`;
|
|
317
|
+
if (diagnostic.details) {
|
|
318
|
+
report += ` ${diagnostic.details}\n`;
|
|
319
|
+
}
|
|
320
|
+
report += '\n';
|
|
321
|
+
});
|
|
322
|
+
const errors = diagnostics.filter(d => d.status === 'error');
|
|
323
|
+
const warnings = diagnostics.filter(d => d.status === 'warning');
|
|
324
|
+
if (errors.length > 0 || warnings.length > 0) {
|
|
325
|
+
report += `**Recommendations:**\n`;
|
|
326
|
+
if (errors.some(e => e.name === 'Configuration File')) {
|
|
327
|
+
report += `• Run \`crewx init\` to create or fix configuration\n`;
|
|
328
|
+
}
|
|
329
|
+
if (errors.some(e => e.name.includes('CLI'))) {
|
|
330
|
+
report += `• Install missing AI CLI tools\n`;
|
|
331
|
+
}
|
|
332
|
+
if (warnings.some(w => w.name.includes('session limit'))) {
|
|
333
|
+
report += `• Some AI providers have reached their session limits - try again later\n`;
|
|
334
|
+
}
|
|
335
|
+
report += '\n';
|
|
336
|
+
}
|
|
337
|
+
report += `**Next Steps:**\n`;
|
|
338
|
+
if (overallHealth.status === 'success') {
|
|
339
|
+
report += `• Your CrewX setup is ready to use!\n`;
|
|
340
|
+
report += `• Try: \`crewx query "@claude hello world"\`\n`;
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
report += `• Address the issues above to improve system health\n`;
|
|
344
|
+
report += `• Run \`crewx doctor\` again after making changes\n`;
|
|
345
|
+
}
|
|
346
|
+
return report;
|
|
347
|
+
}
|
|
348
|
+
};
|
|
349
|
+
exports.DoctorHandler = DoctorHandler;
|
|
350
|
+
exports.DoctorHandler = DoctorHandler = __decorate([
|
|
351
|
+
(0, common_1.Injectable)(),
|
|
352
|
+
__metadata("design:paramtypes", [task_management_service_1.TaskManagementService,
|
|
353
|
+
result_formatter_service_1.ResultFormatterService,
|
|
354
|
+
parallel_processing_service_1.ParallelProcessingService,
|
|
355
|
+
ai_provider_service_1.AIProviderService])
|
|
356
|
+
], DoctorHandler);
|
|
357
|
+
const common_2 = require("@nestjs/common");
|
|
358
|
+
const logger = new common_2.Logger('DoctorHandler');
|
|
359
|
+
async function handleDoctor(app, args) {
|
|
360
|
+
if (args.log)
|
|
361
|
+
logger.log('Doctor command received');
|
|
362
|
+
try {
|
|
363
|
+
console.log('🩺 Starting comprehensive system diagnosis...\n');
|
|
364
|
+
const doctorHandler = app.get(DoctorHandler);
|
|
365
|
+
const result = await doctorHandler.handle({
|
|
366
|
+
config: args.config,
|
|
367
|
+
verbose: args.log
|
|
368
|
+
});
|
|
369
|
+
console.log(result.message);
|
|
370
|
+
if (!result.success) {
|
|
371
|
+
process.exit(1);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
catch (error) {
|
|
375
|
+
if (args.log)
|
|
376
|
+
logger.error(`Doctor check failed: ${error instanceof Error ? error.message : error}`);
|
|
377
|
+
console.log('❌ System diagnosis failed');
|
|
378
|
+
console.log(` Error: ${error instanceof Error ? error.message : error}`);
|
|
379
|
+
process.exit(1);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
//# sourceMappingURL=doctor.handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.handler.js","sourceRoot":"","sources":["../../src/cli/doctor.handler.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoYA,oCA0BC;AA9ZD,2CAA4C;AAC5C,2BAA8C;AAC9C,+BAA4B;AAC5B,8CAAgC;AAChC,iFAA4E;AAC5E,mFAA8E;AAC9E,yFAAoF;AACpF,gEAA2D;AAgBpD,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,YACmB,qBAA4C,EAC5C,sBAA8C,EAC9C,yBAAoD,EACpD,iBAAoC;QAHpC,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,2BAAsB,GAAtB,sBAAsB,CAAwB;QAC9C,8BAAyB,GAAzB,yBAAyB,CAA2B;QACpD,sBAAiB,GAAjB,iBAAiB,CAAmB;IACpD,CAAC;IAEJ,KAAK,CAAC,MAAM,CAAC,UAAyB,EAAE;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC;YACnD,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,MAAM,EAAE;gBAC5C,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,iCAAiC;aAC3C,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAG7D,IAAI,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;YAChC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAEhB,MAAM,cAAc,GAAG,IAAA,WAAI,EAAC,UAAU,EAAE,YAAY,CAAC,CAAC;gBACtD,MAAM,cAAc,GAAG,IAAA,WAAI,EAAC,UAAU,EAAE,aAAa,CAAC,CAAC;gBAEvD,IAAI,IAAA,eAAU,EAAC,cAAc,CAAC,EAAE,CAAC;oBAC/B,UAAU,GAAG,YAAY,CAAC;gBAC5B,CAAC;qBAAM,IAAI,IAAA,eAAU,EAAC,cAAc,CAAC,EAAE,CAAC;oBACtC,UAAU,GAAG,aAAa,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACN,UAAU,GAAG,YAAY,CAAC;gBAC5B,CAAC;YACH,CAAC;YAED,MAAM,cAAc,GAAG,IAAA,WAAI,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAEpD,MAAM,WAAW,GAAuB,EAAE,CAAC;YAG3C,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC;YAC3E,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAGnC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;YACjE,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAGjC,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC5D,WAAW,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,CAAC;YAG3C,IAAI,gBAAgB,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAC1C,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;gBAC3E,WAAW,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;YACvC,CAAC;YAGD,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;YAE5D,MAAM,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;YAC/E,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,KAAK,OAAO,CAAC;YAEnD,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,MAAM,EAAE;gBAC9C,OAAO,EAAE,cAAc;gBACvB,WAAW;gBACX,MAAM,EAAE,aAAa;aACtB,EAAE,SAAS,CAAC,CAAC;YAEd,OAAO;gBACL,OAAO,EAAE,SAAS;gBAClB,OAAO,EAAE,cAAc;gBACvB,MAAM;gBACN,WAAW;aACZ,CAAC;QAEJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,wCAAwC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACtH,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,MAAM,EAAE;gBAC5C,KAAK,EAAE,OAAO;gBACd,OAAO,EAAE,YAAY;aACtB,CAAC,CAAC;YAEH,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,KAAK,CAAC,CAAC;YAChF,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,YAAY;gBACrB,MAAM;gBACN,WAAW,EAAE,CAAC;wBACZ,IAAI,EAAE,cAAc;wBACpB,MAAM,EAAE,OAAO;wBACf,OAAO,EAAE,YAAY;qBACtB,CAAC;aACH,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,UAAkB;QACrD,IAAI,CAAC;YACH,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;gBAC5B,OAAO;oBACL,IAAI,EAAE,oBAAoB;oBAC1B,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,8BAA8B;oBACvC,OAAO,EAAE,oDAAoD,UAAU,EAAE;iBAC1E,CAAC;YACJ,CAAC;YAED,MAAM,aAAa,GAAG,IAAA,iBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAQ,CAAC;YAE/C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC/D,OAAO;oBACL,IAAI,EAAE,oBAAoB;oBAC1B,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,8BAA8B;oBACvC,OAAO,EAAE,qDAAqD;iBAC/D,CAAC;YACJ,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO;oBACL,IAAI,EAAE,oBAAoB;oBAC1B,MAAM,EAAE,SAAS;oBACjB,OAAO,EAAE,sBAAsB;oBAC/B,OAAO,EAAE,6DAA6D;iBACvE,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,IAAI,EAAE,oBAAoB;gBAC1B,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,SAAS,MAAM,CAAC,MAAM,CAAC,MAAM,sBAAsB;gBAC5D,OAAO,EAAE,6BAA6B,UAAU,EAAE;aACnD,CAAC;QAEJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,IAAI,EAAE,oBAAoB;gBAC1B,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,+BAA+B;gBACxC,OAAO,EAAE,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aAC5E,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,UAAkB;QACjD,MAAM,OAAO,GAAG,IAAA,WAAI,EAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEnD,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YACzB,OAAO;gBACL,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,0BAA0B;gBACnC,OAAO,EAAE,4CAA4C,OAAO,EAAE;aAC/D,CAAC;QACJ,CAAC;QAED,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,uBAAuB;YAChC,OAAO,EAAE,qBAAqB,OAAO,EAAE;SACxC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,SAAS,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAuB,EAAE,CAAC;QAE3C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,OAAO,QAAQ,EAAS,CAAC,CAAC;gBACtF,MAAM,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAM,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;gBAEpF,WAAW,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE,MAAM;oBACrC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;oBAC3C,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,gCAAgC;oBACnF,OAAO,EAAE,WAAW,CAAC,CAAC;wBACpB,GAAG,QAAQ,uBAAuB,CAAC,CAAC;wBACpC,WAAW,QAAQ,eAAe,QAAQ,SAAS;iBACtD,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,WAAW,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,GAAG,QAAQ,CAAC,WAAW,EAAE,MAAM;oBACrC,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,cAAc;oBACvB,OAAO,EAAE,kBAAkB,QAAQ,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBACjG,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAGO,KAAK,CAAC,eAAe,CAAC,UAAkB,EAAE,MAAc;QAC9D,IAAI,CAAC;YACH,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,MAAM,EAAE;gBAC5C,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,0CAA0C;aACpD,CAAC,CAAC;YAEH,MAAM,aAAa,GAAG,IAAA,iBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAQ,CAAC;YAG/C,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM;iBAC9B,MAAM,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC;iBAC9C,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC;gBACpB,OAAO,EAAE,KAAK,CAAC,EAAE;gBACjB,KAAK,EAAE,6DAA6D;gBACpE,OAAO,EAAE,wBAAwB;aAClC,CAAC,CAAC,CAAC;YAEN,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC7B,OAAO,CAAC;wBACN,IAAI,EAAE,qBAAqB;wBAC3B,MAAM,EAAE,SAAS;wBACjB,OAAO,EAAE,0BAA0B;wBACnC,OAAO,EAAE,6DAA6D;qBACvE,CAAC,CAAC;YACL,CAAC;YAGD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,mBAAmB,CAAC,WAAW,EAAE;gBACpF,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;YAEH,MAAM,WAAW,GAAuB,EAAE,CAAC;YAE3C,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBACxC,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;gBAE3C,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,WAAW,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,eAAe,OAAO,EAAE;wBAC9B,MAAM,EAAE,SAAS;wBACjB,OAAO,EAAE,sBAAsB;wBAC/B,OAAO,EAAE,SAAS,OAAO,uCAAuC;qBACjE,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,eAAe,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;oBAC1G,WAAW,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,eAAe,OAAO,EAAE;wBAC9B,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;wBAC5C,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,mBAAmB;wBACvE,OAAO,EAAE,MAAM,CAAC,KAAK,IAAI,2BAA2B;qBACrD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,OAAO,WAAW,CAAC;QAErB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC;oBACN,IAAI,EAAE,qBAAqB;oBAC3B,MAAM,EAAE,OAAO;oBACf,OAAO,EAAE,uBAAuB;oBAChC,OAAO,EAAE,qCAAqC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;iBACvG,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,WAA+B;QACzD,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;QACxE,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;QAC5E,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;QAE5E,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO;gBACL,MAAM,EAAE,OAAO;gBACf,OAAO,EAAE,cAAc,UAAU,+BAA+B;aACjE,CAAC;QACJ,CAAC;QAED,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,6BAA6B,YAAY,aAAa;aAChE,CAAC;QACJ,CAAC;QAED,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,2BAA2B,YAAY,gBAAgB;SACjE,CAAC;IACJ,CAAC;IAEO,sBAAsB,CAAC,WAA+B,EAAE,aAAkD;QAChH,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE;YACpC,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,SAAS,CAAC,CAAC,OAAO,GAAG,CAAC;gBAC3B,KAAK,SAAS,CAAC,CAAC,OAAO,IAAI,CAAC;gBAC5B,KAAK,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC;gBACzB,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC;YACvB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAEpD,IAAI,MAAM,GAAG,GAAG,UAAU,iCAAiC,CAAC;QAC5D,MAAM,IAAI,uBAAuB,aAAa,CAAC,OAAO,MAAM,CAAC;QAC7D,MAAM,IAAI,2BAA2B,CAAC;QAEtC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YAC/B,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,IAAI,MAAM,UAAU,CAAC,IAAI,OAAO,UAAU,CAAC,OAAO,IAAI,CAAC;YACpE,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;gBACvB,MAAM,IAAI,MAAM,UAAU,CAAC,OAAO,IAAI,CAAC;YACzC,CAAC;YACD,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC,CAAC,CAAC;QAGH,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;QAEjE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,wBAAwB,CAAC;YAEnC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,oBAAoB,CAAC,EAAE,CAAC;gBACtD,MAAM,IAAI,uDAAuD,CAAC;YACpE,CAAC;YAED,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC7C,MAAM,IAAI,kCAAkC,CAAC;YAC/C,CAAC;YAED,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;gBACzD,MAAM,IAAI,2EAA2E,CAAC;YACxF,CAAC;YAED,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC;QAED,MAAM,IAAI,mBAAmB,CAAC;QAC9B,IAAI,aAAa,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,IAAI,uCAAuC,CAAC;YAClD,MAAM,IAAI,gDAAgD,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,uDAAuD,CAAC;YAClE,MAAM,IAAI,qDAAqD,CAAC;QAClE,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAA;AAhWY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;qCAG+B,+CAAqB;QACpB,iDAAsB;QACnB,uDAAyB;QACjC,uCAAiB;GAL5C,aAAa,CAgWzB;AAGD,2CAAwC;AAIxC,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,eAAe,CAAC,CAAC;AAMpC,KAAK,UAAU,YAAY,CAAC,GAAQ,EAAE,IAAgB;IAC3D,IAAI,IAAI,CAAC,GAAG;QAAE,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAEpD,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAE/D,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAE7C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC;YACxC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,OAAO,EAAE,IAAI,CAAC,GAAG;SAClB,CAAC,CAAC;QAGH,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE5B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IAEH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,IAAI,CAAC,GAAG;YAAE,MAAM,CAAC,KAAK,CAAC,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACrG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|