@loxia-labs/loxia-autopilot-one 1.0.1 → 1.0.3
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 +44 -54
- package/bin/cli.js +1 -115
- package/bin/loxia-terminal-v2.js +3 -0
- package/bin/loxia-terminal.js +3 -0
- package/bin/start-with-terminal.js +3 -0
- package/package.json +14 -15
- package/scripts/install-scanners.js +1 -235
- package/src/analyzers/CSSAnalyzer.js +1 -297
- package/src/analyzers/ConfigValidator.js +1 -690
- package/src/analyzers/ESLintAnalyzer.js +1 -320
- package/src/analyzers/JavaScriptAnalyzer.js +1 -261
- package/src/analyzers/PrettierFormatter.js +1 -247
- package/src/analyzers/PythonAnalyzer.js +1 -266
- package/src/analyzers/SecurityAnalyzer.js +1 -729
- package/src/analyzers/TypeScriptAnalyzer.js +1 -247
- package/src/analyzers/codeCloneDetector/analyzer.js +1 -344
- package/src/analyzers/codeCloneDetector/detector.js +1 -203
- package/src/analyzers/codeCloneDetector/index.js +1 -160
- package/src/analyzers/codeCloneDetector/parser.js +1 -199
- package/src/analyzers/codeCloneDetector/reporter.js +1 -148
- package/src/analyzers/codeCloneDetector/scanner.js +1 -59
- package/src/core/agentPool.js +1 -1474
- package/src/core/agentScheduler.js +1 -2147
- package/src/core/contextManager.js +1 -709
- package/src/core/messageProcessor.js +1 -732
- package/src/core/orchestrator.js +1 -548
- package/src/core/stateManager.js +1 -877
- package/src/index.js +1 -631
- package/src/interfaces/cli.js +1 -549
- package/src/interfaces/terminal/__tests__/smoke/advancedFeatures.test.js +1 -0
- package/src/interfaces/terminal/__tests__/smoke/agentControl.test.js +1 -0
- package/src/interfaces/terminal/__tests__/smoke/agents.test.js +1 -0
- package/src/interfaces/terminal/__tests__/smoke/components.test.js +1 -0
- package/src/interfaces/terminal/__tests__/smoke/connection.test.js +1 -0
- package/src/interfaces/terminal/__tests__/smoke/enhancements.test.js +1 -0
- package/src/interfaces/terminal/__tests__/smoke/imports.test.js +1 -0
- package/src/interfaces/terminal/__tests__/smoke/messages.test.js +1 -0
- package/src/interfaces/terminal/__tests__/smoke/tools.test.js +1 -0
- package/src/interfaces/terminal/api/apiClient.js +1 -0
- package/src/interfaces/terminal/api/messageRouter.js +1 -0
- package/src/interfaces/terminal/api/session.js +1 -0
- package/src/interfaces/terminal/api/websocket.js +1 -0
- package/src/interfaces/terminal/components/AgentCreator.js +1 -0
- package/src/interfaces/terminal/components/AgentEditor.js +1 -0
- package/src/interfaces/terminal/components/AgentSwitcher.js +1 -0
- package/src/interfaces/terminal/components/ErrorBoundary.js +1 -0
- package/src/interfaces/terminal/components/ErrorPanel.js +1 -0
- package/src/interfaces/terminal/components/Header.js +1 -0
- package/src/interfaces/terminal/components/HelpPanel.js +1 -0
- package/src/interfaces/terminal/components/InputBox.js +1 -0
- package/src/interfaces/terminal/components/Layout.js +1 -0
- package/src/interfaces/terminal/components/LoadingSpinner.js +1 -0
- package/src/interfaces/terminal/components/MessageList.js +1 -0
- package/src/interfaces/terminal/components/MultilineTextInput.js +1 -0
- package/src/interfaces/terminal/components/SearchPanel.js +1 -0
- package/src/interfaces/terminal/components/SettingsPanel.js +1 -0
- package/src/interfaces/terminal/components/StatusBar.js +1 -0
- package/src/interfaces/terminal/components/TextInput.js +1 -0
- package/src/interfaces/terminal/config/agentEditorConstants.js +1 -0
- package/src/interfaces/terminal/config/constants.js +1 -0
- package/src/interfaces/terminal/index.js +1 -0
- package/src/interfaces/terminal/state/useAgentControl.js +1 -0
- package/src/interfaces/terminal/state/useAgents.js +1 -0
- package/src/interfaces/terminal/state/useConnection.js +1 -0
- package/src/interfaces/terminal/state/useMessages.js +1 -0
- package/src/interfaces/terminal/state/useTools.js +1 -0
- package/src/interfaces/terminal/utils/debugLogger.js +1 -0
- package/src/interfaces/terminal/utils/settingsStorage.js +1 -0
- package/src/interfaces/terminal/utils/theme.js +1 -0
- package/src/interfaces/webServer.js +1 -2162
- package/src/modules/fileExplorer/controller.js +1 -280
- package/src/modules/fileExplorer/index.js +1 -37
- package/src/modules/fileExplorer/middleware.js +1 -92
- package/src/modules/fileExplorer/routes.js +1 -125
- package/src/modules/fileExplorer/types.js +1 -44
- package/src/services/aiService.js +1 -1232
- package/src/services/apiKeyManager.js +1 -164
- package/src/services/benchmarkService.js +1 -366
- package/src/services/budgetService.js +1 -539
- package/src/services/contextInjectionService.js +1 -247
- package/src/services/conversationCompactionService.js +1 -637
- package/src/services/errorHandler.js +1 -810
- package/src/services/fileAttachmentService.js +1 -544
- package/src/services/modelRouterService.js +1 -366
- package/src/services/modelsService.js +1 -322
- package/src/services/qualityInspector.js +1 -796
- package/src/services/tokenCountingService.js +1 -536
- package/src/tools/agentCommunicationTool.js +1 -1344
- package/src/tools/agentDelayTool.js +1 -485
- package/src/tools/asyncToolManager.js +1 -604
- package/src/tools/baseTool.js +1 -800
- package/src/tools/browserTool.js +1 -920
- package/src/tools/cloneDetectionTool.js +1 -621
- package/src/tools/dependencyResolverTool.js +1 -1215
- package/src/tools/fileContentReplaceTool.js +1 -875
- package/src/tools/fileSystemTool.js +1 -1107
- package/src/tools/fileTreeTool.js +1 -853
- package/src/tools/imageTool.js +1 -901
- package/src/tools/importAnalyzerTool.js +1 -1060
- package/src/tools/jobDoneTool.js +1 -248
- package/src/tools/seekTool.js +1 -956
- package/src/tools/staticAnalysisTool.js +1 -1778
- package/src/tools/taskManagerTool.js +1 -2873
- package/src/tools/terminalTool.js +1 -2304
- package/src/tools/webTool.js +1 -1430
- package/src/types/agent.js +1 -519
- package/src/types/contextReference.js +1 -972
- package/src/types/conversation.js +1 -730
- package/src/types/toolCommand.js +1 -747
- package/src/utilities/attachmentValidator.js +1 -292
- package/src/utilities/configManager.js +1 -582
- package/src/utilities/constants.js +1 -722
- package/src/utilities/directoryAccessManager.js +1 -535
- package/src/utilities/fileProcessor.js +1 -307
- package/src/utilities/logger.js +1 -436
- package/src/utilities/tagParser.js +1 -1246
- package/src/utilities/toolConstants.js +1 -317
- package/web-ui/build/index.html +2 -2
- package/web-ui/build/static/{index-Dy2bYbOa.css → index-CClD1090.css} +1 -1
- package/web-ui/build/static/{index-CjkkcnFA.js → index-lCBai6dX.js} +66 -67
package/src/types/toolCommand.js
CHANGED
|
@@ -1,747 +1 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tool Command Data Model - Type definitions and validation for tool executions
|
|
3
|
-
*
|
|
4
|
-
* Purpose:
|
|
5
|
-
* - Define the structure and properties of tool commands and executions
|
|
6
|
-
* - Provide validation functions for tool command data
|
|
7
|
-
* - Handle tool execution lifecycle and state management
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { TOOL_STATUS, TOOL_NAMES, OPERATION_STATUS } from '../utilities/constants.js';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Tool Command data model
|
|
14
|
-
* @typedef {Object} ToolCommand
|
|
15
|
-
* @property {string} id - Unique command identifier
|
|
16
|
-
* @property {string} toolId - Tool identifier (e.g., 'terminal', 'filesys')
|
|
17
|
-
* @property {string} command - Command to execute
|
|
18
|
-
* @property {Object} parameters - Command parameters
|
|
19
|
-
* @property {string} status - Execution status (pending, executing, completed, failed)
|
|
20
|
-
* @property {string} agentId - ID of agent executing the command
|
|
21
|
-
* @property {string} conversationId - ID of parent conversation
|
|
22
|
-
* @property {string} messageId - ID of parent message
|
|
23
|
-
* @property {ToolExecution} execution - Execution details
|
|
24
|
-
* @property {ToolMetadata} metadata - Command metadata
|
|
25
|
-
* @property {string} createdAt - ISO timestamp of creation
|
|
26
|
-
* @property {string} [startedAt] - ISO timestamp when execution started
|
|
27
|
-
* @property {string} [completedAt] - ISO timestamp when execution completed
|
|
28
|
-
* @property {number} priority - Command priority (1-5)
|
|
29
|
-
* @property {number} timeout - Timeout in milliseconds
|
|
30
|
-
* @property {number} retryCount - Number of retry attempts
|
|
31
|
-
* @property {number} maxRetries - Maximum retry attempts allowed
|
|
32
|
-
*/
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Tool Execution details
|
|
36
|
-
* @typedef {Object} ToolExecution
|
|
37
|
-
* @property {string} executionId - Unique execution identifier
|
|
38
|
-
* @property {Object} input - Input parameters provided to tool
|
|
39
|
-
* @property {Object} [output] - Tool execution output
|
|
40
|
-
* @property {string} [error] - Error message if execution failed
|
|
41
|
-
* @property {string} [errorCode] - Error code for programmatic handling
|
|
42
|
-
* @property {number} executionTime - Time taken for execution (ms)
|
|
43
|
-
* @property {number} memoryUsage - Memory usage during execution (bytes)
|
|
44
|
-
* @property {number} cpuUsage - CPU usage percentage
|
|
45
|
-
* @property {Object} metrics - Execution metrics and performance data
|
|
46
|
-
* @property {ExecutionLog[]} logs - Execution logs and output
|
|
47
|
-
* @property {Object} environment - Execution environment information
|
|
48
|
-
* @property {string} [workingDirectory] - Working directory for execution
|
|
49
|
-
* @property {Object} [environmentVariables] - Environment variables used
|
|
50
|
-
*/
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Tool Metadata
|
|
54
|
-
* @typedef {Object} ToolMetadata
|
|
55
|
-
* @property {string} toolVersion - Version of the tool used
|
|
56
|
-
* @property {string[]} capabilities - Tool capabilities used
|
|
57
|
-
* @property {Object} configuration - Tool-specific configuration
|
|
58
|
-
* @property {boolean} requiresAuth - Whether tool requires authentication
|
|
59
|
-
* @property {string[]} dependencies - Tool dependencies
|
|
60
|
-
* @property {Object} constraints - Execution constraints
|
|
61
|
-
* @property {string[]} tags - Metadata tags
|
|
62
|
-
* @property {Object} customFields - Custom metadata fields
|
|
63
|
-
*/
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Execution Log entry
|
|
67
|
-
* @typedef {Object} ExecutionLog
|
|
68
|
-
* @property {string} id - Log entry identifier
|
|
69
|
-
* @property {string} level - Log level (debug, info, warn, error)
|
|
70
|
-
* @property {string} message - Log message
|
|
71
|
-
* @property {string} timestamp - ISO timestamp
|
|
72
|
-
* @property {Object} [data] - Additional log data
|
|
73
|
-
* @property {string} [source] - Log source component
|
|
74
|
-
*/
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Tool Definition
|
|
78
|
-
* @typedef {Object} ToolDefinition
|
|
79
|
-
* @property {string} id - Tool identifier
|
|
80
|
-
* @property {string} name - Human-readable tool name
|
|
81
|
-
* @property {string} description - Tool description
|
|
82
|
-
* @property {string} version - Tool version
|
|
83
|
-
* @property {ToolCapability[]} capabilities - Tool capabilities
|
|
84
|
-
* @property {ParameterSchema} parameterSchema - Parameter validation schema
|
|
85
|
-
* @property {Object} configuration - Default configuration
|
|
86
|
-
* @property {string[]} requiredPermissions - Required permissions
|
|
87
|
-
* @property {Object} constraints - Tool constraints and limits
|
|
88
|
-
* @property {boolean} isAsync - Whether tool executes asynchronously
|
|
89
|
-
* @property {number} defaultTimeout - Default timeout in milliseconds
|
|
90
|
-
*/
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Tool Capability
|
|
94
|
-
* @typedef {Object} ToolCapability
|
|
95
|
-
* @property {string} id - Capability identifier
|
|
96
|
-
* @property {string} name - Capability name
|
|
97
|
-
* @property {string} description - Capability description
|
|
98
|
-
* @property {string[]} commands - Supported commands
|
|
99
|
-
* @property {Object} parameters - Capability-specific parameters
|
|
100
|
-
* @property {Object} constraints - Capability constraints
|
|
101
|
-
*/
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Parameter Schema
|
|
105
|
-
* @typedef {Object} ParameterSchema
|
|
106
|
-
* @property {Object} properties - Parameter definitions
|
|
107
|
-
* @property {string[]} required - Required parameter names
|
|
108
|
-
* @property {Object} additionalProperties - Additional property settings
|
|
109
|
-
* @property {Object} examples - Example parameter sets
|
|
110
|
-
*/
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Tool Command validation functions
|
|
114
|
-
*/
|
|
115
|
-
export class ToolCommandValidator {
|
|
116
|
-
/**
|
|
117
|
-
* Validate tool command data structure
|
|
118
|
-
* @param {Object} command - Tool command to validate
|
|
119
|
-
* @returns {Object} Validation result
|
|
120
|
-
*/
|
|
121
|
-
static validate(command) {
|
|
122
|
-
const errors = [];
|
|
123
|
-
const warnings = [];
|
|
124
|
-
|
|
125
|
-
// Required fields
|
|
126
|
-
if (!command.id || typeof command.id !== 'string') {
|
|
127
|
-
errors.push('Command ID is required and must be a string');
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
if (!command.toolId || typeof command.toolId !== 'string') {
|
|
131
|
-
errors.push('Tool ID is required and must be a string');
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
if (!command.command || typeof command.command !== 'string') {
|
|
135
|
-
errors.push('Command is required and must be a string');
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
if (!command.agentId || typeof command.agentId !== 'string') {
|
|
139
|
-
errors.push('Agent ID is required and must be a string');
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// Tool ID validation
|
|
143
|
-
if (command.toolId && !Object.values(TOOL_NAMES).includes(command.toolId) && !command.toolId.startsWith('custom_')) {
|
|
144
|
-
warnings.push(`Unknown tool ID: ${command.toolId}`);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// Status validation
|
|
148
|
-
if (command.status && !Object.values(TOOL_STATUS).includes(command.status)) {
|
|
149
|
-
errors.push(`Invalid tool status: ${command.status}`);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
// Parameters validation
|
|
153
|
-
if (command.parameters && typeof command.parameters !== 'object') {
|
|
154
|
-
errors.push('Parameters must be an object');
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
// Priority validation
|
|
158
|
-
if (command.priority !== undefined) {
|
|
159
|
-
if (typeof command.priority !== 'number' || command.priority < 1 || command.priority > 5) {
|
|
160
|
-
errors.push('Priority must be a number between 1 and 5');
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
// Timeout validation
|
|
165
|
-
if (command.timeout !== undefined) {
|
|
166
|
-
if (typeof command.timeout !== 'number' || command.timeout < 0) {
|
|
167
|
-
errors.push('Timeout must be a non-negative number');
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
if (command.timeout > 3600000) { // 1 hour
|
|
171
|
-
warnings.push('Timeout is very long (>1 hour)');
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
// Retry validation
|
|
176
|
-
if (command.retryCount !== undefined && typeof command.retryCount !== 'number') {
|
|
177
|
-
errors.push('Retry count must be a number');
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
if (command.maxRetries !== undefined && typeof command.maxRetries !== 'number') {
|
|
181
|
-
errors.push('Max retries must be a number');
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
if (command.retryCount && command.maxRetries && command.retryCount > command.maxRetries) {
|
|
185
|
-
warnings.push('Retry count exceeds max retries');
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
// Execution validation
|
|
189
|
-
if (command.execution) {
|
|
190
|
-
const executionValidation = this.validateExecution(command.execution);
|
|
191
|
-
errors.push(...executionValidation.errors);
|
|
192
|
-
warnings.push(...executionValidation.warnings);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
// Timestamp validation
|
|
196
|
-
const timestampFields = ['createdAt', 'startedAt', 'completedAt'];
|
|
197
|
-
timestampFields.forEach(field => {
|
|
198
|
-
if (command[field] && !this.isValidTimestamp(command[field])) {
|
|
199
|
-
errors.push(`Invalid timestamp for ${field}: ${command[field]}`);
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
return {
|
|
204
|
-
isValid: errors.length === 0,
|
|
205
|
-
errors,
|
|
206
|
-
warnings
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
/**
|
|
211
|
-
* Validate tool execution data
|
|
212
|
-
* @param {Object} execution - Execution data to validate
|
|
213
|
-
* @returns {Object} Validation result
|
|
214
|
-
*/
|
|
215
|
-
static validateExecution(execution) {
|
|
216
|
-
const errors = [];
|
|
217
|
-
const warnings = [];
|
|
218
|
-
|
|
219
|
-
if (!execution.executionId || typeof execution.executionId !== 'string') {
|
|
220
|
-
errors.push('Execution ID is required and must be a string');
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
if (!execution.input || typeof execution.input !== 'object') {
|
|
224
|
-
errors.push('Execution input is required and must be an object');
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
if (execution.executionTime !== undefined) {
|
|
228
|
-
if (typeof execution.executionTime !== 'number' || execution.executionTime < 0) {
|
|
229
|
-
errors.push('Execution time must be a non-negative number');
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
if (execution.memoryUsage !== undefined) {
|
|
234
|
-
if (typeof execution.memoryUsage !== 'number' || execution.memoryUsage < 0) {
|
|
235
|
-
errors.push('Memory usage must be a non-negative number');
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
if (execution.cpuUsage !== undefined) {
|
|
240
|
-
if (typeof execution.cpuUsage !== 'number' || execution.cpuUsage < 0 || execution.cpuUsage > 100) {
|
|
241
|
-
errors.push('CPU usage must be a number between 0 and 100');
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
if (execution.logs && !Array.isArray(execution.logs)) {
|
|
246
|
-
errors.push('Execution logs must be an array');
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
if (execution.logs) {
|
|
250
|
-
execution.logs.forEach((log, index) => {
|
|
251
|
-
if (!log.level || !log.message || !log.timestamp) {
|
|
252
|
-
errors.push(`Log entry ${index} missing required fields`);
|
|
253
|
-
}
|
|
254
|
-
});
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
return { errors, warnings };
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
/**
|
|
261
|
-
* Validate tool definition
|
|
262
|
-
* @param {Object} toolDef - Tool definition to validate
|
|
263
|
-
* @returns {Object} Validation result
|
|
264
|
-
*/
|
|
265
|
-
static validateToolDefinition(toolDef) {
|
|
266
|
-
const errors = [];
|
|
267
|
-
const warnings = [];
|
|
268
|
-
|
|
269
|
-
// Required fields
|
|
270
|
-
if (!toolDef.id || typeof toolDef.id !== 'string') {
|
|
271
|
-
errors.push('Tool ID is required and must be a string');
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
if (!toolDef.name || typeof toolDef.name !== 'string') {
|
|
275
|
-
errors.push('Tool name is required and must be a string');
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
if (!toolDef.description || typeof toolDef.description !== 'string') {
|
|
279
|
-
errors.push('Tool description is required and must be a string');
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
if (!toolDef.version || typeof toolDef.version !== 'string') {
|
|
283
|
-
errors.push('Tool version is required and must be a string');
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
// Capabilities validation
|
|
287
|
-
if (!toolDef.capabilities || !Array.isArray(toolDef.capabilities)) {
|
|
288
|
-
errors.push('Tool capabilities are required and must be an array');
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
if (toolDef.capabilities && toolDef.capabilities.length === 0) {
|
|
292
|
-
warnings.push('Tool has no capabilities defined');
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
// Parameter schema validation
|
|
296
|
-
if (toolDef.parameterSchema && typeof toolDef.parameterSchema !== 'object') {
|
|
297
|
-
errors.push('Parameter schema must be an object');
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
// Timeout validation
|
|
301
|
-
if (toolDef.defaultTimeout !== undefined) {
|
|
302
|
-
if (typeof toolDef.defaultTimeout !== 'number' || toolDef.defaultTimeout <= 0) {
|
|
303
|
-
errors.push('Default timeout must be a positive number');
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
return { errors, warnings };
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
/**
|
|
311
|
-
* Validate command parameters against tool definition
|
|
312
|
-
* @param {Object} parameters - Parameters to validate
|
|
313
|
-
* @param {ParameterSchema} schema - Parameter schema
|
|
314
|
-
* @returns {Object} Validation result
|
|
315
|
-
*/
|
|
316
|
-
static validateParameters(parameters, schema) {
|
|
317
|
-
const errors = [];
|
|
318
|
-
const warnings = [];
|
|
319
|
-
|
|
320
|
-
if (!schema || !schema.properties) {
|
|
321
|
-
return { errors: [], warnings: ['No parameter schema provided'] };
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
// Check required parameters
|
|
325
|
-
if (schema.required) {
|
|
326
|
-
schema.required.forEach(paramName => {
|
|
327
|
-
if (!(paramName in parameters)) {
|
|
328
|
-
errors.push(`Required parameter missing: ${paramName}`);
|
|
329
|
-
}
|
|
330
|
-
});
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
// Validate parameter types and constraints
|
|
334
|
-
Object.entries(parameters).forEach(([paramName, paramValue]) => {
|
|
335
|
-
const paramDef = schema.properties[paramName];
|
|
336
|
-
|
|
337
|
-
if (!paramDef) {
|
|
338
|
-
if (!schema.additionalProperties) {
|
|
339
|
-
warnings.push(`Unknown parameter: ${paramName}`);
|
|
340
|
-
}
|
|
341
|
-
return;
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
// Type validation
|
|
345
|
-
if (paramDef.type) {
|
|
346
|
-
const actualType = Array.isArray(paramValue) ? 'array' : typeof paramValue;
|
|
347
|
-
if (actualType !== paramDef.type) {
|
|
348
|
-
errors.push(`Parameter ${paramName} must be of type ${paramDef.type}, got ${actualType}`);
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
// Range validation for numbers
|
|
353
|
-
if (paramDef.type === 'number') {
|
|
354
|
-
if (paramDef.minimum !== undefined && paramValue < paramDef.minimum) {
|
|
355
|
-
errors.push(`Parameter ${paramName} must be >= ${paramDef.minimum}`);
|
|
356
|
-
}
|
|
357
|
-
if (paramDef.maximum !== undefined && paramValue > paramDef.maximum) {
|
|
358
|
-
errors.push(`Parameter ${paramName} must be <= ${paramDef.maximum}`);
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
// Length validation for strings
|
|
363
|
-
if (paramDef.type === 'string') {
|
|
364
|
-
if (paramDef.minLength !== undefined && paramValue.length < paramDef.minLength) {
|
|
365
|
-
errors.push(`Parameter ${paramName} must be at least ${paramDef.minLength} characters`);
|
|
366
|
-
}
|
|
367
|
-
if (paramDef.maxLength !== undefined && paramValue.length > paramDef.maxLength) {
|
|
368
|
-
errors.push(`Parameter ${paramName} must be at most ${paramDef.maxLength} characters`);
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
// Enum validation
|
|
373
|
-
if (paramDef.enum && !paramDef.enum.includes(paramValue)) {
|
|
374
|
-
errors.push(`Parameter ${paramName} must be one of: ${paramDef.enum.join(', ')}`);
|
|
375
|
-
}
|
|
376
|
-
});
|
|
377
|
-
|
|
378
|
-
return { errors, warnings };
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
/**
|
|
382
|
-
* Check if a timestamp is valid ISO string
|
|
383
|
-
* @param {string} timestamp - Timestamp to validate
|
|
384
|
-
* @returns {boolean} True if valid
|
|
385
|
-
*/
|
|
386
|
-
static isValidTimestamp(timestamp) {
|
|
387
|
-
if (typeof timestamp !== 'string') return false;
|
|
388
|
-
const date = new Date(timestamp);
|
|
389
|
-
return date instanceof Date && !isNaN(date.getTime());
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
/**
|
|
394
|
-
* Tool Command factory functions
|
|
395
|
-
*/
|
|
396
|
-
export class ToolCommandFactory {
|
|
397
|
-
/**
|
|
398
|
-
* Create a new tool command
|
|
399
|
-
* @param {string} toolId - Tool identifier
|
|
400
|
-
* @param {string} command - Command to execute
|
|
401
|
-
* @param {Object} parameters - Command parameters
|
|
402
|
-
* @param {Object} options - Additional options
|
|
403
|
-
* @returns {ToolCommand} New tool command object
|
|
404
|
-
*/
|
|
405
|
-
static create(toolId, command, parameters, options = {}) {
|
|
406
|
-
const now = new Date().toISOString();
|
|
407
|
-
const commandId = this.generateCommandId();
|
|
408
|
-
const executionId = this.generateExecutionId();
|
|
409
|
-
|
|
410
|
-
return {
|
|
411
|
-
id: commandId,
|
|
412
|
-
toolId,
|
|
413
|
-
command,
|
|
414
|
-
parameters: parameters || {},
|
|
415
|
-
status: TOOL_STATUS.PENDING,
|
|
416
|
-
agentId: options.agentId || '',
|
|
417
|
-
conversationId: options.conversationId || '',
|
|
418
|
-
messageId: options.messageId || '',
|
|
419
|
-
execution: {
|
|
420
|
-
executionId,
|
|
421
|
-
input: { command, parameters },
|
|
422
|
-
output: null,
|
|
423
|
-
error: null,
|
|
424
|
-
errorCode: null,
|
|
425
|
-
executionTime: 0,
|
|
426
|
-
memoryUsage: 0,
|
|
427
|
-
cpuUsage: 0,
|
|
428
|
-
metrics: {},
|
|
429
|
-
logs: [],
|
|
430
|
-
environment: options.environment || {},
|
|
431
|
-
workingDirectory: options.workingDirectory || null,
|
|
432
|
-
environmentVariables: options.environmentVariables || {}
|
|
433
|
-
},
|
|
434
|
-
metadata: this.createDefaultMetadata(options.metadata),
|
|
435
|
-
createdAt: now,
|
|
436
|
-
startedAt: null,
|
|
437
|
-
completedAt: null,
|
|
438
|
-
priority: options.priority || 3,
|
|
439
|
-
timeout: options.timeout || 30000,
|
|
440
|
-
retryCount: 0,
|
|
441
|
-
maxRetries: options.maxRetries || 3
|
|
442
|
-
};
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
/**
|
|
446
|
-
* Create execution log entry
|
|
447
|
-
* @param {string} level - Log level
|
|
448
|
-
* @param {string} message - Log message
|
|
449
|
-
* @param {Object} data - Additional log data
|
|
450
|
-
* @returns {ExecutionLog} Log entry
|
|
451
|
-
*/
|
|
452
|
-
static createLogEntry(level, message, data = null) {
|
|
453
|
-
return {
|
|
454
|
-
id: this.generateLogId(),
|
|
455
|
-
level,
|
|
456
|
-
message,
|
|
457
|
-
timestamp: new Date().toISOString(),
|
|
458
|
-
data,
|
|
459
|
-
source: 'tool-execution'
|
|
460
|
-
};
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
/**
|
|
464
|
-
* Create default tool metadata
|
|
465
|
-
* @param {Object} overrides - Metadata overrides
|
|
466
|
-
* @returns {ToolMetadata} Default metadata
|
|
467
|
-
*/
|
|
468
|
-
static createDefaultMetadata(overrides = {}) {
|
|
469
|
-
return {
|
|
470
|
-
toolVersion: '1.0.0',
|
|
471
|
-
capabilities: [],
|
|
472
|
-
configuration: {},
|
|
473
|
-
requiresAuth: false,
|
|
474
|
-
dependencies: [],
|
|
475
|
-
constraints: {},
|
|
476
|
-
tags: [],
|
|
477
|
-
customFields: {},
|
|
478
|
-
...overrides
|
|
479
|
-
};
|
|
480
|
-
}
|
|
481
|
-
|
|
482
|
-
/**
|
|
483
|
-
* Generate unique command ID
|
|
484
|
-
* @returns {string} Unique command ID
|
|
485
|
-
*/
|
|
486
|
-
static generateCommandId() {
|
|
487
|
-
const timestamp = Date.now().toString(36);
|
|
488
|
-
const random = Math.random().toString(36).substr(2, 9);
|
|
489
|
-
return `cmd_${timestamp}_${random}`;
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
/**
|
|
493
|
-
* Generate unique execution ID
|
|
494
|
-
* @returns {string} Unique execution ID
|
|
495
|
-
*/
|
|
496
|
-
static generateExecutionId() {
|
|
497
|
-
const timestamp = Date.now().toString(36);
|
|
498
|
-
const random = Math.random().toString(36).substr(2, 9);
|
|
499
|
-
return `exec_${timestamp}_${random}`;
|
|
500
|
-
}
|
|
501
|
-
|
|
502
|
-
/**
|
|
503
|
-
* Generate unique log ID
|
|
504
|
-
* @returns {string} Unique log ID
|
|
505
|
-
*/
|
|
506
|
-
static generateLogId() {
|
|
507
|
-
const timestamp = Date.now().toString(36);
|
|
508
|
-
const random = Math.random().toString(36).substr(2, 6);
|
|
509
|
-
return `log_${timestamp}_${random}`;
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
/**
|
|
514
|
-
* Tool Command utility functions
|
|
515
|
-
*/
|
|
516
|
-
export class ToolCommandUtils {
|
|
517
|
-
/**
|
|
518
|
-
* Check if command is still pending
|
|
519
|
-
* @param {ToolCommand} command - Command to check
|
|
520
|
-
* @returns {boolean} True if pending
|
|
521
|
-
*/
|
|
522
|
-
static isPending(command) {
|
|
523
|
-
return command.status === TOOL_STATUS.PENDING;
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
/**
|
|
527
|
-
* Check if command is currently executing
|
|
528
|
-
* @param {ToolCommand} command - Command to check
|
|
529
|
-
* @returns {boolean} True if executing
|
|
530
|
-
*/
|
|
531
|
-
static isExecuting(command) {
|
|
532
|
-
return command.status === TOOL_STATUS.EXECUTING;
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
/**
|
|
536
|
-
* Check if command has completed successfully
|
|
537
|
-
* @param {ToolCommand} command - Command to check
|
|
538
|
-
* @returns {boolean} True if completed
|
|
539
|
-
*/
|
|
540
|
-
static isCompleted(command) {
|
|
541
|
-
return command.status === TOOL_STATUS.COMPLETED;
|
|
542
|
-
}
|
|
543
|
-
|
|
544
|
-
/**
|
|
545
|
-
* Check if command has failed
|
|
546
|
-
* @param {ToolCommand} command - Command to check
|
|
547
|
-
* @returns {boolean} True if failed
|
|
548
|
-
*/
|
|
549
|
-
static isFailed(command) {
|
|
550
|
-
return command.status === TOOL_STATUS.FAILED;
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
/**
|
|
554
|
-
* Check if command has timed out
|
|
555
|
-
* @param {ToolCommand} command - Command to check
|
|
556
|
-
* @returns {boolean} True if timed out
|
|
557
|
-
*/
|
|
558
|
-
static isTimedOut(command) {
|
|
559
|
-
if (!command.startedAt || command.status !== TOOL_STATUS.EXECUTING) {
|
|
560
|
-
return false;
|
|
561
|
-
}
|
|
562
|
-
|
|
563
|
-
const startTime = new Date(command.startedAt);
|
|
564
|
-
const now = new Date();
|
|
565
|
-
const elapsed = now.getTime() - startTime.getTime();
|
|
566
|
-
|
|
567
|
-
return elapsed > command.timeout;
|
|
568
|
-
}
|
|
569
|
-
|
|
570
|
-
/**
|
|
571
|
-
* Calculate command execution time
|
|
572
|
-
* @param {ToolCommand} command - Command to analyze
|
|
573
|
-
* @returns {number|null} Execution time in milliseconds, null if not applicable
|
|
574
|
-
*/
|
|
575
|
-
static getExecutionTime(command) {
|
|
576
|
-
if (!command.startedAt) return null;
|
|
577
|
-
|
|
578
|
-
const endTime = command.completedAt ? new Date(command.completedAt) : new Date();
|
|
579
|
-
const startTime = new Date(command.startedAt);
|
|
580
|
-
|
|
581
|
-
return endTime.getTime() - startTime.getTime();
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
/**
|
|
585
|
-
* Get command progress information
|
|
586
|
-
* @param {ToolCommand} command - Command to analyze
|
|
587
|
-
* @returns {Object} Progress information
|
|
588
|
-
*/
|
|
589
|
-
static getProgress(command) {
|
|
590
|
-
const executionTime = this.getExecutionTime(command);
|
|
591
|
-
const isTimedOut = this.isTimedOut(command);
|
|
592
|
-
|
|
593
|
-
let progressPercentage = 0;
|
|
594
|
-
if (command.status === TOOL_STATUS.COMPLETED) {
|
|
595
|
-
progressPercentage = 100;
|
|
596
|
-
} else if (command.status === TOOL_STATUS.EXECUTING && executionTime) {
|
|
597
|
-
// Estimate progress based on execution time vs timeout
|
|
598
|
-
progressPercentage = Math.min(95, (executionTime / command.timeout) * 100);
|
|
599
|
-
}
|
|
600
|
-
|
|
601
|
-
return {
|
|
602
|
-
status: command.status,
|
|
603
|
-
percentage: Math.round(progressPercentage),
|
|
604
|
-
executionTime,
|
|
605
|
-
isTimedOut,
|
|
606
|
-
remainingTime: command.status === TOOL_STATUS.EXECUTING && executionTime
|
|
607
|
-
? Math.max(0, command.timeout - executionTime)
|
|
608
|
-
: null
|
|
609
|
-
};
|
|
610
|
-
}
|
|
611
|
-
|
|
612
|
-
/**
|
|
613
|
-
* Extract key metrics from command execution
|
|
614
|
-
* @param {ToolCommand} command - Command to analyze
|
|
615
|
-
* @returns {Object} Execution metrics
|
|
616
|
-
*/
|
|
617
|
-
static getMetrics(command) {
|
|
618
|
-
const execution = command.execution || {};
|
|
619
|
-
const progress = this.getProgress(command);
|
|
620
|
-
|
|
621
|
-
return {
|
|
622
|
-
executionTime: execution.executionTime || progress.executionTime || 0,
|
|
623
|
-
memoryUsage: execution.memoryUsage || 0,
|
|
624
|
-
cpuUsage: execution.cpuUsage || 0,
|
|
625
|
-
status: command.status,
|
|
626
|
-
retryCount: command.retryCount,
|
|
627
|
-
priority: command.priority,
|
|
628
|
-
logEntries: execution.logs ? execution.logs.length : 0,
|
|
629
|
-
hasError: !!execution.error,
|
|
630
|
-
errorCode: execution.errorCode || null
|
|
631
|
-
};
|
|
632
|
-
}
|
|
633
|
-
|
|
634
|
-
/**
|
|
635
|
-
* Format command for display
|
|
636
|
-
* @param {ToolCommand} command - Command to format
|
|
637
|
-
* @returns {Object} Formatted command data
|
|
638
|
-
*/
|
|
639
|
-
static formatForDisplay(command) {
|
|
640
|
-
const progress = this.getProgress(command);
|
|
641
|
-
const metrics = this.getMetrics(command);
|
|
642
|
-
|
|
643
|
-
return {
|
|
644
|
-
id: command.id,
|
|
645
|
-
toolId: command.toolId,
|
|
646
|
-
command: command.command,
|
|
647
|
-
status: command.status,
|
|
648
|
-
progress: progress.percentage,
|
|
649
|
-
executionTime: metrics.executionTime,
|
|
650
|
-
createdAt: command.createdAt,
|
|
651
|
-
startedAt: command.startedAt,
|
|
652
|
-
completedAt: command.completedAt,
|
|
653
|
-
hasError: metrics.hasError,
|
|
654
|
-
retryCount: command.retryCount
|
|
655
|
-
};
|
|
656
|
-
}
|
|
657
|
-
|
|
658
|
-
/**
|
|
659
|
-
* Sanitize command for API responses
|
|
660
|
-
* @param {ToolCommand} command - Command to sanitize
|
|
661
|
-
* @returns {Object} Sanitized command data
|
|
662
|
-
*/
|
|
663
|
-
static sanitize(command) {
|
|
664
|
-
const sanitized = { ...command };
|
|
665
|
-
|
|
666
|
-
// Remove sensitive execution data
|
|
667
|
-
if (sanitized.execution) {
|
|
668
|
-
delete sanitized.execution.environmentVariables;
|
|
669
|
-
delete sanitized.execution.environment;
|
|
670
|
-
|
|
671
|
-
// Truncate long logs
|
|
672
|
-
if (sanitized.execution.logs && sanitized.execution.logs.length > 10) {
|
|
673
|
-
sanitized.execution.logs = sanitized.execution.logs.slice(-10);
|
|
674
|
-
}
|
|
675
|
-
}
|
|
676
|
-
|
|
677
|
-
// Remove sensitive parameters
|
|
678
|
-
if (sanitized.parameters) {
|
|
679
|
-
const sensitiveKeys = ['password', 'token', 'secret', 'key', 'auth'];
|
|
680
|
-
Object.keys(sanitized.parameters).forEach(key => {
|
|
681
|
-
if (sensitiveKeys.some(sensitive => key.toLowerCase().includes(sensitive))) {
|
|
682
|
-
sanitized.parameters[key] = '[REDACTED]';
|
|
683
|
-
}
|
|
684
|
-
});
|
|
685
|
-
}
|
|
686
|
-
|
|
687
|
-
return sanitized;
|
|
688
|
-
}
|
|
689
|
-
|
|
690
|
-
/**
|
|
691
|
-
* Create command summary for reporting
|
|
692
|
-
* @param {ToolCommand[]} commands - Commands to summarize
|
|
693
|
-
* @returns {Object} Command summary
|
|
694
|
-
*/
|
|
695
|
-
static summarizeCommands(commands) {
|
|
696
|
-
const summary = {
|
|
697
|
-
total: commands.length,
|
|
698
|
-
byStatus: {},
|
|
699
|
-
byTool: {},
|
|
700
|
-
totalExecutionTime: 0,
|
|
701
|
-
averageExecutionTime: 0,
|
|
702
|
-
successRate: 0,
|
|
703
|
-
mostUsedTools: [],
|
|
704
|
-
recentCommands: []
|
|
705
|
-
};
|
|
706
|
-
|
|
707
|
-
// Count by status
|
|
708
|
-
Object.values(TOOL_STATUS).forEach(status => {
|
|
709
|
-
summary.byStatus[status] = commands.filter(cmd => cmd.status === status).length;
|
|
710
|
-
});
|
|
711
|
-
|
|
712
|
-
// Count by tool
|
|
713
|
-
commands.forEach(command => {
|
|
714
|
-
summary.byTool[command.toolId] = (summary.byTool[command.toolId] || 0) + 1;
|
|
715
|
-
|
|
716
|
-
const executionTime = this.getExecutionTime(command) || 0;
|
|
717
|
-
summary.totalExecutionTime += executionTime;
|
|
718
|
-
});
|
|
719
|
-
|
|
720
|
-
// Calculate averages and rates
|
|
721
|
-
if (commands.length > 0) {
|
|
722
|
-
summary.averageExecutionTime = summary.totalExecutionTime / commands.length;
|
|
723
|
-
const successfulCommands = summary.byStatus[TOOL_STATUS.COMPLETED] || 0;
|
|
724
|
-
summary.successRate = (successfulCommands / commands.length) * 100;
|
|
725
|
-
}
|
|
726
|
-
|
|
727
|
-
// Most used tools
|
|
728
|
-
summary.mostUsedTools = Object.entries(summary.byTool)
|
|
729
|
-
.sort((a, b) => b[1] - a[1])
|
|
730
|
-
.slice(0, 5)
|
|
731
|
-
.map(([toolId, count]) => ({ toolId, count }));
|
|
732
|
-
|
|
733
|
-
// Recent commands
|
|
734
|
-
summary.recentCommands = commands
|
|
735
|
-
.sort((a, b) => new Date(b.createdAt) - new Date(a.createdAt))
|
|
736
|
-
.slice(0, 10)
|
|
737
|
-
.map(cmd => this.formatForDisplay(cmd));
|
|
738
|
-
|
|
739
|
-
return summary;
|
|
740
|
-
}
|
|
741
|
-
}
|
|
742
|
-
|
|
743
|
-
export default {
|
|
744
|
-
ToolCommandValidator,
|
|
745
|
-
ToolCommandFactory,
|
|
746
|
-
ToolCommandUtils
|
|
747
|
-
};
|
|
1
|
+
const a0_0x4735fd=a0_0x2178;(function(_0xbe0e6,_0xbdcc0a){const _0x3246dc=a0_0x2178,_0x29890a=_0xbe0e6();while(!![]){try{const _0xe6d6d4=parseInt(_0x3246dc(0x135))/0x1+-parseInt(_0x3246dc(0xe3))/0x2+parseInt(_0x3246dc(0x117))/0x3*(parseInt(_0x3246dc(0xe1))/0x4)+parseInt(_0x3246dc(0x136))/0x5*(-parseInt(_0x3246dc(0x127))/0x6)+-parseInt(_0x3246dc(0x12c))/0x7*(parseInt(_0x3246dc(0x102))/0x8)+parseInt(_0x3246dc(0x128))/0x9+-parseInt(_0x3246dc(0xfc))/0xa*(-parseInt(_0x3246dc(0xde))/0xb);if(_0xe6d6d4===_0xbdcc0a)break;else _0x29890a['push'](_0x29890a['shift']());}catch(_0x177b11){_0x29890a['push'](_0x29890a['shift']());}}}(a0_0x1df7,0xd5101));import{TOOL_STATUS,TOOL_NAMES,OPERATION_STATUS}from'../utilities/constants.js';export class ToolCommandValidator{static[a0_0x4735fd(0x108)](_0x291caa){const _0x193bec=a0_0x4735fd,_0x10e4da=[],_0x43d31d=[];(!_0x291caa['id']||typeof _0x291caa['id']!=='string')&&_0x10e4da[_0x193bec(0xf8)](_0x193bec(0x11a));(!_0x291caa[_0x193bec(0xfe)]||typeof _0x291caa[_0x193bec(0xfe)]!=='string')&&_0x10e4da['push'](_0x193bec(0x110));(!_0x291caa['command']||typeof _0x291caa['command']!==_0x193bec(0x104))&&_0x10e4da['push']('Command\x20is\x20required\x20and\x20must\x20be\x20a\x20string');(!_0x291caa[_0x193bec(0x138)]||typeof _0x291caa['agentId']!==_0x193bec(0x104))&&_0x10e4da['push']('Agent\x20ID\x20is\x20required\x20and\x20must\x20be\x20a\x20string');_0x291caa['toolId']&&!Object['values'](TOOL_NAMES)[_0x193bec(0x11e)](_0x291caa['toolId'])&&!_0x291caa['toolId'][_0x193bec(0x140)](_0x193bec(0x10a))&&_0x43d31d[_0x193bec(0xf8)](_0x193bec(0x10e)+_0x291caa[_0x193bec(0xfe)]);_0x291caa['status']&&!Object['values'](TOOL_STATUS)['includes'](_0x291caa['status'])&&_0x10e4da[_0x193bec(0xf8)](_0x193bec(0xe6)+_0x291caa['status']);_0x291caa['parameters']&&typeof _0x291caa['parameters']!==_0x193bec(0xef)&&_0x10e4da[_0x193bec(0xf8)]('Parameters\x20must\x20be\x20an\x20object');_0x291caa['priority']!==undefined&&((typeof _0x291caa[_0x193bec(0x131)]!=='number'||_0x291caa[_0x193bec(0x131)]<0x1||_0x291caa[_0x193bec(0x131)]>0x5)&&_0x10e4da[_0x193bec(0xf8)]('Priority\x20must\x20be\x20a\x20number\x20between\x201\x20and\x205'));_0x291caa['timeout']!==undefined&&((typeof _0x291caa[_0x193bec(0xf2)]!=='number'||_0x291caa['timeout']<0x0)&&_0x10e4da[_0x193bec(0xf8)]('Timeout\x20must\x20be\x20a\x20non-negative\x20number'),_0x291caa[_0x193bec(0xf2)]>0x36ee80&&_0x43d31d['push']('Timeout\x20is\x20very\x20long\x20(>1\x20hour)'));_0x291caa['retryCount']!==undefined&&typeof _0x291caa['retryCount']!==_0x193bec(0xf0)&&_0x10e4da['push'](_0x193bec(0x11b));_0x291caa['maxRetries']!==undefined&&typeof _0x291caa[_0x193bec(0xfb)]!==_0x193bec(0xf0)&&_0x10e4da['push']('Max\x20retries\x20must\x20be\x20a\x20number');_0x291caa[_0x193bec(0x10b)]&&_0x291caa[_0x193bec(0xfb)]&&_0x291caa[_0x193bec(0x10b)]>_0x291caa[_0x193bec(0xfb)]&&_0x43d31d['push']('Retry\x20count\x20exceeds\x20max\x20retries');if(_0x291caa[_0x193bec(0x11f)]){const _0x53e85f=this['validateExecution'](_0x291caa[_0x193bec(0x11f)]);_0x10e4da[_0x193bec(0xf8)](..._0x53e85f['errors']),_0x43d31d['push'](..._0x53e85f['warnings']);}const _0x30c56f=['createdAt','startedAt','completedAt'];return _0x30c56f['forEach'](_0x356633=>{const _0x5d278a=_0x193bec;_0x291caa[_0x356633]&&!this[_0x5d278a(0x123)](_0x291caa[_0x356633])&&_0x10e4da[_0x5d278a(0xf8)]('Invalid\x20timestamp\x20for\x20'+_0x356633+':\x20'+_0x291caa[_0x356633]);}),{'isValid':_0x10e4da[_0x193bec(0x121)]===0x0,'errors':_0x10e4da,'warnings':_0x43d31d};}static['validateExecution'](_0x49e0a6){const _0x339357=a0_0x4735fd,_0x1a7b02=[],_0x3910b8=[];return(!_0x49e0a6[_0x339357(0x12f)]||typeof _0x49e0a6['executionId']!==_0x339357(0x104))&&_0x1a7b02['push'](_0x339357(0x10c)),(!_0x49e0a6['input']||typeof _0x49e0a6['input']!=='object')&&_0x1a7b02['push']('Execution\x20input\x20is\x20required\x20and\x20must\x20be\x20an\x20object'),_0x49e0a6[_0x339357(0x129)]!==undefined&&((typeof _0x49e0a6['executionTime']!=='number'||_0x49e0a6[_0x339357(0x129)]<0x0)&&_0x1a7b02['push'](_0x339357(0xe7))),_0x49e0a6['memoryUsage']!==undefined&&((typeof _0x49e0a6['memoryUsage']!=='number'||_0x49e0a6[_0x339357(0xf6)]<0x0)&&_0x1a7b02['push']('Memory\x20usage\x20must\x20be\x20a\x20non-negative\x20number')),_0x49e0a6[_0x339357(0xea)]!==undefined&&((typeof _0x49e0a6[_0x339357(0xea)]!=='number'||_0x49e0a6['cpuUsage']<0x0||_0x49e0a6['cpuUsage']>0x64)&&_0x1a7b02[_0x339357(0xf8)](_0x339357(0xe5))),_0x49e0a6[_0x339357(0x100)]&&!Array[_0x339357(0xf9)](_0x49e0a6['logs'])&&_0x1a7b02[_0x339357(0xf8)]('Execution\x20logs\x20must\x20be\x20an\x20array'),_0x49e0a6[_0x339357(0x100)]&&_0x49e0a6[_0x339357(0x100)][_0x339357(0x11d)]((_0x313a75,_0x428918)=>{const _0x4e83cb=_0x339357;(!_0x313a75['level']||!_0x313a75['message']||!_0x313a75[_0x4e83cb(0x139)])&&_0x1a7b02['push']('Log\x20entry\x20'+_0x428918+'\x20missing\x20required\x20fields');}),{'errors':_0x1a7b02,'warnings':_0x3910b8};}static['validateToolDefinition'](_0x4fa2b0){const _0x1ed36a=a0_0x4735fd,_0x315760=[],_0x1c5cf2=[];return(!_0x4fa2b0['id']||typeof _0x4fa2b0['id']!==_0x1ed36a(0x104))&&_0x315760['push']('Tool\x20ID\x20is\x20required\x20and\x20must\x20be\x20a\x20string'),(!_0x4fa2b0[_0x1ed36a(0x116)]||typeof _0x4fa2b0['name']!==_0x1ed36a(0x104))&&_0x315760[_0x1ed36a(0xf8)]('Tool\x20name\x20is\x20required\x20and\x20must\x20be\x20a\x20string'),(!_0x4fa2b0['description']||typeof _0x4fa2b0['description']!=='string')&&_0x315760[_0x1ed36a(0xf8)]('Tool\x20description\x20is\x20required\x20and\x20must\x20be\x20a\x20string'),(!_0x4fa2b0[_0x1ed36a(0x141)]||typeof _0x4fa2b0[_0x1ed36a(0x141)]!==_0x1ed36a(0x104))&&_0x315760[_0x1ed36a(0xf8)](_0x1ed36a(0x13e)),(!_0x4fa2b0['capabilities']||!Array['isArray'](_0x4fa2b0[_0x1ed36a(0xec)]))&&_0x315760['push']('Tool\x20capabilities\x20are\x20required\x20and\x20must\x20be\x20an\x20array'),_0x4fa2b0[_0x1ed36a(0xec)]&&_0x4fa2b0[_0x1ed36a(0xec)][_0x1ed36a(0x121)]===0x0&&_0x1c5cf2[_0x1ed36a(0xf8)](_0x1ed36a(0x112)),_0x4fa2b0[_0x1ed36a(0x133)]&&typeof _0x4fa2b0[_0x1ed36a(0x133)]!==_0x1ed36a(0xef)&&_0x315760['push'](_0x1ed36a(0x13c)),_0x4fa2b0['defaultTimeout']!==undefined&&((typeof _0x4fa2b0['defaultTimeout']!=='number'||_0x4fa2b0['defaultTimeout']<=0x0)&&_0x315760['push']('Default\x20timeout\x20must\x20be\x20a\x20positive\x20number')),{'errors':_0x315760,'warnings':_0x1c5cf2};}static['validateParameters'](_0x2bf7cd,_0x4bbe82){const _0x53ff5d=a0_0x4735fd,_0x2052ce=[],_0x54fe82=[];if(!_0x4bbe82||!_0x4bbe82['properties'])return{'errors':[],'warnings':['No\x20parameter\x20schema\x20provided']};return _0x4bbe82['required']&&_0x4bbe82[_0x53ff5d(0xeb)][_0x53ff5d(0x11d)](_0x2a2e0b=>{!(_0x2a2e0b in _0x2bf7cd)&&_0x2052ce['push']('Required\x20parameter\x20missing:\x20'+_0x2a2e0b);}),Object[_0x53ff5d(0xf4)](_0x2bf7cd)[_0x53ff5d(0x11d)](([_0x9f4bd8,_0x150034])=>{const _0x5cbb4d=_0x53ff5d,_0x1bef28=_0x4bbe82[_0x5cbb4d(0xf5)][_0x9f4bd8];if(!_0x1bef28){!_0x4bbe82['additionalProperties']&&_0x54fe82[_0x5cbb4d(0xf8)](_0x5cbb4d(0x101)+_0x9f4bd8);return;}if(_0x1bef28['type']){const _0x52507b=Array[_0x5cbb4d(0xf9)](_0x150034)?'array':typeof _0x150034;_0x52507b!==_0x1bef28['type']&&_0x2052ce['push']('Parameter\x20'+_0x9f4bd8+_0x5cbb4d(0x126)+_0x1bef28[_0x5cbb4d(0x103)]+',\x20got\x20'+_0x52507b);}_0x1bef28['type']===_0x5cbb4d(0xf0)&&(_0x1bef28['minimum']!==undefined&&_0x150034<_0x1bef28[_0x5cbb4d(0x143)]&&_0x2052ce['push']('Parameter\x20'+_0x9f4bd8+'\x20must\x20be\x20>=\x20'+_0x1bef28[_0x5cbb4d(0x143)]),_0x1bef28[_0x5cbb4d(0x13b)]!==undefined&&_0x150034>_0x1bef28[_0x5cbb4d(0x13b)]&&_0x2052ce[_0x5cbb4d(0xf8)]('Parameter\x20'+_0x9f4bd8+'\x20must\x20be\x20<=\x20'+_0x1bef28[_0x5cbb4d(0x13b)])),_0x1bef28['type']==='string'&&(_0x1bef28[_0x5cbb4d(0x114)]!==undefined&&_0x150034[_0x5cbb4d(0x121)]<_0x1bef28['minLength']&&_0x2052ce['push']('Parameter\x20'+_0x9f4bd8+_0x5cbb4d(0x10f)+_0x1bef28['minLength']+'\x20characters'),_0x1bef28['maxLength']!==undefined&&_0x150034['length']>_0x1bef28['maxLength']&&_0x2052ce[_0x5cbb4d(0xf8)](_0x5cbb4d(0xdf)+_0x9f4bd8+_0x5cbb4d(0xf7)+_0x1bef28['maxLength']+_0x5cbb4d(0xf1))),_0x1bef28['enum']&&!_0x1bef28[_0x5cbb4d(0x119)][_0x5cbb4d(0x11e)](_0x150034)&&_0x2052ce[_0x5cbb4d(0xf8)]('Parameter\x20'+_0x9f4bd8+'\x20must\x20be\x20one\x20of:\x20'+_0x1bef28['enum'][_0x5cbb4d(0x13a)](',\x20'));}),{'errors':_0x2052ce,'warnings':_0x54fe82};}static[a0_0x4735fd(0x123)](_0xa5a44b){const _0x1f4506=a0_0x4735fd;if(typeof _0xa5a44b!=='string')return![];const _0x3a9154=new Date(_0xa5a44b);return _0x3a9154 instanceof Date&&!isNaN(_0x3a9154[_0x1f4506(0x12a)]());}}export class ToolCommandFactory{static['create'](_0x5c3223,_0xa84876,_0x151290,_0x589827={}){const _0x4ab3c3=a0_0x4735fd,_0x4cf899=new Date()['toISOString'](),_0x3f82a1=this['generateCommandId'](),_0x4a1500=this['generateExecutionId']();return{'id':_0x3f82a1,'toolId':_0x5c3223,'command':_0xa84876,'parameters':_0x151290||{},'status':TOOL_STATUS['PENDING'],'agentId':_0x589827['agentId']||'','conversationId':_0x589827['conversationId']||'','messageId':_0x589827['messageId']||'','execution':{'executionId':_0x4a1500,'input':{'command':_0xa84876,'parameters':_0x151290},'output':null,'error':null,'errorCode':null,'executionTime':0x0,'memoryUsage':0x0,'cpuUsage':0x0,'metrics':{},'logs':[],'environment':_0x589827['environment']||{},'workingDirectory':_0x589827['workingDirectory']||null,'environmentVariables':_0x589827[_0x4ab3c3(0x125)]||{}},'metadata':this[_0x4ab3c3(0x118)](_0x589827['metadata']),'createdAt':_0x4cf899,'startedAt':null,'completedAt':null,'priority':_0x589827['priority']||0x3,'timeout':_0x589827[_0x4ab3c3(0xf2)]||0x7530,'retryCount':0x0,'maxRetries':_0x589827['maxRetries']||0x3};}static['createLogEntry'](_0x1ad975,_0x3cbb21,_0x35c006=null){const _0x5d470e=a0_0x4735fd;return{'id':this[_0x5d470e(0xfa)](),'level':_0x1ad975,'message':_0x3cbb21,'timestamp':new Date()[_0x5d470e(0xf3)](),'data':_0x35c006,'source':_0x5d470e(0xed)};}static['createDefaultMetadata'](_0x23f04e={}){return{'toolVersion':'1.0.0','capabilities':[],'configuration':{},'requiresAuth':![],'dependencies':[],'constraints':{},'tags':[],'customFields':{},..._0x23f04e};}static[a0_0x4735fd(0xe0)](){const _0x4a46c3=a0_0x4735fd,_0x1dfeb3=Date['now']()[_0x4a46c3(0xe2)](0x24),_0x347802=Math[_0x4a46c3(0x122)]()['toString'](0x24)['substr'](0x2,0x9);return'cmd_'+_0x1dfeb3+'_'+_0x347802;}static[a0_0x4735fd(0x124)](){const _0x560354=a0_0x4735fd,_0x6bc96f=Date['now']()[_0x560354(0xe2)](0x24),_0x259ca4=Math['random']()['toString'](0x24)['substr'](0x2,0x9);return'exec_'+_0x6bc96f+'_'+_0x259ca4;}static['generateLogId'](){const _0x588513=a0_0x4735fd,_0x30c027=Date['now']()[_0x588513(0xe2)](0x24),_0x1491c9=Math['random']()[_0x588513(0xe2)](0x24)['substr'](0x2,0x6);return'log_'+_0x30c027+'_'+_0x1491c9;}}function a0_0x2178(_0x1e4b33,_0x58c4ce){_0x1e4b33=_0x1e4b33-0xda;const _0x1df766=a0_0x1df7();let _0x217881=_0x1df766[_0x1e4b33];if(a0_0x2178['qUluAe']===undefined){var _0xc3629f=function(_0x17d468){const _0x310d04='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x291caa='',_0x10e4da='';for(let _0x43d31d=0x0,_0x30c56f,_0x53e85f,_0x356633=0x0;_0x53e85f=_0x17d468['charAt'](_0x356633++);~_0x53e85f&&(_0x30c56f=_0x43d31d%0x4?_0x30c56f*0x40+_0x53e85f:_0x53e85f,_0x43d31d++%0x4)?_0x291caa+=String['fromCharCode'](0xff&_0x30c56f>>(-0x2*_0x43d31d&0x6)):0x0){_0x53e85f=_0x310d04['indexOf'](_0x53e85f);}for(let _0x49e0a6=0x0,_0x1a7b02=_0x291caa['length'];_0x49e0a6<_0x1a7b02;_0x49e0a6++){_0x10e4da+='%'+('00'+_0x291caa['charCodeAt'](_0x49e0a6)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x10e4da);};a0_0x2178['aGwcRe']=_0xc3629f,a0_0x2178['mTHmTV']={},a0_0x2178['qUluAe']=!![];}const _0x179e5b=_0x1df766[0x0],_0x1af04f=_0x1e4b33+_0x179e5b,_0x585c04=a0_0x2178['mTHmTV'][_0x1af04f];return!_0x585c04?(_0x217881=a0_0x2178['aGwcRe'](_0x217881),a0_0x2178['mTHmTV'][_0x1af04f]=_0x217881):_0x217881=_0x585c04,_0x217881;}function a0_0x1df7(){const _0x4f996a=['ntCWody3r3Por2zh','y3jLyxrLrgvMyxvSDe1LDgfKyxrH','zw51Bq','q29TBwfUzcbjrcbPCYbYzxf1AxjLzcbHBMqGBxvZDcbIzsbHihn0CMLUzW','uMv0CNKGy291BNqGBxvZDcbIzsbHig51BwjLCG','yxzLCMfNzuv4zwn1DgLVBLrPBwu','zM9YrwfJAa','Aw5JBhvKzxm','zxHLy3v0Aw9U','CM91BMq','BgvUz3rO','CMfUzg9T','AxnwywXPzfrPBwvZDgfTCa','z2vUzxjHDgvfEgvJDxrPB25jza','zw52AxjVBM1LBNrwyxjPywjSzxm','ig11C3qGyMuGB2yGDhLWzsa','nKH6uevpEq','mtq0nJC5odzirKvpwxC','zxHLy3v0Aw9UvgLTzq','z2v0vgLTzq','zxjYB3i','mte5nZe5mtf4sfDxCgy','C2vJCMv0','AgfZrxjYB3i','zxHLy3v0Aw9Uswq','y29TCgXLDgvKqxq','ChjPB3jPDhK','AxngywLSzwq','CgfYyw1LDgvYu2nOzw1H','CgfYyw1LDgvYCW','mte5ntG1zfj5twXY','mZmYmta3mg13Bgf4Aa','C3rHCNrLzef0','ywDLBNrjza','DgLTzxn0yw1W','AM9PBG','Bwf4Aw11Bq','ugfYyw1LDgvYihnJAgvTysbTDxn0igjLigfUig9IAMvJDa','C29Tzq','vg9VBcb2zxjZAw9UigLZihjLCxvPCMvKigfUzcbTDxn0igjLigeGC3rYAw5N','Axnqzw5KAw5N','C3rHCNrZv2L0Aa','DMvYC2LVBG','C2XPy2u','BwLUAw11Bq','yNLtDgf0Dxm','y3jLyxrLzef0','zxjYB3jdB2rL','BwfW','odG1nde2ngrTEgXiBa','ugfYyw1LDgvYia','z2vUzxjHDgvdB21Tyw5Kswq','nfbLuertCW','Dg9tDhjPBMC','mJe3mdaXnMH5AMzAva','CMvJzw50q29TBwfUzhm','q1bvihvZywDLig11C3qGyMuGysbUDw1IzxiGyMv0D2vLBIaWigfUzcaXmda','sw52ywXPzcb0B29Sihn0yxr1CZOG','rxHLy3v0Aw9UihrPBwuGBxvZDcbIzsbHig5VBI1UzwDHDgL2zsbUDw1Izxi','z2v0uhjVz3jLC3m','yNLuB29S','y3b1vxnHz2u','CMvXDwLYzwq','y2fWywjPBgL0AwvZ','Dg9VBc1LEgvJDxrPB24','C3vTBwfYAxPLq29TBwfUzhm','B2jQzwn0','BNvTyMvY','ignOyxjHy3rLCNm','DgLTzw91Da','Dg9ju09tDhjPBMC','zw50CMLLCW','ChjVCgvYDgLLCW','BwvTB3j5vxnHz2u','ig11C3qGyMuGyxqGBw9ZDca','ChvZAa','AxnbCNjHEq','z2vUzxjHDgvmB2Djza','Bwf4uMv0CMLLCW','mZbltg5ivgm','A2v5','Dg9VBeLK','C3rHDhvZ','Bg9NCW','vw5RBM93BIbWyxjHBwv0zxi6ia','ohfez3Hfva','DhLWzq','C3rYAw5N','AxnuAw1Lze91Da','zM9YBwf0rM9YrgLZCgXHEq','C3vJy2vZC1jHDgu','DMfSAwrHDgu','z2v0twv0CMLJCW','y3vZDg9TxW','CMv0CNLdB3vUDa','rxHLy3v0Aw9UieLeigLZihjLCxvPCMvKigfUzcbTDxn0igjLigeGC3rYAw5N','q09nueXfveve','vw5RBM93BIb0B29SieLeoIa','ig11C3qGyMuGyxqGBgvHC3qG','vg9VBcbjrcbPCYbYzxf1AxjLzcbHBMqGBxvZDcbIzsbHihn0CMLUzW','A2v5CW','vg9VBcbOyxmGBM8Gy2fWywjPBgL0AwvZigrLzMLUzwq','z2v0rxHLy3v0Aw9UvgLTzq','BwLUtgvUz3rO','rKfjteve','BMfTzq'];a0_0x1df7=function(){return _0x4f996a;};return a0_0x1df7();}export class ToolCommandUtils{static[a0_0x4735fd(0x13f)](_0x481f67){const _0x13a19a=a0_0x4735fd;return _0x481f67[_0x13a19a(0xff)]===TOOL_STATUS['PENDING'];}static['isExecuting'](_0x51a52e){return _0x51a52e['status']===TOOL_STATUS['EXECUTING'];}static['isCompleted'](_0x2e50d8){const _0x2f81ba=a0_0x4735fd;return _0x2e50d8[_0x2f81ba(0xff)]===TOOL_STATUS[_0x2f81ba(0x10d)];}static[a0_0x4735fd(0x132)](_0xd652eb){const _0x5d4a6d=a0_0x4735fd;return _0xd652eb['status']===TOOL_STATUS[_0x5d4a6d(0x115)];}static[a0_0x4735fd(0x105)](_0x15b095){const _0x4080cd=a0_0x4735fd;if(!_0x15b095[_0x4080cd(0x137)]||_0x15b095['status']!==TOOL_STATUS['EXECUTING'])return![];const _0x5eec8d=new Date(_0x15b095['startedAt']),_0x2cd88f=new Date(),_0xc062c2=_0x2cd88f[_0x4080cd(0x12a)]()-_0x5eec8d['getTime']();return _0xc062c2>_0x15b095[_0x4080cd(0xf2)];}static['getExecutionTime'](_0x17a714){const _0x49fa2e=a0_0x4735fd;if(!_0x17a714['startedAt'])return null;const _0x294b1b=_0x17a714[_0x49fa2e(0x130)]?new Date(_0x17a714['completedAt']):new Date(),_0x4f398a=new Date(_0x17a714[_0x49fa2e(0x137)]);return _0x294b1b['getTime']()-_0x4f398a[_0x49fa2e(0x12a)]();}static['getProgress'](_0x2ac86a){const _0x36a942=a0_0x4735fd,_0x352722=this[_0x36a942(0x113)](_0x2ac86a),_0x3aaa21=this['isTimedOut'](_0x2ac86a);let _0x43c6bf=0x0;if(_0x2ac86a[_0x36a942(0xff)]===TOOL_STATUS[_0x36a942(0x10d)])_0x43c6bf=0x64;else _0x2ac86a[_0x36a942(0xff)]===TOOL_STATUS['EXECUTING']&&_0x352722&&(_0x43c6bf=Math['min'](0x5f,_0x352722/_0x2ac86a['timeout']*0x64));return{'status':_0x2ac86a['status'],'percentage':Math[_0x36a942(0x120)](_0x43c6bf),'executionTime':_0x352722,'isTimedOut':_0x3aaa21,'remainingTime':_0x2ac86a['status']===TOOL_STATUS['EXECUTING']&&_0x352722?Math['max'](0x0,_0x2ac86a['timeout']-_0x352722):null};}static[a0_0x4735fd(0x109)](_0x52d46a){const _0xc09c47=a0_0x4735fd,_0xd720fd=_0x52d46a[_0xc09c47(0x11f)]||{},_0xba5319=this['getProgress'](_0x52d46a);return{'executionTime':_0xd720fd['executionTime']||_0xba5319[_0xc09c47(0x129)]||0x0,'memoryUsage':_0xd720fd['memoryUsage']||0x0,'cpuUsage':_0xd720fd['cpuUsage']||0x0,'status':_0x52d46a[_0xc09c47(0xff)],'retryCount':_0x52d46a['retryCount'],'priority':_0x52d46a[_0xc09c47(0x131)],'logEntries':_0xd720fd[_0xc09c47(0x100)]?_0xd720fd['logs']['length']:0x0,'hasError':!!_0xd720fd[_0xc09c47(0x12b)],'errorCode':_0xd720fd[_0xc09c47(0xdc)]||null};}static['formatForDisplay'](_0x1b4c45){const _0x572078=a0_0x4735fd,_0x1f24a7=this[_0x572078(0xe8)](_0x1b4c45),_0x54635c=this[_0x572078(0x109)](_0x1b4c45);return{'id':_0x1b4c45['id'],'toolId':_0x1b4c45[_0x572078(0xfe)],'command':_0x1b4c45['command'],'status':_0x1b4c45['status'],'progress':_0x1f24a7['percentage'],'executionTime':_0x54635c[_0x572078(0x129)],'createdAt':_0x1b4c45[_0x572078(0xdb)],'startedAt':_0x1b4c45['startedAt'],'completedAt':_0x1b4c45[_0x572078(0x130)],'hasError':_0x54635c[_0x572078(0x12e)],'retryCount':_0x1b4c45['retryCount']};}static['sanitize'](_0xbaf646){const _0x23ebf0=a0_0x4735fd,_0x2a1bb5={..._0xbaf646};_0x2a1bb5[_0x23ebf0(0x11f)]&&(delete _0x2a1bb5[_0x23ebf0(0x11f)][_0x23ebf0(0x125)],delete _0x2a1bb5['execution']['environment'],_0x2a1bb5[_0x23ebf0(0x11f)][_0x23ebf0(0x100)]&&_0x2a1bb5[_0x23ebf0(0x11f)]['logs'][_0x23ebf0(0x121)]>0xa&&(_0x2a1bb5['execution']['logs']=_0x2a1bb5['execution'][_0x23ebf0(0x100)][_0x23ebf0(0x142)](-0xa)));if(_0x2a1bb5['parameters']){const _0x32a750=['password','token',_0x23ebf0(0x12d),_0x23ebf0(0xfd),'auth'];Object[_0x23ebf0(0x111)](_0x2a1bb5[_0x23ebf0(0x134)])['forEach'](_0x592243=>{const _0x1d8040=_0x23ebf0;_0x32a750[_0x1d8040(0x13d)](_0x50e190=>_0x592243['toLowerCase']()['includes'](_0x50e190))&&(_0x2a1bb5['parameters'][_0x592243]='[REDACTED]');});}return _0x2a1bb5;}static[a0_0x4735fd(0xee)](_0x4f35f7){const _0x481aeb=a0_0x4735fd,_0x1b218b={'total':_0x4f35f7[_0x481aeb(0x121)],'byStatus':{},'byTool':{},'totalExecutionTime':0x0,'averageExecutionTime':0x0,'successRate':0x0,'mostUsedTools':[],'recentCommands':[]};Object['values'](TOOL_STATUS)['forEach'](_0x39138d=>{const _0x38fc57=_0x481aeb;_0x1b218b['byStatus'][_0x39138d]=_0x4f35f7['filter'](_0x4fa6e3=>_0x4fa6e3[_0x38fc57(0xff)]===_0x39138d)[_0x38fc57(0x121)];}),_0x4f35f7['forEach'](_0x5ec45e=>{const _0x351f08=_0x481aeb;_0x1b218b['byTool'][_0x5ec45e[_0x351f08(0xfe)]]=(_0x1b218b[_0x351f08(0xe9)][_0x5ec45e['toolId']]||0x0)+0x1;const _0x323956=this['getExecutionTime'](_0x5ec45e)||0x0;_0x1b218b['totalExecutionTime']+=_0x323956;});if(_0x4f35f7[_0x481aeb(0x121)]>0x0){_0x1b218b[_0x481aeb(0x11c)]=_0x1b218b['totalExecutionTime']/_0x4f35f7['length'];const _0x5f54e9=_0x1b218b[_0x481aeb(0xda)][TOOL_STATUS[_0x481aeb(0x10d)]]||0x0;_0x1b218b[_0x481aeb(0x107)]=_0x5f54e9/_0x4f35f7[_0x481aeb(0x121)]*0x64;}return _0x1b218b['mostUsedTools']=Object[_0x481aeb(0xf4)](_0x1b218b[_0x481aeb(0xe9)])['sort']((_0x40b571,_0x5d24c4)=>_0x5d24c4[0x1]-_0x40b571[0x1])['slice'](0x0,0x5)[_0x481aeb(0xdd)](([_0x4a8b64,_0x3b3c4f])=>({'toolId':_0x4a8b64,'count':_0x3b3c4f})),_0x1b218b[_0x481aeb(0xe4)]=_0x4f35f7['sort']((_0x8f787b,_0xb78b2b)=>new Date(_0xb78b2b[_0x481aeb(0xdb)])-new Date(_0x8f787b['createdAt']))[_0x481aeb(0x142)](0x0,0xa)['map'](_0x5d70b6=>this[_0x481aeb(0x106)](_0x5d70b6)),_0x1b218b;}}export default{'ToolCommandValidator':ToolCommandValidator,'ToolCommandFactory':ToolCommandFactory,'ToolCommandUtils':ToolCommandUtils};
|