@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
|
@@ -60,15 +60,27 @@ export interface MxpMessage {
|
|
|
60
60
|
|
|
61
61
|
export class BinaryProtocolLayer {
|
|
62
62
|
private static instance: BinaryProtocolLayer | null = null;
|
|
63
|
-
|
|
63
|
+
|
|
64
64
|
private readonly logger: Logger;
|
|
65
65
|
private readonly validator = createStrictValidator('BinaryProtocolLayer');
|
|
66
|
-
|
|
66
|
+
|
|
67
67
|
// Compression thresholds and settings
|
|
68
68
|
private readonly compressionThresholds = {
|
|
69
69
|
minSize: 1024, // Only compress messages > 1KB
|
|
70
|
-
brotliThreshold: 10240
|
|
71
|
-
|
|
70
|
+
brotliThreshold: 10240 // Use Brotli for messages > 10KB
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/** Counters for getCompressionStats(). Updated on every encode. */
|
|
74
|
+
private readonly stats = {
|
|
75
|
+
totalCompressions: 0,
|
|
76
|
+
totalOriginalBytes: 0,
|
|
77
|
+
totalCompressedBytes: 0,
|
|
78
|
+
algorithmUsage: {
|
|
79
|
+
none: 0,
|
|
80
|
+
gzip: 0,
|
|
81
|
+
brotli: 0,
|
|
82
|
+
msgpack: 0
|
|
83
|
+
} as Record<CompressionAlgorithm, number>
|
|
72
84
|
};
|
|
73
85
|
|
|
74
86
|
private constructor() {
|
|
@@ -166,6 +178,12 @@ export class BinaryProtocolLayer {
|
|
|
166
178
|
throw new Error(`Unknown encoding format: ${format}`);
|
|
167
179
|
}
|
|
168
180
|
|
|
181
|
+
// Record the measured result so getCompressionStats() reports reality
|
|
182
|
+
this.stats.totalCompressions++;
|
|
183
|
+
this.stats.totalOriginalBytes += originalSize;
|
|
184
|
+
this.stats.totalCompressedBytes += result.compressedSize;
|
|
185
|
+
this.stats.algorithmUsage[result.algorithm]++;
|
|
186
|
+
|
|
169
187
|
// Emit compression event for analytics using proper payload creator
|
|
170
188
|
const bandwidthEventPayload = createMxpBandwidthOptimizationEventPayload(
|
|
171
189
|
Events.Mxp.BANDWIDTH_OPTIMIZATION_COMPLETE,
|
|
@@ -183,82 +201,69 @@ export class BinaryProtocolLayer {
|
|
|
183
201
|
);
|
|
184
202
|
EventBus.server.emit(Events.Mxp.BANDWIDTH_OPTIMIZATION_COMPLETE, bandwidthEventPayload);
|
|
185
203
|
|
|
186
|
-
// format: result.format,
|
|
187
|
-
// algorithm: result.algorithm,
|
|
188
|
-
// originalSize,
|
|
189
|
-
// compressedSize: result.compressedSize,
|
|
190
|
-
// compressionRatio: result.compressionRatio,
|
|
191
|
-
// bandwidthSaved: originalSize - result.compressedSize
|
|
192
|
-
// });
|
|
193
|
-
|
|
194
204
|
return result;
|
|
195
205
|
|
|
196
206
|
} catch (error) {
|
|
207
|
+
const message_ = error instanceof Error ? error.message : String(error);
|
|
197
208
|
this.logger.error('Message encoding failed', {
|
|
198
|
-
error:
|
|
209
|
+
error: message_,
|
|
199
210
|
channelId,
|
|
200
211
|
messageType: message.type
|
|
201
212
|
});
|
|
202
|
-
|
|
203
|
-
//
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
return {
|
|
207
|
-
data: originalBuffer,
|
|
208
|
-
format: 'json',
|
|
209
|
-
algorithm: 'none',
|
|
210
|
-
originalSize: originalBuffer.length,
|
|
211
|
-
compressedSize: originalBuffer.length,
|
|
212
|
-
compressionRatio: 1.0
|
|
213
|
-
};
|
|
213
|
+
|
|
214
|
+
// No silent fallback to plain JSON: the caller asked for an encoded
|
|
215
|
+
// message and must find out that it did not get one.
|
|
216
|
+
throw new Error(`Binary protocol encoding failed for '${message.type}': ${message_}`);
|
|
214
217
|
}
|
|
215
218
|
}
|
|
216
219
|
|
|
217
220
|
/**
|
|
218
|
-
* Decode
|
|
221
|
+
* Decode an encoded message back to its original form.
|
|
222
|
+
*
|
|
223
|
+
* @throws If the payload cannot be decoded. A corrupt message is an error,
|
|
224
|
+
* not an empty result.
|
|
219
225
|
*/
|
|
220
|
-
public decodeMessage(compressedData: CompressionResult): MxpMessage
|
|
226
|
+
public decodeMessage(compressedData: CompressionResult): MxpMessage {
|
|
221
227
|
try {
|
|
222
|
-
let message: MxpMessage;
|
|
223
|
-
|
|
224
228
|
switch (compressedData.format) {
|
|
225
|
-
case 'json':
|
|
226
|
-
// Plain JSON
|
|
229
|
+
case 'json': {
|
|
227
230
|
const jsonString = compressedData.data.toString('utf8');
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
+
return JSON.parse(jsonString) as MxpMessage;
|
|
232
|
+
}
|
|
233
|
+
|
|
231
234
|
case 'msgpack':
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
case 'msgpack-compressed':
|
|
237
|
-
// MessagePack + Brotli compression
|
|
235
|
+
return msgpack.decode(compressedData.data) as MxpMessage;
|
|
236
|
+
|
|
237
|
+
case 'msgpack-compressed': {
|
|
238
238
|
const decompressedMsgpack = zlib.brotliDecompressSync(compressedData.data);
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
239
|
+
return msgpack.decode(decompressedMsgpack) as MxpMessage;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
242
|
default:
|
|
243
243
|
throw new Error(`Unknown encoding format: ${compressedData.format}`);
|
|
244
244
|
}
|
|
245
|
-
|
|
246
|
-
// ;
|
|
247
|
-
|
|
248
|
-
return message;
|
|
249
|
-
|
|
250
245
|
} catch (error) {
|
|
246
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
251
247
|
this.logger.error('Message decoding failed', {
|
|
252
|
-
error:
|
|
248
|
+
error: message,
|
|
253
249
|
format: compressedData.format,
|
|
254
250
|
algorithm: compressedData.algorithm
|
|
255
251
|
});
|
|
256
|
-
|
|
252
|
+
throw new Error(`Binary protocol decoding failed (${compressedData.format}): ${message}`);
|
|
257
253
|
}
|
|
258
254
|
}
|
|
259
255
|
|
|
260
256
|
/**
|
|
261
|
-
*
|
|
257
|
+
* Encode a group of messages as one or more batches.
|
|
258
|
+
*
|
|
259
|
+
* Batches that exceed maxBatchSize are split in half recursively until each
|
|
260
|
+
* part fits, and EVERY part is returned. An earlier version encoded only the
|
|
261
|
+
* first half and discarded the rest, silently losing messages.
|
|
262
|
+
*
|
|
263
|
+
* @returns One CompressionResult per batch, or null when bandwidth
|
|
264
|
+
* optimization is disabled or there is nothing to send.
|
|
265
|
+
* @throws If a batch cannot be encoded, or a single message is too large to
|
|
266
|
+
* fit in maxBatchSize on its own.
|
|
262
267
|
*/
|
|
263
268
|
public batchEncode(
|
|
264
269
|
messages: MxpMessage[],
|
|
@@ -268,9 +273,9 @@ export class BinaryProtocolLayer {
|
|
|
268
273
|
maxBatchSize?: number;
|
|
269
274
|
compressionLevel?: 'light' | 'standard' | 'aggressive';
|
|
270
275
|
} = {}
|
|
271
|
-
): CompressionResult | null {
|
|
276
|
+
): CompressionResult[] | null {
|
|
272
277
|
this.validator.assertIsArray(messages, 'Messages must be an array');
|
|
273
|
-
|
|
278
|
+
|
|
274
279
|
// Check if bandwidth optimization is enabled
|
|
275
280
|
const isBandwidthOptEnabled = MxpConfigManager.getInstance().isFeatureEnabled(
|
|
276
281
|
channelId,
|
|
@@ -287,54 +292,44 @@ export class BinaryProtocolLayer {
|
|
|
287
292
|
}
|
|
288
293
|
|
|
289
294
|
const maxBatchSize = options.maxBatchSize || 32768; // 32KB default
|
|
290
|
-
|
|
291
|
-
try {
|
|
292
|
-
// Create batch envelope
|
|
293
|
-
const batchMessage: MxpMessage = {
|
|
294
|
-
type: 'mxp_batch',
|
|
295
|
-
payload: {
|
|
296
|
-
version: '2.0',
|
|
297
|
-
messageCount: messages.length,
|
|
298
|
-
messages: messages
|
|
299
|
-
},
|
|
300
|
-
metadata: {
|
|
301
|
-
batchId: `batch_${uuidv4()}`,
|
|
302
|
-
timestamp: Date.now(),
|
|
303
|
-
compressionLevel: options.compressionLevel || 'standard'
|
|
304
|
-
}
|
|
305
|
-
};
|
|
306
295
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
// Process first half only for now (in full implementation would handle both)
|
|
320
|
-
return this.batchEncode(firstHalf, channelId, agentId, options);
|
|
296
|
+
// Create batch envelope
|
|
297
|
+
const batchMessage: MxpMessage = {
|
|
298
|
+
type: 'mxp_batch',
|
|
299
|
+
payload: {
|
|
300
|
+
version: '2.0',
|
|
301
|
+
messageCount: messages.length,
|
|
302
|
+
messages: messages
|
|
303
|
+
},
|
|
304
|
+
metadata: {
|
|
305
|
+
batchId: `batch_${uuidv4()}`,
|
|
306
|
+
timestamp: Date.now(),
|
|
307
|
+
compressionLevel: options.compressionLevel || 'standard'
|
|
321
308
|
}
|
|
309
|
+
};
|
|
322
310
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
if (compressionResult) {
|
|
327
|
-
}
|
|
311
|
+
// Check if batch exceeds size limit
|
|
312
|
+
const batchBuffer = Buffer.from(JSON.stringify(batchMessage), 'utf8');
|
|
328
313
|
|
|
329
|
-
|
|
314
|
+
if (batchBuffer.length <= maxBatchSize) {
|
|
315
|
+
const encoded = this.encodeMessage(batchMessage, channelId, agentId);
|
|
316
|
+
return encoded ? [encoded] : null;
|
|
317
|
+
}
|
|
330
318
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
return null;
|
|
319
|
+
if (messages.length === 1) {
|
|
320
|
+
throw new Error(
|
|
321
|
+
`Message '${messages[0].type}' is ${batchBuffer.length} bytes, which exceeds the ` +
|
|
322
|
+
`maximum batch size of ${maxBatchSize} bytes and cannot be split further.`
|
|
323
|
+
);
|
|
337
324
|
}
|
|
325
|
+
|
|
326
|
+
this.logger.warn(`Batch size ${batchBuffer.length} exceeds limit ${maxBatchSize}, splitting`);
|
|
327
|
+
|
|
328
|
+
const midpoint = Math.floor(messages.length / 2);
|
|
329
|
+
const firstHalf = this.batchEncode(messages.slice(0, midpoint), channelId, agentId, options);
|
|
330
|
+
const secondHalf = this.batchEncode(messages.slice(midpoint), channelId, agentId, options);
|
|
331
|
+
|
|
332
|
+
return [...(firstHalf ?? []), ...(secondHalf ?? [])];
|
|
338
333
|
}
|
|
339
334
|
|
|
340
335
|
/**
|
|
@@ -372,7 +367,10 @@ export class BinaryProtocolLayer {
|
|
|
372
367
|
}
|
|
373
368
|
|
|
374
369
|
/**
|
|
375
|
-
*
|
|
370
|
+
* Compression statistics measured from the encodes this instance performed.
|
|
371
|
+
*
|
|
372
|
+
* averageCompressionRatio is compressedBytes/originalBytes across all
|
|
373
|
+
* encodes (1.0 = no reduction), and is 0 before anything has been encoded.
|
|
376
374
|
*/
|
|
377
375
|
public getCompressionStats(): {
|
|
378
376
|
totalCompressions: number;
|
|
@@ -380,40 +378,26 @@ export class BinaryProtocolLayer {
|
|
|
380
378
|
totalBandwidthSaved: number;
|
|
381
379
|
algorithmUsage: Record<CompressionAlgorithm, number>;
|
|
382
380
|
} {
|
|
383
|
-
|
|
381
|
+
const { totalCompressions, totalOriginalBytes, totalCompressedBytes } = this.stats;
|
|
382
|
+
|
|
384
383
|
return {
|
|
385
|
-
totalCompressions
|
|
386
|
-
averageCompressionRatio:
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
'brotli': 0,
|
|
392
|
-
'msgpack': 0
|
|
393
|
-
}
|
|
384
|
+
totalCompressions,
|
|
385
|
+
averageCompressionRatio: totalOriginalBytes > 0
|
|
386
|
+
? totalCompressedBytes / totalOriginalBytes
|
|
387
|
+
: 0,
|
|
388
|
+
totalBandwidthSaved: totalOriginalBytes - totalCompressedBytes,
|
|
389
|
+
algorithmUsage: { ...this.stats.algorithmUsage }
|
|
394
390
|
};
|
|
395
391
|
}
|
|
396
392
|
|
|
397
393
|
/**
|
|
398
|
-
*
|
|
399
|
-
* Placeholder for future implementation with Socket.IO streaming
|
|
394
|
+
* Reset the compression counters (used by tests).
|
|
400
395
|
*/
|
|
401
|
-
public
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
// In full implementation, would return Transform stream
|
|
409
|
-
// For now, return configuration object
|
|
410
|
-
return {
|
|
411
|
-
channelId,
|
|
412
|
-
agentId,
|
|
413
|
-
compressionEnabled: true,
|
|
414
|
-
algorithm: 'gzip', // Start with gzip for streaming
|
|
415
|
-
flushInterval: 100 // Flush every 100ms for low latency
|
|
416
|
-
};
|
|
396
|
+
public resetCompressionStats(): void {
|
|
397
|
+
this.stats.totalCompressions = 0;
|
|
398
|
+
this.stats.totalOriginalBytes = 0;
|
|
399
|
+
this.stats.totalCompressedBytes = 0;
|
|
400
|
+
this.stats.algorithmUsage = { none: 0, gzip: 0, brotli: 0, msgpack: 0 };
|
|
417
401
|
}
|
|
418
402
|
}
|
|
419
403
|
|