@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
|
@@ -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
|
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory strata configuration (Nested Learning).
|
|
3
|
+
*
|
|
4
|
+
* The strata services — StratumManager, SurpriseCalculator, MemoryCompressor,
|
|
5
|
+
* RetentionGateService — take their configuration as a constructor argument, and until
|
|
6
|
+
* now the only place that argument was ever built was inside test files. There was no
|
|
7
|
+
* production configuration path and no boot-time initialization, so StratumManager stayed
|
|
8
|
+
* disabled no matter what MEMORY_STRATA_ENABLED was set to, and the whole layer — which
|
|
9
|
+
* PhaseMemoryOperations and PhaseStrataRouter sit on top of — was inert.
|
|
10
|
+
*
|
|
11
|
+
* This module is the missing production path. It reads the same env flag the rest of the
|
|
12
|
+
* framework already exposes and produces a config the server initializes the strata
|
|
13
|
+
* services with at boot.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { MemoryStrataConfig, MemoryImportance } from '../types/MemoryStrataTypes.js';
|
|
17
|
+
import { isMemoryStrataEnabled } from './FeatureFlags.js';
|
|
18
|
+
|
|
19
|
+
export { isMemoryStrataEnabled };
|
|
20
|
+
|
|
21
|
+
const MINUTE = 60 * 1000;
|
|
22
|
+
const HOUR = 60 * MINUTE;
|
|
23
|
+
const DAY = 24 * HOUR;
|
|
24
|
+
|
|
25
|
+
const parseIntEnv = (value: string | undefined, fallback: number): number => {
|
|
26
|
+
if (value === undefined || value.trim() === '') {
|
|
27
|
+
return fallback;
|
|
28
|
+
}
|
|
29
|
+
const parsed = Number.parseInt(value, 10);
|
|
30
|
+
if (!Number.isFinite(parsed)) {
|
|
31
|
+
throw new Error(
|
|
32
|
+
`Invalid integer for memory strata configuration: "${value}". ` +
|
|
33
|
+
`Remove the variable to use the default (${fallback}), or set a whole number.`
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
return parsed;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const parseFloatEnv = (value: string | undefined, fallback: number): number => {
|
|
40
|
+
if (value === undefined || value.trim() === '') {
|
|
41
|
+
return fallback;
|
|
42
|
+
}
|
|
43
|
+
const parsed = Number.parseFloat(value);
|
|
44
|
+
if (!Number.isFinite(parsed)) {
|
|
45
|
+
throw new Error(
|
|
46
|
+
`Invalid number for memory strata configuration: "${value}". ` +
|
|
47
|
+
`Remove the variable to use the default (${fallback}), or set a number.`
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
return parsed;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Resolve the minimum long-term importance, which is a numeric enum, not a string.
|
|
55
|
+
*/
|
|
56
|
+
const parseImportanceEnv = (value: string | undefined): MemoryImportance => {
|
|
57
|
+
if (value === undefined || value.trim() === '') {
|
|
58
|
+
return MemoryImportance.Medium;
|
|
59
|
+
}
|
|
60
|
+
const byName = (MemoryImportance as unknown as Record<string, number>)[value.trim()];
|
|
61
|
+
if (typeof byName === 'number') {
|
|
62
|
+
return byName as MemoryImportance;
|
|
63
|
+
}
|
|
64
|
+
throw new Error(
|
|
65
|
+
`Invalid MEMORY_STRATA_LONG_TERM_MIN_IMPORTANCE: "${value}". ` +
|
|
66
|
+
`Expected one of: Critical, High, Medium, Low, Trivial.`
|
|
67
|
+
);
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Build the strata configuration from the environment.
|
|
72
|
+
*
|
|
73
|
+
* Invalid numeric values throw rather than silently falling back, so a typo in a tuning
|
|
74
|
+
* variable surfaces at boot instead of quietly changing how memory is retained.
|
|
75
|
+
*/
|
|
76
|
+
export function getMemoryStrataConfig(): MemoryStrataConfig {
|
|
77
|
+
return {
|
|
78
|
+
enabled: isMemoryStrataEnabled(),
|
|
79
|
+
|
|
80
|
+
working: {
|
|
81
|
+
maxEntries: parseIntEnv(process.env.MEMORY_STRATA_WORKING_MAX_ENTRIES, 50),
|
|
82
|
+
ttl: parseIntEnv(process.env.MEMORY_STRATA_WORKING_TTL_MS, 30 * MINUTE)
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
shortTerm: {
|
|
86
|
+
maxEntries: parseIntEnv(process.env.MEMORY_STRATA_SHORT_TERM_MAX_ENTRIES, 500),
|
|
87
|
+
ttl: parseIntEnv(process.env.MEMORY_STRATA_SHORT_TERM_TTL_MS, 7 * DAY),
|
|
88
|
+
consolidationThreshold: parseIntEnv(
|
|
89
|
+
process.env.MEMORY_STRATA_SHORT_TERM_CONSOLIDATION_THRESHOLD,
|
|
90
|
+
3
|
|
91
|
+
)
|
|
92
|
+
},
|
|
93
|
+
|
|
94
|
+
longTerm: {
|
|
95
|
+
maxEntriesPerAgent: parseIntEnv(process.env.MEMORY_STRATA_LONG_TERM_MAX_ENTRIES, 5000),
|
|
96
|
+
minImportance: parseImportanceEnv(process.env.MEMORY_STRATA_LONG_TERM_MIN_IMPORTANCE),
|
|
97
|
+
enableArchival: process.env.MEMORY_STRATA_LONG_TERM_ARCHIVAL !== 'false',
|
|
98
|
+
archivalAge: parseIntEnv(process.env.MEMORY_STRATA_LONG_TERM_ARCHIVAL_AGE_MS, 90 * DAY)
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
episodic: {
|
|
102
|
+
maxEpisodesPerAgent: parseIntEnv(process.env.MEMORY_STRATA_EPISODIC_MAX_EPISODES, 200),
|
|
103
|
+
episodeDuration: parseIntEnv(process.env.MEMORY_STRATA_EPISODIC_DURATION_MS, HOUR)
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
semantic: {
|
|
107
|
+
maxConceptsPerAgent: parseIntEnv(process.env.MEMORY_STRATA_SEMANTIC_MAX_CONCEPTS, 1000),
|
|
108
|
+
minConfidence: parseFloatEnv(process.env.MEMORY_STRATA_SEMANTIC_MIN_CONFIDENCE, 0.6)
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
surprise: {
|
|
112
|
+
enabled: process.env.MEMORY_STRATA_SURPRISE_ENABLED !== 'false',
|
|
113
|
+
threshold: parseFloatEnv(process.env.MEMORY_STRATA_SURPRISE_THRESHOLD, 0.5),
|
|
114
|
+
analysisWindow: parseIntEnv(process.env.MEMORY_STRATA_SURPRISE_WINDOW, 20)
|
|
115
|
+
},
|
|
116
|
+
|
|
117
|
+
consolidation: {
|
|
118
|
+
enabled: process.env.MEMORY_STRATA_CONSOLIDATION_ENABLED !== 'false',
|
|
119
|
+
interval: parseIntEnv(process.env.MEMORY_STRATA_CONSOLIDATION_INTERVAL_MS, HOUR),
|
|
120
|
+
similarityThreshold: parseFloatEnv(
|
|
121
|
+
process.env.MEMORY_STRATA_CONSOLIDATION_SIMILARITY,
|
|
122
|
+
0.85
|
|
123
|
+
)
|
|
124
|
+
},
|
|
125
|
+
|
|
126
|
+
patterns: {
|
|
127
|
+
enabled: process.env.MEMORY_STRATA_PATTERNS_ENABLED !== 'false',
|
|
128
|
+
minLength: parseIntEnv(process.env.MEMORY_STRATA_PATTERN_MIN_LENGTH, 3),
|
|
129
|
+
minConfidence: parseFloatEnv(process.env.MEMORY_STRATA_PATTERN_MIN_CONFIDENCE, 0.7),
|
|
130
|
+
analysisInterval: parseIntEnv(
|
|
131
|
+
process.env.MEMORY_STRATA_PATTERN_ANALYSIS_INTERVAL_MS,
|
|
132
|
+
30 * MINUTE
|
|
133
|
+
)
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
}
|
|
@@ -53,19 +53,10 @@ export const COORDINATION_TOOLS = {
|
|
|
53
53
|
LIST: 'coordination_list'
|
|
54
54
|
} as const;
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
START: 'controlLoop_start',
|
|
61
|
-
STOP: 'controlLoop_stop',
|
|
62
|
-
STATUS: 'controlLoop_status',
|
|
63
|
-
OBSERVE: 'controlLoop_observe',
|
|
64
|
-
REASON: 'controlLoop_reason',
|
|
65
|
-
PLAN: 'controlLoop_plan',
|
|
66
|
-
EXECUTE: 'controlLoop_execute',
|
|
67
|
-
REFLECT: 'controlLoop_reflect'
|
|
68
|
-
} as const;
|
|
56
|
+
// The controlLoop_* tool family was removed. It was a second, parallel implementation of
|
|
57
|
+
// the ORPAR cognitive cycle with its own state machine and result shape, and agents could
|
|
58
|
+
// see both families at once. orpar_* is the maintained one; controlLoop_status also
|
|
59
|
+
// returned fabricated metrics. See protocols/mcp/tools/OrparTools.ts.
|
|
69
60
|
|
|
70
61
|
/**
|
|
71
62
|
* Infrastructure Tools - System interaction and data management
|
|
@@ -325,7 +316,6 @@ export const ALL_INTERNAL_TOOLS = {
|
|
|
325
316
|
...WOLFRAM_TOOLS,
|
|
326
317
|
...COMMUNICATION_TOOLS,
|
|
327
318
|
...COORDINATION_TOOLS,
|
|
328
|
-
...CONTROL_LOOP_TOOLS,
|
|
329
319
|
...INFRASTRUCTURE_TOOLS,
|
|
330
320
|
...CONTEXT_MEMORY_TOOLS,
|
|
331
321
|
...META_TOOLS,
|
|
@@ -409,7 +399,6 @@ export const TOOL_CATEGORIES = {
|
|
|
409
399
|
*/
|
|
410
400
|
export type CommunicationToolName = typeof COMMUNICATION_TOOLS[keyof typeof COMMUNICATION_TOOLS];
|
|
411
401
|
export type CoordinationToolName = typeof COORDINATION_TOOLS[keyof typeof COORDINATION_TOOLS];
|
|
412
|
-
export type ControlLoopToolName = typeof CONTROL_LOOP_TOOLS[keyof typeof CONTROL_LOOP_TOOLS];
|
|
413
402
|
export type InfrastructureToolName = typeof INFRASTRUCTURE_TOOLS[keyof typeof INFRASTRUCTURE_TOOLS];
|
|
414
403
|
export type ContextMemoryToolName = typeof CONTEXT_MEMORY_TOOLS[keyof typeof CONTEXT_MEMORY_TOOLS];
|
|
415
404
|
export type MetaToolName = typeof META_TOOLS[keyof typeof META_TOOLS];
|
|
@@ -461,9 +450,6 @@ export const getToolCategory = (toolName: string): ToolCategory | null => {
|
|
|
461
450
|
if (Object.values(COORDINATION_TOOLS).includes(toolName as CoordinationToolName)) {
|
|
462
451
|
return TOOL_CATEGORIES.COORDINATION;
|
|
463
452
|
}
|
|
464
|
-
if (Object.values(CONTROL_LOOP_TOOLS).includes(toolName as ControlLoopToolName)) {
|
|
465
|
-
return TOOL_CATEGORIES.CONTROL_LOOP;
|
|
466
|
-
}
|
|
467
453
|
if (Object.values(INFRASTRUCTURE_TOOLS).includes(toolName as InfrastructureToolName)) {
|
|
468
454
|
return TOOL_CATEGORIES.INFRASTRUCTURE;
|
|
469
455
|
}
|
|
@@ -73,6 +73,14 @@ export class DatabaseAdapterFactory {
|
|
|
73
73
|
private static config: DatabaseConfig | null = null;
|
|
74
74
|
private static connected: boolean = false;
|
|
75
75
|
|
|
76
|
+
/**
|
|
77
|
+
* True only when connect() opened the connection itself, as opposed to
|
|
78
|
+
* reusing one the host application (e.g. the server) had already opened.
|
|
79
|
+
* disconnect() closes the connection only in the first case — otherwise the
|
|
80
|
+
* factory would close the server's connection out from under it.
|
|
81
|
+
*/
|
|
82
|
+
private static ownsConnection: boolean = false;
|
|
83
|
+
|
|
76
84
|
/**
|
|
77
85
|
* Initialize the factory with database configuration.
|
|
78
86
|
* Must be called before create().
|
|
@@ -81,6 +89,7 @@ export class DatabaseAdapterFactory {
|
|
|
81
89
|
this.config = config;
|
|
82
90
|
this.instance = null; // Reset instance on re-initialization
|
|
83
91
|
this.connected = false;
|
|
92
|
+
this.ownsConnection = false;
|
|
84
93
|
}
|
|
85
94
|
|
|
86
95
|
/**
|
|
@@ -115,7 +124,8 @@ export class DatabaseAdapterFactory {
|
|
|
115
124
|
private static async connectMongo(): Promise<void> {
|
|
116
125
|
// Check if mongoose is already connected (e.g., server has established connection)
|
|
117
126
|
if (mongoose.connection.readyState === 1) {
|
|
118
|
-
//
|
|
127
|
+
// Reuse the existing connection. We did not open it, so we must not close it.
|
|
128
|
+
this.ownsConnection = false;
|
|
119
129
|
return;
|
|
120
130
|
}
|
|
121
131
|
|
|
@@ -127,6 +137,7 @@ export class DatabaseAdapterFactory {
|
|
|
127
137
|
};
|
|
128
138
|
|
|
129
139
|
await mongoose.connect(this.config!.connectionString, options);
|
|
140
|
+
this.ownsConnection = true;
|
|
130
141
|
}
|
|
131
142
|
|
|
132
143
|
/**
|
|
@@ -180,22 +191,28 @@ export class DatabaseAdapterFactory {
|
|
|
180
191
|
this.instance = null;
|
|
181
192
|
this.config = null;
|
|
182
193
|
this.connected = false;
|
|
194
|
+
this.ownsConnection = false;
|
|
183
195
|
}
|
|
184
196
|
|
|
185
197
|
/**
|
|
186
198
|
* Disconnect from the database.
|
|
187
|
-
*
|
|
188
|
-
*
|
|
199
|
+
*
|
|
200
|
+
* Closes the connection only when connect() opened it. If mongoose was
|
|
201
|
+
* already connected when connect() ran — the usual case inside the server —
|
|
202
|
+
* the connection belongs to the host and is left alone.
|
|
203
|
+
*
|
|
204
|
+
* Previously `connected` was set true in both cases, so calling disconnect()
|
|
205
|
+
* closed the server's own mongoose connection.
|
|
189
206
|
*/
|
|
190
207
|
static async disconnect(): Promise<void> {
|
|
191
|
-
if (this.connected && this.config?.type === 'mongodb') {
|
|
192
|
-
// Only disconnect if we established the connection
|
|
193
|
-
// Check if mongoose connection was established by us
|
|
208
|
+
if (this.connected && this.ownsConnection && this.config?.type === 'mongodb') {
|
|
194
209
|
if (mongoose.connection.readyState === 1) {
|
|
195
210
|
await mongoose.connection.close();
|
|
196
211
|
}
|
|
197
212
|
}
|
|
213
|
+
|
|
198
214
|
this.connected = false;
|
|
215
|
+
this.ownsConnection = false;
|
|
199
216
|
}
|
|
200
217
|
|
|
201
218
|
/**
|
|
@@ -184,7 +184,13 @@ export abstract class MongoBaseRepository<T, D extends Document, CreateDTO = Par
|
|
|
184
184
|
}
|
|
185
185
|
|
|
186
186
|
/**
|
|
187
|
-
* Map comparison operator to MongoDB operator
|
|
187
|
+
* Map comparison operator to MongoDB operator.
|
|
188
|
+
*
|
|
189
|
+
* An unknown operator throws. Defaulting to '$eq' turned, say, a mistyped
|
|
190
|
+
* 'gte' into an equality match: the query ran, returned the wrong rows, and
|
|
191
|
+
* nothing anywhere said so.
|
|
192
|
+
*
|
|
193
|
+
* @throws If the operator is not one this repository supports
|
|
188
194
|
*/
|
|
189
195
|
private mapComparisonOperator(op: ComparisonOperator): string {
|
|
190
196
|
const mapping: Record<string, string> = {
|
|
@@ -198,6 +204,14 @@ export abstract class MongoBaseRepository<T, D extends Document, CreateDTO = Par
|
|
|
198
204
|
'nin': '$nin',
|
|
199
205
|
'regex': '$regex'
|
|
200
206
|
};
|
|
201
|
-
|
|
207
|
+
|
|
208
|
+
const mongoOperator = mapping[op];
|
|
209
|
+
if (!mongoOperator) {
|
|
210
|
+
throw new Error(
|
|
211
|
+
`Unsupported comparison operator '${op}'. Supported operators: ${Object.keys(mapping).join(', ')}`
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
return mongoOperator;
|
|
202
216
|
}
|
|
203
217
|
}
|