@framers/agentos 0.1.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/LICENSE +98 -0
- package/README.md +576 -0
- package/dist/api/AgentOS.d.ts +451 -0
- package/dist/api/AgentOS.d.ts.map +1 -0
- package/dist/api/AgentOS.js +1157 -0
- package/dist/api/AgentOS.js.map +1 -0
- package/dist/api/AgentOSOrchestrator.d.ts +157 -0
- package/dist/api/AgentOSOrchestrator.d.ts.map +1 -0
- package/dist/api/AgentOSOrchestrator.js +679 -0
- package/dist/api/AgentOSOrchestrator.js.map +1 -0
- package/dist/api/interfaces/IAgentOS.d.ts +138 -0
- package/dist/api/interfaces/IAgentOS.d.ts.map +1 -0
- package/dist/api/interfaces/IAgentOS.js +11 -0
- package/dist/api/interfaces/IAgentOS.js.map +1 -0
- package/dist/api/interfaces/IUnifiedAgent.d.ts +126 -0
- package/dist/api/interfaces/IUnifiedAgent.d.ts.map +1 -0
- package/dist/api/interfaces/IUnifiedAgent.js +3 -0
- package/dist/api/interfaces/IUnifiedAgent.js.map +1 -0
- package/dist/api/types/AgentOSInput.d.ts +114 -0
- package/dist/api/types/AgentOSInput.d.ts.map +1 -0
- package/dist/api/types/AgentOSInput.js +13 -0
- package/dist/api/types/AgentOSInput.js.map +1 -0
- package/dist/api/types/AgentOSResponse.d.ts +170 -0
- package/dist/api/types/AgentOSResponse.d.ts.map +1 -0
- package/dist/api/types/AgentOSResponse.js +25 -0
- package/dist/api/types/AgentOSResponse.js.map +1 -0
- package/dist/cognitive_substrate/GMI.d.ts +148 -0
- package/dist/cognitive_substrate/GMI.d.ts.map +1 -0
- package/dist/cognitive_substrate/GMI.js +1003 -0
- package/dist/cognitive_substrate/GMI.js.map +1 -0
- package/dist/cognitive_substrate/GMIManager.d.ts +98 -0
- package/dist/cognitive_substrate/GMIManager.d.ts.map +1 -0
- package/dist/cognitive_substrate/GMIManager.js +517 -0
- package/dist/cognitive_substrate/GMIManager.js.map +1 -0
- package/dist/cognitive_substrate/IGMI.d.ts +469 -0
- package/dist/cognitive_substrate/IGMI.d.ts.map +1 -0
- package/dist/cognitive_substrate/IGMI.js +111 -0
- package/dist/cognitive_substrate/IGMI.js.map +1 -0
- package/dist/cognitive_substrate/memory/IWorkingMemory.d.ts +139 -0
- package/dist/cognitive_substrate/memory/IWorkingMemory.d.ts.map +1 -0
- package/dist/cognitive_substrate/memory/IWorkingMemory.js +14 -0
- package/dist/cognitive_substrate/memory/IWorkingMemory.js.map +1 -0
- package/dist/cognitive_substrate/memory/InMemoryWorkingMemory.d.ts +143 -0
- package/dist/cognitive_substrate/memory/InMemoryWorkingMemory.d.ts.map +1 -0
- package/dist/cognitive_substrate/memory/InMemoryWorkingMemory.js +186 -0
- package/dist/cognitive_substrate/memory/InMemoryWorkingMemory.js.map +1 -0
- package/dist/cognitive_substrate/persona_overlays/PersonaOverlayManager.d.ts +33 -0
- package/dist/cognitive_substrate/persona_overlays/PersonaOverlayManager.d.ts.map +1 -0
- package/dist/cognitive_substrate/persona_overlays/PersonaOverlayManager.js +138 -0
- package/dist/cognitive_substrate/persona_overlays/PersonaOverlayManager.js.map +1 -0
- package/dist/cognitive_substrate/persona_overlays/PersonaOverlayTypes.d.ts +32 -0
- package/dist/cognitive_substrate/persona_overlays/PersonaOverlayTypes.d.ts.map +1 -0
- package/dist/cognitive_substrate/persona_overlays/PersonaOverlayTypes.js +2 -0
- package/dist/cognitive_substrate/persona_overlays/PersonaOverlayTypes.js.map +1 -0
- package/dist/cognitive_substrate/personas/IPersonaDefinition.d.ts +336 -0
- package/dist/cognitive_substrate/personas/IPersonaDefinition.d.ts.map +1 -0
- package/dist/cognitive_substrate/personas/IPersonaDefinition.js +8 -0
- package/dist/cognitive_substrate/personas/IPersonaDefinition.js.map +1 -0
- package/dist/cognitive_substrate/personas/IPersonaLoader.d.ts +78 -0
- package/dist/cognitive_substrate/personas/IPersonaLoader.d.ts.map +1 -0
- package/dist/cognitive_substrate/personas/IPersonaLoader.js +9 -0
- package/dist/cognitive_substrate/personas/IPersonaLoader.js.map +1 -0
- package/dist/cognitive_substrate/personas/PersonaLoader.d.ts +60 -0
- package/dist/cognitive_substrate/personas/PersonaLoader.d.ts.map +1 -0
- package/dist/cognitive_substrate/personas/PersonaLoader.js +138 -0
- package/dist/cognitive_substrate/personas/PersonaLoader.js.map +1 -0
- package/dist/cognitive_substrate/personas/PersonaValidation.d.ts +139 -0
- package/dist/cognitive_substrate/personas/PersonaValidation.d.ts.map +1 -0
- package/dist/cognitive_substrate/personas/PersonaValidation.js +277 -0
- package/dist/cognitive_substrate/personas/PersonaValidation.js.map +1 -0
- package/dist/cognitive_substrate/personas/definitions/atlas_systems_architect.json +29 -0
- package/dist/cognitive_substrate/personas/definitions/default_assistant_persona.json +346 -0
- package/dist/cognitive_substrate/personas/definitions/default_free_assistant.json +13 -0
- package/dist/cognitive_substrate/personas/definitions/index.d.ts +14 -0
- package/dist/cognitive_substrate/personas/definitions/index.d.ts.map +1 -0
- package/dist/cognitive_substrate/personas/definitions/index.js +35 -0
- package/dist/cognitive_substrate/personas/definitions/index.js.map +1 -0
- package/dist/cognitive_substrate/personas/definitions/nerf_generalist.json +11 -0
- package/dist/cognitive_substrate/personas/definitions/v_researcher.json +11 -0
- package/dist/config/AgentOSConfig.d.ts +74 -0
- package/dist/config/AgentOSConfig.d.ts.map +1 -0
- package/dist/config/AgentOSConfig.js +399 -0
- package/dist/config/AgentOSConfig.js.map +1 -0
- package/dist/config/EmbeddingManagerConfiguration.d.ts +190 -0
- package/dist/config/EmbeddingManagerConfiguration.d.ts.map +1 -0
- package/dist/config/EmbeddingManagerConfiguration.js +16 -0
- package/dist/config/EmbeddingManagerConfiguration.js.map +1 -0
- package/dist/config/MemoryLifecycleManagerConfiguration.d.ts +165 -0
- package/dist/config/MemoryLifecycleManagerConfiguration.d.ts.map +1 -0
- package/dist/config/MemoryLifecycleManagerConfiguration.js +69 -0
- package/dist/config/MemoryLifecycleManagerConfiguration.js.map +1 -0
- package/dist/config/RetrievalAugmentorConfiguration.d.ts +98 -0
- package/dist/config/RetrievalAugmentorConfiguration.d.ts.map +1 -0
- package/dist/config/RetrievalAugmentorConfiguration.js +47 -0
- package/dist/config/RetrievalAugmentorConfiguration.js.map +1 -0
- package/dist/config/ToolOrchestratorConfig.d.ts +69 -0
- package/dist/config/ToolOrchestratorConfig.d.ts.map +1 -0
- package/dist/config/ToolOrchestratorConfig.js +11 -0
- package/dist/config/ToolOrchestratorConfig.js.map +1 -0
- package/dist/config/VectorStoreConfiguration.d.ts +223 -0
- package/dist/config/VectorStoreConfiguration.d.ts.map +1 -0
- package/dist/config/VectorStoreConfiguration.js +59 -0
- package/dist/config/VectorStoreConfiguration.js.map +1 -0
- package/dist/config/extension-secrets.json +38 -0
- package/dist/config/extensionSecrets.d.ts +13 -0
- package/dist/config/extensionSecrets.d.ts.map +1 -0
- package/dist/config/extensionSecrets.js +24 -0
- package/dist/config/extensionSecrets.js.map +1 -0
- package/dist/core/agency/AgencyMemoryManager.d.ts +300 -0
- package/dist/core/agency/AgencyMemoryManager.d.ts.map +1 -0
- package/dist/core/agency/AgencyMemoryManager.js +657 -0
- package/dist/core/agency/AgencyMemoryManager.js.map +1 -0
- package/dist/core/agency/AgencyRegistry.d.ts +100 -0
- package/dist/core/agency/AgencyRegistry.d.ts.map +1 -0
- package/dist/core/agency/AgencyRegistry.js +209 -0
- package/dist/core/agency/AgencyRegistry.js.map +1 -0
- package/dist/core/agency/AgencyTypes.d.ts +200 -0
- package/dist/core/agency/AgencyTypes.d.ts.map +1 -0
- package/dist/core/agency/AgencyTypes.js +7 -0
- package/dist/core/agency/AgencyTypes.js.map +1 -0
- package/dist/core/agency/AgentCommunicationBus.d.ts +150 -0
- package/dist/core/agency/AgentCommunicationBus.d.ts.map +1 -0
- package/dist/core/agency/AgentCommunicationBus.js +568 -0
- package/dist/core/agency/AgentCommunicationBus.js.map +1 -0
- package/dist/core/agency/IAgentCommunicationBus.d.ts +469 -0
- package/dist/core/agency/IAgentCommunicationBus.d.ts.map +1 -0
- package/dist/core/agency/IAgentCommunicationBus.js +40 -0
- package/dist/core/agency/IAgentCommunicationBus.js.map +1 -0
- package/dist/core/agency/index.d.ts +18 -0
- package/dist/core/agency/index.d.ts.map +1 -0
- package/dist/core/agency/index.js +18 -0
- package/dist/core/agency/index.js.map +1 -0
- package/dist/core/agents/AgentCore.d.ts +385 -0
- package/dist/core/agents/AgentCore.d.ts.map +1 -0
- package/dist/core/agents/AgentCore.js +527 -0
- package/dist/core/agents/AgentCore.js.map +1 -0
- package/dist/core/agents/AgentFactory.d.ts +123 -0
- package/dist/core/agents/AgentFactory.d.ts.map +1 -0
- package/dist/core/agents/AgentFactory.js +232 -0
- package/dist/core/agents/AgentFactory.js.map +1 -0
- package/dist/core/agents/AgentPoolAgent.d.ts +244 -0
- package/dist/core/agents/AgentPoolAgent.d.ts.map +1 -0
- package/dist/core/agents/AgentPoolAgent.js +697 -0
- package/dist/core/agents/AgentPoolAgent.js.map +1 -0
- package/dist/core/agents/AgentPoolConfig.d.ts +191 -0
- package/dist/core/agents/AgentPoolConfig.d.ts.map +1 -0
- package/dist/core/agents/AgentPoolConfig.js +58 -0
- package/dist/core/agents/AgentPoolConfig.js.map +1 -0
- package/dist/core/agents/IAgent.d.ts +226 -0
- package/dist/core/agents/IAgent.d.ts.map +1 -0
- package/dist/core/agents/IAgent.js +14 -0
- package/dist/core/agents/IAgent.js.map +1 -0
- package/dist/core/agents/IAgentFactory.d.ts +137 -0
- package/dist/core/agents/IAgentFactory.d.ts.map +1 -0
- package/dist/core/agents/IAgentFactory.js +13 -0
- package/dist/core/agents/IAgentFactory.js.map +1 -0
- package/dist/core/agents/tools/Tool.d.ts +17 -0
- package/dist/core/agents/tools/Tool.d.ts.map +1 -0
- package/dist/core/agents/tools/Tool.js +8 -0
- package/dist/core/agents/tools/Tool.js.map +1 -0
- package/dist/core/ai_utilities/HybridUtilityAI.d.ts +1 -0
- package/dist/core/ai_utilities/HybridUtilityAI.d.ts.map +1 -0
- package/dist/core/ai_utilities/HybridUtilityAI.js +2 -0
- package/dist/core/ai_utilities/HybridUtilityAI.js.map +1 -0
- package/dist/core/ai_utilities/IUtilityAI.d.ts +212 -0
- package/dist/core/ai_utilities/IUtilityAI.d.ts.map +1 -0
- package/dist/core/ai_utilities/IUtilityAI.js +11 -0
- package/dist/core/ai_utilities/IUtilityAI.js.map +1 -0
- package/dist/core/ai_utilities/LLMUtilityAI.d.ts +94 -0
- package/dist/core/ai_utilities/LLMUtilityAI.d.ts.map +1 -0
- package/dist/core/ai_utilities/LLMUtilityAI.js +434 -0
- package/dist/core/ai_utilities/LLMUtilityAI.js.map +1 -0
- package/dist/core/ai_utilities/StatisticalUtilityAI.d.ts +102 -0
- package/dist/core/ai_utilities/StatisticalUtilityAI.d.ts.map +1 -0
- package/dist/core/ai_utilities/StatisticalUtilityAI.js +617 -0
- package/dist/core/ai_utilities/StatisticalUtilityAI.js.map +1 -0
- package/dist/core/conversation/ConversationContext.d.ts +259 -0
- package/dist/core/conversation/ConversationContext.d.ts.map +1 -0
- package/dist/core/conversation/ConversationContext.js +450 -0
- package/dist/core/conversation/ConversationContext.js.map +1 -0
- package/dist/core/conversation/ConversationManager.d.ts +223 -0
- package/dist/core/conversation/ConversationManager.d.ts.map +1 -0
- package/dist/core/conversation/ConversationManager.js +558 -0
- package/dist/core/conversation/ConversationManager.js.map +1 -0
- package/dist/core/conversation/ConversationMessage.d.ts +184 -0
- package/dist/core/conversation/ConversationMessage.d.ts.map +1 -0
- package/dist/core/conversation/ConversationMessage.js +66 -0
- package/dist/core/conversation/ConversationMessage.js.map +1 -0
- package/dist/core/evaluation/Evaluator.d.ts +28 -0
- package/dist/core/evaluation/Evaluator.d.ts.map +1 -0
- package/dist/core/evaluation/Evaluator.js +490 -0
- package/dist/core/evaluation/Evaluator.js.map +1 -0
- package/dist/core/evaluation/IEvaluator.d.ts +309 -0
- package/dist/core/evaluation/IEvaluator.d.ts.map +1 -0
- package/dist/core/evaluation/IEvaluator.js +12 -0
- package/dist/core/evaluation/IEvaluator.js.map +1 -0
- package/dist/core/evaluation/LLMJudge.d.ts +105 -0
- package/dist/core/evaluation/LLMJudge.d.ts.map +1 -0
- package/dist/core/evaluation/LLMJudge.js +229 -0
- package/dist/core/evaluation/LLMJudge.js.map +1 -0
- package/dist/core/evaluation/index.d.ts +9 -0
- package/dist/core/evaluation/index.d.ts.map +1 -0
- package/dist/core/evaluation/index.js +9 -0
- package/dist/core/evaluation/index.js.map +1 -0
- package/dist/core/guardrails/IGuardrailService.d.ts +142 -0
- package/dist/core/guardrails/IGuardrailService.d.ts.map +1 -0
- package/dist/core/guardrails/IGuardrailService.js +24 -0
- package/dist/core/guardrails/IGuardrailService.js.map +1 -0
- package/dist/core/guardrails/guardrailDispatcher.d.ts +36 -0
- package/dist/core/guardrails/guardrailDispatcher.d.ts.map +1 -0
- package/dist/core/guardrails/guardrailDispatcher.js +240 -0
- package/dist/core/guardrails/guardrailDispatcher.js.map +1 -0
- package/dist/core/hitl/HumanInteractionManager.d.ts +146 -0
- package/dist/core/hitl/HumanInteractionManager.d.ts.map +1 -0
- package/dist/core/hitl/HumanInteractionManager.js +491 -0
- package/dist/core/hitl/HumanInteractionManager.js.map +1 -0
- package/dist/core/hitl/IHumanInteractionManager.d.ts +521 -0
- package/dist/core/hitl/IHumanInteractionManager.d.ts.map +1 -0
- package/dist/core/hitl/IHumanInteractionManager.js +33 -0
- package/dist/core/hitl/IHumanInteractionManager.js.map +1 -0
- package/dist/core/hitl/index.d.ts +17 -0
- package/dist/core/hitl/index.d.ts.map +1 -0
- package/dist/core/hitl/index.js +17 -0
- package/dist/core/hitl/index.js.map +1 -0
- package/dist/core/knowledge/IKnowledgeGraph.d.ts +351 -0
- package/dist/core/knowledge/IKnowledgeGraph.d.ts.map +1 -0
- package/dist/core/knowledge/IKnowledgeGraph.js +10 -0
- package/dist/core/knowledge/IKnowledgeGraph.js.map +1 -0
- package/dist/core/knowledge/KnowledgeGraph.d.ts +93 -0
- package/dist/core/knowledge/KnowledgeGraph.d.ts.map +1 -0
- package/dist/core/knowledge/KnowledgeGraph.js +601 -0
- package/dist/core/knowledge/KnowledgeGraph.js.map +1 -0
- package/dist/core/knowledge/index.d.ts +8 -0
- package/dist/core/knowledge/index.d.ts.map +1 -0
- package/dist/core/knowledge/index.js +8 -0
- package/dist/core/knowledge/index.js.map +1 -0
- package/dist/core/language/LanguageService.d.ts +77 -0
- package/dist/core/language/LanguageService.d.ts.map +1 -0
- package/dist/core/language/LanguageService.js +305 -0
- package/dist/core/language/LanguageService.js.map +1 -0
- package/dist/core/language/index.d.ts +6 -0
- package/dist/core/language/index.d.ts.map +1 -0
- package/dist/core/language/index.js +6 -0
- package/dist/core/language/index.js.map +1 -0
- package/dist/core/language/interfaces.d.ts +168 -0
- package/dist/core/language/interfaces.d.ts.map +1 -0
- package/dist/core/language/interfaces.js +37 -0
- package/dist/core/language/interfaces.js.map +1 -0
- package/dist/core/language/providers/DeepLTranslationProvider.d.ts +16 -0
- package/dist/core/language/providers/DeepLTranslationProvider.d.ts.map +1 -0
- package/dist/core/language/providers/DeepLTranslationProvider.js +28 -0
- package/dist/core/language/providers/DeepLTranslationProvider.js.map +1 -0
- package/dist/core/language/providers/OpenAITranslationProvider.d.ts +17 -0
- package/dist/core/language/providers/OpenAITranslationProvider.d.ts.map +1 -0
- package/dist/core/language/providers/OpenAITranslationProvider.js +34 -0
- package/dist/core/language/providers/OpenAITranslationProvider.js.map +1 -0
- package/dist/core/language/providers/WhisperDetectionProvider.d.ts +16 -0
- package/dist/core/language/providers/WhisperDetectionProvider.d.ts.map +1 -0
- package/dist/core/language/providers/WhisperDetectionProvider.js +15 -0
- package/dist/core/language/providers/WhisperDetectionProvider.js.map +1 -0
- package/dist/core/llm/IPromptEngine.d.ts +627 -0
- package/dist/core/llm/IPromptEngine.d.ts.map +1 -0
- package/dist/core/llm/IPromptEngine.js +81 -0
- package/dist/core/llm/IPromptEngine.js.map +1 -0
- package/dist/core/llm/PromptEngine.d.ts +108 -0
- package/dist/core/llm/PromptEngine.d.ts.map +1 -0
- package/dist/core/llm/PromptEngine.js +872 -0
- package/dist/core/llm/PromptEngine.js.map +1 -0
- package/dist/core/llm/providers/AIModelProviderManager.d.ts +74 -0
- package/dist/core/llm/providers/AIModelProviderManager.d.ts.map +1 -0
- package/dist/core/llm/providers/AIModelProviderManager.js +263 -0
- package/dist/core/llm/providers/AIModelProviderManager.js.map +1 -0
- package/dist/core/llm/providers/IProvider.d.ts +327 -0
- package/dist/core/llm/providers/IProvider.d.ts.map +1 -0
- package/dist/core/llm/providers/IProvider.js +39 -0
- package/dist/core/llm/providers/IProvider.js.map +1 -0
- package/dist/core/llm/providers/errors/OllamaProviderError.d.ts +36 -0
- package/dist/core/llm/providers/errors/OllamaProviderError.d.ts.map +1 -0
- package/dist/core/llm/providers/errors/OllamaProviderError.js +40 -0
- package/dist/core/llm/providers/errors/OllamaProviderError.js.map +1 -0
- package/dist/core/llm/providers/errors/OpenAIProviderError.d.ts +42 -0
- package/dist/core/llm/providers/errors/OpenAIProviderError.d.ts.map +1 -0
- package/dist/core/llm/providers/errors/OpenAIProviderError.js +44 -0
- package/dist/core/llm/providers/errors/OpenAIProviderError.js.map +1 -0
- package/dist/core/llm/providers/errors/OpenRouterProviderError.d.ts +39 -0
- package/dist/core/llm/providers/errors/OpenRouterProviderError.d.ts.map +1 -0
- package/dist/core/llm/providers/errors/OpenRouterProviderError.js +42 -0
- package/dist/core/llm/providers/errors/OpenRouterProviderError.js.map +1 -0
- package/dist/core/llm/providers/errors/ProviderError.d.ts +37 -0
- package/dist/core/llm/providers/errors/ProviderError.d.ts.map +1 -0
- package/dist/core/llm/providers/errors/ProviderError.js +36 -0
- package/dist/core/llm/providers/errors/ProviderError.js.map +1 -0
- package/dist/core/llm/providers/implementations/OllamaProvider.d.ts +80 -0
- package/dist/core/llm/providers/implementations/OllamaProvider.d.ts.map +1 -0
- package/dist/core/llm/providers/implementations/OllamaProvider.js +473 -0
- package/dist/core/llm/providers/implementations/OllamaProvider.js.map +1 -0
- package/dist/core/llm/providers/implementations/OpenAIProvider.d.ts +160 -0
- package/dist/core/llm/providers/implementations/OpenAIProvider.d.ts.map +1 -0
- package/dist/core/llm/providers/implementations/OpenAIProvider.js +672 -0
- package/dist/core/llm/providers/implementations/OpenAIProvider.js.map +1 -0
- package/dist/core/llm/providers/implementations/OpenRouterProvider.d.ts +51 -0
- package/dist/core/llm/providers/implementations/OpenRouterProvider.d.ts.map +1 -0
- package/dist/core/llm/providers/implementations/OpenRouterProvider.js +499 -0
- package/dist/core/llm/providers/implementations/OpenRouterProvider.js.map +1 -0
- package/dist/core/llm/routing/IModelRouter.d.ts +129 -0
- package/dist/core/llm/routing/IModelRouter.d.ts.map +1 -0
- package/dist/core/llm/routing/IModelRouter.js +14 -0
- package/dist/core/llm/routing/IModelRouter.js.map +1 -0
- package/dist/core/llm/routing/ModelRouter.d.ts +157 -0
- package/dist/core/llm/routing/ModelRouter.d.ts.map +1 -0
- package/dist/core/llm/routing/ModelRouter.js +190 -0
- package/dist/core/llm/routing/ModelRouter.js.map +1 -0
- package/dist/core/llm/streaming/StreamingBatcher.d.ts +54 -0
- package/dist/core/llm/streaming/StreamingBatcher.d.ts.map +1 -0
- package/dist/core/llm/streaming/StreamingBatcher.js +173 -0
- package/dist/core/llm/streaming/StreamingBatcher.js.map +1 -0
- package/dist/core/llm/streaming/StreamingReconstructor.d.ts +69 -0
- package/dist/core/llm/streaming/StreamingReconstructor.d.ts.map +1 -0
- package/dist/core/llm/streaming/StreamingReconstructor.js +102 -0
- package/dist/core/llm/streaming/StreamingReconstructor.js.map +1 -0
- package/dist/core/marketplace/IMarketplace.d.ts +500 -0
- package/dist/core/marketplace/IMarketplace.d.ts.map +1 -0
- package/dist/core/marketplace/IMarketplace.js +10 -0
- package/dist/core/marketplace/IMarketplace.js.map +1 -0
- package/dist/core/marketplace/Marketplace.d.ts +122 -0
- package/dist/core/marketplace/Marketplace.d.ts.map +1 -0
- package/dist/core/marketplace/Marketplace.js +591 -0
- package/dist/core/marketplace/Marketplace.js.map +1 -0
- package/dist/core/marketplace/index.d.ts +8 -0
- package/dist/core/marketplace/index.d.ts.map +1 -0
- package/dist/core/marketplace/index.js +8 -0
- package/dist/core/marketplace/index.js.map +1 -0
- package/dist/core/observability/ITracer.d.ts +317 -0
- package/dist/core/observability/ITracer.d.ts.map +1 -0
- package/dist/core/observability/ITracer.js +55 -0
- package/dist/core/observability/ITracer.js.map +1 -0
- package/dist/core/observability/Tracer.d.ts +76 -0
- package/dist/core/observability/Tracer.d.ts.map +1 -0
- package/dist/core/observability/Tracer.js +360 -0
- package/dist/core/observability/Tracer.js.map +1 -0
- package/dist/core/observability/index.d.ts +9 -0
- package/dist/core/observability/index.d.ts.map +1 -0
- package/dist/core/observability/index.js +8 -0
- package/dist/core/observability/index.js.map +1 -0
- package/dist/core/orchestration/AgentOrchestrator.d.ts +243 -0
- package/dist/core/orchestration/AgentOrchestrator.d.ts.map +1 -0
- package/dist/core/orchestration/AgentOrchestrator.js +648 -0
- package/dist/core/orchestration/AgentOrchestrator.js.map +1 -0
- package/dist/core/orchestration/IAgentOrchestrator.d.ts +44 -0
- package/dist/core/orchestration/IAgentOrchestrator.d.ts.map +1 -0
- package/dist/core/orchestration/IAgentOrchestrator.js +4 -0
- package/dist/core/orchestration/IAgentOrchestrator.js.map +1 -0
- package/dist/core/orchestration/helpers.d.ts +12 -0
- package/dist/core/orchestration/helpers.d.ts.map +1 -0
- package/dist/core/orchestration/helpers.js +36 -0
- package/dist/core/orchestration/helpers.js.map +1 -0
- package/dist/core/planning/IPlanningEngine.d.ts +524 -0
- package/dist/core/planning/IPlanningEngine.d.ts.map +1 -0
- package/dist/core/planning/IPlanningEngine.js +32 -0
- package/dist/core/planning/IPlanningEngine.js.map +1 -0
- package/dist/core/planning/PlanningEngine.d.ts +161 -0
- package/dist/core/planning/PlanningEngine.d.ts.map +1 -0
- package/dist/core/planning/PlanningEngine.js +783 -0
- package/dist/core/planning/PlanningEngine.js.map +1 -0
- package/dist/core/planning/index.d.ts +25 -0
- package/dist/core/planning/index.d.ts.map +1 -0
- package/dist/core/planning/index.js +25 -0
- package/dist/core/planning/index.js.map +1 -0
- package/dist/core/sandbox/CodeSandbox.d.ts +86 -0
- package/dist/core/sandbox/CodeSandbox.d.ts.map +1 -0
- package/dist/core/sandbox/CodeSandbox.js +475 -0
- package/dist/core/sandbox/CodeSandbox.js.map +1 -0
- package/dist/core/sandbox/ICodeSandbox.d.ts +249 -0
- package/dist/core/sandbox/ICodeSandbox.d.ts.map +1 -0
- package/dist/core/sandbox/ICodeSandbox.js +24 -0
- package/dist/core/sandbox/ICodeSandbox.js.map +1 -0
- package/dist/core/sandbox/index.d.ts +9 -0
- package/dist/core/sandbox/index.d.ts.map +1 -0
- package/dist/core/sandbox/index.js +8 -0
- package/dist/core/sandbox/index.js.map +1 -0
- package/dist/core/storage/IStorageAdapter.d.ts +483 -0
- package/dist/core/storage/IStorageAdapter.d.ts.map +1 -0
- package/dist/core/storage/IStorageAdapter.js +19 -0
- package/dist/core/storage/IStorageAdapter.js.map +1 -0
- package/dist/core/storage/InMemoryStorageAdapter.d.ts +192 -0
- package/dist/core/storage/InMemoryStorageAdapter.d.ts.map +1 -0
- package/dist/core/storage/InMemoryStorageAdapter.js +343 -0
- package/dist/core/storage/InMemoryStorageAdapter.js.map +1 -0
- package/dist/core/storage/SqlStorageAdapter.d.ts +262 -0
- package/dist/core/storage/SqlStorageAdapter.d.ts.map +1 -0
- package/dist/core/storage/SqlStorageAdapter.js +485 -0
- package/dist/core/storage/SqlStorageAdapter.js.map +1 -0
- package/dist/core/storage/index.d.ts +14 -0
- package/dist/core/storage/index.d.ts.map +1 -0
- package/dist/core/storage/index.js +14 -0
- package/dist/core/storage/index.js.map +1 -0
- package/dist/core/streaming/IStreamClient.d.ts +72 -0
- package/dist/core/streaming/IStreamClient.d.ts.map +1 -0
- package/dist/core/streaming/IStreamClient.js +12 -0
- package/dist/core/streaming/IStreamClient.js.map +1 -0
- package/dist/core/streaming/StreamingManager.d.ts +242 -0
- package/dist/core/streaming/StreamingManager.d.ts.map +1 -0
- package/dist/core/streaming/StreamingManager.js +282 -0
- package/dist/core/streaming/StreamingManager.js.map +1 -0
- package/dist/core/structured/IStructuredOutputManager.d.ts +701 -0
- package/dist/core/structured/IStructuredOutputManager.d.ts.map +1 -0
- package/dist/core/structured/IStructuredOutputManager.js +74 -0
- package/dist/core/structured/IStructuredOutputManager.js.map +1 -0
- package/dist/core/structured/StructuredOutputManager.d.ts +140 -0
- package/dist/core/structured/StructuredOutputManager.d.ts.map +1 -0
- package/dist/core/structured/StructuredOutputManager.js +1015 -0
- package/dist/core/structured/StructuredOutputManager.js.map +1 -0
- package/dist/core/structured/index.d.ts +34 -0
- package/dist/core/structured/index.d.ts.map +1 -0
- package/dist/core/structured/index.js +34 -0
- package/dist/core/structured/index.js.map +1 -0
- package/dist/core/tools/ITool.d.ts +228 -0
- package/dist/core/tools/ITool.d.ts.map +1 -0
- package/dist/core/tools/ITool.js +11 -0
- package/dist/core/tools/ITool.js.map +1 -0
- package/dist/core/tools/IToolOrchestrator.d.ts +131 -0
- package/dist/core/tools/IToolOrchestrator.d.ts.map +1 -0
- package/dist/core/tools/IToolOrchestrator.js +14 -0
- package/dist/core/tools/IToolOrchestrator.js.map +1 -0
- package/dist/core/tools/ToolExecutor.d.ts +143 -0
- package/dist/core/tools/ToolExecutor.d.ts.map +1 -0
- package/dist/core/tools/ToolExecutor.js +364 -0
- package/dist/core/tools/ToolExecutor.js.map +1 -0
- package/dist/core/tools/ToolOrchestrator.d.ts +142 -0
- package/dist/core/tools/ToolOrchestrator.d.ts.map +1 -0
- package/dist/core/tools/ToolOrchestrator.js +373 -0
- package/dist/core/tools/ToolOrchestrator.js.map +1 -0
- package/dist/core/tools/permissions/IToolPermissionManager.d.ts +195 -0
- package/dist/core/tools/permissions/IToolPermissionManager.d.ts.map +1 -0
- package/dist/core/tools/permissions/IToolPermissionManager.js +14 -0
- package/dist/core/tools/permissions/IToolPermissionManager.js.map +1 -0
- package/dist/core/tools/permissions/ToolPermissionManager.d.ts +203 -0
- package/dist/core/tools/permissions/ToolPermissionManager.d.ts.map +1 -0
- package/dist/core/tools/permissions/ToolPermissionManager.js +298 -0
- package/dist/core/tools/permissions/ToolPermissionManager.js.map +1 -0
- package/dist/core/ui/IUIComponent.d.ts +11 -0
- package/dist/core/ui/IUIComponent.d.ts.map +1 -0
- package/dist/core/ui/IUIComponent.js +2 -0
- package/dist/core/ui/IUIComponent.js.map +1 -0
- package/dist/core/usage/UsageLedger.d.ts +81 -0
- package/dist/core/usage/UsageLedger.d.ts.map +1 -0
- package/dist/core/usage/UsageLedger.js +135 -0
- package/dist/core/usage/UsageLedger.js.map +1 -0
- package/dist/core/workflows/IWorkflowEngine.d.ts +42 -0
- package/dist/core/workflows/IWorkflowEngine.d.ts.map +1 -0
- package/dist/core/workflows/IWorkflowEngine.js +2 -0
- package/dist/core/workflows/IWorkflowEngine.js.map +1 -0
- package/dist/core/workflows/WorkflowEngine.d.ts +28 -0
- package/dist/core/workflows/WorkflowEngine.d.ts.map +1 -0
- package/dist/core/workflows/WorkflowEngine.js +309 -0
- package/dist/core/workflows/WorkflowEngine.js.map +1 -0
- package/dist/core/workflows/WorkflowTypes.d.ts +180 -0
- package/dist/core/workflows/WorkflowTypes.d.ts.map +1 -0
- package/dist/core/workflows/WorkflowTypes.js +26 -0
- package/dist/core/workflows/WorkflowTypes.js.map +1 -0
- package/dist/core/workflows/runtime/WorkflowRuntime.d.ts +70 -0
- package/dist/core/workflows/runtime/WorkflowRuntime.d.ts.map +1 -0
- package/dist/core/workflows/runtime/WorkflowRuntime.js +566 -0
- package/dist/core/workflows/runtime/WorkflowRuntime.js.map +1 -0
- package/dist/core/workflows/storage/IWorkflowStore.d.ts +75 -0
- package/dist/core/workflows/storage/IWorkflowStore.d.ts.map +1 -0
- package/dist/core/workflows/storage/IWorkflowStore.js +2 -0
- package/dist/core/workflows/storage/IWorkflowStore.js.map +1 -0
- package/dist/core/workflows/storage/InMemoryWorkflowStore.d.ts +14 -0
- package/dist/core/workflows/storage/InMemoryWorkflowStore.d.ts.map +1 -0
- package/dist/core/workflows/storage/InMemoryWorkflowStore.js +130 -0
- package/dist/core/workflows/storage/InMemoryWorkflowStore.js.map +1 -0
- package/dist/extensions/ExtensionLoader.d.ts +119 -0
- package/dist/extensions/ExtensionLoader.d.ts.map +1 -0
- package/dist/extensions/ExtensionLoader.js +297 -0
- package/dist/extensions/ExtensionLoader.js.map +1 -0
- package/dist/extensions/ExtensionManager.d.ts +49 -0
- package/dist/extensions/ExtensionManager.d.ts.map +1 -0
- package/dist/extensions/ExtensionManager.js +197 -0
- package/dist/extensions/ExtensionManager.js.map +1 -0
- package/dist/extensions/ExtensionRegistry.d.ts +39 -0
- package/dist/extensions/ExtensionRegistry.d.ts.map +1 -0
- package/dist/extensions/ExtensionRegistry.js +103 -0
- package/dist/extensions/ExtensionRegistry.js.map +1 -0
- package/dist/extensions/MultiRegistryLoader.d.ts +61 -0
- package/dist/extensions/MultiRegistryLoader.d.ts.map +1 -0
- package/dist/extensions/MultiRegistryLoader.js +169 -0
- package/dist/extensions/MultiRegistryLoader.js.map +1 -0
- package/dist/extensions/RegistryConfig.d.ts +86 -0
- package/dist/extensions/RegistryConfig.d.ts.map +1 -0
- package/dist/extensions/RegistryConfig.js +99 -0
- package/dist/extensions/RegistryConfig.js.map +1 -0
- package/dist/extensions/events.d.ts +19 -0
- package/dist/extensions/events.d.ts.map +1 -0
- package/dist/extensions/events.js +2 -0
- package/dist/extensions/events.js.map +1 -0
- package/dist/extensions/index.d.ts +9 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +9 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/manifest.d.ts +52 -0
- package/dist/extensions/manifest.d.ts.map +1 -0
- package/dist/extensions/manifest.js +2 -0
- package/dist/extensions/manifest.js.map +1 -0
- package/dist/extensions/types.d.ts +294 -0
- package/dist/extensions/types.d.ts.map +1 -0
- package/dist/extensions/types.js +12 -0
- package/dist/extensions/types.js.map +1 -0
- package/dist/index.d.ts +49 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +59 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/ILogger.d.ts +8 -0
- package/dist/logging/ILogger.d.ts.map +1 -0
- package/dist/logging/ILogger.js +2 -0
- package/dist/logging/ILogger.js.map +1 -0
- package/dist/logging/PinoLogger.d.ts +12 -0
- package/dist/logging/PinoLogger.d.ts.map +1 -0
- package/dist/logging/PinoLogger.js +22 -0
- package/dist/logging/PinoLogger.js.map +1 -0
- package/dist/logging/loggerFactory.d.ts +6 -0
- package/dist/logging/loggerFactory.d.ts.map +1 -0
- package/dist/logging/loggerFactory.js +14 -0
- package/dist/logging/loggerFactory.js.map +1 -0
- package/dist/rag/EmbeddingManager.d.ts +81 -0
- package/dist/rag/EmbeddingManager.d.ts.map +1 -0
- package/dist/rag/EmbeddingManager.js +412 -0
- package/dist/rag/EmbeddingManager.js.map +1 -0
- package/dist/rag/IEmbeddingManager.d.ts +277 -0
- package/dist/rag/IEmbeddingManager.d.ts.map +1 -0
- package/dist/rag/IEmbeddingManager.js +19 -0
- package/dist/rag/IEmbeddingManager.js.map +1 -0
- package/dist/rag/IRetrievalAugmentor.d.ts +208 -0
- package/dist/rag/IRetrievalAugmentor.d.ts.map +1 -0
- package/dist/rag/IRetrievalAugmentor.js +21 -0
- package/dist/rag/IRetrievalAugmentor.js.map +1 -0
- package/dist/rag/IVectorStore.d.ts +351 -0
- package/dist/rag/IVectorStore.d.ts.map +1 -0
- package/dist/rag/IVectorStore.js +15 -0
- package/dist/rag/IVectorStore.js.map +1 -0
- package/dist/rag/IVectorStoreManager.d.ts +121 -0
- package/dist/rag/IVectorStoreManager.d.ts.map +1 -0
- package/dist/rag/IVectorStoreManager.js +13 -0
- package/dist/rag/IVectorStoreManager.js.map +1 -0
- package/dist/rag/RetrievalAugmentor.d.ts +99 -0
- package/dist/rag/RetrievalAugmentor.d.ts.map +1 -0
- package/dist/rag/RetrievalAugmentor.js +674 -0
- package/dist/rag/RetrievalAugmentor.js.map +1 -0
- package/dist/rag/VectorStoreManager.d.ts +90 -0
- package/dist/rag/VectorStoreManager.d.ts.map +1 -0
- package/dist/rag/VectorStoreManager.js +283 -0
- package/dist/rag/VectorStoreManager.js.map +1 -0
- package/dist/rag/implementations/index.d.ts +9 -0
- package/dist/rag/implementations/index.d.ts.map +1 -0
- package/dist/rag/implementations/index.js +9 -0
- package/dist/rag/implementations/index.js.map +1 -0
- package/dist/rag/implementations/vector_stores/InMemoryVectorStore.d.ts +132 -0
- package/dist/rag/implementations/vector_stores/InMemoryVectorStore.d.ts.map +1 -0
- package/dist/rag/implementations/vector_stores/InMemoryVectorStore.js +539 -0
- package/dist/rag/implementations/vector_stores/InMemoryVectorStore.js.map +1 -0
- package/dist/rag/implementations/vector_stores/SqlVectorStore.d.ts +265 -0
- package/dist/rag/implementations/vector_stores/SqlVectorStore.d.ts.map +1 -0
- package/dist/rag/implementations/vector_stores/SqlVectorStore.js +755 -0
- package/dist/rag/implementations/vector_stores/SqlVectorStore.js.map +1 -0
- package/dist/rag/implementations/vector_stores/index.d.ts +10 -0
- package/dist/rag/implementations/vector_stores/index.d.ts.map +1 -0
- package/dist/rag/implementations/vector_stores/index.js +12 -0
- package/dist/rag/implementations/vector_stores/index.js.map +1 -0
- package/dist/rag/index.d.ts +95 -0
- package/dist/rag/index.d.ts.map +1 -0
- package/dist/rag/index.js +97 -0
- package/dist/rag/index.js.map +1 -0
- package/dist/services/user_auth/AuthService.d.ts +13 -0
- package/dist/services/user_auth/AuthService.d.ts.map +1 -0
- package/dist/services/user_auth/AuthService.js +24 -0
- package/dist/services/user_auth/AuthService.js.map +1 -0
- package/dist/services/user_auth/SubscriptionService.d.ts +14 -0
- package/dist/services/user_auth/SubscriptionService.d.ts.map +1 -0
- package/dist/services/user_auth/SubscriptionService.js +34 -0
- package/dist/services/user_auth/SubscriptionService.js.map +1 -0
- package/dist/services/user_auth/types.d.ts +30 -0
- package/dist/services/user_auth/types.d.ts.map +1 -0
- package/dist/services/user_auth/types.js +2 -0
- package/dist/services/user_auth/types.js.map +1 -0
- package/dist/stubs/prismaClient.d.ts +35 -0
- package/dist/stubs/prismaClient.d.ts.map +1 -0
- package/dist/stubs/prismaClient.js +47 -0
- package/dist/stubs/prismaClient.js.map +1 -0
- package/dist/types/rateLimitTypes.d.ts +70 -0
- package/dist/types/rateLimitTypes.d.ts.map +1 -0
- package/dist/types/rateLimitTypes.js +55 -0
- package/dist/types/rateLimitTypes.js.map +1 -0
- package/dist/utils/errors.d.ts +80 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +201 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/uuid.d.ts +11 -0
- package/dist/utils/uuid.d.ts.map +1 -0
- package/dist/utils/uuid.js +64 -0
- package/dist/utils/uuid.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Implements a PersonaLoader that reads persona definitions
|
|
3
|
+
* from JSON files within a specified directory. Each .json file in the directory
|
|
4
|
+
* (and its subdirectories, optionally) is expected to contain a valid IPersonaDefinition.
|
|
5
|
+
*
|
|
6
|
+
* @module backend/agentos/cognitive_substrate/personas/PersonaLoader
|
|
7
|
+
* @see ./IPersonaDefinition.ts
|
|
8
|
+
* @see ./IPersonaLoader.ts
|
|
9
|
+
*/
|
|
10
|
+
import { IPersonaDefinition } from './IPersonaDefinition';
|
|
11
|
+
import { IPersonaLoader, PersonaLoaderConfig } from './IPersonaLoader';
|
|
12
|
+
/**
|
|
13
|
+
* Configuration specific to the FileSystemPersonaLoader.
|
|
14
|
+
* @interface FileSystemPersonaLoaderConfig
|
|
15
|
+
* @extends {PersonaLoaderConfig}
|
|
16
|
+
*/
|
|
17
|
+
export interface FileSystemPersonaLoaderConfig extends PersonaLoaderConfig {
|
|
18
|
+
/**
|
|
19
|
+
* The file system path to the directory containing persona definition JSON files.
|
|
20
|
+
* This overrides the generic `personaSource` from `PersonaLoaderConfig`.
|
|
21
|
+
* @type {string}
|
|
22
|
+
*/
|
|
23
|
+
personaDefinitionPath: string;
|
|
24
|
+
/**
|
|
25
|
+
* If true, recursively search for .json files in subdirectories.
|
|
26
|
+
* @type {boolean}
|
|
27
|
+
* @optional
|
|
28
|
+
* @default false
|
|
29
|
+
*/
|
|
30
|
+
recursiveSearch?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* File extension to look for (e.g., ".persona.json", ".json").
|
|
33
|
+
* Must include the leading dot.
|
|
34
|
+
* @type {string}
|
|
35
|
+
* @optional
|
|
36
|
+
* @default ".json"
|
|
37
|
+
*/
|
|
38
|
+
fileExtension?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Implements IPersonaLoader to load persona definitions from the file system.
|
|
42
|
+
* Assumes persona definitions are stored as individual JSON files.
|
|
43
|
+
* @class PersonaLoader
|
|
44
|
+
* @implements {IPersonaLoader}
|
|
45
|
+
*/
|
|
46
|
+
export declare class PersonaLoader implements IPersonaLoader {
|
|
47
|
+
private config;
|
|
48
|
+
private isInitialized;
|
|
49
|
+
private loadedPersonas;
|
|
50
|
+
readonly loaderId: string;
|
|
51
|
+
constructor();
|
|
52
|
+
private ensureInitialized;
|
|
53
|
+
initialize(config: PersonaLoaderConfig): Promise<void>;
|
|
54
|
+
private findPersonaFiles;
|
|
55
|
+
loadPersonaById(personaId: string): Promise<IPersonaDefinition | undefined>;
|
|
56
|
+
loadAllPersonaDefinitions(): Promise<IPersonaDefinition[]>;
|
|
57
|
+
refreshPersonas(): Promise<void>;
|
|
58
|
+
shutdown(): Promise<void>;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=PersonaLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PersonaLoader.d.ts","sourceRoot":"","sources":["../../../src/cognitive_substrate/personas/PersonaLoader.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAMH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAGvE;;;;GAIG;AACH,MAAM,WAAW,6BAA8B,SAAQ,mBAAmB;IACxE;;;;OAIG;IACH,qBAAqB,EAAE,MAAM,CAAC;IAE9B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,qBAAa,aAAc,YAAW,cAAc;IAClD,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,cAAc,CAA8C;IACpE,SAAgB,QAAQ,EAAE,MAAM,CAAC;;IAMjC,OAAO,CAAC,iBAAiB;IAMZ,UAAU,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;YAuCrD,gBAAgB;IAuBjB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC;IAU3E,yBAAyB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAK1D,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAwChC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAKvC"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
// File: backend/agentos/cognitive_substrate/personas/PersonaLoader.ts
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Implements a PersonaLoader that reads persona definitions
|
|
4
|
+
* from JSON files within a specified directory. Each .json file in the directory
|
|
5
|
+
* (and its subdirectories, optionally) is expected to contain a valid IPersonaDefinition.
|
|
6
|
+
*
|
|
7
|
+
* @module backend/agentos/cognitive_substrate/personas/PersonaLoader
|
|
8
|
+
* @see ./IPersonaDefinition.ts
|
|
9
|
+
* @see ./IPersonaLoader.ts
|
|
10
|
+
*/
|
|
11
|
+
import * as fsPromises from 'fs/promises'; // Use fs/promises for async operations
|
|
12
|
+
import * as path from 'path';
|
|
13
|
+
import { uuidv4 } from '../../utils/uuid.js';
|
|
14
|
+
import { GMIError, GMIErrorCode } from '../../utils/errors.js';
|
|
15
|
+
/**
|
|
16
|
+
* Implements IPersonaLoader to load persona definitions from the file system.
|
|
17
|
+
* Assumes persona definitions are stored as individual JSON files.
|
|
18
|
+
* @class PersonaLoader
|
|
19
|
+
* @implements {IPersonaLoader}
|
|
20
|
+
*/
|
|
21
|
+
export class PersonaLoader {
|
|
22
|
+
constructor() {
|
|
23
|
+
this.isInitialized = false;
|
|
24
|
+
this.loadedPersonas = new Map();
|
|
25
|
+
this.loaderId = `persona-loader-fs-${uuidv4()}`;
|
|
26
|
+
}
|
|
27
|
+
ensureInitialized() {
|
|
28
|
+
if (!this.isInitialized) {
|
|
29
|
+
throw new GMIError('PersonaLoader has not been initialized. Call initialize() first.', GMIErrorCode.NOT_INITIALIZED, { loaderId: this.loaderId });
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async initialize(config) {
|
|
33
|
+
if (this.isInitialized) {
|
|
34
|
+
console.warn(`PersonaLoader (ID: ${this.loaderId}) already initialized. Re-initializing will refresh personas.`);
|
|
35
|
+
}
|
|
36
|
+
const fsConfig = config;
|
|
37
|
+
if (!fsConfig || !fsConfig.personaDefinitionPath) {
|
|
38
|
+
throw new GMIError('Invalid configuration for FileSystemPersonaLoader: personaDefinitionPath is required.', GMIErrorCode.CONFIGURATION_ERROR, { providedConfig: config, loaderId: this.loaderId });
|
|
39
|
+
}
|
|
40
|
+
this.config = {
|
|
41
|
+
...fsConfig,
|
|
42
|
+
loaderType: 'file_system',
|
|
43
|
+
recursiveSearch: fsConfig.recursiveSearch ?? false,
|
|
44
|
+
fileExtension: fsConfig.fileExtension && fsConfig.fileExtension.startsWith('.')
|
|
45
|
+
? fsConfig.fileExtension.toLowerCase()
|
|
46
|
+
: (fsConfig.fileExtension ? `.${fsConfig.fileExtension.toLowerCase()}` : '.json'),
|
|
47
|
+
};
|
|
48
|
+
try {
|
|
49
|
+
const stats = await fsPromises.stat(this.config.personaDefinitionPath);
|
|
50
|
+
if (!stats.isDirectory()) {
|
|
51
|
+
throw new GMIError(`Persona definition path '${this.config.personaDefinitionPath}' is not a directory.`, GMIErrorCode.CONFIGURATION_ERROR, { path: this.config.personaDefinitionPath });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
throw new GMIError(`Persona definition path '${this.config.personaDefinitionPath}' is not accessible or does not exist: ${error.message}`, GMIErrorCode.CONFIGURATION_ERROR, // Corrected: Use CONFIGURATION_ERROR
|
|
56
|
+
{ path: this.config.personaDefinitionPath, underlyingError: error });
|
|
57
|
+
}
|
|
58
|
+
this.isInitialized = true;
|
|
59
|
+
console.log(`PersonaLoader (ID: ${this.loaderId}) initialized. Source directory: '${this.config.personaDefinitionPath}'.`);
|
|
60
|
+
await this.refreshPersonas();
|
|
61
|
+
}
|
|
62
|
+
async findPersonaFiles(dirPath, extension) {
|
|
63
|
+
let dirents;
|
|
64
|
+
try {
|
|
65
|
+
dirents = await fsPromises.readdir(dirPath, { withFileTypes: true });
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.error(`PersonaLoader (ID: ${this.loaderId}): Error reading directory ${dirPath}: ${error.message}`);
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
const files = await Promise.all(dirents.map(async (dirent) => {
|
|
72
|
+
const res = path.resolve(dirPath, dirent.name);
|
|
73
|
+
if (dirent.isDirectory() && this.config.recursiveSearch) {
|
|
74
|
+
return this.findPersonaFiles(res, extension);
|
|
75
|
+
}
|
|
76
|
+
else if (dirent.isFile() && path.extname(dirent.name).toLowerCase() === extension) {
|
|
77
|
+
return [res];
|
|
78
|
+
}
|
|
79
|
+
return [];
|
|
80
|
+
}));
|
|
81
|
+
return files.flat();
|
|
82
|
+
}
|
|
83
|
+
async loadPersonaById(personaId) {
|
|
84
|
+
this.ensureInitialized();
|
|
85
|
+
const persona = this.loadedPersonas.get(personaId);
|
|
86
|
+
if (!persona) {
|
|
87
|
+
console.warn(`PersonaLoader (ID: ${this.loaderId}): Persona with ID '${personaId}' not found in cache.`);
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
return JSON.parse(JSON.stringify(persona));
|
|
91
|
+
}
|
|
92
|
+
async loadAllPersonaDefinitions() {
|
|
93
|
+
this.ensureInitialized();
|
|
94
|
+
return Array.from(this.loadedPersonas.values()).map(p => JSON.parse(JSON.stringify(p)));
|
|
95
|
+
}
|
|
96
|
+
async refreshPersonas() {
|
|
97
|
+
this.ensureInitialized();
|
|
98
|
+
const oldSize = this.loadedPersonas.size;
|
|
99
|
+
this.loadedPersonas.clear();
|
|
100
|
+
console.log(`PersonaLoader (ID: ${this.loaderId}): Refreshing personas from '${this.config.personaDefinitionPath}'...`);
|
|
101
|
+
let personaFilePaths;
|
|
102
|
+
try {
|
|
103
|
+
personaFilePaths = await this.findPersonaFiles(this.config.personaDefinitionPath, this.config.fileExtension);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
console.error(`PersonaLoader (ID: ${this.loaderId}): Error scanning persona directory '${this.config.personaDefinitionPath}': ${error.message}`);
|
|
107
|
+
throw new GMIError(`Failed to scan persona directory: ${error.message}`, GMIErrorCode.PERSONA_LOAD_ERROR, { path: this.config.personaDefinitionPath, underlyingError: error }); // Corrected: Use PERSONA_LOAD_ERROR
|
|
108
|
+
}
|
|
109
|
+
if (personaFilePaths.length === 0) {
|
|
110
|
+
console.warn(`PersonaLoader (ID: ${this.loaderId}): No persona files found in '${this.config.personaDefinitionPath}' with extension '${this.config.fileExtension}'. Previous cache size: ${oldSize}.`);
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
for (const filePath of personaFilePaths) {
|
|
114
|
+
try {
|
|
115
|
+
const fileContent = await fsPromises.readFile(filePath, 'utf-8');
|
|
116
|
+
const personaDefinition = JSON.parse(fileContent);
|
|
117
|
+
if (!personaDefinition.id || !personaDefinition.name || !personaDefinition.baseSystemPrompt || !personaDefinition.version) {
|
|
118
|
+
console.warn(`PersonaLoader (ID: ${this.loaderId}): Skipping file '${filePath}' due to missing required fields (id, name, version, baseSystemPrompt).`);
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
if (this.loadedPersonas.has(personaDefinition.id)) {
|
|
122
|
+
console.warn(`PersonaLoader (ID: ${this.loaderId}): Duplicate persona ID '${personaDefinition.id}' found in file '${filePath}'. Overwriting previous definition. Ensure persona IDs are unique.`);
|
|
123
|
+
}
|
|
124
|
+
this.loadedPersonas.set(personaDefinition.id, personaDefinition);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
console.error(`PersonaLoader (ID: ${this.loaderId}): Error loading or parsing persona from file '${filePath}': ${error.message}`, error);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
console.log(`PersonaLoader (ID: ${this.loaderId}): Successfully loaded/refreshed ${this.loadedPersonas.size} persona definitions.`);
|
|
131
|
+
}
|
|
132
|
+
async shutdown() {
|
|
133
|
+
this.isInitialized = false;
|
|
134
|
+
this.loadedPersonas.clear();
|
|
135
|
+
console.log(`PersonaLoader (ID: ${this.loaderId}) shut down.`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=PersonaLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PersonaLoader.js","sourceRoot":"","sources":["../../../src/cognitive_substrate/personas/PersonaLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file PersonaValidation.ts
|
|
3
|
+
* @description Provides rich validation utilities for `IPersonaDefinition` objects prior to
|
|
4
|
+
* activation or deployment. Ensures structural integrity, semantic consistency,
|
|
5
|
+
* and cross-persona conflict detection (e.g., activation keyword collisions).
|
|
6
|
+
*
|
|
7
|
+
* Design Goals:
|
|
8
|
+
* - Catch hard errors early (missing required fields, invalid IDs, unknown tool references).
|
|
9
|
+
* - Surface softer warnings (overly long system prompt, voice config without audio modality).
|
|
10
|
+
* - Offer proactive suggestions that improve quality (e.g., recommend cost strategy if omitted).
|
|
11
|
+
* - Remain side-effect free and pure: callers can run in CI, authoring tools, or runtime gates.
|
|
12
|
+
*/
|
|
13
|
+
import { IPersonaDefinition } from './IPersonaDefinition';
|
|
14
|
+
/** Classification of validation issue severity. */
|
|
15
|
+
export type PersonaValidationIssueSeverity = 'error' | 'warning' | 'suggestion';
|
|
16
|
+
/**
|
|
17
|
+
* Structured validation issue capturing severity, machine-readable code, human message,
|
|
18
|
+
* and optional field context.
|
|
19
|
+
*/
|
|
20
|
+
export interface PersonaValidationIssue {
|
|
21
|
+
severity: PersonaValidationIssueSeverity;
|
|
22
|
+
code: string;
|
|
23
|
+
message: string;
|
|
24
|
+
personaId?: string;
|
|
25
|
+
field?: string;
|
|
26
|
+
}
|
|
27
|
+
/** Result for a single persona definition. */
|
|
28
|
+
export interface PersonaValidationResult {
|
|
29
|
+
personaId: string;
|
|
30
|
+
issues: PersonaValidationIssue[];
|
|
31
|
+
summary: {
|
|
32
|
+
errorCount: number;
|
|
33
|
+
warningCount: number;
|
|
34
|
+
suggestionCount: number;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/** Aggregate report across multiple personas. */
|
|
38
|
+
export interface PersonaValidationAggregateReport {
|
|
39
|
+
results: PersonaValidationResult[];
|
|
40
|
+
totals: {
|
|
41
|
+
errors: number;
|
|
42
|
+
warnings: number;
|
|
43
|
+
suggestions: number;
|
|
44
|
+
};
|
|
45
|
+
activationKeywordConflicts: Array<{
|
|
46
|
+
keyword: string;
|
|
47
|
+
personaIds: string[];
|
|
48
|
+
}>;
|
|
49
|
+
}
|
|
50
|
+
/** Options for persona validation. */
|
|
51
|
+
export interface PersonaValidationOptions {
|
|
52
|
+
/** Known registered tool IDs for verifying persona.toolIds references. */
|
|
53
|
+
knownToolIds?: Set<string>;
|
|
54
|
+
/** Reserved persona identifiers disallowed for user-defined personas. */
|
|
55
|
+
reservedPersonaIds?: Set<string>;
|
|
56
|
+
/** Maximum advisable length of the base system prompt before warning (characters). */
|
|
57
|
+
maxSystemPromptLength?: number;
|
|
58
|
+
/** Maximum advisable token length of the base system prompt before warning (uses tokenEstimator if provided). */
|
|
59
|
+
maxSystemPromptTokens?: number;
|
|
60
|
+
/** Optional token estimator allowing model-specific token length validation. */
|
|
61
|
+
tokenEstimator?: (text: string) => Promise<number> | number;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Configuration for strict validation enforcement.
|
|
65
|
+
* When enabled, personas with blocking issues are marked invalid and optionally excluded from activation.
|
|
66
|
+
*/
|
|
67
|
+
export interface PersonaValidationStrictConfig {
|
|
68
|
+
/** Master toggle: if false, all strict enforcement is disabled. */
|
|
69
|
+
enabled: boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Enforcement mode:
|
|
72
|
+
* - 'activation_block': Load all personas but prevent session activation of invalid ones.
|
|
73
|
+
* - 'load_block': Exclude invalid personas from registry entirely (stricter, more disruptive).
|
|
74
|
+
*/
|
|
75
|
+
mode?: 'activation_block' | 'load_block';
|
|
76
|
+
/** Specific validation codes that should block (overrides severity if set). If empty, errors block by default. */
|
|
77
|
+
blockOnCodes?: string[];
|
|
78
|
+
/** Escalate these warning codes to error severity for blocking purposes. */
|
|
79
|
+
treatWarningsAsErrors?: string[];
|
|
80
|
+
/** Persona IDs that bypass strict enforcement (escape hatch for WIP personas). */
|
|
81
|
+
allowlistPersonaIds?: string[];
|
|
82
|
+
/**
|
|
83
|
+
* Shadow mode: perform strict classification and log what would be blocked without enforcing.
|
|
84
|
+
* Useful for observing impact before activating strict mode.
|
|
85
|
+
*/
|
|
86
|
+
shadowMode?: boolean;
|
|
87
|
+
}
|
|
88
|
+
/** Loaded persona record enriched with validation metadata for strict mode. */
|
|
89
|
+
export interface LoadedPersonaRecord {
|
|
90
|
+
definition: IPersonaDefinition;
|
|
91
|
+
validation: PersonaValidationResult;
|
|
92
|
+
/** Persona status after applying strict mode rules. */
|
|
93
|
+
status: 'valid' | 'invalid' | 'degraded';
|
|
94
|
+
/** Validation codes causing blocking (if status='invalid'). */
|
|
95
|
+
blockedReasons?: string[];
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Validate a single persona definition and return structured issues.
|
|
99
|
+
* @param persona Persona definition to validate.
|
|
100
|
+
* @param opts Validation options.
|
|
101
|
+
*/
|
|
102
|
+
export declare function validatePersona(persona: IPersonaDefinition, opts?: PersonaValidationOptions): Promise<PersonaValidationResult>;
|
|
103
|
+
/** Validate a list of personas and compute aggregate statistics & cross-persona conflicts. */
|
|
104
|
+
export declare function validatePersonas(personas: IPersonaDefinition[], opts?: PersonaValidationOptions): Promise<PersonaValidationAggregateReport>;
|
|
105
|
+
/** Convenience guard: return true if persona passes with zero errors. */
|
|
106
|
+
export declare function personaIsValid(result: PersonaValidationResult): boolean;
|
|
107
|
+
/** Convenience guard: return true if all personas have zero errors. */
|
|
108
|
+
export declare function allPersonasValid(report: PersonaValidationAggregateReport): boolean;
|
|
109
|
+
/** Human-friendly summarization string for logging / CLI contexts. */
|
|
110
|
+
export declare function formatAggregateReport(report: PersonaValidationAggregateReport): string;
|
|
111
|
+
/**
|
|
112
|
+
* Classify persona validation result as valid/invalid/degraded based on strict mode config.
|
|
113
|
+
* @param result Validation result for a single persona.
|
|
114
|
+
* @param strictConfig Strict mode configuration.
|
|
115
|
+
* @returns Classification: status and blocked reasons if invalid.
|
|
116
|
+
*/
|
|
117
|
+
export declare function classifyPersonaStrict(result: PersonaValidationResult, strictConfig: PersonaValidationStrictConfig): {
|
|
118
|
+
status: 'valid' | 'invalid' | 'degraded';
|
|
119
|
+
blockedReasons: string[];
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Apply strict mode classification to all validation results and produce enriched persona records.
|
|
123
|
+
* @param personas Array of persona definitions.
|
|
124
|
+
* @param results Corresponding validation results.
|
|
125
|
+
* @param strictConfig Strict mode config.
|
|
126
|
+
* @returns Array of LoadedPersonaRecord with status classification.
|
|
127
|
+
*/
|
|
128
|
+
export declare function applyStrictMode(personas: IPersonaDefinition[], results: PersonaValidationResult[], strictConfig: PersonaValidationStrictConfig): LoadedPersonaRecord[];
|
|
129
|
+
declare const _default: {
|
|
130
|
+
validatePersona: typeof validatePersona;
|
|
131
|
+
validatePersonas: typeof validatePersonas;
|
|
132
|
+
personaIsValid: typeof personaIsValid;
|
|
133
|
+
allPersonasValid: typeof allPersonasValid;
|
|
134
|
+
formatAggregateReport: typeof formatAggregateReport;
|
|
135
|
+
classifyPersonaStrict: typeof classifyPersonaStrict;
|
|
136
|
+
applyStrictMode: typeof applyStrictMode;
|
|
137
|
+
};
|
|
138
|
+
export default _default;
|
|
139
|
+
//# sourceMappingURL=PersonaValidation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PersonaValidation.d.ts","sourceRoot":"","sources":["../../../src/cognitive_substrate/personas/PersonaValidation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
// Simple semantic version pattern; we intentionally avoid full semver nitpicking (pre-release ok).
|
|
2
|
+
const SEMVER_REGEX = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z-.]+)?$/;
|
|
3
|
+
// Lightweight BCP-47 heuristic (not exhaustive): lang subtags 2-3 letters, optional hyphen groups.
|
|
4
|
+
const BCP47_REGEX = /^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$/;
|
|
5
|
+
/**
|
|
6
|
+
* Validate a single persona definition and return structured issues.
|
|
7
|
+
* @param persona Persona definition to validate.
|
|
8
|
+
* @param opts Validation options.
|
|
9
|
+
*/
|
|
10
|
+
export async function validatePersona(persona, opts = {}) {
|
|
11
|
+
const issues = [];
|
|
12
|
+
const add = (severity, code, message, field) => {
|
|
13
|
+
issues.push({ severity, code, message, personaId: persona.id, field });
|
|
14
|
+
};
|
|
15
|
+
// Required fields.
|
|
16
|
+
const requiredStringFields = ['id', 'name', 'description', 'version', 'baseSystemPrompt'];
|
|
17
|
+
for (const field of requiredStringFields) {
|
|
18
|
+
const v = persona[field];
|
|
19
|
+
if (v === undefined || v === null || (typeof v === 'string' && v.trim() === '') || (Array.isArray(v) && v.length === 0)) {
|
|
20
|
+
add('error', 'missing_required_field', `Required field '${field}' is missing or empty.`, String(field));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// Reserved persona id check.
|
|
24
|
+
if (opts.reservedPersonaIds && opts.reservedPersonaIds.has(persona.id)) {
|
|
25
|
+
add('error', 'reserved_persona_id', `Persona id '${persona.id}' is reserved and cannot be used.`, 'id');
|
|
26
|
+
}
|
|
27
|
+
// Version format.
|
|
28
|
+
if (persona.version && !SEMVER_REGEX.test(persona.version)) {
|
|
29
|
+
add('error', 'invalid_semver', `Version '${persona.version}' does not match semantic version pattern (e.g., 1.2.3).`, 'version');
|
|
30
|
+
}
|
|
31
|
+
// System prompt length check (character-based) + token-based if estimator provided.
|
|
32
|
+
const maxLen = opts.maxSystemPromptLength ?? 2000;
|
|
33
|
+
let promptTextFragments = [];
|
|
34
|
+
if (typeof persona.baseSystemPrompt === 'string') {
|
|
35
|
+
promptTextFragments = [persona.baseSystemPrompt];
|
|
36
|
+
}
|
|
37
|
+
else if (Array.isArray(persona.baseSystemPrompt)) {
|
|
38
|
+
promptTextFragments = persona.baseSystemPrompt.map(f => f.content || '');
|
|
39
|
+
}
|
|
40
|
+
else if (typeof persona.baseSystemPrompt === 'object' && persona.baseSystemPrompt !== null) {
|
|
41
|
+
promptTextFragments = [persona.baseSystemPrompt.template || ''];
|
|
42
|
+
}
|
|
43
|
+
const concatenatedPrompt = promptTextFragments.join('\n');
|
|
44
|
+
const charLength = concatenatedPrompt.length;
|
|
45
|
+
if (charLength > maxLen) {
|
|
46
|
+
add('warning', 'system_prompt_too_long', `Base system prompt length ${charLength} chars exceeds recommended maximum ${maxLen}. Consider modularizing or summarizing.`, 'baseSystemPrompt');
|
|
47
|
+
}
|
|
48
|
+
if (opts.tokenEstimator && opts.maxSystemPromptTokens) {
|
|
49
|
+
try {
|
|
50
|
+
const tokenCount = await Promise.resolve(opts.tokenEstimator(concatenatedPrompt));
|
|
51
|
+
if (tokenCount > opts.maxSystemPromptTokens) {
|
|
52
|
+
add('warning', 'system_prompt_too_many_tokens', `Base system prompt token length ${tokenCount} exceeds recommended maximum ${opts.maxSystemPromptTokens}. Consider reducing verbosity or externalizing examples.`, 'baseSystemPrompt');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch (e) {
|
|
56
|
+
add('warning', 'token_estimation_failed', `Token estimation failed: ${e.message || e}. Proceeding without token length validation.`, 'baseSystemPrompt');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Tool IDs validation.
|
|
60
|
+
if (persona.toolIds) {
|
|
61
|
+
const seen = new Set();
|
|
62
|
+
for (const t of persona.toolIds) {
|
|
63
|
+
if (seen.has(t)) {
|
|
64
|
+
add('error', 'duplicate_tool_id', `Duplicate toolId '${t}' in persona.toolIds.`, 'toolIds');
|
|
65
|
+
}
|
|
66
|
+
seen.add(t);
|
|
67
|
+
if (opts.knownToolIds && !opts.knownToolIds.has(t)) {
|
|
68
|
+
add('error', 'unknown_tool_id', `ToolId '${t}' not found in known tool registry.`, 'toolIds');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Modalities & voice config coherence.
|
|
73
|
+
if (persona.voiceConfig && (!persona.allowedOutputModalities || !persona.allowedOutputModalities.includes('audio_tts'))) {
|
|
74
|
+
add('warning', 'voice_config_without_audio_output', 'Voice config provided but persona.allowedOutputModalities does not include audio_tts.', 'voiceConfig');
|
|
75
|
+
}
|
|
76
|
+
// BCP-47 language code.
|
|
77
|
+
if (persona.defaultLanguage && !BCP47_REGEX.test(persona.defaultLanguage)) {
|
|
78
|
+
add('error', 'invalid_bcp47_language', `defaultLanguage '${persona.defaultLanguage}' is not a plausible BCP-47 tag (e.g., en-US).`, 'defaultLanguage');
|
|
79
|
+
}
|
|
80
|
+
// Cost strategy suggestion.
|
|
81
|
+
if (!persona.costSavingStrategy) {
|
|
82
|
+
add('suggestion', 'missing_cost_strategy', 'Define costSavingStrategy to clarify routing preferences (e.g., balance_quality_cost).', 'costSavingStrategy');
|
|
83
|
+
}
|
|
84
|
+
// Model target preferences sanity.
|
|
85
|
+
if (persona.modelTargetPreferences) {
|
|
86
|
+
persona.modelTargetPreferences.forEach((pref, idx) => {
|
|
87
|
+
if (pref.allowedModelIds) {
|
|
88
|
+
const dup = findDuplicates(pref.allowedModelIds);
|
|
89
|
+
if (dup.length) {
|
|
90
|
+
add('error', 'duplicate_allowed_model_ids', `ModelTargetPreference at index ${idx} has duplicate allowedModelIds: ${dup.join(', ')}`, 'modelTargetPreferences');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (pref.modelId && pref.modelFamily && pref.allowedModelIds && pref.allowedModelIds.length > 0) {
|
|
94
|
+
add('warning', 'over_specified_model_preference', `Preference ${idx} specifies modelId, modelFamily and allowedModelIds; consider simplifying to reduce routing ambiguity.`, 'modelTargetPreferences');
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
// Memory & RAG internal checks.
|
|
99
|
+
if (persona.memoryConfig?.ragConfig) {
|
|
100
|
+
const rag = persona.memoryConfig.ragConfig;
|
|
101
|
+
if (rag.enabled) {
|
|
102
|
+
if (rag.dataSources) {
|
|
103
|
+
const ids = rag.dataSources.map(ds => ds.id);
|
|
104
|
+
const dupDs = findDuplicates(ids);
|
|
105
|
+
if (dupDs.length) {
|
|
106
|
+
add('error', 'duplicate_rag_datasource_ids', `RAG dataSources contain duplicate ids: ${dupDs.join(', ')}`, 'memoryConfig.ragConfig.dataSources');
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (rag.ingestionProcessing?.summarization?.enabled && !rag.ingestionProcessing.summarization.method) {
|
|
110
|
+
add('warning', 'rag_summarization_method_missing', 'RAG ingestion summarization enabled but no method provided.', 'memoryConfig.ragConfig.ingestionProcessing.summarization.method');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const summary = summarizeIssues(issues);
|
|
115
|
+
return { personaId: persona.id, issues, summary };
|
|
116
|
+
}
|
|
117
|
+
/** Validate a list of personas and compute aggregate statistics & cross-persona conflicts. */
|
|
118
|
+
export async function validatePersonas(personas, opts = {}) {
|
|
119
|
+
const results = [];
|
|
120
|
+
for (const p of personas) {
|
|
121
|
+
results.push(await validatePersona(p, opts));
|
|
122
|
+
}
|
|
123
|
+
const keywordMap = new Map();
|
|
124
|
+
for (const p of personas) {
|
|
125
|
+
(p.activationKeywords || []).forEach(kw => {
|
|
126
|
+
const existing = keywordMap.get(kw) || [];
|
|
127
|
+
existing.push(p.id);
|
|
128
|
+
keywordMap.set(kw, existing);
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
const activationKeywordConflicts = Array.from(keywordMap.entries())
|
|
132
|
+
.filter(([, list]) => list.length > 1)
|
|
133
|
+
.map(([keyword, personaIds]) => ({ keyword, personaIds }));
|
|
134
|
+
// Inject conflicts as issues (warning severity) into each affected persona's result.
|
|
135
|
+
if (activationKeywordConflicts.length) {
|
|
136
|
+
for (const conflict of activationKeywordConflicts) {
|
|
137
|
+
for (const res of results) {
|
|
138
|
+
if (conflict.personaIds.includes(res.personaId)) {
|
|
139
|
+
res.issues.push({
|
|
140
|
+
severity: 'warning',
|
|
141
|
+
code: 'activation_keyword_conflict',
|
|
142
|
+
message: `Activation keyword '${conflict.keyword}' used by multiple personas: ${conflict.personaIds.join(', ')}`,
|
|
143
|
+
personaId: res.personaId,
|
|
144
|
+
field: 'activationKeywords'
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Recompute summaries after injecting keyword conflict warnings.
|
|
150
|
+
results.forEach(r => (r.summary = summarizeIssues(r.issues)));
|
|
151
|
+
}
|
|
152
|
+
const totals = results.reduce((acc, r) => {
|
|
153
|
+
acc.errors += r.summary.errorCount;
|
|
154
|
+
acc.warnings += r.summary.warningCount;
|
|
155
|
+
acc.suggestions += r.summary.suggestionCount;
|
|
156
|
+
return acc;
|
|
157
|
+
}, { errors: 0, warnings: 0, suggestions: 0 });
|
|
158
|
+
return { results, totals, activationKeywordConflicts };
|
|
159
|
+
}
|
|
160
|
+
// Helpers
|
|
161
|
+
function findDuplicates(arr) {
|
|
162
|
+
const seen = new Set();
|
|
163
|
+
const dup = new Set();
|
|
164
|
+
arr.forEach(v => { if (seen.has(v))
|
|
165
|
+
dup.add(v);
|
|
166
|
+
else
|
|
167
|
+
seen.add(v); });
|
|
168
|
+
return Array.from(dup);
|
|
169
|
+
}
|
|
170
|
+
function summarizeIssues(list) {
|
|
171
|
+
let errorCount = 0, warningCount = 0, suggestionCount = 0;
|
|
172
|
+
for (const i of list) {
|
|
173
|
+
if (i.severity === 'error')
|
|
174
|
+
errorCount++;
|
|
175
|
+
else if (i.severity === 'warning')
|
|
176
|
+
warningCount++;
|
|
177
|
+
else
|
|
178
|
+
suggestionCount++;
|
|
179
|
+
}
|
|
180
|
+
return { errorCount, warningCount, suggestionCount };
|
|
181
|
+
}
|
|
182
|
+
/** Convenience guard: return true if persona passes with zero errors. */
|
|
183
|
+
export function personaIsValid(result) {
|
|
184
|
+
return result.summary.errorCount === 0;
|
|
185
|
+
}
|
|
186
|
+
/** Convenience guard: return true if all personas have zero errors. */
|
|
187
|
+
export function allPersonasValid(report) {
|
|
188
|
+
return report.results.every(r => r.summary.errorCount === 0);
|
|
189
|
+
}
|
|
190
|
+
/** Human-friendly summarization string for logging / CLI contexts. */
|
|
191
|
+
export function formatAggregateReport(report) {
|
|
192
|
+
const lines = [];
|
|
193
|
+
lines.push(`Persona Validation: ${report.totals.errors} errors, ${report.totals.warnings} warnings, ${report.totals.suggestions} suggestions.`);
|
|
194
|
+
for (const res of report.results) {
|
|
195
|
+
lines.push(` - [${res.personaId}] errors=${res.summary.errorCount} warnings=${res.summary.warningCount} suggestions=${res.summary.suggestionCount}`);
|
|
196
|
+
res.issues.forEach(issue => {
|
|
197
|
+
lines.push(` * (${issue.severity}) ${issue.code} ${issue.field ? '[' + issue.field + ']' : ''}: ${issue.message}`);
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
if (report.activationKeywordConflicts.length) {
|
|
201
|
+
lines.push(' Activation Keyword Conflicts:');
|
|
202
|
+
report.activationKeywordConflicts.forEach(c => lines.push(` - '${c.keyword}' => ${c.personaIds.join(', ')}`));
|
|
203
|
+
}
|
|
204
|
+
return lines.join('\n');
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Classify persona validation result as valid/invalid/degraded based on strict mode config.
|
|
208
|
+
* @param result Validation result for a single persona.
|
|
209
|
+
* @param strictConfig Strict mode configuration.
|
|
210
|
+
* @returns Classification: status and blocked reasons if invalid.
|
|
211
|
+
*/
|
|
212
|
+
export function classifyPersonaStrict(result, strictConfig) {
|
|
213
|
+
if (!strictConfig.enabled || strictConfig.shadowMode) {
|
|
214
|
+
// Non-enforcing: all personas treated as valid
|
|
215
|
+
return { status: 'valid', blockedReasons: [] };
|
|
216
|
+
}
|
|
217
|
+
// Check allowlist escape hatch
|
|
218
|
+
if (strictConfig.allowlistPersonaIds && strictConfig.allowlistPersonaIds.includes(result.personaId)) {
|
|
219
|
+
return { status: 'valid', blockedReasons: [] };
|
|
220
|
+
}
|
|
221
|
+
const blockingCodes = [];
|
|
222
|
+
// Determine which codes should block
|
|
223
|
+
const shouldBlock = (issue) => {
|
|
224
|
+
// If blockOnCodes is explicitly set, use that list
|
|
225
|
+
if (strictConfig.blockOnCodes && strictConfig.blockOnCodes.length > 0) {
|
|
226
|
+
return strictConfig.blockOnCodes.includes(issue.code);
|
|
227
|
+
}
|
|
228
|
+
// Otherwise: block on errors + escalated warnings
|
|
229
|
+
if (issue.severity === 'error')
|
|
230
|
+
return true;
|
|
231
|
+
if (issue.severity === 'warning' && strictConfig.treatWarningsAsErrors?.includes(issue.code))
|
|
232
|
+
return true;
|
|
233
|
+
return false;
|
|
234
|
+
};
|
|
235
|
+
for (const issue of result.issues) {
|
|
236
|
+
if (shouldBlock(issue)) {
|
|
237
|
+
blockingCodes.push(issue.code);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
if (blockingCodes.length > 0) {
|
|
241
|
+
return { status: 'invalid', blockedReasons: blockingCodes };
|
|
242
|
+
}
|
|
243
|
+
// Optional: mark 'degraded' if warnings exist but not blocking
|
|
244
|
+
if (result.summary.warningCount > 0) {
|
|
245
|
+
return { status: 'degraded', blockedReasons: [] };
|
|
246
|
+
}
|
|
247
|
+
return { status: 'valid', blockedReasons: [] };
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Apply strict mode classification to all validation results and produce enriched persona records.
|
|
251
|
+
* @param personas Array of persona definitions.
|
|
252
|
+
* @param results Corresponding validation results.
|
|
253
|
+
* @param strictConfig Strict mode config.
|
|
254
|
+
* @returns Array of LoadedPersonaRecord with status classification.
|
|
255
|
+
*/
|
|
256
|
+
export function applyStrictMode(personas, results, strictConfig) {
|
|
257
|
+
return personas.map((persona, idx) => {
|
|
258
|
+
const validation = results[idx];
|
|
259
|
+
const classification = classifyPersonaStrict(validation, strictConfig);
|
|
260
|
+
return {
|
|
261
|
+
definition: persona,
|
|
262
|
+
validation,
|
|
263
|
+
status: classification.status,
|
|
264
|
+
blockedReasons: classification.blockedReasons.length > 0 ? classification.blockedReasons : undefined
|
|
265
|
+
};
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
export default {
|
|
269
|
+
validatePersona,
|
|
270
|
+
validatePersonas,
|
|
271
|
+
personaIsValid,
|
|
272
|
+
allPersonasValid,
|
|
273
|
+
formatAggregateReport,
|
|
274
|
+
classifyPersonaStrict,
|
|
275
|
+
applyStrictMode
|
|
276
|
+
};
|
|
277
|
+
//# sourceMappingURL=PersonaValidation.js.map
|