@loxia-labs/loxia-autopilot-one 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/LICENSE +267 -0
  2. package/README.md +509 -0
  3. package/bin/cli.js +117 -0
  4. package/package.json +94 -0
  5. package/scripts/install-scanners.js +236 -0
  6. package/src/analyzers/CSSAnalyzer.js +297 -0
  7. package/src/analyzers/ConfigValidator.js +690 -0
  8. package/src/analyzers/ESLintAnalyzer.js +320 -0
  9. package/src/analyzers/JavaScriptAnalyzer.js +261 -0
  10. package/src/analyzers/PrettierFormatter.js +247 -0
  11. package/src/analyzers/PythonAnalyzer.js +266 -0
  12. package/src/analyzers/SecurityAnalyzer.js +729 -0
  13. package/src/analyzers/TypeScriptAnalyzer.js +247 -0
  14. package/src/analyzers/codeCloneDetector/analyzer.js +344 -0
  15. package/src/analyzers/codeCloneDetector/detector.js +203 -0
  16. package/src/analyzers/codeCloneDetector/index.js +160 -0
  17. package/src/analyzers/codeCloneDetector/parser.js +199 -0
  18. package/src/analyzers/codeCloneDetector/reporter.js +148 -0
  19. package/src/analyzers/codeCloneDetector/scanner.js +59 -0
  20. package/src/core/agentPool.js +1474 -0
  21. package/src/core/agentScheduler.js +2147 -0
  22. package/src/core/contextManager.js +709 -0
  23. package/src/core/messageProcessor.js +732 -0
  24. package/src/core/orchestrator.js +548 -0
  25. package/src/core/stateManager.js +877 -0
  26. package/src/index.js +631 -0
  27. package/src/interfaces/cli.js +549 -0
  28. package/src/interfaces/webServer.js +2162 -0
  29. package/src/modules/fileExplorer/controller.js +280 -0
  30. package/src/modules/fileExplorer/index.js +37 -0
  31. package/src/modules/fileExplorer/middleware.js +92 -0
  32. package/src/modules/fileExplorer/routes.js +125 -0
  33. package/src/modules/fileExplorer/types.js +44 -0
  34. package/src/services/aiService.js +1232 -0
  35. package/src/services/apiKeyManager.js +164 -0
  36. package/src/services/benchmarkService.js +366 -0
  37. package/src/services/budgetService.js +539 -0
  38. package/src/services/contextInjectionService.js +247 -0
  39. package/src/services/conversationCompactionService.js +637 -0
  40. package/src/services/errorHandler.js +810 -0
  41. package/src/services/fileAttachmentService.js +544 -0
  42. package/src/services/modelRouterService.js +366 -0
  43. package/src/services/modelsService.js +322 -0
  44. package/src/services/qualityInspector.js +796 -0
  45. package/src/services/tokenCountingService.js +536 -0
  46. package/src/tools/agentCommunicationTool.js +1344 -0
  47. package/src/tools/agentDelayTool.js +485 -0
  48. package/src/tools/asyncToolManager.js +604 -0
  49. package/src/tools/baseTool.js +800 -0
  50. package/src/tools/browserTool.js +920 -0
  51. package/src/tools/cloneDetectionTool.js +621 -0
  52. package/src/tools/dependencyResolverTool.js +1215 -0
  53. package/src/tools/fileContentReplaceTool.js +875 -0
  54. package/src/tools/fileSystemTool.js +1107 -0
  55. package/src/tools/fileTreeTool.js +853 -0
  56. package/src/tools/imageTool.js +901 -0
  57. package/src/tools/importAnalyzerTool.js +1060 -0
  58. package/src/tools/jobDoneTool.js +248 -0
  59. package/src/tools/seekTool.js +956 -0
  60. package/src/tools/staticAnalysisTool.js +1778 -0
  61. package/src/tools/taskManagerTool.js +2873 -0
  62. package/src/tools/terminalTool.js +2304 -0
  63. package/src/tools/webTool.js +1430 -0
  64. package/src/types/agent.js +519 -0
  65. package/src/types/contextReference.js +972 -0
  66. package/src/types/conversation.js +730 -0
  67. package/src/types/toolCommand.js +747 -0
  68. package/src/utilities/attachmentValidator.js +292 -0
  69. package/src/utilities/configManager.js +582 -0
  70. package/src/utilities/constants.js +722 -0
  71. package/src/utilities/directoryAccessManager.js +535 -0
  72. package/src/utilities/fileProcessor.js +307 -0
  73. package/src/utilities/logger.js +436 -0
  74. package/src/utilities/tagParser.js +1246 -0
  75. package/src/utilities/toolConstants.js +317 -0
  76. package/web-ui/build/index.html +15 -0
  77. package/web-ui/build/logo.png +0 -0
  78. package/web-ui/build/logo2.png +0 -0
  79. package/web-ui/build/static/index-CjkkcnFA.js +344 -0
  80. package/web-ui/build/static/index-Dy2bYbOa.css +1 -0
@@ -0,0 +1,722 @@
1
+ /**
2
+ * Constants - Centralized constants and enums for the Loxia AI Agents System
3
+ *
4
+ * Purpose:
5
+ * - Eliminate magic values throughout the codebase
6
+ * - Provide centralized configuration constants
7
+ * - Define enums for system states and types
8
+ * - Ensure consistency across modules
9
+ */
10
+
11
+ // System Configuration Constants
12
+ const SYSTEM_DEFAULTS = {
13
+ MAX_AGENTS_PER_PROJECT: 10,
14
+ QUALITY_INSPECTOR_INTERVAL: 10,
15
+ DEFAULT_MODEL: 'anthropic-sonnet',
16
+ STATE_DIRECTORY: '.loxia-state',
17
+ MAX_PAUSE_DURATION: 300, // seconds
18
+ MAX_CONTEXT_SIZE: 50000, // characters
19
+ MAX_CONTEXT_REFERENCES: 10,
20
+ CACHE_EXPIRY: 3600, // seconds
21
+ MAX_MESSAGE_SIZE: 100000, // characters
22
+ MAX_FILE_SIZE: 10485760, // 10MB
23
+ MAX_ASYNC_OPERATIONS: 5,
24
+ MAX_TOOL_EXECUTION_TIME: 300000, // 5 minutes
25
+ MAX_CONVERSATION_LENGTH: 50000 // tokens
26
+ };
27
+
28
+ // Model Router Configuration
29
+ const MODEL_ROUTER_CONFIG = {
30
+ ROUTER_MODEL: 'autopilot-model-router', // Autopilot model router deployment
31
+ CONTEXT_MESSAGES_COUNT: 5, // Number of recent messages to include
32
+ BENCHMARK_REFRESH_INTERVAL: 3600000, // 1 hour in milliseconds
33
+ FALLBACK_ON_ERROR: true, // Continue with previous model on router error
34
+ REQUEST_TIMEOUT: 10000 // 10 seconds timeout for router requests
35
+ };
36
+
37
+ // Interface Types
38
+ const INTERFACE_TYPES = {
39
+ CLI: 'cli',
40
+ WEB: 'web',
41
+ VSCODE: 'vscode'
42
+ };
43
+
44
+ // Agent Types
45
+ const AGENT_TYPES = {
46
+ USER_CREATED: 'user-created',
47
+ SYSTEM_AGENT: 'system-agent',
48
+ AGENT_ENGINEER: 'agent-engineer'
49
+ };
50
+
51
+ // Agent Status
52
+ const AGENT_STATUS = {
53
+ ACTIVE: 'active',
54
+ IDLE: 'idle',
55
+ BUSY: 'busy',
56
+ SUSPENDED: 'suspended',
57
+ PAUSED: 'paused'
58
+ };
59
+
60
+ // Agent Modes
61
+ const AGENT_MODES = {
62
+ CHAT: 'chat', // Default: single message → single response
63
+ AGENT: 'agent' // Autonomous: task → loop until complete (persistent mode)
64
+ };
65
+
66
+ // Agent Mode States
67
+ const AGENT_MODE_STATES = {
68
+ IDLE: 'idle', // Not executing anything
69
+ EXECUTING: 'executing', // Currently processing autonomous task
70
+ WAITING_APPROVAL: 'waiting_approval', // Paused for user approval
71
+ STOPPED: 'stopped' // User stopped execution
72
+ };
73
+
74
+ // Message Modes
75
+ const MESSAGE_MODES = {
76
+ CHAT: 'chat',
77
+ AGENT: 'agent'
78
+ };
79
+
80
+ // Message Roles
81
+ const MESSAGE_ROLES = {
82
+ USER: 'user',
83
+ ASSISTANT: 'assistant',
84
+ SYSTEM: 'system'
85
+ };
86
+
87
+ // Context Reference Types
88
+ const CONTEXT_REFERENCE_TYPES = {
89
+ FILE: 'file',
90
+ COMPONENT: 'component',
91
+ SELECTION: 'selection',
92
+ DIRECTORY: 'directory'
93
+ };
94
+
95
+ // Tool Status
96
+ const TOOL_STATUS = {
97
+ PENDING: 'pending',
98
+ EXECUTING: 'executing',
99
+ COMPLETED: 'completed',
100
+ FAILED: 'failed'
101
+ };
102
+
103
+ // Operation Status
104
+ const OPERATION_STATUS = {
105
+ EXECUTING: 'executing',
106
+ COMPLETED: 'completed',
107
+ FAILED: 'failed',
108
+ NOT_FOUND: 'not_found'
109
+ };
110
+
111
+ // Conversation Status
112
+ const CONVERSATION_STATUS = {
113
+ ACTIVE: 'active',
114
+ ARCHIVED: 'archived',
115
+ SUSPENDED: 'suspended'
116
+ };
117
+
118
+ // Error Types
119
+ const ERROR_TYPES = {
120
+ FILE_NOT_FOUND: 'FILE_NOT_FOUND',
121
+ PERMISSION_DENIED: 'PERMISSION_DENIED',
122
+ OPERATION_TIMEOUT: 'OPERATION_TIMEOUT',
123
+ RATE_LIMIT_EXCEEDED: 'RATE_LIMIT_EXCEEDED',
124
+ AUTHENTICATION_FAILED: 'AUTHENTICATION_FAILED',
125
+ UNKNOWN_ERROR: 'UNKNOWN_ERROR',
126
+ VALIDATION_ERROR: 'VALIDATION_ERROR',
127
+ CONFIGURATION_ERROR: 'CONFIGURATION_ERROR'
128
+ };
129
+
130
+ // HTTP Status Codes
131
+ const HTTP_STATUS = {
132
+ OK: 200,
133
+ BAD_REQUEST: 400,
134
+ UNAUTHORIZED: 401,
135
+ FORBIDDEN: 403,
136
+ NOT_FOUND: 404,
137
+ TOO_MANY_REQUESTS: 429,
138
+ INTERNAL_SERVER_ERROR: 500,
139
+ BAD_GATEWAY: 502,
140
+ SERVICE_UNAVAILABLE: 503,
141
+ GATEWAY_TIMEOUT: 504
142
+ };
143
+
144
+ // Model Providers
145
+ const MODEL_PROVIDERS = {
146
+ ANTHROPIC: 'anthropic',
147
+ OPENAI: 'openai',
148
+ AZURE: 'azure',
149
+ DEEPSEEK: 'deepseek',
150
+ PHI: 'phi'
151
+ };
152
+
153
+ // Model Names
154
+ const MODELS = { //TODO:update with moedels from server
155
+ ANTHROPIC_SONNET: 'anthropic-sonnet',
156
+ ANTHROPIC_OPUS: 'anthropic-opus',
157
+ ANTHROPIC_HAIKU: 'anthropic-haiku',
158
+ GPT_4: 'gpt-4',
159
+ GPT_4_MINI: 'gpt-4-mini',
160
+ DEEPSEEK_R1: 'deepseek-r1',
161
+ PHI_4: 'phi-4'
162
+ };
163
+
164
+ // Platform Model IDs (with prefixes)
165
+ const PLATFORM_MODELS = {
166
+ LOXIA_ANTHROPIC_SONNET: 'loxia-anthropic-sonnet',
167
+ LOXIA_ANTHROPIC_OPUS: 'loxia-anthropic-opus',
168
+ LOXIA_ANTHROPIC_HAIKU: 'loxia-anthropic-haiku',
169
+ LOXIA_GPT_4: 'loxia-gpt-4',
170
+ LOXIA_GPT_4_MINI: 'loxia-gpt-4-mini',
171
+ LOXIA_DEEPSEEK_R1: 'loxia-deepseek-r1',
172
+ LOXIA_PHI_4: 'loxia-phi-4'
173
+ };
174
+
175
+ // Direct Access Model IDs (with prefixes)
176
+ const DIRECT_MODELS = {
177
+ DIRECT_ANTHROPIC_SONNET: 'direct-anthropic-sonnet',
178
+ DIRECT_ANTHROPIC_OPUS: 'direct-anthropic-opus',
179
+ DIRECT_ANTHROPIC_HAIKU: 'direct-anthropic-haiku',
180
+ DIRECT_GPT_4: 'direct-gpt-4',
181
+ DIRECT_GPT_4_MINI: 'direct-gpt-4-mini',
182
+ DIRECT_DEEPSEEK_R1: 'direct-deepseek-r1',
183
+ DIRECT_PHI_4: 'direct-phi-4'
184
+ };
185
+
186
+ // Model Format Versions
187
+ const MODEL_FORMAT_VERSIONS = {
188
+ [MODELS.ANTHROPIC_SONNET]: 'anthropic-v1',
189
+ [MODELS.ANTHROPIC_OPUS]: 'anthropic-v1',
190
+ [MODELS.ANTHROPIC_HAIKU]: 'anthropic-v1',
191
+ [MODELS.GPT_4]: 'openai-v1',
192
+ [MODELS.GPT_4_MINI]: 'openai-v1',
193
+ [MODELS.DEEPSEEK_R1]: 'deepseek-v1',
194
+ [MODELS.PHI_4]: 'phi-v1',
195
+ DEFAULT: 'generic-v1'
196
+ };
197
+
198
+ // Model Routing Table
199
+ const MODEL_ROUTING = {
200
+ CODING: [MODELS.ANTHROPIC_SONNET, MODELS.GPT_4, MODELS.DEEPSEEK_R1],
201
+ ANALYSIS: [MODELS.ANTHROPIC_OPUS, MODELS.GPT_4, MODELS.PHI_4],
202
+ QUICK_TASKS: [MODELS.ANTHROPIC_HAIKU, MODELS.GPT_4_MINI, MODELS.PHI_4],
203
+ CREATIVE: [MODELS.ANTHROPIC_OPUS, MODELS.GPT_4],
204
+ FALLBACK: [MODELS.ANTHROPIC_SONNET]
205
+ };
206
+
207
+ // Tool Names
208
+ const TOOL_NAMES = {
209
+ TERMINAL: 'terminal',
210
+ FILESYSTEM: 'filesystem',
211
+ BROWSER: 'browser',
212
+ AGENT_DELAY: 'agentdelay',
213
+ EDITOR: 'editor',
214
+ GIT: 'git',
215
+ DATABASE: 'database'
216
+ };
217
+
218
+ // File Extensions and Languages
219
+ const FILE_EXTENSIONS = {
220
+ JAVASCRIPT: '.js',
221
+ JSX: '.jsx',
222
+ TYPESCRIPT: '.ts',
223
+ TSX: '.tsx',
224
+ PYTHON: '.py',
225
+ JAVA: '.java',
226
+ CPP: '.cpp',
227
+ C: '.c',
228
+ CSHARP: '.cs',
229
+ PHP: '.php',
230
+ RUBY: '.rb',
231
+ GO: '.go',
232
+ RUST: '.rs',
233
+ HTML: '.html',
234
+ CSS: '.css',
235
+ SCSS: '.scss',
236
+ JSON: '.json',
237
+ YAML: '.yml',
238
+ YAML_ALT: '.yaml',
239
+ MARKDOWN: '.md',
240
+ XML: '.xml',
241
+ SQL: '.sql'
242
+ };
243
+
244
+ const LANGUAGE_MAPPING = {
245
+ [FILE_EXTENSIONS.JAVASCRIPT]: 'javascript',
246
+ [FILE_EXTENSIONS.JSX]: 'jsx',
247
+ [FILE_EXTENSIONS.TYPESCRIPT]: 'typescript',
248
+ [FILE_EXTENSIONS.TSX]: 'tsx',
249
+ [FILE_EXTENSIONS.PYTHON]: 'python',
250
+ [FILE_EXTENSIONS.JAVA]: 'java',
251
+ [FILE_EXTENSIONS.CPP]: 'cpp',
252
+ [FILE_EXTENSIONS.C]: 'c',
253
+ [FILE_EXTENSIONS.CSHARP]: 'csharp',
254
+ [FILE_EXTENSIONS.PHP]: 'php',
255
+ [FILE_EXTENSIONS.RUBY]: 'ruby',
256
+ [FILE_EXTENSIONS.GO]: 'go',
257
+ [FILE_EXTENSIONS.RUST]: 'rust',
258
+ [FILE_EXTENSIONS.HTML]: 'html',
259
+ [FILE_EXTENSIONS.CSS]: 'css',
260
+ [FILE_EXTENSIONS.SCSS]: 'scss',
261
+ [FILE_EXTENSIONS.JSON]: 'json',
262
+ [FILE_EXTENSIONS.YAML]: 'yaml',
263
+ [FILE_EXTENSIONS.YAML_ALT]: 'yaml',
264
+ [FILE_EXTENSIONS.MARKDOWN]: 'markdown',
265
+ [FILE_EXTENSIONS.XML]: 'xml',
266
+ [FILE_EXTENSIONS.SQL]: 'sql'
267
+ };
268
+
269
+ // File Icons
270
+ const FILE_ICONS = {
271
+ [FILE_EXTENSIONS.JAVASCRIPT]: '📜',
272
+ [FILE_EXTENSIONS.JSX]: '⚛️',
273
+ [FILE_EXTENSIONS.TYPESCRIPT]: '📘',
274
+ [FILE_EXTENSIONS.TSX]: '⚛️',
275
+ [FILE_EXTENSIONS.PYTHON]: '🐍',
276
+ [FILE_EXTENSIONS.JAVA]: '☕',
277
+ [FILE_EXTENSIONS.HTML]: '🌐',
278
+ [FILE_EXTENSIONS.CSS]: '🎨',
279
+ [FILE_EXTENSIONS.JSON]: '📋',
280
+ [FILE_EXTENSIONS.MARKDOWN]: '📝',
281
+ [FILE_EXTENSIONS.YAML]: '⚙️',
282
+ [FILE_EXTENSIONS.YAML_ALT]: '⚙️',
283
+ DEFAULT: '📄'
284
+ };
285
+
286
+ // Context Icons
287
+ const CONTEXT_ICONS = {
288
+ [CONTEXT_REFERENCE_TYPES.FILE]: '📄',
289
+ [CONTEXT_REFERENCE_TYPES.COMPONENT]: '🔧',
290
+ [CONTEXT_REFERENCE_TYPES.SELECTION]: '✂️',
291
+ [CONTEXT_REFERENCE_TYPES.DIRECTORY]: '📁',
292
+ DEFAULT: '📎'
293
+ };
294
+
295
+ // State File Names
296
+ const STATE_FILES = {
297
+ PROJECT_STATE: 'project-state.json',
298
+ AGENT_INDEX: 'agent-index.json',
299
+ CONVERSATION_INDEX: 'conversation-index.json',
300
+ LAST_SESSION: 'last-session.json',
301
+ CONTEXT_REFERENCES: 'context-references.json',
302
+ ASYNC_OPERATIONS: 'operations/async-operations.json',
303
+ PAUSED_AGENTS: 'operations/paused-agents.json',
304
+ TOOL_HISTORY: 'operations/tool-history.json',
305
+ MODEL_ROUTER_CACHE: 'models/model-router-cache.json',
306
+ ERROR_RECOVERY_LOG: 'models/error-recovery-log.json'
307
+ };
308
+
309
+ // State Directory Structure
310
+ const STATE_DIRECTORIES = {
311
+ ROOT: '.loxia-state',
312
+ AGENTS: 'agents',
313
+ OPERATIONS: 'operations',
314
+ MODELS: 'models'
315
+ };
316
+
317
+ // Quality Inspector Configuration
318
+ const QUALITY_INSPECTOR_CONFIG = {
319
+ CHECK_INTERVAL_MESSAGES: 10,
320
+ STUCK_PATTERNS: [
321
+ 'repetitive_commands',
322
+ 'infinite_waiting',
323
+ 'error_loops',
324
+ 'resource_exhaustion'
325
+ ],
326
+ INTERVENTION_THRESHOLD: 3,
327
+ COOLDOWN_PERIOD: 300000 // 5 minutes
328
+ };
329
+
330
+ // Orchestrator Actions
331
+ const ORCHESTRATOR_ACTIONS = {
332
+ CREATE_AGENT: 'create_agent',
333
+ UPDATE_AGENT: 'update_agent',
334
+ DELETE_AGENT: 'delete_agent',
335
+ SEND_MESSAGE: 'send_message',
336
+ LIST_AGENTS: 'list_agents',
337
+ RESUME_SESSION: 'resume_session',
338
+ GET_SESSION_STATE: 'get_session_state',
339
+ PAUSE_AGENT: 'pause_agent',
340
+ RESUME_AGENT: 'resume_agent',
341
+ SWITCH_MODEL: 'switch_model',
342
+ GET_AGENT_STATUS: 'get_agent_status',
343
+ GET_AGENT_CONVERSATIONS: 'get_agent_conversations'
344
+ };
345
+
346
+ // Message Types
347
+ const MESSAGE_TYPES = {
348
+ AGENT_NOTIFICATION: 'agent_notification',
349
+ AGENT_REDIRECT: 'agent_redirect',
350
+ TOOL_COMPLETION: 'tool_completion',
351
+ SYSTEM_MESSAGE: 'system_message',
352
+ AGENT_COMMUNICATION: 'agent_communication' // Inter-agent messages
353
+ };
354
+
355
+ // Inter-Agent Message Processing Configuration
356
+ const INTER_AGENT_MESSAGE = {
357
+ // Processing priorities
358
+ PRIORITY: {
359
+ LOW: 'low',
360
+ NORMAL: 'normal',
361
+ HIGH: 'high',
362
+ URGENT: 'urgent'
363
+ },
364
+
365
+ // Processing delays (in milliseconds) - avoid magic numbers
366
+ PROCESSING_DELAY: {
367
+ IMMEDIATE: 0, // Process immediately
368
+ SHORT: 500, // Half second delay
369
+ NORMAL: 2000, // 2 seconds delay
370
+ LONG: 5000 // 5 seconds delay
371
+ },
372
+
373
+ // Queue and processing limits
374
+ MAX_QUEUE_SIZE: 100, // Maximum messages in queue per agent
375
+ MAX_PROCESSING_RETRIES: 3, // Maximum retry attempts
376
+ PROCESSING_TIMEOUT: 30000, // 30 seconds timeout for processing
377
+
378
+ // Auto-response configuration
379
+ AUTO_RESPONSE_ENABLED: true, // Enable automatic responses
380
+ REQUIRE_AGENT_MODE: false, // If true, only respond in AGENT mode
381
+ PRESERVE_CONTEXT: true // Maintain conversation context during response
382
+ };
383
+
384
+ // Agent Redirect Attributes
385
+ const AGENT_REDIRECT_ATTRIBUTES = {
386
+ URGENT: 'urgent',
387
+ REQUIRES_RESPONSE: 'requiresResponse',
388
+ CONTEXT: 'context'
389
+ };
390
+
391
+ // Budget and usage tracking constants
392
+ const BUDGET_LIMITS = {
393
+ DAILY: 10.00, // $10 per day default
394
+ WEEKLY: 50.00, // $50 per week default
395
+ MONTHLY: 200.00 // $200 per month default
396
+ };
397
+
398
+ const COST_PER_TOKEN = {
399
+ [MODELS.ANTHROPIC_SONNET]: {
400
+ input: 0.000003, // $3 per 1M input tokens
401
+ output: 0.000015 // $15 per 1M output tokens
402
+ },
403
+ [MODELS.ANTHROPIC_OPUS]: {
404
+ input: 0.000015, // $15 per 1M input tokens
405
+ output: 0.000075 // $75 per 1M output tokens
406
+ },
407
+ [MODELS.ANTHROPIC_HAIKU]: {
408
+ input: 0.00000025, // $0.25 per 1M input tokens
409
+ output: 0.00000125 // $1.25 per 1M output tokens
410
+ },
411
+ [MODELS.GPT_4]: {
412
+ input: 0.000030, // $30 per 1M input tokens
413
+ output: 0.000060 // $60 per 1M output tokens
414
+ },
415
+ [MODELS.GPT_4_MINI]: {
416
+ input: 0.000000150, // $0.15 per 1M input tokens
417
+ output: 0.000000600 // $0.60 per 1M output tokens
418
+ },
419
+ [MODELS.DEEPSEEK_R1]: {
420
+ input: 0.000014, // $14 per 1M input tokens
421
+ output: 0.000028 // $28 per 1M output tokens
422
+ },
423
+ [MODELS.PHI_4]: {
424
+ input: 0.000010, // $10 per 1M input tokens
425
+ output: 0.000020 // $20 per 1M output tokens
426
+ }
427
+ };
428
+
429
+ const USAGE_ALERTS = {
430
+ THRESHOLDS: [50, 75, 90, 100], // Percentage thresholds for alerts
431
+ COOLDOWN_PERIOD: 3600000 // 1 hour cooldown between alerts
432
+ };
433
+
434
+ // WebSocket Events
435
+ const WS_EVENTS = {
436
+ HANDSHAKE: 'handshake',
437
+ HANDSHAKE_ACK: 'handshake_ack',
438
+ MESSAGE_RECEIVED: 'message_received',
439
+ AGENT_UPDATED: 'agent_updated',
440
+ TYPING_START: 'typing_start',
441
+ TYPING_STOP: 'typing_stop',
442
+ NOTIFICATION: 'notification',
443
+ ERROR: 'error'
444
+ };
445
+
446
+ // Connection Status
447
+ const CONNECTION_STATUS = {
448
+ CONNECTED: 'connected',
449
+ CONNECTING: 'connecting',
450
+ DISCONNECTED: 'disconnected',
451
+ ERROR: 'error'
452
+ };
453
+
454
+ // Themes
455
+ const THEMES = {
456
+ LIGHT: 'light',
457
+ DARK: 'dark',
458
+ SYSTEM: 'system'
459
+ };
460
+
461
+ // Notification Types
462
+ const NOTIFICATION_TYPES = {
463
+ INFO: 'info',
464
+ SUCCESS: 'success',
465
+ WARNING: 'warning',
466
+ ERROR: 'error'
467
+ };
468
+
469
+ // Orchestrator Status
470
+ const ORCHESTRATOR_STATUS = {
471
+ INITIALIZING: 'initializing',
472
+ RUNNING: 'running',
473
+ PAUSED: 'paused',
474
+ ERROR: 'error',
475
+ STOPPED: 'stopped'
476
+ };
477
+
478
+ // Static Code Analysis Constants
479
+ const STATIC_ANALYSIS = {
480
+ // Error severities
481
+ SEVERITY: {
482
+ CRITICAL: 'critical',
483
+ ERROR: 'error',
484
+ WARNING: 'warning',
485
+ INFO: 'info',
486
+ SUGGESTION: 'suggestion'
487
+ },
488
+
489
+ // Error categories
490
+ CATEGORY: {
491
+ SYNTAX: 'syntax',
492
+ TYPE: 'type',
493
+ IMPORT: 'import',
494
+ STYLE: 'style',
495
+ SECURITY: 'security',
496
+ PERFORMANCE: 'performance',
497
+ BEST_PRACTICE: 'best_practice'
498
+ },
499
+
500
+ // Supported languages
501
+ LANGUAGE: {
502
+ JAVASCRIPT: 'javascript',
503
+ TYPESCRIPT: 'typescript',
504
+ PYTHON: 'python',
505
+ CSS: 'css',
506
+ SCSS: 'scss',
507
+ LESS: 'less',
508
+ GO: 'go',
509
+ JAVA: 'java',
510
+ CSHARP: 'csharp',
511
+ RUBY: 'ruby',
512
+ PHP: 'php',
513
+ RUST: 'rust',
514
+ CPP: 'cpp',
515
+ C: 'c'
516
+ },
517
+
518
+ // File extension to language mapping
519
+ EXTENSION_TO_LANGUAGE: {
520
+ '.js': 'javascript',
521
+ '.jsx': 'javascript',
522
+ '.mjs': 'javascript',
523
+ '.cjs': 'javascript',
524
+ '.ts': 'typescript',
525
+ '.tsx': 'typescript',
526
+ '.py': 'python',
527
+ '.css': 'css',
528
+ '.scss': 'scss',
529
+ '.sass': 'scss',
530
+ '.less': 'less',
531
+ '.go': 'go',
532
+ '.java': 'java',
533
+ '.cs': 'csharp',
534
+ '.rb': 'ruby',
535
+ '.php': 'php',
536
+ '.rs': 'rust',
537
+ '.cpp': 'cpp',
538
+ '.cc': 'cpp',
539
+ '.cxx': 'cpp',
540
+ '.c': 'c',
541
+ '.h': 'c',
542
+ '.hpp': 'cpp'
543
+ },
544
+
545
+ // Framework manifest files
546
+ FRAMEWORK_MANIFESTS: {
547
+ JAVASCRIPT: 'package.json',
548
+ PYTHON: 'requirements.txt',
549
+ PYTHON_POETRY: 'pyproject.toml',
550
+ PYTHON_PIPENV: 'Pipfile',
551
+ GO: 'go.mod',
552
+ JAVA_MAVEN: 'pom.xml',
553
+ JAVA_GRADLE: 'build.gradle',
554
+ RUBY: 'Gemfile',
555
+ PHP: 'composer.json',
556
+ RUST: 'Cargo.toml',
557
+ CSHARP: '*.csproj'
558
+ },
559
+
560
+ // JavaScript/TypeScript frameworks
561
+ JS_FRAMEWORKS: {
562
+ REACT: 'react',
563
+ VUE: 'vue',
564
+ ANGULAR: '@angular/core',
565
+ SVELTE: 'svelte',
566
+ NEXT: 'next',
567
+ NUXT: 'nuxt',
568
+ EXPRESS: 'express',
569
+ NEST: '@nestjs/core',
570
+ FASTIFY: 'fastify',
571
+ KOA: 'koa'
572
+ },
573
+
574
+ // Python frameworks
575
+ PYTHON_FRAMEWORKS: {
576
+ DJANGO: 'django',
577
+ FLASK: 'flask',
578
+ FASTAPI: 'fastapi',
579
+ TORNADO: 'tornado',
580
+ PYRAMID: 'pyramid',
581
+ BOTTLE: 'bottle'
582
+ },
583
+
584
+ // Analysis settings
585
+ MAX_FILE_SIZE_FOR_ANALYSIS: 5242880, // 5MB
586
+ MAX_FILES_PER_BATCH: 100,
587
+ ANALYSIS_TIMEOUT: 60000, // 60 seconds per file
588
+ ENABLE_CACHE: true,
589
+ CACHE_DURATION: 300000 // 5 minutes
590
+ };
591
+
592
+ // Conversation Compactization Configuration
593
+ const COMPACTION_CONFIG = {
594
+ // Thresholds and triggers
595
+ DEFAULT_THRESHOLD: 0.8, // 80% of context window
596
+ MIN_THRESHOLD: 0.5, // Minimum allowed threshold (50%)
597
+ MAX_THRESHOLD: 0.95, // Maximum allowed threshold (95%)
598
+
599
+ // Segment percentages for sandwich strategy
600
+ BEGINNING_SEGMENT_PERCENTAGE: 0.15, // 15% from start
601
+ END_SEGMENT_PERCENTAGE: 0.35, // 35% from end
602
+ // Middle segment is the remainder (50%)
603
+
604
+ // Segment percentages for truncation strategy (model switching)
605
+ TRUNCATION_BEGINNING_PERCENTAGE: 0.30, // 30% from start
606
+ TRUNCATION_END_PERCENTAGE: 0.50, // 50% from end
607
+ // 20% gap is intentional for safety margin
608
+
609
+ // Model selection for compactization
610
+ COMPACTION_MODEL: 'azure-openai-o4-mini', // Primary: High token capacity (100k)
611
+ COMPACTION_MODEL_FALLBACKS: [
612
+ 'azure-openai-gpt-5-mini', // Fallback 1: GPT-5 mini variant
613
+ 'azure-openai-gpt4-1-mini', // Fallback 2: GPT-4.1 mini variant
614
+ 'azure-openai-gpt-5' // Fallback 3: Full GPT-5 model
615
+ ],
616
+
617
+ // Token limits for compaction operations
618
+ MAX_SUMMARY_TOKENS: 4000, // Max tokens for summary generation
619
+ MIN_MESSAGES_FOR_COMPACTION: 10, // Don't compact tiny conversations
620
+
621
+ // Retry configuration
622
+ MAX_RETRY_ATTEMPTS: 2, // Original attempt + 1 retry
623
+ RETRY_DELAY_MS: 2000, // 2 seconds between retries
624
+
625
+ // Aggressive compaction (for retry)
626
+ AGGRESSIVE_BEGINNING_PERCENTAGE: 0.10, // 10% from start on retry
627
+ AGGRESSIVE_END_PERCENTAGE: 0.30, // 30% from end on retry
628
+
629
+ // Token estimation
630
+ CHARS_PER_TOKEN_ESTIMATE: 4, // Rough estimate: 1 token ≈ 4 characters
631
+ TOKEN_COUNT_CACHE_TTL_MS: 60000, // Cache token counts for 1 minute
632
+
633
+ // Separator message
634
+ COMPACTION_SEPARATOR_MESSAGE: '⋯⋯⋯ [Conversation history truncated here - middle section removed to fit context window] ⋯⋯⋯',
635
+ COMPACTION_SUMMARY_PREFIX: '[CONVERSATION SUMMARY',
636
+ COMPACTION_SUMMARY_SUFFIX: '[END SUMMARY]',
637
+
638
+ // Timeouts
639
+ COMPACTION_TIMEOUT_MS: 30000, // 30 seconds max for compaction
640
+
641
+ // Quality validation
642
+ MIN_REDUCTION_PERCENTAGE: 10, // Compaction must reduce by at least 10%
643
+ MAX_ACCEPTABLE_TOKEN_COUNT_AFTER: 0.85, // After compaction, should be below 85% of context
644
+ };
645
+
646
+ // Compaction strategies
647
+ const COMPACTION_STRATEGIES = {
648
+ SUMMARIZATION: 'summarization', // Intelligent AI-based summarization (same model)
649
+ TRUNCATION: 'truncation', // Fast extraction-based (model switching)
650
+ AGGRESSIVE: 'aggressive', // More aggressive summarization (retry scenario)
651
+ };
652
+
653
+ // Compaction status for UI feedback
654
+ const COMPACTION_STATUS = {
655
+ IDLE: 'idle',
656
+ STARTING: 'starting',
657
+ IN_PROGRESS: 'in-progress',
658
+ COMPLETED: 'completed',
659
+ FAILED: 'failed',
660
+ RETRYING: 'retrying',
661
+ };
662
+
663
+ // Token counting modes
664
+ const TOKEN_COUNTING_MODES = {
665
+ ACCURATE: 'accurate', // Use tiktoken (slower, accurate)
666
+ ESTIMATED: 'estimated', // Character-based estimation (fast, approximate)
667
+ CACHED: 'cached', // Use cached value if available
668
+ };
669
+
670
+ // Version
671
+ const SYSTEM_VERSION = '1.0.0';
672
+
673
+ // Export all constants using ES module syntax
674
+ export {
675
+ SYSTEM_DEFAULTS,
676
+ MODEL_ROUTER_CONFIG,
677
+ INTERFACE_TYPES,
678
+ AGENT_TYPES,
679
+ AGENT_STATUS,
680
+ AGENT_MODES,
681
+ AGENT_MODE_STATES,
682
+ MESSAGE_MODES,
683
+ MESSAGE_ROLES,
684
+ CONTEXT_REFERENCE_TYPES,
685
+ TOOL_STATUS,
686
+ OPERATION_STATUS,
687
+ CONVERSATION_STATUS,
688
+ ERROR_TYPES,
689
+ HTTP_STATUS,
690
+ MODEL_PROVIDERS,
691
+ MODELS,
692
+ PLATFORM_MODELS,
693
+ DIRECT_MODELS,
694
+ MODEL_FORMAT_VERSIONS,
695
+ MODEL_ROUTING,
696
+ TOOL_NAMES,
697
+ FILE_EXTENSIONS,
698
+ LANGUAGE_MAPPING,
699
+ FILE_ICONS,
700
+ CONTEXT_ICONS,
701
+ STATE_FILES,
702
+ STATE_DIRECTORIES,
703
+ QUALITY_INSPECTOR_CONFIG,
704
+ ORCHESTRATOR_ACTIONS,
705
+ MESSAGE_TYPES,
706
+ INTER_AGENT_MESSAGE,
707
+ AGENT_REDIRECT_ATTRIBUTES,
708
+ BUDGET_LIMITS,
709
+ COST_PER_TOKEN,
710
+ USAGE_ALERTS,
711
+ WS_EVENTS,
712
+ CONNECTION_STATUS,
713
+ THEMES,
714
+ NOTIFICATION_TYPES,
715
+ ORCHESTRATOR_STATUS,
716
+ STATIC_ANALYSIS,
717
+ COMPACTION_CONFIG,
718
+ COMPACTION_STRATEGIES,
719
+ COMPACTION_STATUS,
720
+ TOKEN_COUNTING_MODES,
721
+ SYSTEM_VERSION
722
+ };