@mxf-dev/core 1.0.1 → 2.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.
- package/README.md +18 -0
- package/dist/adapters/FrameworkAdapter.js +1 -1
- package/dist/adapters/FrameworkAdapter.js.map +1 -1
- package/dist/config/ConfigManager.d.ts +9 -8
- package/dist/config/ConfigManager.d.ts.map +1 -1
- package/dist/config/ConfigManager.js +47 -17
- package/dist/config/ConfigManager.js.map +1 -1
- package/dist/config/memory-strata.config.d.ts +25 -0
- package/dist/config/memory-strata.config.d.ts.map +1 -0
- package/dist/config/memory-strata.config.js +107 -0
- package/dist/config/memory-strata.config.js.map +1 -0
- package/dist/constants/ToolNames.d.ts +1 -29
- package/dist/constants/ToolNames.d.ts.map +1 -1
- package/dist/constants/ToolNames.js +4 -17
- package/dist/constants/ToolNames.js.map +1 -1
- package/dist/database/DatabaseAdapterFactory.d.ts +14 -2
- package/dist/database/DatabaseAdapterFactory.d.ts.map +1 -1
- package/dist/database/DatabaseAdapterFactory.js +21 -6
- package/dist/database/DatabaseAdapterFactory.js.map +1 -1
- package/dist/database/adapters/mongodb/MongoBaseRepository.d.ts +7 -1
- package/dist/database/adapters/mongodb/MongoBaseRepository.d.ts.map +1 -1
- package/dist/database/adapters/mongodb/MongoBaseRepository.js +12 -2
- package/dist/database/adapters/mongodb/MongoBaseRepository.js.map +1 -1
- package/dist/events/ClientEventBus.d.ts +16 -77
- package/dist/events/ClientEventBus.d.ts.map +1 -1
- package/dist/events/ClientEventBus.js +38 -311
- package/dist/events/ClientEventBus.js.map +1 -1
- package/dist/events/EventBus.d.ts +1 -1
- package/dist/events/EventBus.d.ts.map +1 -1
- package/dist/events/EventBus.js +5 -4
- package/dist/events/EventBus.js.map +1 -1
- package/dist/events/EventBusBase.d.ts +139 -34
- package/dist/events/EventBusBase.d.ts.map +1 -1
- package/dist/events/EventBusBase.js +366 -88
- package/dist/events/EventBusBase.js.map +1 -1
- package/dist/events/EventNames.d.ts +10 -1
- package/dist/events/EventNames.d.ts.map +1 -1
- package/dist/events/EventNames.js +3 -0
- package/dist/events/EventNames.js.map +1 -1
- package/dist/events/PublicEvents.d.ts +6 -2
- package/dist/events/PublicEvents.d.ts.map +1 -1
- package/dist/events/PublicEvents.js +7 -4
- package/dist/events/PublicEvents.js.map +1 -1
- package/dist/events/ServerEventBus.d.ts +23 -112
- package/dist/events/ServerEventBus.d.ts.map +1 -1
- package/dist/events/ServerEventBus.js +58 -323
- package/dist/events/ServerEventBus.js.map +1 -1
- package/dist/events/event-definitions/LlmBudgetEvents.d.ts +68 -0
- package/dist/events/event-definitions/LlmBudgetEvents.d.ts.map +1 -0
- package/dist/events/event-definitions/LlmBudgetEvents.js +35 -0
- package/dist/events/event-definitions/LlmBudgetEvents.js.map +1 -0
- package/dist/interfaces/IMemoryPersistence.d.ts +41 -0
- package/dist/interfaces/IMemoryPersistence.d.ts.map +1 -0
- package/dist/interfaces/IMemoryPersistence.js +15 -0
- package/dist/interfaces/IMemoryPersistence.js.map +1 -0
- package/dist/middleware/MxpMiddleware.d.ts +8 -1
- package/dist/middleware/MxpMiddleware.d.ts.map +1 -1
- package/dist/middleware/MxpMiddleware.js +42 -20
- package/dist/middleware/MxpMiddleware.js.map +1 -1
- package/dist/models/channelKey.d.ts +1 -0
- package/dist/models/channelKey.d.ts.map +1 -1
- package/dist/models/channelKey.js +5 -0
- package/dist/models/channelKey.js.map +1 -1
- package/dist/models/memoryUtility.d.ts +39 -0
- package/dist/models/memoryUtility.d.ts.map +1 -0
- package/dist/models/memoryUtility.js +39 -0
- package/dist/models/memoryUtility.js.map +1 -0
- package/dist/models/user.d.ts.map +1 -1
- package/dist/models/user.js +23 -1
- package/dist/models/user.js.map +1 -1
- package/dist/mxp/BinaryProtocolLayer.d.ts +24 -8
- package/dist/mxp/BinaryProtocolLayer.d.ts.map +1 -1
- package/dist/mxp/BinaryProtocolLayer.js +90 -103
- package/dist/mxp/BinaryProtocolLayer.js.map +1 -1
- package/dist/mxp/ContextCompressionEngine.d.ts +57 -10
- package/dist/mxp/ContextCompressionEngine.d.ts.map +1 -1
- package/dist/mxp/ContextCompressionEngine.js +170 -128
- package/dist/mxp/ContextCompressionEngine.js.map +1 -1
- package/dist/mxp/MxpTokenOptimizer.d.ts +7 -3
- package/dist/mxp/MxpTokenOptimizer.d.ts.map +1 -1
- package/dist/mxp/MxpTokenOptimizer.js +8 -5
- package/dist/mxp/MxpTokenOptimizer.js.map +1 -1
- package/dist/prompts/MxfAgentSystemPrompt.d.ts +1 -1
- package/dist/prompts/MxfAgentSystemPrompt.d.ts.map +1 -1
- package/dist/prompts/MxfAgentSystemPrompt.js +47 -57
- package/dist/prompts/MxfAgentSystemPrompt.js.map +1 -1
- package/dist/protocols/mcp/ToolError.d.ts +123 -0
- package/dist/protocols/mcp/ToolError.d.ts.map +1 -0
- package/dist/protocols/mcp/ToolError.js +108 -0
- package/dist/protocols/mcp/ToolError.js.map +1 -0
- package/dist/protocols/mcp/defineTool.d.ts +133 -0
- package/dist/protocols/mcp/defineTool.d.ts.map +1 -0
- package/dist/protocols/mcp/defineTool.js +236 -0
- package/dist/protocols/mcp/defineTool.js.map +1 -0
- package/dist/protocols/mcp/security/HttpTargetGuard.d.ts +38 -0
- package/dist/protocols/mcp/security/HttpTargetGuard.d.ts.map +1 -0
- package/dist/protocols/mcp/security/HttpTargetGuard.js +227 -0
- package/dist/protocols/mcp/security/HttpTargetGuard.js.map +1 -0
- package/dist/protocols/mcp/security/McpSecurityGuard.d.ts +9 -1
- package/dist/protocols/mcp/security/McpSecurityGuard.d.ts.map +1 -1
- package/dist/protocols/mcp/security/McpSecurityGuard.js +10 -2
- package/dist/protocols/mcp/security/McpSecurityGuard.js.map +1 -1
- package/dist/protocols/mcp/security/McpToolPolicy.d.ts +81 -0
- package/dist/protocols/mcp/security/McpToolPolicy.d.ts.map +1 -0
- package/dist/protocols/mcp/security/McpToolPolicy.js +202 -0
- package/dist/protocols/mcp/security/McpToolPolicy.js.map +1 -0
- package/dist/protocols/mcp/services/ExternalMcpServerManager.d.ts +51 -18
- package/dist/protocols/mcp/services/ExternalMcpServerManager.d.ts.map +1 -1
- package/dist/protocols/mcp/services/ExternalMcpServerManager.js +256 -283
- package/dist/protocols/mcp/services/ExternalMcpServerManager.js.map +1 -1
- package/dist/protocols/mcp/services/ExternalServerConfigs.d.ts +39 -6
- package/dist/protocols/mcp/services/ExternalServerConfigs.d.ts.map +1 -1
- package/dist/protocols/mcp/services/ExternalServerConfigs.js +76 -18
- package/dist/protocols/mcp/services/ExternalServerConfigs.js.map +1 -1
- package/dist/protocols/mcp/tools/AnalyticsTools.js +1 -1
- package/dist/protocols/mcp/tools/AnalyticsTools.js.map +1 -1
- package/dist/protocols/mcp/tools/CodeAnalysisTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/CodeAnalysisTools.js +15 -0
- package/dist/protocols/mcp/tools/CodeAnalysisTools.js.map +1 -1
- package/dist/protocols/mcp/tools/EffectivenessTools.js +3 -3
- package/dist/protocols/mcp/tools/EffectivenessTools.js.map +1 -1
- package/dist/protocols/mcp/tools/GitTools.d.ts +9 -369
- package/dist/protocols/mcp/tools/GitTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/GitTools.js +222 -517
- package/dist/protocols/mcp/tools/GitTools.js.map +1 -1
- package/dist/protocols/mcp/tools/InfrastructureTools.d.ts +56 -24
- package/dist/protocols/mcp/tools/InfrastructureTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/InfrastructureTools.js +117 -26
- package/dist/protocols/mcp/tools/InfrastructureTools.js.map +1 -1
- package/dist/protocols/mcp/tools/MemorySearchTools.d.ts +0 -3
- package/dist/protocols/mcp/tools/MemorySearchTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/MemorySearchTools.js +58 -1
- package/dist/protocols/mcp/tools/MemorySearchTools.js.map +1 -1
- package/dist/protocols/mcp/tools/OrparTools.d.ts +8 -0
- package/dist/protocols/mcp/tools/OrparTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/OrparTools.js +66 -0
- package/dist/protocols/mcp/tools/OrparTools.js.map +1 -1
- package/dist/protocols/mcp/tools/SafetyTools.d.ts +7 -525
- package/dist/protocols/mcp/tools/SafetyTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/SafetyTools.js +349 -514
- package/dist/protocols/mcp/tools/SafetyTools.js.map +1 -1
- package/dist/protocols/mcp/tools/TaskPlanningTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/TaskPlanningTools.js +56 -26
- package/dist/protocols/mcp/tools/TaskPlanningTools.js.map +1 -1
- package/dist/protocols/mcp/tools/TestTools.d.ts +15 -376
- package/dist/protocols/mcp/tools/TestTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/TestTools.js +241 -363
- package/dist/protocols/mcp/tools/TestTools.js.map +1 -1
- package/dist/protocols/mcp/tools/TypeScriptTools.d.ts +6 -276
- package/dist/protocols/mcp/tools/TypeScriptTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/TypeScriptTools.js +223 -337
- package/dist/protocols/mcp/tools/TypeScriptTools.js.map +1 -1
- package/dist/protocols/mcp/tools/WebTools.d.ts +15 -728
- package/dist/protocols/mcp/tools/WebTools.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/WebTools.js +151 -257
- package/dist/protocols/mcp/tools/WebTools.js.map +1 -1
- package/dist/protocols/mcp/tools/shell/ShellExecuteHandler.d.ts +5 -3
- package/dist/protocols/mcp/tools/shell/ShellExecuteHandler.d.ts.map +1 -1
- package/dist/protocols/mcp/tools/shell/ShellExecuteHandler.js +31 -6
- package/dist/protocols/mcp/tools/shell/ShellExecuteHandler.js.map +1 -1
- package/dist/schemas/EventPayloadSchema.d.ts +21 -0
- package/dist/schemas/EventPayloadSchema.d.ts.map +1 -1
- package/dist/schemas/EventPayloadSchema.js +14 -0
- package/dist/schemas/EventPayloadSchema.js.map +1 -1
- package/dist/services/BackgroundTaskManager.d.ts.map +1 -1
- package/dist/services/BackgroundTaskManager.js +12 -4
- package/dist/services/BackgroundTaskManager.js.map +1 -1
- package/dist/services/BrowserManager.d.ts +1 -1
- package/dist/services/BrowserManager.d.ts.map +1 -1
- package/dist/services/BrowserManager.js +26 -3
- package/dist/services/BrowserManager.js.map +1 -1
- package/dist/services/MemoryCompressor.d.ts +11 -2
- package/dist/services/MemoryCompressor.d.ts.map +1 -1
- package/dist/services/MemoryCompressor.js +8 -26
- package/dist/services/MemoryCompressor.js.map +1 -1
- package/dist/services/MemoryService.d.ts +16 -3
- package/dist/services/MemoryService.d.ts.map +1 -1
- package/dist/services/MemoryService.js +79 -55
- package/dist/services/MemoryService.js.map +1 -1
- package/dist/services/MxfMLService.d.ts +5 -0
- package/dist/services/MxfMLService.d.ts.map +1 -1
- package/dist/services/MxfMLService.js +32 -6
- package/dist/services/MxfMLService.js.map +1 -1
- package/dist/services/PredictiveAnalyticsService.d.ts +45 -9
- package/dist/services/PredictiveAnalyticsService.d.ts.map +1 -1
- package/dist/services/PredictiveAnalyticsService.js +82 -44
- package/dist/services/PredictiveAnalyticsService.js.map +1 -1
- package/dist/services/QValueManager.d.ts +7 -0
- package/dist/services/QValueManager.d.ts.map +1 -1
- package/dist/services/QValueManager.js +9 -0
- package/dist/services/QValueManager.js.map +1 -1
- package/dist/services/RewardSignalProcessor.d.ts +38 -1
- package/dist/services/RewardSignalProcessor.d.ts.map +1 -1
- package/dist/services/RewardSignalProcessor.js +109 -7
- package/dist/services/RewardSignalProcessor.js.map +1 -1
- package/dist/services/SharedStateService.d.ts +16 -2
- package/dist/services/SharedStateService.d.ts.map +1 -1
- package/dist/services/SharedStateService.js +44 -3
- package/dist/services/SharedStateService.js.map +1 -1
- package/dist/services/TaskEffectivenessService.d.ts +34 -18
- package/dist/services/TaskEffectivenessService.d.ts.map +1 -1
- package/dist/services/TaskEffectivenessService.js +91 -155
- package/dist/services/TaskEffectivenessService.js.map +1 -1
- package/dist/services/WebSearchService.d.ts.map +1 -1
- package/dist/services/WebSearchService.js.map +1 -1
- package/dist/services/dag/TaskDagService.d.ts.map +1 -1
- package/dist/services/dag/TaskDagService.js +2 -0
- package/dist/services/dag/TaskDagService.js.map +1 -1
- package/dist/services/orpar-memory/OrparMemoryCoordinator.d.ts +7 -0
- package/dist/services/orpar-memory/OrparMemoryCoordinator.d.ts.map +1 -1
- package/dist/services/orpar-memory/OrparMemoryCoordinator.js +71 -10
- package/dist/services/orpar-memory/OrparMemoryCoordinator.js.map +1 -1
- package/dist/types/MemoryUtilityTypes.d.ts +2 -0
- package/dist/types/MemoryUtilityTypes.d.ts.map +1 -1
- package/dist/types/MemoryUtilityTypes.js.map +1 -1
- package/dist/utils/Logger.d.ts +43 -3
- package/dist/utils/Logger.d.ts.map +1 -1
- package/dist/utils/Logger.js +78 -36
- package/dist/utils/Logger.js.map +1 -1
- package/dist/utils/MxpEncryption.d.ts +19 -6
- package/dist/utils/MxpEncryption.d.ts.map +1 -1
- package/dist/utils/MxpEncryption.js +48 -16
- package/dist/utils/MxpEncryption.js.map +1 -1
- package/package.json +19 -4
- package/src/adapters/FrameworkAdapter.ts +1 -1
- package/src/config/ConfigManager.ts +52 -19
- package/src/config/memory-strata.config.ts +136 -0
- package/src/constants/ToolNames.ts +4 -18
- package/src/database/DatabaseAdapterFactory.ts +23 -6
- package/src/database/adapters/mongodb/MongoBaseRepository.ts +16 -2
- package/src/events/ClientEventBus.ts +68 -403
- package/src/events/EventBus.ts +7 -8
- package/src/events/EventBusBase.ts +479 -116
- package/src/events/EventNames.ts +6 -0
- package/src/events/PublicEvents.ts +7 -4
- package/src/events/ServerEventBus.ts +78 -473
- package/src/events/event-definitions/LlmBudgetEvents.ts +74 -0
- package/src/interfaces/IMemoryPersistence.ts +51 -0
- package/src/middleware/MxpMiddleware.ts +51 -24
- package/src/models/channelKey.ts +18 -4
- package/src/models/memoryUtility.ts +64 -0
- package/src/models/user.ts +36 -4
- package/src/mxp/BinaryProtocolLayer.ts +108 -124
- package/src/mxp/ContextCompressionEngine.ts +219 -161
- package/src/mxp/MxpTokenOptimizer.ts +10 -10
- package/src/prompts/MxfAgentSystemPrompt.ts +45 -55
- package/src/protocols/mcp/ToolError.ts +201 -0
- package/src/protocols/mcp/defineTool.ts +379 -0
- package/src/protocols/mcp/security/HttpTargetGuard.ts +267 -0
- package/src/protocols/mcp/security/McpSecurityGuard.ts +10 -3
- package/src/protocols/mcp/security/McpToolPolicy.ts +221 -0
- package/src/protocols/mcp/services/ExternalMcpServerManager.ts +340 -322
- package/src/protocols/mcp/services/ExternalServerConfigs.ts +82 -19
- package/src/protocols/mcp/tools/AnalyticsTools.ts +1 -1
- package/src/protocols/mcp/tools/CodeAnalysisTools.ts +15 -0
- package/src/protocols/mcp/tools/EffectivenessTools.ts +3 -3
- package/src/protocols/mcp/tools/GitTools.ts +290 -569
- package/src/protocols/mcp/tools/InfrastructureTools.ts +189 -43
- package/src/protocols/mcp/tools/MemorySearchTools.ts +77 -1
- package/src/protocols/mcp/tools/OrparTools.ts +87 -0
- package/src/protocols/mcp/tools/SafetyTools.ts +501 -579
- package/src/protocols/mcp/tools/TaskPlanningTools.ts +81 -39
- package/src/protocols/mcp/tools/TestTools.ts +339 -419
- package/src/protocols/mcp/tools/TypeScriptTools.ts +316 -376
- package/src/protocols/mcp/tools/WebTools.ts +209 -307
- package/src/protocols/mcp/tools/shell/ShellExecuteHandler.ts +53 -14
- package/src/schemas/EventPayloadSchema.ts +37 -0
- package/src/services/BackgroundTaskManager.ts +12 -4
- package/src/services/BrowserManager.ts +41 -1
- package/src/services/MemoryCompressor.ts +20 -32
- package/src/services/MemoryService.ts +96 -58
- package/src/services/MxfMLService.ts +41 -7
- package/src/services/PredictiveAnalyticsService.ts +101 -51
- package/src/services/QValueManager.ts +10 -0
- package/src/services/RewardSignalProcessor.ts +138 -9
- package/src/services/SharedStateService.ts +56 -8
- package/src/services/TaskEffectivenessService.ts +114 -187
- package/src/services/WebSearchService.ts +2 -1
- package/src/services/dag/TaskDagService.ts +2 -0
- package/src/services/orpar-memory/OrparMemoryCoordinator.ts +86 -10
- package/src/types/MemoryUtilityTypes.ts +2 -0
- package/src/utils/Logger.ts +116 -40
- package/src/utils/MxpEncryption.ts +69 -34
- package/dist/mxp/MxpEventForwardingEnhancer.d.ts +0 -134
- package/dist/mxp/MxpEventForwardingEnhancer.d.ts.map +0 -1
- package/dist/mxp/MxpEventForwardingEnhancer.js +0 -361
- package/dist/mxp/MxpEventForwardingEnhancer.js.map +0 -1
- package/dist/protocols/mcp/services/ToolSchemaEnhancements.d.ts +0 -56
- package/dist/protocols/mcp/services/ToolSchemaEnhancements.d.ts.map +0 -1
- package/dist/protocols/mcp/services/ToolSchemaEnhancements.js +0 -57
- package/dist/protocols/mcp/services/ToolSchemaEnhancements.js.map +0 -1
- package/dist/protocols/mcp/tools/ControlLoopLifecycle.d.ts +0 -270
- package/dist/protocols/mcp/tools/ControlLoopLifecycle.d.ts.map +0 -1
- package/dist/protocols/mcp/tools/ControlLoopLifecycle.js +0 -256
- package/dist/protocols/mcp/tools/ControlLoopLifecycle.js.map +0 -1
- package/dist/protocols/mcp/tools/LspTools.d.ts +0 -495
- package/dist/protocols/mcp/tools/LspTools.d.ts.map +0 -1
- package/dist/protocols/mcp/tools/LspTools.js +0 -469
- package/dist/protocols/mcp/tools/LspTools.js.map +0 -1
- package/src/mxp/MxpEventForwardingEnhancer.ts +0 -471
- package/src/protocols/mcp/services/ToolSchemaEnhancements.ts +0 -92
- package/src/protocols/mcp/tools/ControlLoopLifecycle.ts +0 -302
- package/src/protocols/mcp/tools/LspTools.ts +0 -476
|
@@ -41,8 +41,19 @@ export class BinaryProtocolLayer {
|
|
|
41
41
|
// Compression thresholds and settings
|
|
42
42
|
compressionThresholds = {
|
|
43
43
|
minSize: 1024, // Only compress messages > 1KB
|
|
44
|
-
brotliThreshold: 10240
|
|
45
|
-
|
|
44
|
+
brotliThreshold: 10240 // Use Brotli for messages > 10KB
|
|
45
|
+
};
|
|
46
|
+
/** Counters for getCompressionStats(). Updated on every encode. */
|
|
47
|
+
stats = {
|
|
48
|
+
totalCompressions: 0,
|
|
49
|
+
totalOriginalBytes: 0,
|
|
50
|
+
totalCompressedBytes: 0,
|
|
51
|
+
algorithmUsage: {
|
|
52
|
+
none: 0,
|
|
53
|
+
gzip: 0,
|
|
54
|
+
brotli: 0,
|
|
55
|
+
msgpack: 0
|
|
56
|
+
}
|
|
46
57
|
};
|
|
47
58
|
constructor() {
|
|
48
59
|
this.logger = new Logger('info', 'BinaryProtocolLayer', 'server');
|
|
@@ -118,6 +129,11 @@ export class BinaryProtocolLayer {
|
|
|
118
129
|
default:
|
|
119
130
|
throw new Error(`Unknown encoding format: ${format}`);
|
|
120
131
|
}
|
|
132
|
+
// Record the measured result so getCompressionStats() reports reality
|
|
133
|
+
this.stats.totalCompressions++;
|
|
134
|
+
this.stats.totalOriginalBytes += originalSize;
|
|
135
|
+
this.stats.totalCompressedBytes += result.compressedSize;
|
|
136
|
+
this.stats.algorithmUsage[result.algorithm]++;
|
|
121
137
|
// Emit compression event for analytics using proper payload creator
|
|
122
138
|
const bandwidthEventPayload = createMxpBandwidthOptimizationEventPayload(Events.Mxp.BANDWIDTH_OPTIMIZATION_COMPLETE, agentId || 'system', channelId, {
|
|
123
139
|
operationId: crypto.randomUUID(),
|
|
@@ -128,72 +144,64 @@ export class BinaryProtocolLayer {
|
|
|
128
144
|
timestamp: Date.now()
|
|
129
145
|
}, { source: 'BinaryProtocolLayer' });
|
|
130
146
|
EventBus.server.emit(Events.Mxp.BANDWIDTH_OPTIMIZATION_COMPLETE, bandwidthEventPayload);
|
|
131
|
-
// format: result.format,
|
|
132
|
-
// algorithm: result.algorithm,
|
|
133
|
-
// originalSize,
|
|
134
|
-
// compressedSize: result.compressedSize,
|
|
135
|
-
// compressionRatio: result.compressionRatio,
|
|
136
|
-
// bandwidthSaved: originalSize - result.compressedSize
|
|
137
|
-
// });
|
|
138
147
|
return result;
|
|
139
148
|
}
|
|
140
149
|
catch (error) {
|
|
150
|
+
const message_ = error instanceof Error ? error.message : String(error);
|
|
141
151
|
this.logger.error('Message encoding failed', {
|
|
142
|
-
error:
|
|
152
|
+
error: message_,
|
|
143
153
|
channelId,
|
|
144
154
|
messageType: message.type
|
|
145
155
|
});
|
|
146
|
-
//
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
return {
|
|
150
|
-
data: originalBuffer,
|
|
151
|
-
format: 'json',
|
|
152
|
-
algorithm: 'none',
|
|
153
|
-
originalSize: originalBuffer.length,
|
|
154
|
-
compressedSize: originalBuffer.length,
|
|
155
|
-
compressionRatio: 1.0
|
|
156
|
-
};
|
|
156
|
+
// No silent fallback to plain JSON: the caller asked for an encoded
|
|
157
|
+
// message and must find out that it did not get one.
|
|
158
|
+
throw new Error(`Binary protocol encoding failed for '${message.type}': ${message_}`);
|
|
157
159
|
}
|
|
158
160
|
}
|
|
159
161
|
/**
|
|
160
|
-
* Decode
|
|
162
|
+
* Decode an encoded message back to its original form.
|
|
163
|
+
*
|
|
164
|
+
* @throws If the payload cannot be decoded. A corrupt message is an error,
|
|
165
|
+
* not an empty result.
|
|
161
166
|
*/
|
|
162
167
|
decodeMessage(compressedData) {
|
|
163
168
|
try {
|
|
164
|
-
let message;
|
|
165
169
|
switch (compressedData.format) {
|
|
166
|
-
case 'json':
|
|
167
|
-
// Plain JSON
|
|
170
|
+
case 'json': {
|
|
168
171
|
const jsonString = compressedData.data.toString('utf8');
|
|
169
|
-
|
|
170
|
-
|
|
172
|
+
return JSON.parse(jsonString);
|
|
173
|
+
}
|
|
171
174
|
case 'msgpack':
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
break;
|
|
175
|
-
case 'msgpack-compressed':
|
|
176
|
-
// MessagePack + Brotli compression
|
|
175
|
+
return msgpack.decode(compressedData.data);
|
|
176
|
+
case 'msgpack-compressed': {
|
|
177
177
|
const decompressedMsgpack = zlib.brotliDecompressSync(compressedData.data);
|
|
178
|
-
|
|
179
|
-
|
|
178
|
+
return msgpack.decode(decompressedMsgpack);
|
|
179
|
+
}
|
|
180
180
|
default:
|
|
181
181
|
throw new Error(`Unknown encoding format: ${compressedData.format}`);
|
|
182
182
|
}
|
|
183
|
-
// ;
|
|
184
|
-
return message;
|
|
185
183
|
}
|
|
186
184
|
catch (error) {
|
|
185
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
187
186
|
this.logger.error('Message decoding failed', {
|
|
188
|
-
error:
|
|
187
|
+
error: message,
|
|
189
188
|
format: compressedData.format,
|
|
190
189
|
algorithm: compressedData.algorithm
|
|
191
190
|
});
|
|
192
|
-
|
|
191
|
+
throw new Error(`Binary protocol decoding failed (${compressedData.format}): ${message}`);
|
|
193
192
|
}
|
|
194
193
|
}
|
|
195
194
|
/**
|
|
196
|
-
*
|
|
195
|
+
* Encode a group of messages as one or more batches.
|
|
196
|
+
*
|
|
197
|
+
* Batches that exceed maxBatchSize are split in half recursively until each
|
|
198
|
+
* part fits, and EVERY part is returned. An earlier version encoded only the
|
|
199
|
+
* first half and discarded the rest, silently losing messages.
|
|
200
|
+
*
|
|
201
|
+
* @returns One CompressionResult per batch, or null when bandwidth
|
|
202
|
+
* optimization is disabled or there is nothing to send.
|
|
203
|
+
* @throws If a batch cannot be encoded, or a single message is too large to
|
|
204
|
+
* fit in maxBatchSize on its own.
|
|
197
205
|
*/
|
|
198
206
|
batchEncode(messages, channelId, agentId, options = {}) {
|
|
199
207
|
this.validator.assertIsArray(messages, 'Messages must be an array');
|
|
@@ -206,46 +214,35 @@ export class BinaryProtocolLayer {
|
|
|
206
214
|
return null;
|
|
207
215
|
}
|
|
208
216
|
const maxBatchSize = options.maxBatchSize || 32768; // 32KB default
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
compressionLevel: options.compressionLevel || 'standard'
|
|
222
|
-
}
|
|
223
|
-
};
|
|
224
|
-
// Check if batch exceeds size limit
|
|
225
|
-
const batchJson = JSON.stringify(batchMessage);
|
|
226
|
-
const batchBuffer = Buffer.from(batchJson, 'utf8');
|
|
227
|
-
if (batchBuffer.length > maxBatchSize) {
|
|
228
|
-
this.logger.warn(`Batch size ${batchBuffer.length} exceeds limit ${maxBatchSize}, splitting`);
|
|
229
|
-
// Split into smaller batches (recursive approach)
|
|
230
|
-
const midpoint = Math.floor(messages.length / 2);
|
|
231
|
-
const firstHalf = messages.slice(0, midpoint);
|
|
232
|
-
const secondHalf = messages.slice(midpoint);
|
|
233
|
-
// Process first half only for now (in full implementation would handle both)
|
|
234
|
-
return this.batchEncode(firstHalf, channelId, agentId, options);
|
|
235
|
-
}
|
|
236
|
-
// Compress the batch
|
|
237
|
-
const compressionResult = this.encodeMessage(batchMessage, channelId, agentId);
|
|
238
|
-
if (compressionResult) {
|
|
217
|
+
// Create batch envelope
|
|
218
|
+
const batchMessage = {
|
|
219
|
+
type: 'mxp_batch',
|
|
220
|
+
payload: {
|
|
221
|
+
version: '2.0',
|
|
222
|
+
messageCount: messages.length,
|
|
223
|
+
messages: messages
|
|
224
|
+
},
|
|
225
|
+
metadata: {
|
|
226
|
+
batchId: `batch_${uuidv4()}`,
|
|
227
|
+
timestamp: Date.now(),
|
|
228
|
+
compressionLevel: options.compressionLevel || 'standard'
|
|
239
229
|
}
|
|
240
|
-
|
|
230
|
+
};
|
|
231
|
+
// Check if batch exceeds size limit
|
|
232
|
+
const batchBuffer = Buffer.from(JSON.stringify(batchMessage), 'utf8');
|
|
233
|
+
if (batchBuffer.length <= maxBatchSize) {
|
|
234
|
+
const encoded = this.encodeMessage(batchMessage, channelId, agentId);
|
|
235
|
+
return encoded ? [encoded] : null;
|
|
241
236
|
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
messageCount: messages.length
|
|
246
|
-
});
|
|
247
|
-
return null;
|
|
237
|
+
if (messages.length === 1) {
|
|
238
|
+
throw new Error(`Message '${messages[0].type}' is ${batchBuffer.length} bytes, which exceeds the ` +
|
|
239
|
+
`maximum batch size of ${maxBatchSize} bytes and cannot be split further.`);
|
|
248
240
|
}
|
|
241
|
+
this.logger.warn(`Batch size ${batchBuffer.length} exceeds limit ${maxBatchSize}, splitting`);
|
|
242
|
+
const midpoint = Math.floor(messages.length / 2);
|
|
243
|
+
const firstHalf = this.batchEncode(messages.slice(0, midpoint), channelId, agentId, options);
|
|
244
|
+
const secondHalf = this.batchEncode(messages.slice(midpoint), channelId, agentId, options);
|
|
245
|
+
return [...(firstHalf ?? []), ...(secondHalf ?? [])];
|
|
249
246
|
}
|
|
250
247
|
/**
|
|
251
248
|
* Select optimal encoding format based on message characteristics
|
|
@@ -273,40 +270,30 @@ export class BinaryProtocolLayer {
|
|
|
273
270
|
return MxpConfigManager.getInstance().isFeatureEnabled(channelId, 'bandwidthOptimization', agentId);
|
|
274
271
|
}
|
|
275
272
|
/**
|
|
276
|
-
*
|
|
273
|
+
* Compression statistics measured from the encodes this instance performed.
|
|
274
|
+
*
|
|
275
|
+
* averageCompressionRatio is compressedBytes/originalBytes across all
|
|
276
|
+
* encodes (1.0 = no reduction), and is 0 before anything has been encoded.
|
|
277
277
|
*/
|
|
278
278
|
getCompressionStats() {
|
|
279
|
-
|
|
279
|
+
const { totalCompressions, totalOriginalBytes, totalCompressedBytes } = this.stats;
|
|
280
280
|
return {
|
|
281
|
-
totalCompressions
|
|
282
|
-
averageCompressionRatio:
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
'brotli': 0,
|
|
288
|
-
'msgpack': 0
|
|
289
|
-
}
|
|
281
|
+
totalCompressions,
|
|
282
|
+
averageCompressionRatio: totalOriginalBytes > 0
|
|
283
|
+
? totalCompressedBytes / totalOriginalBytes
|
|
284
|
+
: 0,
|
|
285
|
+
totalBandwidthSaved: totalOriginalBytes - totalCompressedBytes,
|
|
286
|
+
algorithmUsage: { ...this.stats.algorithmUsage }
|
|
290
287
|
};
|
|
291
288
|
}
|
|
292
289
|
/**
|
|
293
|
-
*
|
|
294
|
-
* Placeholder for future implementation with Socket.IO streaming
|
|
290
|
+
* Reset the compression counters (used by tests).
|
|
295
291
|
*/
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
}
|
|
301
|
-
// In full implementation, would return Transform stream
|
|
302
|
-
// For now, return configuration object
|
|
303
|
-
return {
|
|
304
|
-
channelId,
|
|
305
|
-
agentId,
|
|
306
|
-
compressionEnabled: true,
|
|
307
|
-
algorithm: 'gzip', // Start with gzip for streaming
|
|
308
|
-
flushInterval: 100 // Flush every 100ms for low latency
|
|
309
|
-
};
|
|
292
|
+
resetCompressionStats() {
|
|
293
|
+
this.stats.totalCompressions = 0;
|
|
294
|
+
this.stats.totalOriginalBytes = 0;
|
|
295
|
+
this.stats.totalCompressedBytes = 0;
|
|
296
|
+
this.stats.algorithmUsage = { none: 0, gzip: 0, brotli: 0, msgpack: 0 };
|
|
310
297
|
}
|
|
311
298
|
}
|
|
312
299
|
// Note: Use BinaryProtocolLayer.getInstance() to get the singleton instance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BinaryProtocolLayer.js","sourceRoot":"","sources":["../../src/mxp/BinaryProtocolLayer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;;GAMG;AAEH,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,0CAA0C,EAAE,MAAM,kCAAkC,CAAC;AAC9F,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,MAAM,MAAM,QAAQ,CAAC;AAsB5B,MAAM,OAAO,mBAAmB;IACpB,MAAM,CAAC,QAAQ,GAA+B,IAAI,CAAC;IAE1C,MAAM,CAAS;IACf,SAAS,GAAG,qBAAqB,CAAC,qBAAqB,CAAC,CAAC;IAE1E,sCAAsC;IACrB,qBAAqB,GAAG;QACrC,OAAO,EAAE,IAAI,EAAO,+BAA+B;QACnD,eAAe,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"BinaryProtocolLayer.js","sourceRoot":"","sources":["../../src/mxp/BinaryProtocolLayer.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,17 +20,25 @@
|
|
|
20
20
|
import { ChannelMessage, AgentMessage } from '../schemas/MessageSchemas.js';
|
|
21
21
|
import { ConversationMessage } from '../interfaces/ConversationMessage.js';
|
|
22
22
|
export interface CompressedContext {
|
|
23
|
+
/** The most recent messages, kept verbatim. */
|
|
23
24
|
recent: any[];
|
|
25
|
+
/** Structured summary standing in for the older messages. Lossy. */
|
|
24
26
|
compressed: string;
|
|
27
|
+
/** Measured token estimate of the messages that were summarized. */
|
|
25
28
|
originalTokens: number;
|
|
29
|
+
/** Measured token estimate of the summary that replaced them. */
|
|
26
30
|
compressedTokens: number;
|
|
31
|
+
/** compressedTokens / originalTokens, measured after the fact. */
|
|
27
32
|
ratio: number;
|
|
33
|
+
/** Reference IDs for context stored instead of summarized. */
|
|
28
34
|
contextReferences: string[];
|
|
29
35
|
}
|
|
30
36
|
export interface CompressionOptions {
|
|
37
|
+
/** Number of recent messages kept verbatim (default: 5). */
|
|
31
38
|
windowSize?: number;
|
|
32
|
-
|
|
39
|
+
/** Terms that must appear in the summary even if no section captured them. */
|
|
33
40
|
preserveKeywords?: string[];
|
|
41
|
+
/** Store large blocks as retrievable references instead of summarizing. */
|
|
34
42
|
useContextReferences?: boolean;
|
|
35
43
|
channelId: string;
|
|
36
44
|
agentId?: string;
|
|
@@ -41,14 +49,25 @@ export declare class ContextCompressionEngine {
|
|
|
41
49
|
private readonly validator;
|
|
42
50
|
private contextCache;
|
|
43
51
|
private readonly maxCacheSize;
|
|
52
|
+
/** Counters for getCompressionStats(). Updated on every compression. */
|
|
53
|
+
private readonly stats;
|
|
44
54
|
private constructor();
|
|
45
55
|
/**
|
|
46
56
|
* Get the singleton instance of ContextCompressionEngine
|
|
47
57
|
*/
|
|
48
58
|
static getInstance(): ContextCompressionEngine;
|
|
49
59
|
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
60
|
+
* Replace older conversation history with a structured summary, keeping the
|
|
61
|
+
* most recent `windowSize` messages verbatim.
|
|
62
|
+
*
|
|
63
|
+
* This is LOSSY: detail in the older messages that no summary section
|
|
64
|
+
* captures is discarded. The returned token counts and ratio are measured,
|
|
65
|
+
* not projected, so the caller can see how much was dropped.
|
|
66
|
+
*
|
|
67
|
+
* @returns null when context compression is disabled for this channel/agent.
|
|
68
|
+
* @throws If summarization fails. There is no "return the recent messages and
|
|
69
|
+
* pretend it worked" path — a caller that thinks it has the earlier
|
|
70
|
+
* context when it does not will act on missing information.
|
|
52
71
|
*/
|
|
53
72
|
compressConversation(messages: (ChannelMessage | AgentMessage)[], options: CompressionOptions): Promise<CompressedContext | null>;
|
|
54
73
|
/**
|
|
@@ -60,16 +79,36 @@ export declare class ContextCompressionEngine {
|
|
|
60
79
|
*/
|
|
61
80
|
getContextByReference(contextId: string): any[] | null;
|
|
62
81
|
/**
|
|
63
|
-
*
|
|
64
|
-
*
|
|
82
|
+
* Drop messages whose content is identical to one already seen.
|
|
83
|
+
*
|
|
84
|
+
* This is an exact-match filter: content is lowercased, stripped of
|
|
85
|
+
* punctuation and repeated whitespace, then hashed. Messages that merely
|
|
86
|
+
* say the same thing in different words are both kept — there is no
|
|
87
|
+
* semantic similarity here, and the method no longer claims otherwise.
|
|
88
|
+
*/
|
|
89
|
+
private removeExactDuplicates;
|
|
90
|
+
/**
|
|
91
|
+
* Summarize messages into a structured digest.
|
|
92
|
+
*
|
|
93
|
+
* Delegates to StructuredSummaryBuilder, which extracts the primary request,
|
|
94
|
+
* key decisions, tool executions, errors, verbatim user directives, and
|
|
95
|
+
* current state. Deterministic, local, and lossy — no model is called.
|
|
96
|
+
*
|
|
97
|
+
* @throws If the summary cannot be built.
|
|
98
|
+
*/
|
|
99
|
+
private summarizeMessages;
|
|
100
|
+
/**
|
|
101
|
+
* Adapt a ChannelMessage/AgentMessage onto the ConversationMessage shape the
|
|
102
|
+
* summary builder consumes.
|
|
65
103
|
*/
|
|
66
|
-
private
|
|
104
|
+
private toConversationMessage;
|
|
67
105
|
/**
|
|
68
|
-
*
|
|
106
|
+
* Pull the text out of the message shapes that flow through the framework.
|
|
107
|
+
* Returns null when there is no readable content.
|
|
69
108
|
*/
|
|
70
|
-
private
|
|
109
|
+
private extractContent;
|
|
71
110
|
/**
|
|
72
|
-
* Normalize message content for
|
|
111
|
+
* Normalize message content for exact-duplicate detection
|
|
73
112
|
*/
|
|
74
113
|
private normalizeContent;
|
|
75
114
|
/**
|
|
@@ -81,7 +120,11 @@ export declare class ContextCompressionEngine {
|
|
|
81
120
|
*/
|
|
82
121
|
shouldApplyCompression(channelId: string, agentId?: string): boolean;
|
|
83
122
|
/**
|
|
84
|
-
*
|
|
123
|
+
* Compression statistics measured from the work this instance actually did.
|
|
124
|
+
*
|
|
125
|
+
* averageCompressionRatio is summarizedTokens/originalTokens across every
|
|
126
|
+
* compression (1.0 = no reduction), and is 0 before anything has been
|
|
127
|
+
* compressed.
|
|
85
128
|
*/
|
|
86
129
|
getCompressionStats(): {
|
|
87
130
|
totalCompressions: number;
|
|
@@ -89,6 +132,10 @@ export declare class ContextCompressionEngine {
|
|
|
89
132
|
cacheSize: number;
|
|
90
133
|
contextReferencesCreated: number;
|
|
91
134
|
};
|
|
135
|
+
/**
|
|
136
|
+
* Reset the compression counters (used by tests).
|
|
137
|
+
*/
|
|
138
|
+
resetCompressionStats(): void;
|
|
92
139
|
/**
|
|
93
140
|
* Clear the context cache (useful for testing or memory management)
|
|
94
141
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContextCompressionEngine.d.ts","sourceRoot":"","sources":["../../src/mxp/ContextCompressionEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"ContextCompressionEngine.d.ts","sourceRoot":"","sources":["../../src/mxp/ContextCompressionEngine.ts"],"names":[],"mappings":"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"}
|