@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.
Files changed (120) hide show
  1. package/README.md +44 -54
  2. package/bin/cli.js +1 -115
  3. package/bin/loxia-terminal-v2.js +3 -0
  4. package/bin/loxia-terminal.js +3 -0
  5. package/bin/start-with-terminal.js +3 -0
  6. package/package.json +15 -15
  7. package/scripts/install-scanners.js +1 -235
  8. package/src/analyzers/CSSAnalyzer.js +1 -297
  9. package/src/analyzers/ConfigValidator.js +1 -690
  10. package/src/analyzers/ESLintAnalyzer.js +1 -320
  11. package/src/analyzers/JavaScriptAnalyzer.js +1 -261
  12. package/src/analyzers/PrettierFormatter.js +1 -247
  13. package/src/analyzers/PythonAnalyzer.js +1 -266
  14. package/src/analyzers/SecurityAnalyzer.js +1 -729
  15. package/src/analyzers/TypeScriptAnalyzer.js +1 -247
  16. package/src/analyzers/codeCloneDetector/analyzer.js +1 -344
  17. package/src/analyzers/codeCloneDetector/detector.js +1 -203
  18. package/src/analyzers/codeCloneDetector/index.js +1 -160
  19. package/src/analyzers/codeCloneDetector/parser.js +1 -199
  20. package/src/analyzers/codeCloneDetector/reporter.js +1 -148
  21. package/src/analyzers/codeCloneDetector/scanner.js +1 -59
  22. package/src/core/agentPool.js +1 -1474
  23. package/src/core/agentScheduler.js +1 -2147
  24. package/src/core/contextManager.js +1 -709
  25. package/src/core/messageProcessor.js +1 -732
  26. package/src/core/orchestrator.js +1 -548
  27. package/src/core/stateManager.js +1 -877
  28. package/src/index.js +1 -631
  29. package/src/interfaces/cli.js +1 -549
  30. package/src/interfaces/terminal/__tests__/smoke/advancedFeatures.test.js +1 -0
  31. package/src/interfaces/terminal/__tests__/smoke/agentControl.test.js +1 -0
  32. package/src/interfaces/terminal/__tests__/smoke/agents.test.js +1 -0
  33. package/src/interfaces/terminal/__tests__/smoke/components.test.js +1 -0
  34. package/src/interfaces/terminal/__tests__/smoke/connection.test.js +1 -0
  35. package/src/interfaces/terminal/__tests__/smoke/enhancements.test.js +1 -0
  36. package/src/interfaces/terminal/__tests__/smoke/imports.test.js +1 -0
  37. package/src/interfaces/terminal/__tests__/smoke/messages.test.js +1 -0
  38. package/src/interfaces/terminal/__tests__/smoke/tools.test.js +1 -0
  39. package/src/interfaces/terminal/api/apiClient.js +1 -0
  40. package/src/interfaces/terminal/api/messageRouter.js +1 -0
  41. package/src/interfaces/terminal/api/session.js +1 -0
  42. package/src/interfaces/terminal/api/websocket.js +1 -0
  43. package/src/interfaces/terminal/components/AgentCreator.js +1 -0
  44. package/src/interfaces/terminal/components/AgentEditor.js +1 -0
  45. package/src/interfaces/terminal/components/AgentSwitcher.js +1 -0
  46. package/src/interfaces/terminal/components/ErrorBoundary.js +1 -0
  47. package/src/interfaces/terminal/components/ErrorPanel.js +1 -0
  48. package/src/interfaces/terminal/components/Header.js +1 -0
  49. package/src/interfaces/terminal/components/HelpPanel.js +1 -0
  50. package/src/interfaces/terminal/components/InputBox.js +1 -0
  51. package/src/interfaces/terminal/components/Layout.js +1 -0
  52. package/src/interfaces/terminal/components/LoadingSpinner.js +1 -0
  53. package/src/interfaces/terminal/components/MessageList.js +1 -0
  54. package/src/interfaces/terminal/components/MultilineTextInput.js +1 -0
  55. package/src/interfaces/terminal/components/SearchPanel.js +1 -0
  56. package/src/interfaces/terminal/components/SettingsPanel.js +1 -0
  57. package/src/interfaces/terminal/components/StatusBar.js +1 -0
  58. package/src/interfaces/terminal/components/TextInput.js +1 -0
  59. package/src/interfaces/terminal/config/agentEditorConstants.js +1 -0
  60. package/src/interfaces/terminal/config/constants.js +1 -0
  61. package/src/interfaces/terminal/index.js +1 -0
  62. package/src/interfaces/terminal/state/useAgentControl.js +1 -0
  63. package/src/interfaces/terminal/state/useAgents.js +1 -0
  64. package/src/interfaces/terminal/state/useConnection.js +1 -0
  65. package/src/interfaces/terminal/state/useMessages.js +1 -0
  66. package/src/interfaces/terminal/state/useTools.js +1 -0
  67. package/src/interfaces/terminal/utils/debugLogger.js +1 -0
  68. package/src/interfaces/terminal/utils/settingsStorage.js +1 -0
  69. package/src/interfaces/terminal/utils/theme.js +1 -0
  70. package/src/interfaces/webServer.js +1 -2162
  71. package/src/modules/fileExplorer/controller.js +1 -280
  72. package/src/modules/fileExplorer/index.js +1 -37
  73. package/src/modules/fileExplorer/middleware.js +1 -92
  74. package/src/modules/fileExplorer/routes.js +1 -125
  75. package/src/modules/fileExplorer/types.js +1 -44
  76. package/src/services/aiService.js +1 -1232
  77. package/src/services/apiKeyManager.js +1 -164
  78. package/src/services/benchmarkService.js +1 -366
  79. package/src/services/budgetService.js +1 -539
  80. package/src/services/contextInjectionService.js +1 -247
  81. package/src/services/conversationCompactionService.js +1 -637
  82. package/src/services/errorHandler.js +1 -810
  83. package/src/services/fileAttachmentService.js +1 -544
  84. package/src/services/modelRouterService.js +1 -366
  85. package/src/services/modelsService.js +1 -322
  86. package/src/services/qualityInspector.js +1 -796
  87. package/src/services/tokenCountingService.js +1 -536
  88. package/src/tools/agentCommunicationTool.js +1 -1344
  89. package/src/tools/agentDelayTool.js +1 -485
  90. package/src/tools/asyncToolManager.js +1 -604
  91. package/src/tools/baseTool.js +1 -800
  92. package/src/tools/browserTool.js +1 -920
  93. package/src/tools/cloneDetectionTool.js +1 -621
  94. package/src/tools/dependencyResolverTool.js +1 -1215
  95. package/src/tools/fileContentReplaceTool.js +1 -875
  96. package/src/tools/fileSystemTool.js +1 -1107
  97. package/src/tools/fileTreeTool.js +1 -853
  98. package/src/tools/imageTool.js +1 -901
  99. package/src/tools/importAnalyzerTool.js +1 -1060
  100. package/src/tools/jobDoneTool.js +1 -248
  101. package/src/tools/seekTool.js +1 -956
  102. package/src/tools/staticAnalysisTool.js +1 -1778
  103. package/src/tools/taskManagerTool.js +1 -2873
  104. package/src/tools/terminalTool.js +1 -2304
  105. package/src/tools/webTool.js +1 -1430
  106. package/src/types/agent.js +1 -519
  107. package/src/types/contextReference.js +1 -972
  108. package/src/types/conversation.js +1 -730
  109. package/src/types/toolCommand.js +1 -747
  110. package/src/utilities/attachmentValidator.js +1 -292
  111. package/src/utilities/configManager.js +1 -582
  112. package/src/utilities/constants.js +1 -722
  113. package/src/utilities/directoryAccessManager.js +1 -535
  114. package/src/utilities/fileProcessor.js +1 -307
  115. package/src/utilities/logger.js +1 -436
  116. package/src/utilities/tagParser.js +1 -1246
  117. package/src/utilities/toolConstants.js +1 -317
  118. package/web-ui/build/index.html +2 -2
  119. package/web-ui/build/static/{index-Dy2bYbOa.css → index-CClD1090.css} +1 -1
  120. package/web-ui/build/static/{index-CjkkcnFA.js → index-lCBai6dX.js} +66 -67
@@ -1,485 +1 @@
1
- /**
2
- * AgentDelayTool - Allows agents to pause their activity for specified duration
3
- *
4
- * Purpose:
5
- * - Pause agent activity during waiting periods
6
- * - Prevent unnecessary message exchanges
7
- * - Handle installation and startup delays
8
- * - Manage agent status during long operations
9
- */
10
-
11
- import { BaseTool } from './baseTool.js';
12
- import TagParser from '../utilities/tagParser.js';
13
-
14
- import {
15
- TOOL_STATUS,
16
- SYSTEM_DEFAULTS,
17
- AGENT_STATUS
18
- } from '../utilities/constants.js';
19
-
20
- class AgentDelayTool extends BaseTool {
21
- constructor(config = {}, logger = null, agentPool = null) {
22
- super(config, logger);
23
-
24
- this.agentPool = agentPool;
25
- this.maxPauseDuration = config.maxDuration || SYSTEM_DEFAULTS.MAX_PAUSE_DURATION;
26
- this.minPauseDuration = config.minDuration || 1;
27
-
28
- // Tool metadata
29
- this.requiresProject = false;
30
- this.isAsync = false; // Synchronous - immediately updates agent status
31
- }
32
-
33
- /**
34
- * Get tool description for LLM consumption
35
- * @returns {string} Tool description
36
- */
37
- getDescription() {
38
- return `
39
- Agent Delay Tool: Pause agent activity for a specified duration to prevent unnecessary message exchanges during waiting periods.
40
-
41
- USAGE:
42
- [tool id="agentdelay"]
43
- <pause-duration>30</pause-duration>
44
- <reason>Waiting for npm install to complete</reason>
45
- [/tool]
46
-
47
- PARAMETERS:
48
- - pause-duration: Number of seconds to pause (${this.minPauseDuration}-${this.maxPauseDuration})
49
- - reason: Optional explanation for the pause
50
-
51
- USE CASES:
52
- - After running 'npm install' or similar long-running commands
53
- - Waiting for services to start up
54
- - Allowing time for file system operations to complete
55
- - Preventing rapid status checking loops
56
- - During build processes or compilation
57
-
58
- BEHAVIOR:
59
- The agent will be marked as '${AGENT_STATUS.PAUSED}' and will not process new messages until the duration expires.
60
- Other agents can still send messages, but they will be queued until the agent resumes.
61
-
62
- EXAMPLES:
63
- Basic pause for 1 minute:
64
- [tool id="agentdelay"]
65
- <pause-duration>60</pause-duration>
66
- [/tool]
67
-
68
- Pause with reason:
69
- [tool id="agentdelay"]
70
- <pause-duration>120</pause-duration>
71
- <reason>Installing dependencies</reason>
72
- [/tool]
73
-
74
- Brief pause for service startup:
75
- [tool id="agentdelay"]
76
- <pause-duration>30</pause-duration>
77
- <reason>Waiting for server startup</reason>
78
- [/tool]
79
-
80
- IMPORTANT: Use this tool judiciously. Only pause when genuinely waiting for external processes.
81
- The maximum pause duration is ${this.maxPauseDuration} seconds (${Math.floor(this.maxPauseDuration / 60)} minutes).
82
- `;
83
- }
84
-
85
- /**
86
- * Parse parameters from tool command content
87
- * @param {string} content - Raw tool command content
88
- * @returns {Object} Parsed parameters
89
- */
90
- parseParameters(content) {
91
- try {
92
- // Extract pause-duration and reason using TagParser
93
- const durationMatches = TagParser.extractContent(content, 'pause-duration');
94
- const reasonMatches = TagParser.extractContent(content, 'reason');
95
-
96
- const duration = durationMatches.length > 0 ? parseInt(durationMatches[0], 10) : null;
97
- const reason = reasonMatches.length > 0 ? reasonMatches[0].trim() : 'Agent pause requested';
98
-
99
- return {
100
- duration,
101
- reason,
102
- rawContent: content.trim()
103
- };
104
-
105
- } catch (error) {
106
- throw new Error(`Failed to parse agent delay parameters: ${error.message}`);
107
- }
108
- }
109
-
110
- /**
111
- * Get required parameters
112
- * @returns {Array<string>} Array of required parameter names
113
- */
114
- getRequiredParameters() {
115
- return ['duration'];
116
- }
117
-
118
- /**
119
- * Validate parameter types
120
- * @param {Object} params - Parameters to validate
121
- * @returns {Object} Validation result
122
- */
123
- validateParameterTypes(params) {
124
- const errors = [];
125
-
126
- if (params.duration !== null && params.duration !== undefined) {
127
- if (typeof params.duration !== 'number' || isNaN(params.duration)) {
128
- errors.push('pause-duration must be a valid number');
129
- }
130
- }
131
-
132
- if (params.reason && typeof params.reason !== 'string') {
133
- errors.push('reason must be a string');
134
- }
135
-
136
- return {
137
- valid: errors.length === 0,
138
- errors
139
- };
140
- }
141
-
142
- /**
143
- * Custom parameter validation
144
- * @param {Object} params - Parameters to validate
145
- * @returns {Object} Validation result
146
- */
147
- customValidateParameters(params) {
148
- const errors = [];
149
-
150
- if (params.duration === null || params.duration === undefined) {
151
- errors.push('pause-duration is required');
152
- } else {
153
- if (params.duration < this.minPauseDuration) {
154
- errors.push(`pause-duration must be at least ${this.minPauseDuration} second(s)`);
155
- }
156
-
157
- if (params.duration > this.maxPauseDuration) {
158
- errors.push(`pause-duration cannot exceed ${this.maxPauseDuration} seconds (${Math.floor(this.maxPauseDuration / 60)} minutes)`);
159
- }
160
-
161
- if (!Number.isInteger(params.duration)) {
162
- errors.push('pause-duration must be a whole number of seconds');
163
- }
164
- }
165
-
166
- if (params.reason && params.reason.length > 200) {
167
- errors.push('reason cannot exceed 200 characters');
168
- }
169
-
170
- return {
171
- valid: errors.length === 0,
172
- errors
173
- };
174
- }
175
-
176
- /**
177
- * Execute tool with parsed parameters
178
- * @param {Object} params - Parsed parameters
179
- * @param {Object} context - Execution context
180
- * @returns {Promise<Object>} Execution result
181
- */
182
- async execute(params, context) {
183
- const { duration, reason } = params;
184
- const { agentId } = context;
185
-
186
- if (!agentId) {
187
- throw new Error('Agent ID is required for agent delay tool');
188
- }
189
-
190
- if (!this.agentPool) {
191
- throw new Error('Agent pool not available - cannot pause agent');
192
- }
193
-
194
- try {
195
- // Calculate pause end time
196
- const pausedUntil = new Date(Date.now() + duration * 1000);
197
-
198
- // Pause the agent via agent pool
199
- const pauseResult = await this.agentPool.pauseAgent(agentId, pausedUntil, reason);
200
-
201
- // Also set delayEndTime for the new scheduler architecture
202
- const agent = await this.agentPool.getAgent(agentId);
203
- if (agent) {
204
- agent.delayEndTime = pausedUntil.toISOString();
205
- await this.agentPool.persistAgentState(agentId);
206
- }
207
-
208
- if (!pauseResult.success) {
209
- throw new Error(`Failed to pause agent: ${pauseResult.message || 'Unknown error'}`);
210
- }
211
-
212
- const result = {
213
- success: true,
214
- action: 'agent-pause',
215
- agentId,
216
- pauseDuration: duration,
217
- pausedUntil: pausedUntil.toISOString(),
218
- reason,
219
- message: `Agent will resume activity in ${duration} second${duration !== 1 ? 's' : ''}`,
220
- resumeTime: this.formatResumeTime(pausedUntil),
221
- toolUsed: 'agent-delay'
222
- };
223
-
224
- this.logger?.info(`Agent paused via agent-delay tool: ${agentId}`, {
225
- duration,
226
- reason,
227
- pausedUntil: pausedUntil.toISOString(),
228
- toolUsage: true
229
- });
230
-
231
- return result;
232
-
233
- } catch (error) {
234
- this.logger?.error(`Agent delay tool execution failed: ${error.message}`, {
235
- agentId,
236
- duration,
237
- reason,
238
- error: error.stack
239
- });
240
-
241
- throw error;
242
- }
243
- }
244
-
245
- /**
246
- * Get supported actions for this tool
247
- * @returns {Array<string>} Array of supported action names
248
- */
249
- getSupportedActions() {
250
- return ['pause', 'delay'];
251
- }
252
-
253
- /**
254
- * Get parameter schema for validation
255
- * @returns {Object} Parameter schema
256
- */
257
- getParameterSchema() {
258
- return {
259
- type: 'object',
260
- properties: {
261
- duration: {
262
- type: 'integer',
263
- minimum: this.minPauseDuration,
264
- maximum: this.maxPauseDuration,
265
- description: 'Number of seconds to pause agent activity'
266
- },
267
- reason: {
268
- type: 'string',
269
- maxLength: 200,
270
- description: 'Optional reason for the pause'
271
- }
272
- },
273
- required: ['duration']
274
- };
275
- }
276
-
277
- /**
278
- * Get tool capabilities metadata
279
- * @returns {Object} Enhanced capabilities object
280
- */
281
- getCapabilities() {
282
- const baseCapabilities = super.getCapabilities();
283
-
284
- return {
285
- ...baseCapabilities,
286
- pauseRange: {
287
- min: this.minPauseDuration,
288
- max: this.maxPauseDuration,
289
- unit: 'seconds'
290
- },
291
- affects: 'agent-status',
292
- interactsWithAgentPool: true,
293
- useCases: [
294
- 'installation-waiting',
295
- 'service-startup',
296
- 'file-operations',
297
- 'build-processes',
298
- 'compilation',
299
- 'deployment-delays'
300
- ]
301
- };
302
- }
303
-
304
- /**
305
- * Format resume time for human readability
306
- * @private
307
- */
308
- formatResumeTime(resumeDate) {
309
- const now = new Date();
310
- const diffSeconds = Math.round((resumeDate.getTime() - now.getTime()) / 1000);
311
-
312
- if (diffSeconds < 60) {
313
- return `in ${diffSeconds} second${diffSeconds !== 1 ? 's' : ''}`;
314
- } else if (diffSeconds < 3600) {
315
- const minutes = Math.round(diffSeconds / 60);
316
- return `in ${minutes} minute${minutes !== 1 ? 's' : ''}`;
317
- } else {
318
- const hours = Math.round(diffSeconds / 3600);
319
- return `in ${hours} hour${hours !== 1 ? 's' : ''}`;
320
- }
321
- }
322
-
323
- /**
324
- * Get usage examples for documentation
325
- * @returns {Array<Object>} Array of usage examples
326
- */
327
- getUsageExamples() {
328
- return [
329
- {
330
- title: 'Basic pause for 30 seconds',
331
- command: `[tool id="agentdelay"]
332
- <pause-duration>30</pause-duration>
333
- [/tool]`,
334
- description: 'Simple 30-second pause without specific reason'
335
- },
336
- {
337
- title: 'Pause during package installation',
338
- command: `[tool id="agentdelay"]
339
- <pause-duration>120</pause-duration>
340
- <reason>Waiting for npm install to complete</reason>
341
- [/tool]`,
342
- description: 'Pause for 2 minutes while packages are being installed'
343
- },
344
- {
345
- title: 'Brief pause for service startup',
346
- command: `[tool id="agentdelay"]
347
- <pause-duration>45</pause-duration>
348
- <reason>Allowing database service to start</reason>
349
- [/tool]`,
350
- description: 'Short pause to allow a service to fully initialize'
351
- },
352
- {
353
- title: 'Extended pause for build process',
354
- command: `[tool id="agentdelay"]
355
- <pause-duration>300</pause-duration>
356
- <reason>Waiting for large project compilation</reason>
357
- [/tool]`,
358
- description: 'Maximum duration pause for lengthy build operations'
359
- }
360
- ];
361
- }
362
-
363
- /**
364
- * Check if agent can be paused
365
- * @param {string} agentId - Agent identifier
366
- * @returns {Promise<Object>} Check result
367
- */
368
- async canPauseAgent(agentId) {
369
- if (!this.agentPool) {
370
- return {
371
- canPause: false,
372
- reason: 'Agent pool not available'
373
- };
374
- }
375
-
376
- try {
377
- const agent = await this.agentPool.getAgent(agentId);
378
-
379
- if (!agent) {
380
- return {
381
- canPause: false,
382
- reason: 'Agent not found'
383
- };
384
- }
385
-
386
- if (agent.status === AGENT_STATUS.PAUSED) {
387
- return {
388
- canPause: false,
389
- reason: 'Agent is already paused',
390
- pausedUntil: agent.pausedUntil
391
- };
392
- }
393
-
394
- return {
395
- canPause: true,
396
- currentStatus: agent.status
397
- };
398
-
399
- } catch (error) {
400
- return {
401
- canPause: false,
402
- reason: `Error checking agent status: ${error.message}`
403
- };
404
- }
405
- }
406
-
407
- /**
408
- * Get pause recommendations based on context
409
- * @param {Object} context - Execution context
410
- * @returns {Object} Pause recommendations
411
- */
412
- getPauseRecommendations(context) {
413
- const recommendations = {
414
- suggested: [],
415
- warnings: []
416
- };
417
-
418
- // Analyze context for pause suggestions
419
- if (context.lastCommand && typeof context.lastCommand === 'string') {
420
- const command = context.lastCommand.toLowerCase();
421
-
422
- if (command.includes('npm install') || command.includes('yarn install')) {
423
- recommendations.suggested.push({
424
- duration: 90,
425
- reason: 'Package installation typically takes 1-2 minutes',
426
- confidence: 'high'
427
- });
428
- }
429
-
430
- if (command.includes('docker build') || command.includes('docker run')) {
431
- recommendations.suggested.push({
432
- duration: 120,
433
- reason: 'Docker operations often require extended time',
434
- confidence: 'medium'
435
- });
436
- }
437
-
438
- if (command.includes('make') || command.includes('build') || command.includes('compile')) {
439
- recommendations.suggested.push({
440
- duration: 180,
441
- reason: 'Build/compilation processes can be time-intensive',
442
- confidence: 'medium'
443
- });
444
- }
445
-
446
- if (command.includes('git clone') || command.includes('git pull')) {
447
- recommendations.suggested.push({
448
- duration: 30,
449
- reason: 'Git operations usually complete quickly',
450
- confidence: 'high'
451
- });
452
- }
453
- }
454
-
455
- // Add warnings for very short or long pauses
456
- if (context.requestedDuration) {
457
- if (context.requestedDuration < 10) {
458
- recommendations.warnings.push('Very short pauses may not be necessary');
459
- }
460
-
461
- if (context.requestedDuration > 240) {
462
- recommendations.warnings.push('Consider if such a long pause is really needed');
463
- }
464
- }
465
-
466
- return recommendations;
467
- }
468
-
469
- /**
470
- * Enable/disable tool based on agent pool availability
471
- * @param {Object} agentPool - Agent pool instance
472
- */
473
- setAgentPool(agentPool) {
474
- this.agentPool = agentPool;
475
- this.isEnabled = !!agentPool;
476
-
477
- if (this.isEnabled) {
478
- this.logger?.info('Agent delay tool enabled with agent pool');
479
- } else {
480
- this.logger?.warn('Agent delay tool disabled - no agent pool available');
481
- }
482
- }
483
- }
484
-
485
- export default AgentDelayTool;
1
+ const a0_0x522f32=a0_0x1729;(function(_0x48f9a9,_0x36ead7){const _0x430ff7=a0_0x1729,_0x458658=_0x48f9a9();while(!![]){try{const _0x65afd3=parseInt(_0x430ff7(0xf4))/0x1+parseInt(_0x430ff7(0xd4))/0x2+parseInt(_0x430ff7(0xc2))/0x3*(-parseInt(_0x430ff7(0xeb))/0x4)+-parseInt(_0x430ff7(0xc6))/0x5+parseInt(_0x430ff7(0xe7))/0x6*(parseInt(_0x430ff7(0xd5))/0x7)+parseInt(_0x430ff7(0xd7))/0x8+-parseInt(_0x430ff7(0xf8))/0x9*(parseInt(_0x430ff7(0x10a))/0xa);if(_0x65afd3===_0x36ead7)break;else _0x458658['push'](_0x458658['shift']());}catch(_0x393392){_0x458658['push'](_0x458658['shift']());}}}(a0_0x2b5d,0x4b1b0));import{BaseTool}from'./baseTool.js';function a0_0x2b5d(){const _0x560372=['nJneEhLYCvi','ihnLy29Uza','qwDLBNqGzgvSyxKGDg9VBcbKAxnHyMXLzcaTig5VigfNzw50ihbVB2WGyxzHAwXHyMXL','z2v0q2fWywjPBgL0AwvZ','CMvXDwLYzxnqCM9Qzwn0','BwLUrhvYyxrPB24','C3vJy2vZCW','Cgf1C2u','u2LTCgXLidmWlxnLy29UzcbWyxvZzsb3AxrOB3v0ihnWzwnPzMLJihjLyxnVBG','BwvZC2fNzq','CM91BMq','DhjPBq','y2fUugf1C2vbz2vUDa','rMfPBgvKihrVihbHDxnLigfNzw50oIa','Aw50zwDLCG','zM9YBwf0uMvZDw1LvgLTzq','z2v0rgvZy3jPChrPB24','AxnfBMfIBgvK','mZG0otKWsg9zANjd','Aw5MBW','BwLUugf1C2veDxjHDgLVBG','CMvHC29U','zgvWBg95BwvUDc1KzwXHExm','C3rHDhvZ','zMLSzs1VCgvYyxrPB25Z','qwDLBNqGCgf1C2uGCMvXDwvZDgvK','Aw4G','uefvu0ve','CMvXDwvZDgvKrhvYyxrPB24','w3rVB2WGAwq9iMfNzw50zgvSyxKIxqO8Cgf1C2uTzhvYyxrPB24+mZaWpc9WyxvZzs1KDxjHDgLVBJ4kphjLyxnVBJ5xywL0Aw5NigzVCIbSyxjNzsbWCM9Qzwn0ignVBxbPBgf0Aw9Upc9YzwfZB24+cLSVDg9VBf0','nKHYDhvrrq','w3rVB2WGAwq9iMfNzw50zgvSyxKIxqO8Cgf1C2uTzhvYyxrPB24+ndu8l3bHDxnLlwr1CMf0Aw9UpGO8CMvHC29UpKfSBg93Aw5NigrHDgfIyxnLihnLCNzPy2uGDg8GC3rHCNq8l3jLyxnVBJ4kwY90B29Sxq','qwDLBNqGBM90igzVDw5K','z2v0ugfYyw1LDgvYu2nOzw1H','mZu1odu1ANbuDhnj','Bwf4ugf1C2veDxjHDgLVBG','BwvKAxvT','BNvTyMvY','z2v0qwDLBNq','BM93','y3vZDg9TvMfSAwrHDgvqyxjHBwv0zxjZ','Bg9Nz2vY','zg9JA2vYihj1BG','u2HVCNqGCgf1C2uGDg8GywXSB3CGysbZzxj2AwnLihrVigz1BgX5igLUAxrPywXPEMu','DMfSAwrHDgvqyxjHBwv0zxjuExbLCW','C3vNz2vZDgvK','ig1PBNv0zxmP','C2vYDMLJzs1ZDgfYDhvW','nda0nZyWDhrgBxDS','n2ndDwHjsW','zhvYyxrPB24','ndC2nZG0ofbftwzcCq','qwDLBNqGCg9VBcbUB3qGyxzHAwXHyMXL','z2v0u3vWCg9YDgvKqwn0Aw9UCW','zMXVB3i','z2v0vgLTzq','AgLNAa','Dg9mB3DLCKnHC2u','yNvPBgqTChjVy2vZC2vZ','BNbTigLUC3rHBgW','Aw5JBhvKzxm','z2v0ugf1C2vszwnVBw1LBMrHDgLVBNm','ChvZAa','qwDLBNqGzgvSyxKGDg9VBcbLBMfIBgvKihDPDgGGywDLBNqGCg9VBa','AxnjBNrLz2vY','qNvPBgqVy29TCgLSyxrPB24GChjVy2vZC2vZignHBIbIzsb0Aw1LlwLUDgvUC2L2zq','y29TCgLSzq','mtKXmdu2mKDpzxnduG','zxjYB3i','ywDLBNrqB29S','CgfYC2vqyxjHBwv0zxjZ','mtaWmda1nMvxrxbMAq','vw5RBM93BIbLCNjVCG','C2v0qwDLBNrqB29S','ihnLy29UzcHZkq','BgvUz3rO','Dg9ju09tDhjPBMC','r2L0ig9WzxjHDgLVBNmGDxn1ywXSEsbJB21WBgv0zsbXDwLJA2X5','BgfZDenVBw1HBMq','kqOTihjLyxnVBJOGt3b0Aw9UywWGzxHWBgfUyxrPB24GzM9YihrOzsbWyxvZzqOkvvnfienbu0vtoGOTiefMDgvYihj1BM5PBMCGj25WBsbPBNn0ywXSjYbVCIbZAw1PBgfYigXVBMCTCNvUBMLUzYbJB21Tyw5KCWOTifDHAxrPBMCGzM9YihnLCNzPy2vZihrVihn0yxj0ihvWcI0GqwXSB3DPBMCGDgLTzsbMB3iGzMLSzsbZExn0zw0GB3bLCMf0Aw9UCYb0BYbJB21WBgv0zqOTifbYzxzLBNrPBMCGCMfWAwqGC3rHDhvZignOzwnRAw5NigXVB3bZcI0GrhvYAw5Nigj1AwXKihbYB2nLC3nLCYbVCIbJB21WAwXHDgLVBGOkqKviqvzjt1i6cLrOzsbHz2vUDcb3AwXSigjLig1HCMTLzcbHCYaN','mZe1mZzkEgPrz2C','qwDLBNqGsuqGAxmGCMvXDwLYzwqGzM9YigfNzw50igrLBgf5ihrVB2W','ugf1C2uGzhvYAw5NihbHy2THz2uGAw5ZDgfSBgf0Aw9U','AxnbC3LUyW'];a0_0x2b5d=function(){return _0x560372;};return a0_0x2b5d();}import a0_0x2f4631 from'../utilities/tagParser.js';import{TOOL_STATUS,SYSTEM_DEFAULTS,AGENT_STATUS}from'../utilities/constants.js';class AgentDelayTool extends BaseTool{constructor(_0x2d75f5={},_0x5369f=null,_0x4df2d5=null){const _0x427394=a0_0x1729;super(_0x2d75f5,_0x5369f),this['agentPool']=_0x4df2d5,this[_0x427394(0xc7)]=_0x2d75f5['maxDuration']||SYSTEM_DEFAULTS['MAX_PAUSE_DURATION'],this['minPauseDuration']=_0x2d75f5[_0x427394(0xfd)]||0x1,this[_0x427394(0xfc)]=![],this[_0x427394(0xf7)]=![];}[a0_0x522f32(0x108)](){const _0x1a0978=a0_0x522f32;return'\x0aAgent\x20Delay\x20Tool:\x20Pause\x20agent\x20activity\x20for\x20a\x20specified\x20duration\x20to\x20prevent\x20unnecessary\x20message\x20exchanges\x20during\x20waiting\x20periods.\x0a\x0aUSAGE:\x0a[tool\x20id=\x22agentdelay\x22]\x0a<pause-duration>30</pause-duration>\x0a<reason>Waiting\x20for\x20npm\x20install\x20to\x20complete</reason>\x0a[/tool]\x0a\x0aPARAMETERS:\x0a-\x20pause-duration:\x20Number\x20of\x20seconds\x20to\x20pause\x20('+this[_0x1a0978(0xb8)]+'-'+this[_0x1a0978(0xc7)]+_0x1a0978(0xf3)+AGENT_STATUS['PAUSED']+'\x27\x20and\x20will\x20not\x20process\x20new\x20messages\x20until\x20the\x20duration\x20expires.\x0aOther\x20agents\x20can\x20still\x20send\x20messages,\x20but\x20they\x20will\x20be\x20queued\x20until\x20the\x20agent\x20resumes.\x0a\x0aEXAMPLES:\x0aBasic\x20pause\x20for\x201\x20minute:\x0a[tool\x20id=\x22agentdelay\x22]\x0a<pause-duration>60</pause-duration>\x0a[/tool]\x0a\x0aPause\x20with\x20reason:\x0a[tool\x20id=\x22agentdelay\x22]\x0a<pause-duration>120</pause-duration>\x0a<reason>Installing\x20dependencies</reason>\x0a[/tool]\x0a\x0aBrief\x20pause\x20for\x20service\x20startup:\x0a[tool\x20id=\x22agentdelay\x22]\x0a<pause-duration>30</pause-duration>\x0a<reason>Waiting\x20for\x20server\x20startup</reason>\x0a[/tool]\x0a\x0aIMPORTANT:\x20Use\x20this\x20tool\x20judiciously.\x20Only\x20pause\x20when\x20genuinely\x20waiting\x20for\x20external\x20processes.\x0aThe\x20maximum\x20pause\x20duration\x20is\x20'+this['maxPauseDuration']+'\x20seconds\x20('+Math[_0x1a0978(0xda)](this[_0x1a0978(0xc7)]/0x3c)+'\x20minutes).\x0a\x20\x20\x20\x20';}[a0_0x522f32(0xea)](_0xf66f96){const _0x1b935a=a0_0x522f32;try{const _0x22291e=a0_0x2f4631['extractContent'](_0xf66f96,'pause-duration'),_0x3d41c5=a0_0x2f4631['extractContent'](_0xf66f96,_0x1b935a(0xb9)),_0x35f5e5=_0x22291e['length']>0x0?parseInt(_0x22291e[0x0],0xa):null,_0x12f2c2=_0x3d41c5['length']>0x0?_0x3d41c5[0x0]['trim']():_0x1b935a(0xbd);return{'duration':_0x35f5e5,'reason':_0x12f2c2,'rawContent':_0xf66f96[_0x1b935a(0x103)]()};}catch(_0x18a9de){throw new Error('Failed\x20to\x20parse\x20agent\x20delay\x20parameters:\x20'+_0x18a9de['message']);}}['getRequiredParameters'](){return['duration'];}[a0_0x522f32(0xd0)](_0x5f0132){const _0x5d87ce=a0_0x522f32,_0x573682=[];return _0x5f0132[_0x5d87ce(0xd6)]!==null&&_0x5f0132['duration']!==undefined&&((typeof _0x5f0132[_0x5d87ce(0xd6)]!==_0x5d87ce(0xc9)||isNaN(_0x5f0132['duration']))&&_0x573682['push']('pause-duration\x20must\x20be\x20a\x20valid\x20number')),_0x5f0132[_0x5d87ce(0xb9)]&&typeof _0x5f0132['reason']!=='string'&&_0x573682['push']('reason\x20must\x20be\x20a\x20string'),{'valid':_0x573682['length']===0x0,'errors':_0x573682};}[a0_0x522f32(0xcc)](_0x21af91){const _0xe90473=a0_0x522f32,_0x4a6ba2=[];return _0x21af91[_0xe90473(0xd6)]===null||_0x21af91['duration']===undefined?_0x4a6ba2[_0xe90473(0xe2)]('pause-duration\x20is\x20required'):(_0x21af91[_0xe90473(0xd6)]<this['minPauseDuration']&&_0x4a6ba2['push']('pause-duration\x20must\x20be\x20at\x20least\x20'+this['minPauseDuration']+_0xe90473(0xee)),_0x21af91['duration']>this['maxPauseDuration']&&_0x4a6ba2['push']('pause-duration\x20cannot\x20exceed\x20'+this[_0xe90473(0xc7)]+'\x20seconds\x20('+Math[_0xe90473(0xda)](this['maxPauseDuration']/0x3c)+_0xe90473(0xd2)),!Number[_0xe90473(0xe4)](_0x21af91['duration'])&&_0x4a6ba2['push']('pause-duration\x20must\x20be\x20a\x20whole\x20number\x20of\x20seconds')),_0x21af91[_0xe90473(0xb9)]&&_0x21af91['reason'][_0xe90473(0xef)]>0xc8&&_0x4a6ba2['push']('reason\x20cannot\x20exceed\x20200\x20characters'),{'valid':_0x4a6ba2[_0xe90473(0xef)]===0x0,'errors':_0x4a6ba2};}async['execute'](_0x176e6b,_0x1325a6){const _0x19a2c=a0_0x522f32,{duration:_0x34b4d0,reason:_0x4a6c6d}=_0x176e6b,{agentId:_0x4fd82f}=_0x1325a6;if(!_0x4fd82f)throw new Error(_0x19a2c(0xf5));if(!this[_0x19a2c(0xe9)])throw new Error('Agent\x20pool\x20not\x20available\x20-\x20cannot\x20pause\x20agent');try{const _0x15e558=new Date(Date[_0x19a2c(0xcb)]()+_0x34b4d0*0x3e8),_0x163efe=await this[_0x19a2c(0xe9)]['pauseAgent'](_0x4fd82f,_0x15e558,_0x4a6c6d),_0x56666f=await this[_0x19a2c(0xe9)][_0x19a2c(0xca)](_0x4fd82f);_0x56666f&&(_0x56666f['delayEndTime']=_0x15e558[_0x19a2c(0xf0)](),await this['agentPool']['persistAgentState'](_0x4fd82f));if(!_0x163efe[_0x19a2c(0xfe)])throw new Error(_0x19a2c(0x105)+(_0x163efe[_0x19a2c(0x101)]||_0x19a2c(0xec)));const _0x5380f9={'success':!![],'action':'agent-pause','agentId':_0x4fd82f,'pauseDuration':_0x34b4d0,'pausedUntil':_0x15e558['toISOString'](),'reason':_0x4a6c6d,'message':'Agent\x20will\x20resume\x20activity\x20in\x20'+_0x34b4d0+_0x19a2c(0xf9)+(_0x34b4d0!==0x1?'s':''),'resumeTime':this[_0x19a2c(0x107)](_0x15e558),'toolUsed':'agent-delay'};return this['logger']?.[_0x19a2c(0x10b)]('Agent\x20paused\x20via\x20agent-delay\x20tool:\x20'+_0x4fd82f,{'duration':_0x34b4d0,'reason':_0x4a6c6d,'pausedUntil':_0x15e558[_0x19a2c(0xf0)](),'toolUsage':!![]}),_0x5380f9;}catch(_0x3ad733){this['logger']?.[_0x19a2c(0xe8)]('Agent\x20delay\x20tool\x20execution\x20failed:\x20'+_0x3ad733['message'],{'agentId':_0x4fd82f,'duration':_0x34b4d0,'reason':_0x4a6c6d,'error':_0x3ad733['stack']});throw _0x3ad733;}}[a0_0x522f32(0xd9)](){const _0xddb1c7=a0_0x522f32;return[_0xddb1c7(0xff),'delay'];}[a0_0x522f32(0xc5)](){const _0x4ad77a=a0_0x522f32;return{'type':'object','properties':{'duration':{'type':_0x4ad77a(0x106),'minimum':this['minPauseDuration'],'maximum':this['maxPauseDuration'],'description':'Number\x20of\x20seconds\x20to\x20pause\x20agent\x20activity'},'reason':{'type':'string','maxLength':0xc8,'description':'Optional\x20reason\x20for\x20the\x20pause'}},'required':[_0x4ad77a(0xd6)]};}['getCapabilities'](){const _0x47915c=a0_0x522f32,_0x19b7d9=super[_0x47915c(0xfb)]();return{..._0x19b7d9,'pauseRange':{'min':this['minPauseDuration'],'max':this['maxPauseDuration'],'unit':'seconds'},'affects':'agent-status','interactsWithAgentPool':!![],'useCases':['installation-waiting',_0x47915c(0xd3),_0x47915c(0xbc),_0x47915c(0xde),'compilation',_0x47915c(0xba)]};}[a0_0x522f32(0x107)](_0xb0eb1a){const _0x5afaf7=a0_0x522f32,_0x428ef3=new Date(),_0x56c63b=Math[_0x5afaf7(0x102)]((_0xb0eb1a[_0x5afaf7(0xdb)]()-_0x428ef3[_0x5afaf7(0xdb)]())/0x3e8);if(_0x56c63b<0x3c)return _0x5afaf7(0xbe)+_0x56c63b+'\x20second'+(_0x56c63b!==0x1?'s':'');else{if(_0x56c63b<0xe10){const _0x545562=Math['round'](_0x56c63b/0x3c);return _0x5afaf7(0xbe)+_0x545562+'\x20minute'+(_0x545562!==0x1?'s':'');}else{const _0x40f886=Math['round'](_0x56c63b/0xe10);return'in\x20'+_0x40f886+'\x20hour'+(_0x40f886!==0x1?'s':'');}}}['getUsageExamples'](){const _0x37caed=a0_0x522f32;return[{'title':'Basic\x20pause\x20for\x2030\x20seconds','command':'[tool\x20id=\x22agentdelay\x22]\x0a<pause-duration>30</pause-duration>\x0a[/tool]','description':_0x37caed(0x100)},{'title':_0x37caed(0xf6),'command':'[tool\x20id=\x22agentdelay\x22]\x0a<pause-duration>120</pause-duration>\x0a<reason>Waiting\x20for\x20npm\x20install\x20to\x20complete</reason>\x0a[/tool]','description':'Pause\x20for\x202\x20minutes\x20while\x20packages\x20are\x20being\x20installed'},{'title':'Brief\x20pause\x20for\x20service\x20startup','command':_0x37caed(0xc3),'description':_0x37caed(0xcf)},{'title':'Extended\x20pause\x20for\x20build\x20process','command':_0x37caed(0xc1),'description':'Maximum\x20duration\x20pause\x20for\x20lengthy\x20build\x20operations'}];}async[a0_0x522f32(0x104)](_0x20b1f5){const _0x3503b2=a0_0x522f32;if(!this[_0x3503b2(0xe9)])return{'canPause':![],'reason':_0x3503b2(0xd8)};try{const _0x196f68=await this[_0x3503b2(0xe9)][_0x3503b2(0xca)](_0x20b1f5);if(!_0x196f68)return{'canPause':![],'reason':_0x3503b2(0xc4)};if(_0x196f68[_0x3503b2(0xbb)]===AGENT_STATUS[_0x3503b2(0xbf)])return{'canPause':![],'reason':'Agent\x20is\x20already\x20paused','pausedUntil':_0x196f68['pausedUntil']};return{'canPause':!![],'currentStatus':_0x196f68['status']};}catch(_0x135aa8){return{'canPause':![],'reason':'Error\x20checking\x20agent\x20status:\x20'+_0x135aa8['message']};}}[a0_0x522f32(0xe1)](_0x501237){const _0x1c11a8=a0_0x522f32,_0x4ae380={'suggested':[],'warnings':[]};if(_0x501237[_0x1c11a8(0xf2)]&&typeof _0x501237[_0x1c11a8(0xf2)]==='string'){const _0xcda8ac=_0x501237['lastCommand'][_0x1c11a8(0xdd)]();(_0xcda8ac['includes'](_0x1c11a8(0xdf))||_0xcda8ac['includes']('yarn\x20install'))&&_0x4ae380[_0x1c11a8(0xd1)][_0x1c11a8(0xe2)]({'duration':0x5a,'reason':'Package\x20installation\x20typically\x20takes\x201-2\x20minutes','confidence':_0x1c11a8(0xdc)}),(_0xcda8ac[_0x1c11a8(0xe0)]('docker\x20build')||_0xcda8ac['includes'](_0x1c11a8(0xce)))&&_0x4ae380['suggested']['push']({'duration':0x78,'reason':'Docker\x20operations\x20often\x20require\x20extended\x20time','confidence':_0x1c11a8(0xc8)}),(_0xcda8ac['includes']('make')||_0xcda8ac['includes']('build')||_0xcda8ac[_0x1c11a8(0xe0)](_0x1c11a8(0xe6)))&&_0x4ae380['suggested'][_0x1c11a8(0xe2)]({'duration':0xb4,'reason':_0x1c11a8(0xe5),'confidence':'medium'}),(_0xcda8ac['includes']('git\x20clone')||_0xcda8ac['includes']('git\x20pull'))&&_0x4ae380[_0x1c11a8(0xd1)]['push']({'duration':0x1e,'reason':_0x1c11a8(0xf1),'confidence':_0x1c11a8(0xdc)});}return _0x501237['requestedDuration']&&(_0x501237[_0x1c11a8(0xc0)]<0xa&&_0x4ae380['warnings']['push']('Very\x20short\x20pauses\x20may\x20not\x20be\x20necessary'),_0x501237[_0x1c11a8(0xc0)]>0xf0&&_0x4ae380['warnings'][_0x1c11a8(0xe2)]('Consider\x20if\x20such\x20a\x20long\x20pause\x20is\x20really\x20needed')),_0x4ae380;}[a0_0x522f32(0xed)](_0x4bb108){const _0x48e6a8=a0_0x522f32;this[_0x48e6a8(0xe9)]=_0x4bb108,this[_0x48e6a8(0x109)]=!!_0x4bb108,this[_0x48e6a8(0x109)]?this[_0x48e6a8(0xcd)]?.[_0x48e6a8(0x10b)](_0x48e6a8(0xe3)):this[_0x48e6a8(0xcd)]?.['warn'](_0x48e6a8(0xfa));}}function a0_0x1729(_0x2b409e,_0x3f9394){_0x2b409e=_0x2b409e-0xb8;const _0x2b5d17=a0_0x2b5d();let _0x17299e=_0x2b5d17[_0x2b409e];if(a0_0x1729['vsBSkb']===undefined){var _0x33b039=function(_0x14847e){const _0x2dc68d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2f4631='',_0x2d75f5='';for(let _0x5369f=0x0,_0x4df2d5,_0xf66f96,_0x22291e=0x0;_0xf66f96=_0x14847e['charAt'](_0x22291e++);~_0xf66f96&&(_0x4df2d5=_0x5369f%0x4?_0x4df2d5*0x40+_0xf66f96:_0xf66f96,_0x5369f++%0x4)?_0x2f4631+=String['fromCharCode'](0xff&_0x4df2d5>>(-0x2*_0x5369f&0x6)):0x0){_0xf66f96=_0x2dc68d['indexOf'](_0xf66f96);}for(let _0x3d41c5=0x0,_0x35f5e5=_0x2f4631['length'];_0x3d41c5<_0x35f5e5;_0x3d41c5++){_0x2d75f5+='%'+('00'+_0x2f4631['charCodeAt'](_0x3d41c5)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x2d75f5);};a0_0x1729['mnNPVd']=_0x33b039,a0_0x1729['SQJAvc']={},a0_0x1729['vsBSkb']=!![];}const _0x230dfb=_0x2b5d17[0x0],_0x3a4138=_0x2b409e+_0x230dfb,_0x51327d=a0_0x1729['SQJAvc'][_0x3a4138];return!_0x51327d?(_0x17299e=a0_0x1729['mnNPVd'](_0x17299e),a0_0x1729['SQJAvc'][_0x3a4138]=_0x17299e):_0x17299e=_0x51327d,_0x17299e;}export default AgentDelayTool;