@mxf-dev/core 1.0.1 → 2.0.0
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/PredictiveAnalyticsService.d.ts +34 -4
- package/dist/services/PredictiveAnalyticsService.d.ts.map +1 -1
- package/dist/services/PredictiveAnalyticsService.js +41 -25
- 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/PredictiveAnalyticsService.ts +55 -32
- 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
package/dist/utils/Logger.js
CHANGED
|
@@ -17,14 +17,15 @@
|
|
|
17
17
|
* @repository https://github.com/BradA1878/model-exchange-framework
|
|
18
18
|
* @documentation https://mxf-dev.github.io/mxf/
|
|
19
19
|
*/
|
|
20
|
-
// Default logging configuration
|
|
20
|
+
// Default logging configuration.
|
|
21
|
+
// `enabled: false` gates info/warn/debug/trace only — errors are always written.
|
|
21
22
|
const LOGGING_CONFIG = {
|
|
22
23
|
server: {
|
|
23
|
-
enabled: false, // Server logging
|
|
24
|
+
enabled: false, // Server non-error logging off by default
|
|
24
25
|
level: 'debug'
|
|
25
26
|
},
|
|
26
27
|
client: {
|
|
27
|
-
enabled: false, // Client logging
|
|
28
|
+
enabled: false, // Client non-error logging off by default (TUI suppresses via disableClientLogging())
|
|
28
29
|
level: 'debug'
|
|
29
30
|
}
|
|
30
31
|
};
|
|
@@ -69,15 +70,44 @@ export class Logger {
|
|
|
69
70
|
};
|
|
70
71
|
/**
|
|
71
72
|
* Create a new Logger
|
|
72
|
-
*
|
|
73
|
+
*
|
|
74
|
+
* @param level Log level (error, warn, info, debug, trace). Caps this
|
|
75
|
+
* component's verbosity; the target level still applies, and
|
|
76
|
+
* the more restrictive of the two wins.
|
|
73
77
|
* @param context Context string to prefix log messages
|
|
74
78
|
* @param target Target pathway ('server' or 'client') - defaults to 'server'
|
|
75
79
|
*/
|
|
76
80
|
constructor(level, context = '', target = 'server') {
|
|
81
|
+
if (Logger.LOG_LEVELS[level] === undefined) {
|
|
82
|
+
throw new Error(`Logger: unknown log level '${level}'. Valid levels: ${Object.keys(Logger.LOG_LEVELS).join(', ')}`);
|
|
83
|
+
}
|
|
77
84
|
this.level = level;
|
|
78
85
|
this.context = context;
|
|
79
86
|
this.target = target;
|
|
80
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Resolve the level this logger actually writes at.
|
|
90
|
+
*
|
|
91
|
+
* The instance level and the target level are both honoured; whichever is
|
|
92
|
+
* more restrictive wins. Levels are ordered error(0) → trace(4), so "more
|
|
93
|
+
* restrictive" is the lower number.
|
|
94
|
+
*
|
|
95
|
+
* An unknown level string is a programming error and is rejected rather
|
|
96
|
+
* than silently treated as "log everything".
|
|
97
|
+
*/
|
|
98
|
+
resolveEffectiveLevel() {
|
|
99
|
+
const instanceRank = Logger.LOG_LEVELS[this.level];
|
|
100
|
+
if (instanceRank === undefined) {
|
|
101
|
+
throw new Error(`Logger: unknown log level '${this.level}'. Valid levels: ${Object.keys(Logger.LOG_LEVELS).join(', ')}`);
|
|
102
|
+
}
|
|
103
|
+
const targetLevel = LOGGING_CONFIG[this.target].level;
|
|
104
|
+
const targetRank = Logger.LOG_LEVELS[targetLevel];
|
|
105
|
+
if (targetRank === undefined) {
|
|
106
|
+
throw new Error(`Logger: unknown log level '${targetLevel}' configured for target '${this.target}'. ` +
|
|
107
|
+
`Valid levels: ${Object.keys(Logger.LOG_LEVELS).join(', ')}`);
|
|
108
|
+
}
|
|
109
|
+
return Math.min(instanceRank, targetRank);
|
|
110
|
+
}
|
|
81
111
|
/**
|
|
82
112
|
* Internal log method
|
|
83
113
|
* @param level Log level
|
|
@@ -85,38 +115,39 @@ export class Logger {
|
|
|
85
115
|
* @param args Additional arguments
|
|
86
116
|
*/
|
|
87
117
|
log(level, message, ...args) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
//
|
|
91
|
-
|
|
118
|
+
const isError = level === 'error';
|
|
119
|
+
// Errors are always written. Everything else respects the target's
|
|
120
|
+
// enabled flag, so a host app can keep its output clean without also
|
|
121
|
+
// hiding failures from itself.
|
|
122
|
+
if (!isError && !LOGGING_CONFIG[this.target].enabled) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const messageRank = Logger.LOG_LEVELS[level];
|
|
126
|
+
if (messageRank === undefined) {
|
|
127
|
+
throw new Error(`Logger: unknown log level '${level}'. Valid levels: ${Object.keys(Logger.LOG_LEVELS).join(', ')}`);
|
|
128
|
+
}
|
|
129
|
+
// Errors bypass the level check too — error is rank 0, so this is only
|
|
130
|
+
// belt-and-braces against a misconfigured level.
|
|
131
|
+
if (!isError && messageRank > this.resolveEffectiveLevel()) {
|
|
92
132
|
return;
|
|
93
133
|
}
|
|
94
|
-
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
console.info(prefix, message, ...args);
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
console.log(prefix, message, ...args);
|
|
115
|
-
}
|
|
116
|
-
// Force flush stdout if in Node.js environment to ensure logs appear immediately
|
|
117
|
-
if (typeof process !== 'undefined' && process.stdout && process.stdout.write) {
|
|
118
|
-
process.stdout.write('');
|
|
119
|
-
}
|
|
134
|
+
const timestamp = new Date().toISOString();
|
|
135
|
+
const targetPrefix = this.target === 'client' ? 'CLIENT' : 'SERVER';
|
|
136
|
+
const prefix = this.context
|
|
137
|
+
? `[${timestamp}][${targetPrefix}][${level.toUpperCase()}][${this.context}]`
|
|
138
|
+
: `[${timestamp}][${targetPrefix}][${level.toUpperCase()}]`;
|
|
139
|
+
// Output to console based on level
|
|
140
|
+
if (isError) {
|
|
141
|
+
console.error(prefix, message, ...args);
|
|
142
|
+
}
|
|
143
|
+
else if (level === 'warn') {
|
|
144
|
+
console.warn(prefix, message, ...args);
|
|
145
|
+
}
|
|
146
|
+
else if (level === 'info') {
|
|
147
|
+
console.info(prefix, message, ...args);
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
console.log(prefix, message, ...args);
|
|
120
151
|
}
|
|
121
152
|
}
|
|
122
153
|
/**
|
|
@@ -160,12 +191,23 @@ export class Logger {
|
|
|
160
191
|
this.log('trace', message, ...args);
|
|
161
192
|
}
|
|
162
193
|
/**
|
|
163
|
-
* Set the log level
|
|
164
|
-
*
|
|
194
|
+
* Set the log level for this instance.
|
|
195
|
+
* Caps this component's verbosity; the target level still applies.
|
|
196
|
+
*
|
|
197
|
+
* @param level New log level (error, warn, info, debug, trace)
|
|
165
198
|
*/
|
|
166
199
|
setLevel(level) {
|
|
200
|
+
if (Logger.LOG_LEVELS[level] === undefined) {
|
|
201
|
+
throw new Error(`Logger: unknown log level '${level}'. Valid levels: ${Object.keys(Logger.LOG_LEVELS).join(', ')}`);
|
|
202
|
+
}
|
|
167
203
|
this.level = level;
|
|
168
204
|
}
|
|
205
|
+
/**
|
|
206
|
+
* Get the log level configured for this instance.
|
|
207
|
+
*/
|
|
208
|
+
getLevel() {
|
|
209
|
+
return this.level;
|
|
210
|
+
}
|
|
169
211
|
/**
|
|
170
212
|
* Get a child logger with a sub-context
|
|
171
213
|
* @param subContext Sub-context to add
|
package/dist/utils/Logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/utils/Logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/utils/Logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,21 +36,34 @@ export declare class MxpEncryption {
|
|
|
36
36
|
*/
|
|
37
37
|
isEncryptionEnabled(): boolean;
|
|
38
38
|
/**
|
|
39
|
-
* Encrypt an MXP payload
|
|
39
|
+
* Encrypt an MXP payload.
|
|
40
|
+
*
|
|
41
|
+
* @returns The encrypted payload, or null if encryption is not configured.
|
|
42
|
+
* @throws If encryption IS configured but the cipher fails. Never returns
|
|
43
|
+
* plaintext.
|
|
40
44
|
*/
|
|
41
45
|
encrypt(payload: MxpPayload): EncryptedPayload | null;
|
|
42
46
|
/**
|
|
43
|
-
* Decrypt an encrypted payload
|
|
47
|
+
* Decrypt an encrypted payload.
|
|
48
|
+
*
|
|
49
|
+
* @throws If encryption is not configured, the algorithm is unsupported, or
|
|
50
|
+
* the ciphertext fails authentication.
|
|
44
51
|
*/
|
|
45
|
-
decrypt(encryptedPayload: EncryptedPayload): MxpPayload
|
|
52
|
+
decrypt(encryptedPayload: EncryptedPayload): MxpPayload;
|
|
46
53
|
/**
|
|
47
|
-
* Encrypt a full message payload
|
|
54
|
+
* Encrypt a full message payload.
|
|
55
|
+
*
|
|
56
|
+
* @returns The encrypted payload, or the original payload when encryption
|
|
57
|
+
* is not configured.
|
|
58
|
+
* @throws If encryption is configured but fails.
|
|
48
59
|
*/
|
|
49
60
|
encryptMessage(payload: MxpPayload): MxpPayload | EncryptedPayload;
|
|
50
61
|
/**
|
|
51
|
-
* Decrypt a message payload (with type checking)
|
|
62
|
+
* Decrypt a message payload (with type checking).
|
|
63
|
+
*
|
|
64
|
+
* @throws If the payload is encrypted and decryption fails.
|
|
52
65
|
*/
|
|
53
|
-
decryptMessage(payload: MxpPayload | EncryptedPayload): MxpPayload
|
|
66
|
+
decryptMessage(payload: MxpPayload | EncryptedPayload): MxpPayload;
|
|
54
67
|
/**
|
|
55
68
|
* Generate a secure random key (utility for initial setup)
|
|
56
69
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MxpEncryption.d.ts","sourceRoot":"","sources":["../../src/utils/MxpEncryption.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"MxpEncryption.d.ts","sourceRoot":"","sources":["../../src/utils/MxpEncryption.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAyBH,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAA0B,MAAM,kCAAkC,CAAC;AAKxG;;GAEG;AACH,qBAAa,aAAa;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IACvC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,SAAS,CAAkB;IAEnC,OAAO;WAIO,WAAW,IAAI,aAAa;IAO1C;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;OAEG;IACI,mBAAmB,IAAI,OAAO;IAIrC;;;;;;OAMG;IACI,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,gBAAgB,GAAG,IAAI;IAmC5D;;;;;OAKG;IACI,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,UAAU;IAoC9D;;;;;;OAMG;IACI,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU,GAAG,gBAAgB;IAezE;;;;OAIG;IACI,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,gBAAgB,GAAG,UAAU;IAUzE;;OAEG;WACW,iBAAiB,IAAI,MAAM;CAG5C;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,eAA8B,CAAC"}
|
|
@@ -20,8 +20,22 @@
|
|
|
20
20
|
/**
|
|
21
21
|
* MXP Encryption Utilities
|
|
22
22
|
*
|
|
23
|
-
*
|
|
23
|
+
* Encryption/decryption using a shared key from environment variables.
|
|
24
24
|
* Uses AES-256-GCM for authenticated encryption.
|
|
25
|
+
*
|
|
26
|
+
* ## Failure policy
|
|
27
|
+
*
|
|
28
|
+
* Encryption is a security boundary, so there is no degraded mode:
|
|
29
|
+
*
|
|
30
|
+
* - `encrypt()` / `decrypt()` return `null` ONLY to mean "encryption is not
|
|
31
|
+
* configured" (no MXP_ENCRYPTION_KEY). That is a deliberate, operator-chosen
|
|
32
|
+
* state, not a failure.
|
|
33
|
+
* - Any actual crypto failure — bad key, bad IV, failed authentication tag,
|
|
34
|
+
* unsupported algorithm — THROWS.
|
|
35
|
+
*
|
|
36
|
+
* Earlier versions returned the plaintext payload when encryption threw
|
|
37
|
+
* (`return encrypted || payload`), so a crypto fault silently put cleartext on
|
|
38
|
+
* the wire while the caller believed it was encrypted.
|
|
25
39
|
*/
|
|
26
40
|
import * as crypto from 'crypto';
|
|
27
41
|
import { requireEnv } from './env.js';
|
|
@@ -70,7 +84,11 @@ export class MxpEncryption {
|
|
|
70
84
|
return this.isEnabled && this.encryptionKey !== null;
|
|
71
85
|
}
|
|
72
86
|
/**
|
|
73
|
-
* Encrypt an MXP payload
|
|
87
|
+
* Encrypt an MXP payload.
|
|
88
|
+
*
|
|
89
|
+
* @returns The encrypted payload, or null if encryption is not configured.
|
|
90
|
+
* @throws If encryption IS configured but the cipher fails. Never returns
|
|
91
|
+
* plaintext.
|
|
74
92
|
*/
|
|
75
93
|
encrypt(payload) {
|
|
76
94
|
if (!this.isEncryptionEnabled()) {
|
|
@@ -97,21 +115,23 @@ export class MxpEncryption {
|
|
|
97
115
|
};
|
|
98
116
|
}
|
|
99
117
|
catch (error) {
|
|
100
|
-
|
|
101
|
-
|
|
118
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
119
|
+
logger.error(`Encryption failed: ${message}`);
|
|
120
|
+
throw new Error(`MXP encryption failed: ${message}`);
|
|
102
121
|
}
|
|
103
122
|
}
|
|
104
123
|
/**
|
|
105
|
-
* Decrypt an encrypted payload
|
|
124
|
+
* Decrypt an encrypted payload.
|
|
125
|
+
*
|
|
126
|
+
* @throws If encryption is not configured, the algorithm is unsupported, or
|
|
127
|
+
* the ciphertext fails authentication.
|
|
106
128
|
*/
|
|
107
129
|
decrypt(encryptedPayload) {
|
|
108
130
|
if (!this.isEncryptionEnabled()) {
|
|
109
|
-
|
|
110
|
-
return null;
|
|
131
|
+
throw new Error('Cannot decrypt MXP payload: encryption is not configured. Set MXP_ENCRYPTION_KEY and MXP_ENCRYPTION_SALT.');
|
|
111
132
|
}
|
|
112
133
|
if (encryptedPayload.algorithm !== MxpEncryptionAlgorithm.AES_256_GCM) {
|
|
113
|
-
|
|
114
|
-
return null;
|
|
134
|
+
throw new Error(`Unsupported MXP encryption algorithm: ${encryptedPayload.algorithm}`);
|
|
115
135
|
}
|
|
116
136
|
try {
|
|
117
137
|
// Decode from base64
|
|
@@ -121,7 +141,7 @@ export class MxpEncryption {
|
|
|
121
141
|
// Create decipher
|
|
122
142
|
const decipher = crypto.createDecipheriv('aes-256-gcm', this.encryptionKey, iv);
|
|
123
143
|
decipher.setAuthTag(authTag);
|
|
124
|
-
// Decrypt
|
|
144
|
+
// Decrypt — final() throws if the authentication tag does not match
|
|
125
145
|
const decrypted = Buffer.concat([
|
|
126
146
|
decipher.update(encrypted),
|
|
127
147
|
decipher.final()
|
|
@@ -130,22 +150,34 @@ export class MxpEncryption {
|
|
|
130
150
|
return JSON.parse(decrypted.toString('utf8'));
|
|
131
151
|
}
|
|
132
152
|
catch (error) {
|
|
133
|
-
|
|
134
|
-
|
|
153
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
154
|
+
logger.error(`Decryption failed: ${message}`);
|
|
155
|
+
throw new Error(`MXP decryption failed: ${message}`);
|
|
135
156
|
}
|
|
136
157
|
}
|
|
137
158
|
/**
|
|
138
|
-
* Encrypt a full message payload
|
|
159
|
+
* Encrypt a full message payload.
|
|
160
|
+
*
|
|
161
|
+
* @returns The encrypted payload, or the original payload when encryption
|
|
162
|
+
* is not configured.
|
|
163
|
+
* @throws If encryption is configured but fails.
|
|
139
164
|
*/
|
|
140
165
|
encryptMessage(payload) {
|
|
141
166
|
if (!this.isEncryptionEnabled()) {
|
|
142
|
-
return payload; //
|
|
167
|
+
return payload; // Encryption not configured — caller opted out
|
|
143
168
|
}
|
|
144
169
|
const encrypted = this.encrypt(payload);
|
|
145
|
-
|
|
170
|
+
if (!encrypted) {
|
|
171
|
+
// isEncryptionEnabled() was true, so encrypt() either returns a
|
|
172
|
+
// payload or throws. Reaching here means the two disagree.
|
|
173
|
+
throw new Error('MXP encryption is enabled but produced no payload');
|
|
174
|
+
}
|
|
175
|
+
return encrypted;
|
|
146
176
|
}
|
|
147
177
|
/**
|
|
148
|
-
* Decrypt a message payload (with type checking)
|
|
178
|
+
* Decrypt a message payload (with type checking).
|
|
179
|
+
*
|
|
180
|
+
* @throws If the payload is encrypted and decryption fails.
|
|
149
181
|
*/
|
|
150
182
|
decryptMessage(payload) {
|
|
151
183
|
// Check if it's an encrypted payload
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MxpEncryption.js","sourceRoot":"","sources":["../../src/utils/MxpEncryption.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH
|
|
1
|
+
{"version":3,"file":"MxpEncryption.js","sourceRoot":"","sources":["../../src/utils/MxpEncryption.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAgC,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AACxG,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;AAE7D;;GAEG;AACH,MAAM,OAAO,aAAa;IACd,MAAM,CAAC,QAAQ,CAAgB;IAC/B,aAAa,GAAkB,IAAI,CAAC;IACpC,SAAS,GAAY,KAAK,CAAC;IAEnC;QACI,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAEM,MAAM,CAAC,WAAW;QACrB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAC1B,aAAa,CAAC,QAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QACjD,CAAC;QACD,OAAO,aAAa,CAAC,QAAQ,CAAC;IAClC,CAAC;IAED;;OAEG;IACK,iBAAiB;QACrB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACjD,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,OAAO,CAAC,CAAC,kBAAkB;QAE3F,IAAI,SAAS,EAAE,CAAC;YACZ,gEAAgE;YAChE,mEAAmE;YACnE,qDAAqD;YACrD,MAAM,IAAI,GAAG,UAAU,CACnB,qBAAqB,EACrB,qGAAqG,CACxG,CAAC;YACF,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC9E,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC;QACtC,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;YAChE,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC;IACL,CAAC;IAED;;OAEG;IACI,mBAAmB;QACtB,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC;IACzD,CAAC;IAED;;;;;;OAMG;IACI,OAAO,CAAC,OAAmB;QAC9B,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,CAAC;YACD,2CAA2C;YAC3C,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAElC,gBAAgB;YAChB,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,aAAc,EAAE,EAAE,CAAC,CAAC;YAE7E,sBAAsB;YACtB,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC5B,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC;gBACpC,MAAM,CAAC,KAAK,EAAE;aACjB,CAAC,CAAC;YAEH,6BAA6B;YAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YAEpC,OAAO;gBACH,SAAS,EAAE,sBAAsB,CAAC,WAAW;gBAC7C,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAClC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACzB,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;aACtC,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,CAAC,KAAK,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAC;QACzD,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACI,OAAO,CAAC,gBAAkC;QAC7C,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACX,2GAA2G,CAC9G,CAAC;QACN,CAAC;QAED,IAAI,gBAAgB,CAAC,SAAS,KAAK,sBAAsB,CAAC,WAAW,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,yCAAyC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC;QAC3F,CAAC;QAED,IAAI,CAAC;YACD,qBAAqB;YACrB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC/D,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAEhE,kBAAkB;YAClB,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,aAAc,EAAE,EAAE,CAAC,CAAC;YACjF,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAE7B,oEAAoE;YACpE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC5B,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;gBAC1B,QAAQ,CAAC,KAAK,EAAE;aACnB,CAAC,CAAC;YAEH,yBAAyB;YACzB,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,CAAC,KAAK,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAC;QACzD,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACI,cAAc,CAAC,OAAmB;QACrC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;YAC9B,OAAO,OAAO,CAAC,CAAC,+CAA+C;QACnE,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,gEAAgE;YAChE,2DAA2D;YAC3D,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACI,cAAc,CAAC,OAAsC;QACxD,qCAAqC;QACrC,IAAI,WAAW,IAAI,OAAO,IAAI,MAAM,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,EAAE,CAAC;YACjE,OAAO,IAAI,CAAC,OAAO,CAAC,OAA2B,CAAC,CAAC;QACrD,CAAC;QAED,yBAAyB;QACzB,OAAO,OAAqB,CAAC;IACjC,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,iBAAiB;QAC3B,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mxf-dev/core",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Model Exchange Framework core: events, schemas, types, services, and protocol contracts",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -37,7 +37,6 @@
|
|
|
37
37
|
"README.md",
|
|
38
38
|
"LICENSE"
|
|
39
39
|
],
|
|
40
|
-
"sideEffects": false,
|
|
41
40
|
"scripts": {
|
|
42
41
|
"build": "tsc -b",
|
|
43
42
|
"clean": "rm -rf dist tsconfig.tsbuildinfo",
|
|
@@ -45,27 +44,38 @@
|
|
|
45
44
|
},
|
|
46
45
|
"dependencies": {
|
|
47
46
|
"@google/genai": "^0.9.0",
|
|
47
|
+
"@mozilla/readability": "^0.6.0",
|
|
48
48
|
"@msgpack/msgpack": "^3.1.2",
|
|
49
49
|
"ajv": "^8.17.1",
|
|
50
50
|
"ajv-formats": "^3.0.1",
|
|
51
|
-
"bcrypt": "^5.1.1",
|
|
52
51
|
"dockerode": "^4.0.2",
|
|
52
|
+
"dompurify": "^3.2.4",
|
|
53
|
+
"html-to-text": "^9.0.5",
|
|
54
|
+
"jsdom": "^26.0.0",
|
|
53
55
|
"meilisearch": "^0.53.0",
|
|
54
56
|
"mongoose": "^8.10.2",
|
|
55
57
|
"openai": "^4.95.1",
|
|
56
|
-
"puppeteer": "^24.11.2",
|
|
57
58
|
"rxjs": "^7.8.2",
|
|
59
|
+
"turndown": "^7.2.0",
|
|
58
60
|
"uuid": "^9.0.1",
|
|
59
61
|
"zod": "^3.24.3"
|
|
60
62
|
},
|
|
61
63
|
"peerDependencies": {
|
|
62
64
|
"@tensorflow/tfjs": "^4.22.0",
|
|
65
|
+
"bcrypt": "^5.1.1",
|
|
66
|
+
"puppeteer": "^24.11.2",
|
|
63
67
|
"socket.io": "^4.7.2"
|
|
64
68
|
},
|
|
65
69
|
"peerDependenciesMeta": {
|
|
66
70
|
"@tensorflow/tfjs": {
|
|
67
71
|
"optional": true
|
|
68
72
|
},
|
|
73
|
+
"bcrypt": {
|
|
74
|
+
"optional": true
|
|
75
|
+
},
|
|
76
|
+
"puppeteer": {
|
|
77
|
+
"optional": true
|
|
78
|
+
},
|
|
69
79
|
"socket.io": {
|
|
70
80
|
"optional": true
|
|
71
81
|
}
|
|
@@ -74,7 +84,12 @@
|
|
|
74
84
|
"@tensorflow/tfjs": "^4.22.0",
|
|
75
85
|
"@types/bcrypt": "^5.0.2",
|
|
76
86
|
"@types/dockerode": "^3.3.24",
|
|
87
|
+
"@types/html-to-text": "^9.0.4",
|
|
88
|
+
"@types/jsdom": "^21.1.7",
|
|
77
89
|
"@types/node": "^20.10.5",
|
|
90
|
+
"@types/turndown": "^5.0.5",
|
|
91
|
+
"bcrypt": "^5.1.1",
|
|
92
|
+
"puppeteer": "^24.11.2",
|
|
78
93
|
"socket.io": "^4.7.2",
|
|
79
94
|
"typescript": "^5.2.2"
|
|
80
95
|
},
|
|
@@ -123,7 +123,7 @@ export abstract class FrameworkAdapter {
|
|
|
123
123
|
|
|
124
124
|
constructor(config: FrameworkAdapterConfig) {
|
|
125
125
|
this.config = config;
|
|
126
|
-
this.logger = new Logger('FrameworkAdapter');
|
|
126
|
+
this.logger = new Logger('info', 'FrameworkAdapter');
|
|
127
127
|
|
|
128
128
|
this.logger.info('Initialized framework adapter', {
|
|
129
129
|
frameworkName: config.frameworkName,
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
* Enables dynamic configuration of agent behaviors and capabilities.
|
|
26
26
|
*/
|
|
27
27
|
|
|
28
|
+
import { readFile } from 'node:fs/promises';
|
|
28
29
|
import { Observable, from } from 'rxjs';
|
|
29
30
|
import { map } from 'rxjs/operators';
|
|
30
31
|
import { Logger } from '../utils/Logger.js';
|
|
@@ -750,24 +751,55 @@ export class ConfigManager implements IConfigManager {
|
|
|
750
751
|
}
|
|
751
752
|
|
|
752
753
|
/**
|
|
753
|
-
* Load configuration from a file
|
|
754
|
-
*
|
|
754
|
+
* Load configuration from a JSON file and merge it over the defaults.
|
|
755
|
+
*
|
|
756
|
+
* Errors are surfaced through the Observable: a missing file, unreadable
|
|
757
|
+
* file, or malformed JSON is a configuration error the caller must see.
|
|
758
|
+
* (This method previously logged "not fully implemented" and handed back the
|
|
759
|
+
* current config, so callers believed they had loaded a file they had not.)
|
|
760
|
+
*
|
|
761
|
+
* @param filePath - Path to a JSON configuration file
|
|
762
|
+
* @returns Observable of the merged configuration
|
|
755
763
|
*/
|
|
756
764
|
public loadConfigFromFile(filePath: string): Observable<SdkConfig> {
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
// This is a simplified implementation that assumes we're in a Node.js environment
|
|
761
|
-
try {
|
|
762
|
-
// Note: In a real implementation, this would be asynchronous
|
|
763
|
-
// For now, we'll just return the current config
|
|
764
|
-
this.logger.warn(`loadConfigFromFile not fully implemented. File path: ${filePath}`);
|
|
765
|
-
|
|
766
|
-
return from(Promise.resolve(this.config));
|
|
767
|
-
} catch (error) {
|
|
768
|
-
this.logger.error(`Failed to load configuration from file: ${error}`);
|
|
769
|
-
return from(Promise.resolve(this.config));
|
|
765
|
+
if (typeof filePath !== 'string' || filePath.trim() === '') {
|
|
766
|
+
throw new Error('loadConfigFromFile requires a non-empty file path');
|
|
770
767
|
}
|
|
768
|
+
|
|
769
|
+
const load = async (): Promise<SdkConfig> => {
|
|
770
|
+
let fileContents: string;
|
|
771
|
+
try {
|
|
772
|
+
fileContents = await readFile(filePath, 'utf8');
|
|
773
|
+
} catch (error) {
|
|
774
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
775
|
+
this.logger.error(`Failed to read configuration file '${filePath}': ${message}`);
|
|
776
|
+
throw new Error(`Failed to read configuration file '${filePath}': ${message}`);
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
let parsed: unknown;
|
|
780
|
+
try {
|
|
781
|
+
parsed = JSON.parse(fileContents);
|
|
782
|
+
} catch (error) {
|
|
783
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
784
|
+
this.logger.error(`Configuration file '${filePath}' is not valid JSON: ${message}`);
|
|
785
|
+
throw new Error(`Configuration file '${filePath}' is not valid JSON: ${message}`);
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
789
|
+
throw new Error(`Configuration file '${filePath}' must contain a JSON object`);
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
// Merge, validate and emit CONFIG_UPDATED through the normal path.
|
|
793
|
+
this.config = this.mergeConfigs(DEFAULT_CONFIG, parsed as Partial<SdkConfig>);
|
|
794
|
+
this.validateConfig();
|
|
795
|
+
this.emitConfigUpdated(['all']);
|
|
796
|
+
|
|
797
|
+
this.logger.info(`Loaded configuration from '${filePath}'`);
|
|
798
|
+
|
|
799
|
+
return this.config;
|
|
800
|
+
};
|
|
801
|
+
|
|
802
|
+
return from(load());
|
|
771
803
|
}
|
|
772
804
|
|
|
773
805
|
/**
|
|
@@ -1397,10 +1429,11 @@ export class ConfigManager implements IConfigManager {
|
|
|
1397
1429
|
data,
|
|
1398
1430
|
{ source: 'ConfigManager' }
|
|
1399
1431
|
);
|
|
1400
|
-
// Emit
|
|
1432
|
+
// Emit once. Both buses push into the SAME RxJS Subject (see EventBus.ts),
|
|
1433
|
+
// so emitting on both delivered every local subscriber two copies of the
|
|
1434
|
+
// event. The client bus is the right one here: ConfigManager runs in the
|
|
1435
|
+
// SDK, and the shared Subject already carries the event to server-side
|
|
1436
|
+
// subscribers.
|
|
1401
1437
|
EventBus.client.emit(ConfigEvents.CHANNEL_SYSTEM_LLM_CHANGED, payload);
|
|
1402
|
-
|
|
1403
|
-
// Also emit to server bus to ensure propagation
|
|
1404
|
-
EventBus.server.emit(ConfigEvents.CHANNEL_SYSTEM_LLM_CHANGED, payload);
|
|
1405
1438
|
}
|
|
1406
1439
|
}
|