@loxia-labs/loxia-autopilot-one 1.0.1 → 1.0.4
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 +15 -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_0x5ed4f7=a0_0xb879;(function(_0xb93ac5,_0x224a8b){const _0x3837e0=a0_0xb879,_0x2bd8b2=_0xb93ac5();while(!![]){try{const _0x1bd5ff=-parseInt(_0x3837e0(0xd9))/0x1*(-parseInt(_0x3837e0(0xa7))/0x2)+parseInt(_0x3837e0(0x96))/0x3*(parseInt(_0x3837e0(0xc0))/0x4)+parseInt(_0x3837e0(0xdc))/0x5*(-parseInt(_0x3837e0(0xf1))/0x6)+parseInt(_0x3837e0(0xc3))/0x7+parseInt(_0x3837e0(0xea))/0x8+-parseInt(_0x3837e0(0xd0))/0x9*(parseInt(_0x3837e0(0xb0))/0xa)+parseInt(_0x3837e0(0xf9))/0xb*(-parseInt(_0x3837e0(0xbe))/0xc);if(_0x1bd5ff===_0x224a8b)break;else _0x2bd8b2['push'](_0x2bd8b2['shift']());}catch(_0x470fc4){_0x2bd8b2['push'](_0x2bd8b2['shift']());}}}(a0_0x4757,0xf1eca));function a0_0x4757(){const _0x17c4c6=['mZGWotiYr3LfzNDo','AxnuAw1Lze91Da','qwDLBNqGsuqGAxmGCMvXDwLYzwqGyw5Kig11C3qGyMuGysbZDhjPBMC','Bwf4tgvUz3rO','zw52AxjVBM1LBNrwyxjPywjSzxm','zM9YBwf0rM9YrgLZCgXHEq','Aw5WDxq','BM93','ndK3mKXMD1HmtW','vw5RBM93BIb0B29SieLeoIa','y3vZDg9TxW','vg9VBcbjrcbPCYbYzxf1AxjLzcbHBMqGBxvZDcbIzsbHihn0CMLUzW','ChvZAa','Bgv2zwW','uMv0CNKGy291BNqGBxvZDcbIzsbHig51BwjLCG','ugfYyw1LDgvYia','CMfUzg9T','DMfSAwrHDgvqyxjHBwv0zxjZ','zgvZy3jPChrPB24','BMfTzq','BwvZC2fNzuLK','rxHLy3v0Aw9UieLeigLZihjLCxvPCMvKigfUzcbTDxn0igjLigeGC3rYAw5N','Dg9mB3DLCKnHC2u','rxHLy3v0Aw9UigLUChv0igLZihjLCxvPCMvKigfUzcbTDxn0igjLigfUig9IAMvJDa','otiWmwTTCxrtBG','CgfYyw1LDgvYu2nOzw1H','ig11C3qGyMuGpJ0G','zxjYB3i','zxHLy3v0Aw9Uswq','DgLTzw91Da','ig11C3qGyMuGpd0G','ywDLBNrjza','yxzLCMfNzuv4zwn1DgLVBLrPBwu','twf4ihjLDhjPzxmGBxvZDcbIzsbHig51BwjLCG','CMv0CNLdB3vUDa','z2v0twv0CMLJCW','y3b1vxnHz2u','ignOyxjHy3rLCNm','DhLWzq','zM9YrwfJAa','z2v0vgLTzq','mJuYmKrMB2n0AW','ig11C3qGyMuGyxqGBw9ZDca','tg9NigvUDhj5ia','y2fWywjPBgL0AwvZ','C2fUAxrPEMu','C3rYAw5N','q09nueXfveve','yNLuB29S','y3jLyxrLtg9Nrw50CNK','mtbKDxf5shq','Bg9NxW','Bwf4uMv0CMLLCW','C3rHCNrLzef0','y29TCgXLDgvKqxq','z2v0uhjVz3jLC3m','ChjPB3jPDhK','AgfZrxjYB3i','BwLUAw11Bq','uMvXDwLYzwqGCgfYyw1LDgvYig1PC3nPBMC6ia','zw50CMLLCW','Bg9NCW','ywrKAxrPB25HBfbYB3bLCNrPzxm','ig11C3qGyMuGB2yGDhLWzsa','nda2mJbYr2jirMq','zw52AxjVBM1LBNq','mJa0zvHABMnW','z2vUzxjHDgvfEgvJDxrPB25jza','BwLU','ode3mdCWmxLsy3LOAW','BwvTB3j5vxnHz2u','C2XPy2u','ugfYyw1LDgvYihnJAgvTysbTDxn0igjLigfUig9IAMvJDa','Dg9tDhjPBMC','CgfYyw1LDgvYCW','Dg9Rzw4','z2v0rxHLy3v0Aw9UvgLTzq','z2vUzxjHDgvdB21Tyw5Kswq','C3vJy2vZC1jHDgu','BNvTyMvY','zxHLy3v0Aw9U','uevoreLorW','mtm2mdCZn1jNrKXUEq','DMvYC2LVBG','BwfW','vg9VBcbUyw1LigLZihjLCxvPCMvKigfUzcbTDxn0igjLigeGC3rYAw5N','zgvMyxvSDfrPBwvVDxq','yNLtDgf0Dxm','C3rHDhvZ','vg9VBcbJyxbHyMLSAxrPzxmGyxjLihjLCxvPCMvKigfUzcbTDxn0igjLigfUigfYCMf5','rvHfq1vusu5h','ndu0su1JtNDX','vw5RBM93BIbWyxjHBwv0zxi6ia','Bwf4Aw11Bq','odvyBerAuwS','AxndB21WBgv0zwq','y3jLyxrLzef0','C3vIC3rY','Dg9ju09tDhjPBMC','rxHLy3v0Aw9UihrPBwuGBxvZDcbIzsbHig5VBI1UzwDHDgL2zsbUDw1Izxi','zxHLy3v0Aw9UvgLTzq','sw52ywXPzcb0B29Sihn0yxr1CZOG','w1jfrefdvevexq','vg9VBcbOyxmGBM8Gy2fWywjPBgL0AwvZigrLzMLUzwq','BwLUtgvUz3rO','BgvUz3rO','AxnwywXPzfrPBwvZDgfTCa','uMv0CNKGy291BNqGzxHJzwvKCYbTyxGGCMv0CMLLCW','mtq4ndiWodbiCureDNa','uhjPB3jPDhKGBxvZDcbIzsbHig51BwjLCIbIzxr3zwvUideGyw5Kidu','z2vUzxjHDgvmB2Djza','zw51Bq','DMfSAwrHDgvfEgvJDxrPB24','Dg9VBeLK','C29Tzq'];a0_0x4757=function(){return _0x17c4c6;};return a0_0x4757();}import{TOOL_STATUS,TOOL_NAMES,OPERATION_STATUS}from'../utilities/constants.js';export class ToolCommandValidator{static['validate'](_0xb14e7){const _0x27bcb6=a0_0xb879,_0x1df37f=[],_0x1e08c7=[];(!_0xb14e7['id']||typeof _0xb14e7['id']!=='string')&&_0x1df37f['push']('Command\x20ID\x20is\x20required\x20and\x20must\x20be\x20a\x20string');(!_0xb14e7[_0x27bcb6(0xef)]||typeof _0xb14e7[_0x27bcb6(0xef)]!=='string')&&_0x1df37f['push']('Tool\x20ID\x20is\x20required\x20and\x20must\x20be\x20a\x20string');(!_0xb14e7['command']||typeof _0xb14e7['command']!=='string')&&_0x1df37f['push']('Command\x20is\x20required\x20and\x20must\x20be\x20a\x20string');(!_0xb14e7[_0x27bcb6(0x9d)]||typeof _0xb14e7['agentId']!==_0x27bcb6(0xac))&&_0x1df37f['push'](_0x27bcb6(0xf3));_0xb14e7[_0x27bcb6(0xef)]&&!Object['values'](TOOL_NAMES)['includes'](_0xb14e7['toolId'])&&!_0xb14e7['toolId']['startsWith'](_0x27bcb6(0x88))&&_0x1e08c7[_0x27bcb6(0x8a)](_0x27bcb6(0xfa)+_0xb14e7['toolId']);_0xb14e7['status']&&!Object['values'](TOOL_STATUS)['includes'](_0xb14e7['status'])&&_0x1df37f[_0x27bcb6(0x8a)](_0x27bcb6(0xe3)+_0xb14e7[_0x27bcb6(0xd6)]);_0xb14e7[_0x27bcb6(0xc8)]&&typeof _0xb14e7[_0x27bcb6(0xc8)]!=='object'&&_0x1df37f[_0x27bcb6(0x8a)]('Parameters\x20must\x20be\x20an\x20object');_0xb14e7[_0x27bcb6(0xb6)]!==undefined&&((typeof _0xb14e7[_0x27bcb6(0xb6)]!==_0x27bcb6(0xcd)||_0xb14e7['priority']<0x1||_0xb14e7[_0x27bcb6(0xb6)]>0x5)&&_0x1df37f['push'](_0x27bcb6(0xeb)));_0xb14e7[_0x27bcb6(0x9b)]!==undefined&&((typeof _0xb14e7['timeout']!=='number'||_0xb14e7[_0x27bcb6(0x9b)]<0x0)&&_0x1df37f[_0x27bcb6(0x8a)]('Timeout\x20must\x20be\x20a\x20non-negative\x20number'),_0xb14e7['timeout']>0x36ee80&&_0x1e08c7[_0x27bcb6(0x8a)]('Timeout\x20is\x20very\x20long\x20(>1\x20hour)'));_0xb14e7['retryCount']!==undefined&&typeof _0xb14e7['retryCount']!=='number'&&_0x1df37f[_0x27bcb6(0x8a)](_0x27bcb6(0x8c));_0xb14e7[_0x27bcb6(0xb2)]!==undefined&&typeof _0xb14e7[_0x27bcb6(0xb2)]!=='number'&&_0x1df37f['push'](_0x27bcb6(0x9f));_0xb14e7[_0x27bcb6(0xa0)]&&_0xb14e7['maxRetries']&&_0xb14e7[_0x27bcb6(0xa0)]>_0xb14e7['maxRetries']&&_0x1e08c7[_0x27bcb6(0x8a)](_0x27bcb6(0xe9));if(_0xb14e7[_0x27bcb6(0xce)]){const _0x1e59a7=this[_0x27bcb6(0xee)](_0xb14e7['execution']);_0x1df37f[_0x27bcb6(0x8a)](..._0x1e59a7['errors']),_0x1e08c7[_0x27bcb6(0x8a)](..._0x1e59a7['warnings']);}const _0x2e4a35=[_0x27bcb6(0xde),_0x27bcb6(0xb3),'completedAt'];return _0x2e4a35[_0x27bcb6(0xa5)](_0x317bd8=>{const _0x33cbbd=_0x27bcb6;_0xb14e7[_0x317bd8]&&!this[_0x33cbbd(0xe8)](_0xb14e7[_0x317bd8])&&_0x1df37f['push']('Invalid\x20timestamp\x20for\x20'+_0x317bd8+':\x20'+_0xb14e7[_0x317bd8]);}),{'isValid':_0x1df37f['length']===0x0,'errors':_0x1df37f,'warnings':_0x1e08c7};}static[a0_0x5ed4f7(0xee)](_0x2fd54f){const _0x3abc40=a0_0x5ed4f7,_0x43f3f6=[],_0x53c6ab=[];return(!_0x2fd54f[_0x3abc40(0x9a)]||typeof _0x2fd54f[_0x3abc40(0x9a)]!=='string')&&_0x43f3f6['push'](_0x3abc40(0x93)),(!_0x2fd54f[_0x3abc40(0xf7)]||typeof _0x2fd54f[_0x3abc40(0xf7)]!=='object')&&_0x43f3f6['push'](_0x3abc40(0x95)),_0x2fd54f['executionTime']!==undefined&&((typeof _0x2fd54f['executionTime']!==_0x3abc40(0xcd)||_0x2fd54f['executionTime']<0x0)&&_0x43f3f6['push'](_0x3abc40(0xe1))),_0x2fd54f['memoryUsage']!==undefined&&((typeof _0x2fd54f['memoryUsage']!=='number'||_0x2fd54f['memoryUsage']<0x0)&&_0x43f3f6[_0x3abc40(0x8a)]('Memory\x20usage\x20must\x20be\x20a\x20non-negative\x20number')),_0x2fd54f['cpuUsage']!==undefined&&((typeof _0x2fd54f[_0x3abc40(0xa2)]!==_0x3abc40(0xcd)||_0x2fd54f['cpuUsage']<0x0||_0x2fd54f[_0x3abc40(0xa2)]>0x64)&&_0x43f3f6[_0x3abc40(0x8a)]('CPU\x20usage\x20must\x20be\x20a\x20number\x20between\x200\x20and\x20100')),_0x2fd54f['logs']&&!Array['isArray'](_0x2fd54f[_0x3abc40(0xbb)])&&_0x43f3f6[_0x3abc40(0x8a)]('Execution\x20logs\x20must\x20be\x20an\x20array'),_0x2fd54f['logs']&&_0x2fd54f[_0x3abc40(0xbb)][_0x3abc40(0xa5)]((_0x43a41b,_0x3ded12)=>{const _0x4c72a4=_0x3abc40;(!_0x43a41b[_0x4c72a4(0x8b)]||!_0x43a41b['message']||!_0x43a41b['timestamp'])&&_0x43f3f6['push'](_0x4c72a4(0xa9)+_0x3ded12+'\x20missing\x20required\x20fields');}),{'errors':_0x43f3f6,'warnings':_0x53c6ab};}static['validateToolDefinition'](_0x2ded81){const _0x6671ed=a0_0x5ed4f7,_0x18f176=[],_0x58989e=[];return(!_0x2ded81['id']||typeof _0x2ded81['id']!==_0x6671ed(0xac))&&_0x18f176['push'](_0x6671ed(0x89)),(!_0x2ded81[_0x6671ed(0x91)]||typeof _0x2ded81['name']!==_0x6671ed(0xac))&&_0x18f176['push'](_0x6671ed(0xd3)),(!_0x2ded81[_0x6671ed(0x90)]||typeof _0x2ded81['description']!=='string')&&_0x18f176['push']('Tool\x20description\x20is\x20required\x20and\x20must\x20be\x20a\x20string'),(!_0x2ded81['version']||typeof _0x2ded81[_0x6671ed(0xd1)]!=='string')&&_0x18f176[_0x6671ed(0x8a)]('Tool\x20version\x20is\x20required\x20and\x20must\x20be\x20a\x20string'),(!_0x2ded81[_0x6671ed(0xaa)]||!Array['isArray'](_0x2ded81['capabilities']))&&_0x18f176[_0x6671ed(0x8a)](_0x6671ed(0xd7)),_0x2ded81[_0x6671ed(0xaa)]&&_0x2ded81['capabilities'][_0x6671ed(0xe7)]===0x0&&_0x58989e['push'](_0x6671ed(0xe5)),_0x2ded81[_0x6671ed(0x97)]&&typeof _0x2ded81['parameterSchema']!=='object'&&_0x18f176[_0x6671ed(0x8a)](_0x6671ed(0xc6)),_0x2ded81[_0x6671ed(0xd4)]!==undefined&&((typeof _0x2ded81['defaultTimeout']!==_0x6671ed(0xcd)||_0x2ded81[_0x6671ed(0xd4)]<=0x0)&&_0x18f176[_0x6671ed(0x8a)]('Default\x20timeout\x20must\x20be\x20a\x20positive\x20number')),{'errors':_0x18f176,'warnings':_0x58989e};}static[a0_0x5ed4f7(0x8f)](_0x33e2cd,_0x54f6e6){const _0xc6f714=a0_0x5ed4f7,_0x5274c0=[],_0x5c0a11=[];if(!_0x54f6e6||!_0x54f6e6['properties'])return{'errors':[],'warnings':['No\x20parameter\x20schema\x20provided']};return _0x54f6e6['required']&&_0x54f6e6['required'][_0xc6f714(0xa5)](_0x30249a=>{const _0xf6e097=_0xc6f714;!(_0x30249a in _0x33e2cd)&&_0x5274c0['push'](_0xf6e097(0xb9)+_0x30249a);}),Object[_0xc6f714(0xba)](_0x33e2cd)['forEach'](([_0x4e627b,_0xd98cda])=>{const _0x3b5fbd=_0xc6f714,_0x23f405=_0x54f6e6['properties'][_0x4e627b];if(!_0x23f405){!_0x54f6e6[_0x3b5fbd(0xbc)]&&_0x5c0a11['push'](_0x3b5fbd(0xda)+_0x4e627b);return;}if(_0x23f405['type']){const _0x4aed08=Array['isArray'](_0xd98cda)?'array':typeof _0xd98cda;_0x4aed08!==_0x23f405['type']&&_0x5274c0['push'](_0x3b5fbd(0x8d)+_0x4e627b+_0x3b5fbd(0xbd)+_0x23f405[_0x3b5fbd(0xa4)]+',\x20got\x20'+_0x4aed08);}_0x23f405[_0x3b5fbd(0xa4)]===_0x3b5fbd(0xcd)&&(_0x23f405[_0x3b5fbd(0xb8)]!==undefined&&_0xd98cda<_0x23f405[_0x3b5fbd(0xb8)]&&_0x5274c0[_0x3b5fbd(0x8a)]('Parameter\x20'+_0x4e627b+_0x3b5fbd(0x98)+_0x23f405['minimum']),_0x23f405[_0x3b5fbd(0xdb)]!==undefined&&_0xd98cda>_0x23f405[_0x3b5fbd(0xdb)]&&_0x5274c0['push']('Parameter\x20'+_0x4e627b+_0x3b5fbd(0x9c)+_0x23f405[_0x3b5fbd(0xdb)])),_0x23f405[_0x3b5fbd(0xa4)]==='string'&&(_0x23f405[_0x3b5fbd(0xe6)]!==undefined&&_0xd98cda[_0x3b5fbd(0xe7)]<_0x23f405['minLength']&&_0x5274c0[_0x3b5fbd(0x8a)]('Parameter\x20'+_0x4e627b+'\x20must\x20be\x20at\x20least\x20'+_0x23f405[_0x3b5fbd(0xe6)]+_0x3b5fbd(0xa3)),_0x23f405['maxLength']!==undefined&&_0xd98cda[_0x3b5fbd(0xe7)]>_0x23f405['maxLength']&&_0x5274c0['push'](_0x3b5fbd(0x8d)+_0x4e627b+_0x3b5fbd(0xa8)+_0x23f405[_0x3b5fbd(0xf4)]+'\x20characters')),_0x23f405['enum']&&!_0x23f405[_0x3b5fbd(0xed)]['includes'](_0xd98cda)&&_0x5274c0['push']('Parameter\x20'+_0x4e627b+'\x20must\x20be\x20one\x20of:\x20'+_0x23f405['enum']['join'](',\x20'));}),{'errors':_0x5274c0,'warnings':_0x5c0a11};}static[a0_0x5ed4f7(0xe8)](_0x184a20){if(typeof _0x184a20!=='string')return![];const _0x2c70d8=new Date(_0x184a20);return _0x2c70d8 instanceof Date&&!isNaN(_0x2c70d8['getTime']());}}export class ToolCommandFactory{static['create'](_0x228f38,_0x3ee80f,_0x849a9e,_0x404db9={}){const _0x3308f5=a0_0x5ed4f7,_0x55c28c=new Date()['toISOString'](),_0x5cce0c=this['generateCommandId'](),_0x5c9ed3=this[_0x3308f5(0xc1)]();return{'id':_0x5cce0c,'toolId':_0x228f38,'command':_0x3ee80f,'parameters':_0x849a9e||{},'status':TOOL_STATUS[_0x3308f5(0xcf)],'agentId':_0x404db9[_0x3308f5(0x9d)]||'','conversationId':_0x404db9['conversationId']||'','messageId':_0x404db9[_0x3308f5(0x92)]||'','execution':{'executionId':_0x5c9ed3,'input':{'command':_0x3ee80f,'parameters':_0x849a9e},'output':null,'error':null,'errorCode':null,'executionTime':0x0,'memoryUsage':0x0,'cpuUsage':0x0,'metrics':{},'logs':[],'environment':_0x404db9['environment']||{},'workingDirectory':_0x404db9['workingDirectory']||null,'environmentVariables':_0x404db9[_0x3308f5(0xf5)]||{}},'metadata':this['createDefaultMetadata'](_0x404db9['metadata']),'createdAt':_0x55c28c,'startedAt':null,'completedAt':null,'priority':_0x404db9['priority']||0x3,'timeout':_0x404db9[_0x3308f5(0x9b)]||0x7530,'retryCount':0x0,'maxRetries':_0x404db9['maxRetries']||0x3};}static[a0_0x5ed4f7(0xaf)](_0x25d228,_0x5b7d42,_0x35f9be=null){const _0x393a4c=a0_0x5ed4f7;return{'id':this[_0x393a4c(0xec)](),'level':_0x25d228,'message':_0x5b7d42,'timestamp':new Date()[_0x393a4c(0xe0)](),'data':_0x35f9be,'source':'tool-execution'};}static['createDefaultMetadata'](_0x40d877={}){return{'toolVersion':'1.0.0','capabilities':[],'configuration':{},'requiresAuth':![],'dependencies':[],'constraints':{},'tags':[],'customFields':{},..._0x40d877};}static[a0_0x5ed4f7(0xcb)](){const _0x5d6b92=a0_0x5ed4f7,_0x5b6068=Date['now']()[_0x5d6b92(0xc7)](0x24),_0x4e04f4=Math[_0x5d6b92(0x8e)]()['toString'](0x24)[_0x5d6b92(0xdf)](0x2,0x9);return'cmd_'+_0x5b6068+'_'+_0x4e04f4;}static['generateExecutionId'](){const _0x33f928=a0_0x5ed4f7,_0x17166c=Date['now']()[_0x33f928(0xc7)](0x24),_0x2ec155=Math['random']()[_0x33f928(0xc7)](0x24)[_0x33f928(0xdf)](0x2,0x9);return'exec_'+_0x17166c+'_'+_0x2ec155;}static[a0_0x5ed4f7(0xec)](){const _0x317bd7=a0_0x5ed4f7,_0x351bc1=Date[_0x317bd7(0xf8)]()['toString'](0x24),_0x1f93f6=Math[_0x317bd7(0x8e)]()['toString'](0x24)['substr'](0x2,0x6);return _0x317bd7(0xb1)+_0x351bc1+'_'+_0x1f93f6;}}export class ToolCommandUtils{static['isPending'](_0x5273c9){return _0x5273c9['status']===TOOL_STATUS['PENDING'];}static['isExecuting'](_0x512e98){const _0x19b757=a0_0x5ed4f7;return _0x512e98[_0x19b757(0xd6)]===TOOL_STATUS[_0x19b757(0xd8)];}static[a0_0x5ed4f7(0xdd)](_0x55f833){return _0x55f833['status']===TOOL_STATUS['COMPLETED'];}static['isFailed'](_0x3fcc3e){return _0x3fcc3e['status']===TOOL_STATUS['FAILED'];}static[a0_0x5ed4f7(0xf2)](_0x370977){const _0x39fa8f=a0_0x5ed4f7;if(!_0x370977['startedAt']||_0x370977['status']!==TOOL_STATUS['EXECUTING'])return![];const _0x4a2df9=new Date(_0x370977['startedAt']),_0xa495b5=new Date(),_0x588ba2=_0xa495b5[_0x39fa8f(0xa6)]()-_0x4a2df9['getTime']();return _0x588ba2>_0x370977[_0x39fa8f(0x9b)];}static[a0_0x5ed4f7(0xca)](_0x31b102){const _0x3ab771=a0_0x5ed4f7;if(!_0x31b102['startedAt'])return null;const _0xa59aba=_0x31b102['completedAt']?new Date(_0x31b102[_0x3ab771(0xb4)]):new Date(),_0x28c14d=new Date(_0x31b102[_0x3ab771(0xb3)]);return _0xa59aba['getTime']()-_0x28c14d['getTime']();}static[a0_0x5ed4f7(0xb5)](_0x1df324){const _0x4efb6a=a0_0x5ed4f7,_0x379885=this[_0x4efb6a(0xca)](_0x1df324),_0x1def12=this[_0x4efb6a(0xf2)](_0x1df324);let _0x3f1f1d=0x0;if(_0x1df324[_0x4efb6a(0xd6)]===TOOL_STATUS['COMPLETED'])_0x3f1f1d=0x64;else _0x1df324['status']===TOOL_STATUS[_0x4efb6a(0xd8)]&&_0x379885&&(_0x3f1f1d=Math[_0x4efb6a(0xc2)](0x5f,_0x379885/_0x1df324[_0x4efb6a(0x9b)]*0x64));return{'status':_0x1df324[_0x4efb6a(0xd6)],'percentage':Math['round'](_0x3f1f1d),'executionTime':_0x379885,'isTimedOut':_0x1def12,'remainingTime':_0x1df324['status']===TOOL_STATUS['EXECUTING']&&_0x379885?Math['max'](0x0,_0x1df324[_0x4efb6a(0x9b)]-_0x379885):null};}static[a0_0x5ed4f7(0xa1)](_0x2bf0be){const _0x382e94=a0_0x5ed4f7,_0x573110=_0x2bf0be['execution']||{},_0x4c2469=this['getProgress'](_0x2bf0be);return{'executionTime':_0x573110[_0x382e94(0xe2)]||_0x4c2469['executionTime']||0x0,'memoryUsage':_0x573110[_0x382e94(0xc4)]||0x0,'cpuUsage':_0x573110['cpuUsage']||0x0,'status':_0x2bf0be['status'],'retryCount':_0x2bf0be['retryCount'],'priority':_0x2bf0be[_0x382e94(0xb6)],'logEntries':_0x573110['logs']?_0x573110[_0x382e94(0xbb)][_0x382e94(0xe7)]:0x0,'hasError':!!_0x573110[_0x382e94(0x99)],'errorCode':_0x573110['errorCode']||null};}static[a0_0x5ed4f7(0xf6)](_0x43705b){const _0x596790=a0_0x5ed4f7,_0x21f6d3=this[_0x596790(0xb5)](_0x43705b),_0x5cc865=this[_0x596790(0xa1)](_0x43705b);return{'id':_0x43705b['id'],'toolId':_0x43705b[_0x596790(0xef)],'command':_0x43705b['command'],'status':_0x43705b[_0x596790(0xd6)],'progress':_0x21f6d3['percentage'],'executionTime':_0x5cc865[_0x596790(0xe2)],'createdAt':_0x43705b[_0x596790(0xde)],'startedAt':_0x43705b['startedAt'],'completedAt':_0x43705b[_0x596790(0xb4)],'hasError':_0x5cc865[_0x596790(0xb7)],'retryCount':_0x43705b['retryCount']};}static[a0_0x5ed4f7(0xab)](_0x55ef68){const _0x458659=a0_0x5ed4f7,_0x28f84d={..._0x55ef68};_0x28f84d[_0x458659(0xce)]&&(delete _0x28f84d[_0x458659(0xce)]['environmentVariables'],delete _0x28f84d['execution'][_0x458659(0xbf)],_0x28f84d[_0x458659(0xce)][_0x458659(0xbb)]&&_0x28f84d['execution'][_0x458659(0xbb)][_0x458659(0xe7)]>0xa&&(_0x28f84d['execution']['logs']=_0x28f84d[_0x458659(0xce)]['logs'][_0x458659(0xc5)](-0xa)));if(_0x28f84d[_0x458659(0xc8)]){const _0x4c83b6=['password',_0x458659(0xc9),'secret','key','auth'];Object['keys'](_0x28f84d[_0x458659(0xc8)])['forEach'](_0x254b99=>{const _0x596651=_0x458659;_0x4c83b6[_0x596651(0xf0)](_0x244081=>_0x254b99[_0x596651(0x94)]()['includes'](_0x244081))&&(_0x28f84d[_0x596651(0xc8)][_0x254b99]=_0x596651(0xe4));});}return _0x28f84d;}static['summarizeCommands'](_0x267b4e){const _0x49f6ca=a0_0x5ed4f7,_0x3e6aab={'total':_0x267b4e[_0x49f6ca(0xe7)],'byStatus':{},'byTool':{},'totalExecutionTime':0x0,'averageExecutionTime':0x0,'successRate':0x0,'mostUsedTools':[],'recentCommands':[]};Object['values'](TOOL_STATUS)['forEach'](_0x3d0158=>{const _0x436956=_0x49f6ca;_0x3e6aab['byStatus'][_0x3d0158]=_0x267b4e['filter'](_0x92d044=>_0x92d044[_0x436956(0xd6)]===_0x3d0158)[_0x436956(0xe7)];}),_0x267b4e[_0x49f6ca(0xa5)](_0x248172=>{const _0x5b8539=_0x49f6ca;_0x3e6aab[_0x5b8539(0xae)][_0x248172[_0x5b8539(0xef)]]=(_0x3e6aab[_0x5b8539(0xae)][_0x248172['toolId']]||0x0)+0x1;const _0x38fd81=this['getExecutionTime'](_0x248172)||0x0;_0x3e6aab['totalExecutionTime']+=_0x38fd81;});if(_0x267b4e[_0x49f6ca(0xe7)]>0x0){_0x3e6aab[_0x49f6ca(0x9e)]=_0x3e6aab['totalExecutionTime']/_0x267b4e['length'];const _0x3dde8d=_0x3e6aab[_0x49f6ca(0xd5)][TOOL_STATUS[_0x49f6ca(0xad)]]||0x0;_0x3e6aab[_0x49f6ca(0xcc)]=_0x3dde8d/_0x267b4e['length']*0x64;}return _0x3e6aab['mostUsedTools']=Object['entries'](_0x3e6aab[_0x49f6ca(0xae)])['sort']((_0x3000ba,_0x2d6f60)=>_0x2d6f60[0x1]-_0x3000ba[0x1])[_0x49f6ca(0xc5)](0x0,0x5)[_0x49f6ca(0xd2)](([_0x76cd72,_0xf53731])=>({'toolId':_0x76cd72,'count':_0xf53731})),_0x3e6aab['recentCommands']=_0x267b4e['sort']((_0x4c5d2b,_0x5450f7)=>new Date(_0x5450f7['createdAt'])-new Date(_0x4c5d2b[_0x49f6ca(0xde)]))['slice'](0x0,0xa)[_0x49f6ca(0xd2)](_0x1fe77b=>this[_0x49f6ca(0xf6)](_0x1fe77b)),_0x3e6aab;}}function a0_0xb879(_0x5b5c62,_0x3a90b9){_0x5b5c62=_0x5b5c62-0x88;const _0x47570b=a0_0x4757();let _0xb87935=_0x47570b[_0x5b5c62];if(a0_0xb879['zhFWcW']===undefined){var _0x5be49e=function(_0x5e9733){const _0x40e3d3='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xb14e7='',_0x1df37f='';for(let _0x1e08c7=0x0,_0x2e4a35,_0x1e59a7,_0x317bd8=0x0;_0x1e59a7=_0x5e9733['charAt'](_0x317bd8++);~_0x1e59a7&&(_0x2e4a35=_0x1e08c7%0x4?_0x2e4a35*0x40+_0x1e59a7:_0x1e59a7,_0x1e08c7++%0x4)?_0xb14e7+=String['fromCharCode'](0xff&_0x2e4a35>>(-0x2*_0x1e08c7&0x6)):0x0){_0x1e59a7=_0x40e3d3['indexOf'](_0x1e59a7);}for(let _0x2fd54f=0x0,_0x43f3f6=_0xb14e7['length'];_0x2fd54f<_0x43f3f6;_0x2fd54f++){_0x1df37f+='%'+('00'+_0xb14e7['charCodeAt'](_0x2fd54f)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1df37f);};a0_0xb879['fgeHxT']=_0x5be49e,a0_0xb879['ijVUXe']={},a0_0xb879['zhFWcW']=!![];}const _0x3c4b71=_0x47570b[0x0],_0x4dbb9b=_0x5b5c62+_0x3c4b71,_0x3dc8f5=a0_0xb879['ijVUXe'][_0x4dbb9b];return!_0x3dc8f5?(_0xb87935=a0_0xb879['fgeHxT'](_0xb87935),a0_0xb879['ijVUXe'][_0x4dbb9b]=_0xb87935):_0xb87935=_0x3dc8f5,_0xb87935;}export default{'ToolCommandValidator':ToolCommandValidator,'ToolCommandFactory':ToolCommandFactory,'ToolCommandUtils':ToolCommandUtils};
|