@dollhousemcp/mcp-server 1.3.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/CHANGELOG.md +132 -0
- package/LICENSE +51 -0
- package/README.md +1124 -0
- package/data/agents/code-reviewer.md +296 -0
- package/data/agents/research-assistant.md +259 -0
- package/data/agents/task-manager.md +206 -0
- package/data/ensembles/business-advisor.md +354 -0
- package/data/ensembles/creative-studio.md +288 -0
- package/data/ensembles/development-team.md +292 -0
- package/data/ensembles/security-analysis-team.md +438 -0
- package/data/memories/conversation-history.md +146 -0
- package/data/memories/learning-progress.md +376 -0
- package/data/memories/project-context.md +268 -0
- package/data/personas/business-consultant.md +50 -0
- package/data/personas/creative-writer.md +44 -0
- package/data/personas/debug-detective.md +59 -0
- package/data/personas/eli5-explainer.md +49 -0
- package/data/personas/security-analyst.md +161 -0
- package/data/personas/technical-analyst.md +43 -0
- package/data/skills/code-review.md +112 -0
- package/data/skills/creative-writing.md +174 -0
- package/data/skills/data-analysis.md +160 -0
- package/data/skills/penetration-testing.md +374 -0
- package/data/skills/research.md +181 -0
- package/data/skills/threat-modeling.md +469 -0
- package/data/skills/translation.md +148 -0
- package/data/templates/code-documentation.md +409 -0
- package/data/templates/email-professional.md +158 -0
- package/data/templates/meeting-notes.md +141 -0
- package/data/templates/penetration-test-report.md +608 -0
- package/data/templates/project-brief.md +234 -0
- package/data/templates/report-executive.md +258 -0
- package/data/templates/security-vulnerability-report.md +457 -0
- package/data/templates/threat-assessment-report.md +774 -0
- package/dist/cache/APICache.d.ts +23 -0
- package/dist/cache/APICache.d.ts.map +1 -0
- package/dist/cache/APICache.js +42 -0
- package/dist/cache/index.d.ts +5 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +5 -0
- package/dist/collection/CollectionBrowser.d.ts +24 -0
- package/dist/collection/CollectionBrowser.d.ts.map +1 -0
- package/dist/collection/CollectionBrowser.js +120 -0
- package/dist/collection/CollectionSearch.d.ts +18 -0
- package/dist/collection/CollectionSearch.d.ts.map +1 -0
- package/dist/collection/CollectionSearch.js +48 -0
- package/dist/collection/ElementInstaller.d.ts +33 -0
- package/dist/collection/ElementInstaller.d.ts.map +1 -0
- package/dist/collection/ElementInstaller.js +142 -0
- package/dist/collection/GitHubClient.d.ts +22 -0
- package/dist/collection/GitHubClient.d.ts.map +1 -0
- package/dist/collection/GitHubClient.js +114 -0
- package/dist/collection/MarketplaceBrowser.d.ts +24 -0
- package/dist/collection/MarketplaceBrowser.d.ts.map +1 -0
- package/dist/collection/MarketplaceBrowser.js +115 -0
- package/dist/collection/MarketplaceSearch.d.ts +18 -0
- package/dist/collection/MarketplaceSearch.d.ts.map +1 -0
- package/dist/collection/MarketplaceSearch.js +48 -0
- package/dist/collection/PersonaDetails.d.ts +22 -0
- package/dist/collection/PersonaDetails.d.ts.map +1 -0
- package/dist/collection/PersonaDetails.js +71 -0
- package/dist/collection/PersonaInstaller.d.ts +26 -0
- package/dist/collection/PersonaInstaller.d.ts.map +1 -0
- package/dist/collection/PersonaInstaller.js +103 -0
- package/dist/collection/PersonaSubmitter.d.ts +19 -0
- package/dist/collection/PersonaSubmitter.d.ts.map +1 -0
- package/dist/collection/PersonaSubmitter.js +57 -0
- package/dist/collection/index.d.ts +10 -0
- package/dist/collection/index.d.ts.map +1 -0
- package/dist/collection/index.js +10 -0
- package/dist/config/constants.d.ts +25 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +34 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/indicator-config.d.ts +107 -0
- package/dist/config/indicator-config.d.ts.map +1 -0
- package/dist/config/indicator-config.js +158 -0
- package/dist/constants/defaultPersonas.d.ts +10 -0
- package/dist/constants/defaultPersonas.d.ts.map +1 -0
- package/dist/constants/defaultPersonas.js +18 -0
- package/dist/constants/limits.d.ts +10 -0
- package/dist/constants/limits.d.ts.map +1 -0
- package/dist/constants/limits.js +13 -0
- package/dist/elements/BaseElement.d.ts +81 -0
- package/dist/elements/BaseElement.d.ts.map +1 -0
- package/dist/elements/BaseElement.js +381 -0
- package/dist/elements/FeedbackProcessor.d.ts +57 -0
- package/dist/elements/FeedbackProcessor.d.ts.map +1 -0
- package/dist/elements/FeedbackProcessor.js +418 -0
- package/dist/elements/agents/Agent.d.ts +145 -0
- package/dist/elements/agents/Agent.d.ts.map +1 -0
- package/dist/elements/agents/Agent.js +848 -0
- package/dist/elements/agents/AgentManager.d.ts +125 -0
- package/dist/elements/agents/AgentManager.d.ts.map +1 -0
- package/dist/elements/agents/AgentManager.js +615 -0
- package/dist/elements/agents/constants.d.ts +42 -0
- package/dist/elements/agents/constants.d.ts.map +1 -0
- package/dist/elements/agents/constants.js +45 -0
- package/dist/elements/agents/goalTemplates.d.ts +44 -0
- package/dist/elements/agents/goalTemplates.d.ts.map +1 -0
- package/dist/elements/agents/goalTemplates.js +297 -0
- package/dist/elements/agents/index.d.ts +8 -0
- package/dist/elements/agents/index.d.ts.map +1 -0
- package/dist/elements/agents/index.js +8 -0
- package/dist/elements/agents/ruleEngineConfig.d.ts +76 -0
- package/dist/elements/agents/ruleEngineConfig.d.ts.map +1 -0
- package/dist/elements/agents/ruleEngineConfig.js +143 -0
- package/dist/elements/agents/types.d.ts +97 -0
- package/dist/elements/agents/types.d.ts.map +1 -0
- package/dist/elements/agents/types.js +5 -0
- package/dist/elements/ensembles/Ensemble.d.ts +144 -0
- package/dist/elements/ensembles/Ensemble.d.ts.map +1 -0
- package/dist/elements/ensembles/Ensemble.js +860 -0
- package/dist/elements/ensembles/EnsembleManager.d.ts +85 -0
- package/dist/elements/ensembles/EnsembleManager.d.ts.map +1 -0
- package/dist/elements/ensembles/EnsembleManager.js +378 -0
- package/dist/elements/ensembles/constants.d.ts +73 -0
- package/dist/elements/ensembles/constants.d.ts.map +1 -0
- package/dist/elements/ensembles/constants.js +92 -0
- package/dist/elements/ensembles/index.d.ts +8 -0
- package/dist/elements/ensembles/index.d.ts.map +1 -0
- package/dist/elements/ensembles/index.js +8 -0
- package/dist/elements/ensembles/types.d.ts +92 -0
- package/dist/elements/ensembles/types.d.ts.map +1 -0
- package/dist/elements/ensembles/types.js +8 -0
- package/dist/elements/index.d.ts +11 -0
- package/dist/elements/index.d.ts.map +1 -0
- package/dist/elements/index.js +12 -0
- package/dist/elements/memories/Memory.d.ts +110 -0
- package/dist/elements/memories/Memory.d.ts.map +1 -0
- package/dist/elements/memories/Memory.js +470 -0
- package/dist/elements/memories/MemoryManager.d.ts +86 -0
- package/dist/elements/memories/MemoryManager.d.ts.map +1 -0
- package/dist/elements/memories/MemoryManager.js +435 -0
- package/dist/elements/memories/constants.d.ts +42 -0
- package/dist/elements/memories/constants.d.ts.map +1 -0
- package/dist/elements/memories/constants.js +49 -0
- package/dist/elements/memories/index.d.ts +6 -0
- package/dist/elements/memories/index.d.ts.map +1 -0
- package/dist/elements/memories/index.js +6 -0
- package/dist/elements/skills/Skill.d.ts +109 -0
- package/dist/elements/skills/Skill.d.ts.map +1 -0
- package/dist/elements/skills/Skill.js +381 -0
- package/dist/elements/skills/index.d.ts +5 -0
- package/dist/elements/skills/index.d.ts.map +1 -0
- package/dist/elements/skills/index.js +5 -0
- package/dist/elements/templates/Template.d.ts +138 -0
- package/dist/elements/templates/Template.d.ts.map +1 -0
- package/dist/elements/templates/Template.js +673 -0
- package/dist/elements/templates/TemplateManager.d.ts +104 -0
- package/dist/elements/templates/TemplateManager.d.ts.map +1 -0
- package/dist/elements/templates/TemplateManager.js +501 -0
- package/dist/elements/templates/index.d.ts +6 -0
- package/dist/elements/templates/index.d.ts.map +1 -0
- package/dist/elements/templates/index.js +6 -0
- package/dist/errors/SecurityError.d.ts +29 -0
- package/dist/errors/SecurityError.d.ts.map +1 -0
- package/dist/errors/SecurityError.js +47 -0
- package/dist/errors/index.d.ts +2 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +2 -0
- package/dist/index.barrel.d.ts +21 -0
- package/dist/index.barrel.d.ts.map +1 -0
- package/dist/index.barrel.js +31 -0
- package/dist/index.d.ts +223 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1606 -0
- package/dist/marketplace/GitHubClient.d.ts +22 -0
- package/dist/marketplace/GitHubClient.d.ts.map +1 -0
- package/dist/marketplace/GitHubClient.js +112 -0
- package/dist/marketplace/MarketplaceBrowser.d.ts +24 -0
- package/dist/marketplace/MarketplaceBrowser.d.ts.map +1 -0
- package/dist/marketplace/MarketplaceBrowser.js +115 -0
- package/dist/marketplace/MarketplaceSearch.d.ts +18 -0
- package/dist/marketplace/MarketplaceSearch.d.ts.map +1 -0
- package/dist/marketplace/MarketplaceSearch.js +48 -0
- package/dist/marketplace/PersonaDetails.d.ts +22 -0
- package/dist/marketplace/PersonaDetails.d.ts.map +1 -0
- package/dist/marketplace/PersonaDetails.js +71 -0
- package/dist/marketplace/PersonaInstaller.d.ts +25 -0
- package/dist/marketplace/PersonaInstaller.d.ts.map +1 -0
- package/dist/marketplace/PersonaInstaller.js +100 -0
- package/dist/marketplace/PersonaSubmitter.d.ts +19 -0
- package/dist/marketplace/PersonaSubmitter.d.ts.map +1 -0
- package/dist/marketplace/PersonaSubmitter.js +57 -0
- package/dist/marketplace/index.d.ts +10 -0
- package/dist/marketplace/index.d.ts.map +1 -0
- package/dist/marketplace/index.js +10 -0
- package/dist/persona/PersonaElement.d.ts +64 -0
- package/dist/persona/PersonaElement.d.ts.map +1 -0
- package/dist/persona/PersonaElement.js +223 -0
- package/dist/persona/PersonaElementManager.d.ts +97 -0
- package/dist/persona/PersonaElementManager.d.ts.map +1 -0
- package/dist/persona/PersonaElementManager.js +348 -0
- package/dist/persona/PersonaLoader.d.ts +34 -0
- package/dist/persona/PersonaLoader.d.ts.map +1 -0
- package/dist/persona/PersonaLoader.js +145 -0
- package/dist/persona/PersonaManager.d.ts +112 -0
- package/dist/persona/PersonaManager.d.ts.map +1 -0
- package/dist/persona/PersonaManager.js +341 -0
- package/dist/persona/PersonaValidator.d.ts +39 -0
- package/dist/persona/PersonaValidator.d.ts.map +1 -0
- package/dist/persona/PersonaValidator.js +161 -0
- package/dist/persona/export-import/PersonaExporter.d.ts +43 -0
- package/dist/persona/export-import/PersonaExporter.d.ts.map +1 -0
- package/dist/persona/export-import/PersonaExporter.js +99 -0
- package/dist/persona/export-import/PersonaImporter.d.ts +65 -0
- package/dist/persona/export-import/PersonaImporter.d.ts.map +1 -0
- package/dist/persona/export-import/PersonaImporter.js +315 -0
- package/dist/persona/export-import/PersonaSharer.d.ts +60 -0
- package/dist/persona/export-import/PersonaSharer.d.ts.map +1 -0
- package/dist/persona/export-import/PersonaSharer.js +502 -0
- package/dist/persona/export-import/index.d.ts +10 -0
- package/dist/persona/export-import/index.d.ts.map +1 -0
- package/dist/persona/export-import/index.js +7 -0
- package/dist/persona/index.d.ts +7 -0
- package/dist/persona/index.d.ts.map +1 -0
- package/dist/persona/index.js +7 -0
- package/dist/portfolio/MigrationManager.d.ts +44 -0
- package/dist/portfolio/MigrationManager.d.ts.map +1 -0
- package/dist/portfolio/MigrationManager.js +163 -0
- package/dist/portfolio/PortfolioManager.d.ts +54 -0
- package/dist/portfolio/PortfolioManager.d.ts.map +1 -0
- package/dist/portfolio/PortfolioManager.js +224 -0
- package/dist/portfolio/types.d.ts +18 -0
- package/dist/portfolio/types.d.ts.map +1 -0
- package/dist/portfolio/types.js +13 -0
- package/dist/security/InputValidator.d.ts +80 -0
- package/dist/security/InputValidator.d.ts.map +1 -0
- package/dist/security/InputValidator.js +448 -0
- package/dist/security/audit/SecurityAuditor.d.ts +44 -0
- package/dist/security/audit/SecurityAuditor.d.ts.map +1 -0
- package/dist/security/audit/SecurityAuditor.js +274 -0
- package/dist/security/audit/config/suppressions.d.ts +34 -0
- package/dist/security/audit/config/suppressions.d.ts.map +1 -0
- package/dist/security/audit/config/suppressions.js +575 -0
- package/dist/security/audit/index.d.ts +14 -0
- package/dist/security/audit/index.d.ts.map +1 -0
- package/dist/security/audit/index.js +15 -0
- package/dist/security/audit/reporters/ConsoleReporter.d.ts +46 -0
- package/dist/security/audit/reporters/ConsoleReporter.d.ts.map +1 -0
- package/dist/security/audit/reporters/ConsoleReporter.js +174 -0
- package/dist/security/audit/reporters/JsonReporter.d.ts +13 -0
- package/dist/security/audit/reporters/JsonReporter.d.ts.map +1 -0
- package/dist/security/audit/reporters/JsonReporter.js +25 -0
- package/dist/security/audit/reporters/MarkdownReporter.d.ts +13 -0
- package/dist/security/audit/reporters/MarkdownReporter.d.ts.map +1 -0
- package/dist/security/audit/reporters/MarkdownReporter.js +79 -0
- package/dist/security/audit/rules/SecurityRules.d.ts +20 -0
- package/dist/security/audit/rules/SecurityRules.d.ts.map +1 -0
- package/dist/security/audit/rules/SecurityRules.js +244 -0
- package/dist/security/audit/scanners/CodeScanner.d.ts +47 -0
- package/dist/security/audit/scanners/CodeScanner.d.ts.map +1 -0
- package/dist/security/audit/scanners/CodeScanner.js +174 -0
- package/dist/security/audit/scanners/ConfigurationScanner.d.ts +13 -0
- package/dist/security/audit/scanners/ConfigurationScanner.d.ts.map +1 -0
- package/dist/security/audit/scanners/ConfigurationScanner.js +22 -0
- package/dist/security/audit/scanners/DependencyScanner.d.ts +13 -0
- package/dist/security/audit/scanners/DependencyScanner.d.ts.map +1 -0
- package/dist/security/audit/scanners/DependencyScanner.js +22 -0
- package/dist/security/audit/types.d.ts +94 -0
- package/dist/security/audit/types.d.ts.map +1 -0
- package/dist/security/audit/types.js +6 -0
- package/dist/security/commandValidator.d.ts +7 -0
- package/dist/security/commandValidator.d.ts.map +1 -0
- package/dist/security/commandValidator.js +78 -0
- package/dist/security/constants.d.ts +24 -0
- package/dist/security/constants.d.ts.map +1 -0
- package/dist/security/constants.js +26 -0
- package/dist/security/contentValidator.d.ts +47 -0
- package/dist/security/contentValidator.d.ts.map +1 -0
- package/dist/security/contentValidator.js +301 -0
- package/dist/security/errorHandler.d.ts +42 -0
- package/dist/security/errorHandler.d.ts.map +1 -0
- package/dist/security/errorHandler.js +166 -0
- package/dist/security/errors.d.ts +14 -0
- package/dist/security/errors.d.ts.map +1 -0
- package/dist/security/errors.js +28 -0
- package/dist/security/fileLockManager.d.ts +70 -0
- package/dist/security/fileLockManager.d.ts.map +1 -0
- package/dist/security/fileLockManager.js +187 -0
- package/dist/security/index.d.ts +12 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +14 -0
- package/dist/security/pathValidator.d.ts +9 -0
- package/dist/security/pathValidator.d.ts.map +1 -0
- package/dist/security/pathValidator.js +102 -0
- package/dist/security/regexValidator.d.ts +59 -0
- package/dist/security/regexValidator.d.ts.map +1 -0
- package/dist/security/regexValidator.js +214 -0
- package/dist/security/secureYamlParser.d.ts +46 -0
- package/dist/security/secureYamlParser.d.ts.map +1 -0
- package/dist/security/secureYamlParser.js +203 -0
- package/dist/security/securityMonitor.d.ts +58 -0
- package/dist/security/securityMonitor.d.ts.map +1 -0
- package/dist/security/securityMonitor.js +108 -0
- package/dist/security/tokenManager.d.ts +85 -0
- package/dist/security/tokenManager.d.ts.map +1 -0
- package/dist/security/tokenManager.js +286 -0
- package/dist/security/validators/unicodeValidator.d.ts +97 -0
- package/dist/security/validators/unicodeValidator.d.ts.map +1 -0
- package/dist/security/validators/unicodeValidator.js +312 -0
- package/dist/security/yamlValidator.d.ts +21 -0
- package/dist/security/yamlValidator.d.ts.map +1 -0
- package/dist/security/yamlValidator.js +164 -0
- package/dist/server/ServerSetup.d.ts +35 -0
- package/dist/server/ServerSetup.d.ts.map +1 -0
- package/dist/server/ServerSetup.js +116 -0
- package/dist/server/index.d.ts +7 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +7 -0
- package/dist/server/startup.d.ts +31 -0
- package/dist/server/startup.d.ts.map +1 -0
- package/dist/server/startup.js +67 -0
- package/dist/server/tools/CollectionTools.d.ts +10 -0
- package/dist/server/tools/CollectionTools.d.ts.map +1 -0
- package/dist/server/tools/CollectionTools.js +96 -0
- package/dist/server/tools/ConfigTools.d.ts +10 -0
- package/dist/server/tools/ConfigTools.d.ts.map +1 -0
- package/dist/server/tools/ConfigTools.js +63 -0
- package/dist/server/tools/MarketplaceTools.d.ts +10 -0
- package/dist/server/tools/MarketplaceTools.d.ts.map +1 -0
- package/dist/server/tools/MarketplaceTools.js +96 -0
- package/dist/server/tools/PersonaTools.d.ts +10 -0
- package/dist/server/tools/PersonaTools.d.ts.map +1 -0
- package/dist/server/tools/PersonaTools.js +257 -0
- package/dist/server/tools/ToolRegistry.d.ts +37 -0
- package/dist/server/tools/ToolRegistry.d.ts.map +1 -0
- package/dist/server/tools/ToolRegistry.js +40 -0
- package/dist/server/tools/UpdateTools.d.ts +10 -0
- package/dist/server/tools/UpdateTools.d.ts.map +1 -0
- package/dist/server/tools/UpdateTools.js +64 -0
- package/dist/server/tools/UserTools.d.ts +10 -0
- package/dist/server/tools/UserTools.d.ts.map +1 -0
- package/dist/server/tools/UserTools.js +51 -0
- package/dist/server/tools/index.d.ts +10 -0
- package/dist/server/tools/index.d.ts.map +1 -0
- package/dist/server/tools/index.js +10 -0
- package/dist/server/types.d.ts +34 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +5 -0
- package/dist/src/cache/APICache.d.ts +23 -0
- package/dist/src/cache/APICache.d.ts.map +1 -0
- package/dist/src/cache/APICache.js +42 -0
- package/dist/src/cache/index.d.ts +5 -0
- package/dist/src/cache/index.d.ts.map +1 -0
- package/dist/src/cache/index.js +5 -0
- package/dist/src/config/constants.d.ts +25 -0
- package/dist/src/config/constants.d.ts.map +1 -0
- package/dist/src/config/constants.js +30 -0
- package/dist/src/config/index.d.ts +6 -0
- package/dist/src/config/index.d.ts.map +1 -0
- package/dist/src/config/index.js +6 -0
- package/dist/src/config/indicator-config.d.ts +107 -0
- package/dist/src/config/indicator-config.d.ts.map +1 -0
- package/dist/src/config/indicator-config.js +158 -0
- package/dist/src/constants/defaultPersonas.d.ts +10 -0
- package/dist/src/constants/defaultPersonas.d.ts.map +1 -0
- package/dist/src/constants/defaultPersonas.js +18 -0
- package/dist/src/constants/limits.d.ts +10 -0
- package/dist/src/constants/limits.d.ts.map +1 -0
- package/dist/src/constants/limits.js +13 -0
- package/dist/src/errors/SecurityError.d.ts +29 -0
- package/dist/src/errors/SecurityError.d.ts.map +1 -0
- package/dist/src/errors/SecurityError.js +47 -0
- package/dist/src/errors/index.d.ts +2 -0
- package/dist/src/errors/index.d.ts.map +1 -0
- package/dist/src/errors/index.js +2 -0
- package/dist/src/index.barrel.d.ts +21 -0
- package/dist/src/index.barrel.d.ts.map +1 -0
- package/dist/src/index.barrel.js +31 -0
- package/dist/src/index.d.ts +220 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +1559 -0
- package/dist/src/marketplace/GitHubClient.d.ts +22 -0
- package/dist/src/marketplace/GitHubClient.d.ts.map +1 -0
- package/dist/src/marketplace/GitHubClient.js +112 -0
- package/dist/src/marketplace/MarketplaceBrowser.d.ts +21 -0
- package/dist/src/marketplace/MarketplaceBrowser.d.ts.map +1 -0
- package/dist/src/marketplace/MarketplaceBrowser.js +45 -0
- package/dist/src/marketplace/MarketplaceSearch.d.ts +18 -0
- package/dist/src/marketplace/MarketplaceSearch.d.ts.map +1 -0
- package/dist/src/marketplace/MarketplaceSearch.js +36 -0
- package/dist/src/marketplace/PersonaDetails.d.ts +22 -0
- package/dist/src/marketplace/PersonaDetails.d.ts.map +1 -0
- package/dist/src/marketplace/PersonaDetails.js +71 -0
- package/dist/src/marketplace/PersonaInstaller.d.ts +25 -0
- package/dist/src/marketplace/PersonaInstaller.d.ts.map +1 -0
- package/dist/src/marketplace/PersonaInstaller.js +100 -0
- package/dist/src/marketplace/PersonaSubmitter.d.ts +19 -0
- package/dist/src/marketplace/PersonaSubmitter.d.ts.map +1 -0
- package/dist/src/marketplace/PersonaSubmitter.js +57 -0
- package/dist/src/marketplace/index.d.ts +10 -0
- package/dist/src/marketplace/index.d.ts.map +1 -0
- package/dist/src/marketplace/index.js +10 -0
- package/dist/src/persona/PersonaLoader.d.ts +33 -0
- package/dist/src/persona/PersonaLoader.d.ts.map +1 -0
- package/dist/src/persona/PersonaLoader.js +139 -0
- package/dist/src/persona/PersonaManager.d.ts +112 -0
- package/dist/src/persona/PersonaManager.d.ts.map +1 -0
- package/dist/src/persona/PersonaManager.js +341 -0
- package/dist/src/persona/PersonaValidator.d.ts +33 -0
- package/dist/src/persona/PersonaValidator.d.ts.map +1 -0
- package/dist/src/persona/PersonaValidator.js +157 -0
- package/dist/src/persona/export-import/PersonaExporter.d.ts +43 -0
- package/dist/src/persona/export-import/PersonaExporter.d.ts.map +1 -0
- package/dist/src/persona/export-import/PersonaExporter.js +99 -0
- package/dist/src/persona/export-import/PersonaImporter.d.ts +65 -0
- package/dist/src/persona/export-import/PersonaImporter.d.ts.map +1 -0
- package/dist/src/persona/export-import/PersonaImporter.js +313 -0
- package/dist/src/persona/export-import/PersonaSharer.d.ts +60 -0
- package/dist/src/persona/export-import/PersonaSharer.d.ts.map +1 -0
- package/dist/src/persona/export-import/PersonaSharer.js +363 -0
- package/dist/src/persona/export-import/index.d.ts +10 -0
- package/dist/src/persona/export-import/index.d.ts.map +1 -0
- package/dist/src/persona/export-import/index.js +7 -0
- package/dist/src/persona/index.d.ts +7 -0
- package/dist/src/persona/index.d.ts.map +1 -0
- package/dist/src/persona/index.js +7 -0
- package/dist/src/security/InputValidator.d.ts +69 -0
- package/dist/src/security/InputValidator.d.ts.map +1 -0
- package/dist/src/security/InputValidator.js +381 -0
- package/dist/src/security/commandValidator.d.ts +7 -0
- package/dist/src/security/commandValidator.d.ts.map +1 -0
- package/dist/src/security/commandValidator.js +77 -0
- package/dist/src/security/constants.d.ts +21 -0
- package/dist/src/security/constants.d.ts.map +1 -0
- package/dist/src/security/constants.js +23 -0
- package/dist/src/security/contentValidator.d.ts +47 -0
- package/dist/src/security/contentValidator.d.ts.map +1 -0
- package/dist/src/security/contentValidator.js +188 -0
- package/dist/src/security/fileLockManager.d.ts +70 -0
- package/dist/src/security/fileLockManager.d.ts.map +1 -0
- package/dist/src/security/fileLockManager.js +187 -0
- package/dist/src/security/index.d.ts +12 -0
- package/dist/src/security/index.d.ts.map +1 -0
- package/dist/src/security/index.js +14 -0
- package/dist/src/security/pathValidator.d.ts +9 -0
- package/dist/src/security/pathValidator.d.ts.map +1 -0
- package/dist/src/security/pathValidator.js +97 -0
- package/dist/src/security/secureYamlParser.d.ts +46 -0
- package/dist/src/security/secureYamlParser.d.ts.map +1 -0
- package/dist/src/security/secureYamlParser.js +203 -0
- package/dist/src/security/securityMonitor.d.ts +58 -0
- package/dist/src/security/securityMonitor.d.ts.map +1 -0
- package/dist/src/security/securityMonitor.js +108 -0
- package/dist/src/security/tokenManager.d.ts +59 -0
- package/dist/src/security/tokenManager.d.ts.map +1 -0
- package/dist/src/security/tokenManager.js +216 -0
- package/dist/src/security/yamlValidator.d.ts +20 -0
- package/dist/src/security/yamlValidator.d.ts.map +1 -0
- package/dist/src/security/yamlValidator.js +138 -0
- package/dist/src/server/ServerSetup.d.ts +31 -0
- package/dist/src/server/ServerSetup.d.ts.map +1 -0
- package/dist/src/server/ServerSetup.js +79 -0
- package/dist/src/server/index.d.ts +7 -0
- package/dist/src/server/index.d.ts.map +1 -0
- package/dist/src/server/index.js +7 -0
- package/dist/src/server/tools/ConfigTools.d.ts +10 -0
- package/dist/src/server/tools/ConfigTools.d.ts.map +1 -0
- package/dist/src/server/tools/ConfigTools.js +63 -0
- package/dist/src/server/tools/MarketplaceTools.d.ts +10 -0
- package/dist/src/server/tools/MarketplaceTools.d.ts.map +1 -0
- package/dist/src/server/tools/MarketplaceTools.js +92 -0
- package/dist/src/server/tools/PersonaTools.d.ts +10 -0
- package/dist/src/server/tools/PersonaTools.d.ts.map +1 -0
- package/dist/src/server/tools/PersonaTools.js +257 -0
- package/dist/src/server/tools/ToolRegistry.d.ts +37 -0
- package/dist/src/server/tools/ToolRegistry.d.ts.map +1 -0
- package/dist/src/server/tools/ToolRegistry.js +40 -0
- package/dist/src/server/tools/UpdateTools.d.ts +10 -0
- package/dist/src/server/tools/UpdateTools.d.ts.map +1 -0
- package/dist/src/server/tools/UpdateTools.js +64 -0
- package/dist/src/server/tools/UserTools.d.ts +10 -0
- package/dist/src/server/tools/UserTools.d.ts.map +1 -0
- package/dist/src/server/tools/UserTools.js +51 -0
- package/dist/src/server/tools/index.d.ts +10 -0
- package/dist/src/server/tools/index.d.ts.map +1 -0
- package/dist/src/server/tools/index.js +10 -0
- package/dist/src/server/types.d.ts +34 -0
- package/dist/src/server/types.d.ts.map +1 -0
- package/dist/src/server/types.js +5 -0
- package/dist/src/tools/debug.d.ts +20 -0
- package/dist/src/tools/debug.d.ts.map +1 -0
- package/dist/src/tools/debug.js +37 -0
- package/dist/src/types/cache.d.ts +8 -0
- package/dist/src/types/cache.d.ts.map +1 -0
- package/dist/src/types/cache.js +5 -0
- package/dist/src/types/index.d.ts +8 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +8 -0
- package/dist/src/types/marketplace.d.ts +23 -0
- package/dist/src/types/marketplace.d.ts.map +1 -0
- package/dist/src/types/marketplace.js +5 -0
- package/dist/src/types/mcp.d.ts +161 -0
- package/dist/src/types/mcp.d.ts.map +1 -0
- package/dist/src/types/mcp.js +75 -0
- package/dist/src/types/persona.d.ts +30 -0
- package/dist/src/types/persona.d.ts.map +1 -0
- package/dist/src/types/persona.js +5 -0
- package/dist/src/update/BackupManager.d.ts +46 -0
- package/dist/src/update/BackupManager.d.ts.map +1 -0
- package/dist/src/update/BackupManager.js +261 -0
- package/dist/src/update/DependencyChecker.d.ts +41 -0
- package/dist/src/update/DependencyChecker.d.ts.map +1 -0
- package/dist/src/update/DependencyChecker.js +132 -0
- package/dist/src/update/RateLimiter.d.ts +80 -0
- package/dist/src/update/RateLimiter.d.ts.map +1 -0
- package/dist/src/update/RateLimiter.js +172 -0
- package/dist/src/update/SignatureVerifier.d.ts +71 -0
- package/dist/src/update/SignatureVerifier.d.ts.map +1 -0
- package/dist/src/update/SignatureVerifier.js +214 -0
- package/dist/src/update/UpdateChecker.d.ts +127 -0
- package/dist/src/update/UpdateChecker.d.ts.map +1 -0
- package/dist/src/update/UpdateChecker.js +460 -0
- package/dist/src/update/UpdateManager.d.ts +41 -0
- package/dist/src/update/UpdateManager.d.ts.map +1 -0
- package/dist/src/update/UpdateManager.js +260 -0
- package/dist/src/update/VersionManager.d.ts +31 -0
- package/dist/src/update/VersionManager.d.ts.map +1 -0
- package/dist/src/update/VersionManager.js +134 -0
- package/dist/src/update/index.d.ts +9 -0
- package/dist/src/update/index.d.ts.map +1 -0
- package/dist/src/update/index.js +9 -0
- package/dist/src/utils/filesystem.d.ts +32 -0
- package/dist/src/utils/filesystem.d.ts.map +1 -0
- package/dist/src/utils/filesystem.js +73 -0
- package/dist/src/utils/git.d.ts +32 -0
- package/dist/src/utils/git.d.ts.map +1 -0
- package/dist/src/utils/git.js +65 -0
- package/dist/src/utils/index.d.ts +7 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +7 -0
- package/dist/src/utils/logger.d.ts +45 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +91 -0
- package/dist/src/utils/version.d.ts +25 -0
- package/dist/src/utils/version.d.ts.map +1 -0
- package/dist/src/utils/version.js +97 -0
- package/dist/test/src/cache/APICache.d.ts +23 -0
- package/dist/test/src/cache/APICache.d.ts.map +1 -0
- package/dist/test/src/cache/APICache.js +42 -0
- package/dist/test/src/cache/index.d.ts +5 -0
- package/dist/test/src/cache/index.d.ts.map +1 -0
- package/dist/test/src/cache/index.js +5 -0
- package/dist/test/src/collection/CollectionBrowser.d.ts +24 -0
- package/dist/test/src/collection/CollectionBrowser.d.ts.map +1 -0
- package/dist/test/src/collection/CollectionBrowser.js +115 -0
- package/dist/test/src/collection/CollectionSearch.d.ts +18 -0
- package/dist/test/src/collection/CollectionSearch.d.ts.map +1 -0
- package/dist/test/src/collection/CollectionSearch.js +48 -0
- package/dist/test/src/collection/GitHubClient.d.ts +22 -0
- package/dist/test/src/collection/GitHubClient.d.ts.map +1 -0
- package/dist/test/src/collection/GitHubClient.js +114 -0
- package/dist/test/src/collection/PersonaDetails.d.ts +22 -0
- package/dist/test/src/collection/PersonaDetails.d.ts.map +1 -0
- package/dist/test/src/collection/PersonaDetails.js +71 -0
- package/dist/test/src/collection/PersonaInstaller.d.ts +26 -0
- package/dist/test/src/collection/PersonaInstaller.d.ts.map +1 -0
- package/dist/test/src/collection/PersonaInstaller.js +103 -0
- package/dist/test/src/collection/PersonaSubmitter.d.ts +19 -0
- package/dist/test/src/collection/PersonaSubmitter.d.ts.map +1 -0
- package/dist/test/src/collection/PersonaSubmitter.js +57 -0
- package/dist/test/src/collection/index.d.ts +10 -0
- package/dist/test/src/collection/index.d.ts.map +1 -0
- package/dist/test/src/collection/index.js +10 -0
- package/dist/test/src/config/constants.d.ts +25 -0
- package/dist/test/src/config/constants.d.ts.map +1 -0
- package/dist/test/src/config/constants.js +30 -0
- package/dist/test/src/config/index.d.ts +6 -0
- package/dist/test/src/config/index.d.ts.map +1 -0
- package/dist/test/src/config/index.js +6 -0
- package/dist/test/src/config/indicator-config.d.ts +107 -0
- package/dist/test/src/config/indicator-config.d.ts.map +1 -0
- package/dist/test/src/config/indicator-config.js +158 -0
- package/dist/test/src/constants/defaultPersonas.d.ts +10 -0
- package/dist/test/src/constants/defaultPersonas.d.ts.map +1 -0
- package/dist/test/src/constants/defaultPersonas.js +18 -0
- package/dist/test/src/constants/limits.d.ts +10 -0
- package/dist/test/src/constants/limits.d.ts.map +1 -0
- package/dist/test/src/constants/limits.js +13 -0
- package/dist/test/src/elements/BaseElement.d.ts +81 -0
- package/dist/test/src/elements/BaseElement.d.ts.map +1 -0
- package/dist/test/src/elements/BaseElement.js +381 -0
- package/dist/test/src/elements/FeedbackProcessor.d.ts +57 -0
- package/dist/test/src/elements/FeedbackProcessor.d.ts.map +1 -0
- package/dist/test/src/elements/FeedbackProcessor.js +418 -0
- package/dist/test/src/elements/agents/Agent.d.ts +145 -0
- package/dist/test/src/elements/agents/Agent.d.ts.map +1 -0
- package/dist/test/src/elements/agents/Agent.js +848 -0
- package/dist/test/src/elements/agents/AgentManager.d.ts +125 -0
- package/dist/test/src/elements/agents/AgentManager.d.ts.map +1 -0
- package/dist/test/src/elements/agents/AgentManager.js +608 -0
- package/dist/test/src/elements/agents/constants.d.ts +42 -0
- package/dist/test/src/elements/agents/constants.d.ts.map +1 -0
- package/dist/test/src/elements/agents/constants.js +45 -0
- package/dist/test/src/elements/agents/goalTemplates.d.ts +44 -0
- package/dist/test/src/elements/agents/goalTemplates.d.ts.map +1 -0
- package/dist/test/src/elements/agents/goalTemplates.js +297 -0
- package/dist/test/src/elements/agents/index.d.ts +8 -0
- package/dist/test/src/elements/agents/index.d.ts.map +1 -0
- package/dist/test/src/elements/agents/index.js +8 -0
- package/dist/test/src/elements/agents/ruleEngineConfig.d.ts +76 -0
- package/dist/test/src/elements/agents/ruleEngineConfig.d.ts.map +1 -0
- package/dist/test/src/elements/agents/ruleEngineConfig.js +143 -0
- package/dist/test/src/elements/agents/types.d.ts +97 -0
- package/dist/test/src/elements/agents/types.d.ts.map +1 -0
- package/dist/test/src/elements/agents/types.js +5 -0
- package/dist/test/src/elements/index.d.ts +6 -0
- package/dist/test/src/elements/index.d.ts.map +1 -0
- package/dist/test/src/elements/index.js +6 -0
- package/dist/test/src/elements/memories/Memory.d.ts +110 -0
- package/dist/test/src/elements/memories/Memory.d.ts.map +1 -0
- package/dist/test/src/elements/memories/Memory.js +470 -0
- package/dist/test/src/elements/memories/MemoryManager.d.ts +86 -0
- package/dist/test/src/elements/memories/MemoryManager.d.ts.map +1 -0
- package/dist/test/src/elements/memories/MemoryManager.js +435 -0
- package/dist/test/src/elements/memories/constants.d.ts +42 -0
- package/dist/test/src/elements/memories/constants.d.ts.map +1 -0
- package/dist/test/src/elements/memories/constants.js +49 -0
- package/dist/test/src/elements/memories/index.d.ts +6 -0
- package/dist/test/src/elements/memories/index.d.ts.map +1 -0
- package/dist/test/src/elements/memories/index.js +6 -0
- package/dist/test/src/elements/skills/Skill.d.ts +109 -0
- package/dist/test/src/elements/skills/Skill.d.ts.map +1 -0
- package/dist/test/src/elements/skills/Skill.js +381 -0
- package/dist/test/src/elements/templates/Template.d.ts +138 -0
- package/dist/test/src/elements/templates/Template.d.ts.map +1 -0
- package/dist/test/src/elements/templates/Template.js +673 -0
- package/dist/test/src/elements/templates/TemplateManager.d.ts +104 -0
- package/dist/test/src/elements/templates/TemplateManager.d.ts.map +1 -0
- package/dist/test/src/elements/templates/TemplateManager.js +496 -0
- package/dist/test/src/elements/templates/index.d.ts +6 -0
- package/dist/test/src/elements/templates/index.d.ts.map +1 -0
- package/dist/test/src/elements/templates/index.js +6 -0
- package/dist/test/src/errors/SecurityError.d.ts +29 -0
- package/dist/test/src/errors/SecurityError.d.ts.map +1 -0
- package/dist/test/src/errors/SecurityError.js +47 -0
- package/dist/test/src/errors/index.d.ts +2 -0
- package/dist/test/src/errors/index.d.ts.map +1 -0
- package/dist/test/src/errors/index.js +2 -0
- package/dist/test/src/index.barrel.d.ts +21 -0
- package/dist/test/src/index.barrel.d.ts.map +1 -0
- package/dist/test/src/index.barrel.js +31 -0
- package/dist/test/src/index.d.ts +223 -0
- package/dist/test/src/index.d.ts.map +1 -0
- package/dist/test/src/index.js +1594 -0
- package/dist/test/src/marketplace/GitHubClient.d.ts +22 -0
- package/dist/test/src/marketplace/GitHubClient.d.ts.map +1 -0
- package/dist/test/src/marketplace/GitHubClient.js +112 -0
- package/dist/test/src/marketplace/MarketplaceBrowser.d.ts +21 -0
- package/dist/test/src/marketplace/MarketplaceBrowser.d.ts.map +1 -0
- package/dist/test/src/marketplace/MarketplaceBrowser.js +45 -0
- package/dist/test/src/marketplace/MarketplaceSearch.d.ts +18 -0
- package/dist/test/src/marketplace/MarketplaceSearch.d.ts.map +1 -0
- package/dist/test/src/marketplace/MarketplaceSearch.js +36 -0
- package/dist/test/src/marketplace/PersonaDetails.d.ts +22 -0
- package/dist/test/src/marketplace/PersonaDetails.d.ts.map +1 -0
- package/dist/test/src/marketplace/PersonaDetails.js +71 -0
- package/dist/test/src/marketplace/PersonaInstaller.d.ts +25 -0
- package/dist/test/src/marketplace/PersonaInstaller.d.ts.map +1 -0
- package/dist/test/src/marketplace/PersonaInstaller.js +100 -0
- package/dist/test/src/marketplace/PersonaSubmitter.d.ts +19 -0
- package/dist/test/src/marketplace/PersonaSubmitter.d.ts.map +1 -0
- package/dist/test/src/marketplace/PersonaSubmitter.js +57 -0
- package/dist/test/src/marketplace/index.d.ts +10 -0
- package/dist/test/src/marketplace/index.d.ts.map +1 -0
- package/dist/test/src/marketplace/index.js +10 -0
- package/dist/test/src/persona/PersonaElement.d.ts +64 -0
- package/dist/test/src/persona/PersonaElement.d.ts.map +1 -0
- package/dist/test/src/persona/PersonaElement.js +223 -0
- package/dist/test/src/persona/PersonaElementManager.d.ts +97 -0
- package/dist/test/src/persona/PersonaElementManager.d.ts.map +1 -0
- package/dist/test/src/persona/PersonaElementManager.js +342 -0
- package/dist/test/src/persona/PersonaLoader.d.ts +34 -0
- package/dist/test/src/persona/PersonaLoader.d.ts.map +1 -0
- package/dist/test/src/persona/PersonaLoader.js +145 -0
- package/dist/test/src/persona/PersonaManager.d.ts +112 -0
- package/dist/test/src/persona/PersonaManager.d.ts.map +1 -0
- package/dist/test/src/persona/PersonaManager.js +341 -0
- package/dist/test/src/persona/PersonaValidator.d.ts +33 -0
- package/dist/test/src/persona/PersonaValidator.d.ts.map +1 -0
- package/dist/test/src/persona/PersonaValidator.js +157 -0
- package/dist/test/src/persona/export-import/PersonaExporter.d.ts +43 -0
- package/dist/test/src/persona/export-import/PersonaExporter.d.ts.map +1 -0
- package/dist/test/src/persona/export-import/PersonaExporter.js +99 -0
- package/dist/test/src/persona/export-import/PersonaImporter.d.ts +65 -0
- package/dist/test/src/persona/export-import/PersonaImporter.d.ts.map +1 -0
- package/dist/test/src/persona/export-import/PersonaImporter.js +315 -0
- package/dist/test/src/persona/export-import/PersonaSharer.d.ts +60 -0
- package/dist/test/src/persona/export-import/PersonaSharer.d.ts.map +1 -0
- package/dist/test/src/persona/export-import/PersonaSharer.js +502 -0
- package/dist/test/src/persona/export-import/index.d.ts +10 -0
- package/dist/test/src/persona/export-import/index.d.ts.map +1 -0
- package/dist/test/src/persona/export-import/index.js +7 -0
- package/dist/test/src/persona/index.d.ts +7 -0
- package/dist/test/src/persona/index.d.ts.map +1 -0
- package/dist/test/src/persona/index.js +7 -0
- package/dist/test/src/portfolio/MigrationManager.d.ts +44 -0
- package/dist/test/src/portfolio/MigrationManager.d.ts.map +1 -0
- package/dist/test/src/portfolio/MigrationManager.js +163 -0
- package/dist/test/src/portfolio/PortfolioManager.d.ts +54 -0
- package/dist/test/src/portfolio/PortfolioManager.d.ts.map +1 -0
- package/dist/test/src/portfolio/PortfolioManager.js +224 -0
- package/dist/test/src/portfolio/types.d.ts +18 -0
- package/dist/test/src/portfolio/types.d.ts.map +1 -0
- package/dist/test/src/portfolio/types.js +13 -0
- package/dist/test/src/security/InputValidator.d.ts +80 -0
- package/dist/test/src/security/InputValidator.d.ts.map +1 -0
- package/dist/test/src/security/InputValidator.js +436 -0
- package/dist/test/src/security/audit/SecurityAuditor.d.ts +44 -0
- package/dist/test/src/security/audit/SecurityAuditor.d.ts.map +1 -0
- package/dist/test/src/security/audit/SecurityAuditor.js +274 -0
- package/dist/test/src/security/audit/config/suppressions.d.ts +34 -0
- package/dist/test/src/security/audit/config/suppressions.d.ts.map +1 -0
- package/dist/test/src/security/audit/config/suppressions.js +575 -0
- package/dist/test/src/security/audit/index.d.ts +14 -0
- package/dist/test/src/security/audit/index.d.ts.map +1 -0
- package/dist/test/src/security/audit/index.js +15 -0
- package/dist/test/src/security/audit/reporters/ConsoleReporter.d.ts +46 -0
- package/dist/test/src/security/audit/reporters/ConsoleReporter.d.ts.map +1 -0
- package/dist/test/src/security/audit/reporters/ConsoleReporter.js +174 -0
- package/dist/test/src/security/audit/reporters/JsonReporter.d.ts +13 -0
- package/dist/test/src/security/audit/reporters/JsonReporter.d.ts.map +1 -0
- package/dist/test/src/security/audit/reporters/JsonReporter.js +25 -0
- package/dist/test/src/security/audit/reporters/MarkdownReporter.d.ts +13 -0
- package/dist/test/src/security/audit/reporters/MarkdownReporter.d.ts.map +1 -0
- package/dist/test/src/security/audit/reporters/MarkdownReporter.js +79 -0
- package/dist/test/src/security/audit/rules/SecurityRules.d.ts +20 -0
- package/dist/test/src/security/audit/rules/SecurityRules.d.ts.map +1 -0
- package/dist/test/src/security/audit/rules/SecurityRules.js +244 -0
- package/dist/test/src/security/audit/scanners/CodeScanner.d.ts +47 -0
- package/dist/test/src/security/audit/scanners/CodeScanner.d.ts.map +1 -0
- package/dist/test/src/security/audit/scanners/CodeScanner.js +174 -0
- package/dist/test/src/security/audit/scanners/ConfigurationScanner.d.ts +13 -0
- package/dist/test/src/security/audit/scanners/ConfigurationScanner.d.ts.map +1 -0
- package/dist/test/src/security/audit/scanners/ConfigurationScanner.js +22 -0
- package/dist/test/src/security/audit/scanners/DependencyScanner.d.ts +13 -0
- package/dist/test/src/security/audit/scanners/DependencyScanner.d.ts.map +1 -0
- package/dist/test/src/security/audit/scanners/DependencyScanner.js +22 -0
- package/dist/test/src/security/audit/types.d.ts +94 -0
- package/dist/test/src/security/audit/types.d.ts.map +1 -0
- package/dist/test/src/security/audit/types.js +6 -0
- package/dist/test/src/security/commandValidator.d.ts +7 -0
- package/dist/test/src/security/commandValidator.d.ts.map +1 -0
- package/dist/test/src/security/commandValidator.js +78 -0
- package/dist/test/src/security/constants.d.ts +24 -0
- package/dist/test/src/security/constants.d.ts.map +1 -0
- package/dist/test/src/security/constants.js +26 -0
- package/dist/test/src/security/contentValidator.d.ts +47 -0
- package/dist/test/src/security/contentValidator.d.ts.map +1 -0
- package/dist/test/src/security/contentValidator.js +301 -0
- package/dist/test/src/security/errors.d.ts +14 -0
- package/dist/test/src/security/errors.d.ts.map +1 -0
- package/dist/test/src/security/errors.js +28 -0
- package/dist/test/src/security/fileLockManager.d.ts +70 -0
- package/dist/test/src/security/fileLockManager.d.ts.map +1 -0
- package/dist/test/src/security/fileLockManager.js +187 -0
- package/dist/test/src/security/index.d.ts +12 -0
- package/dist/test/src/security/index.d.ts.map +1 -0
- package/dist/test/src/security/index.js +14 -0
- package/dist/test/src/security/pathValidator.d.ts +9 -0
- package/dist/test/src/security/pathValidator.d.ts.map +1 -0
- package/dist/test/src/security/pathValidator.js +98 -0
- package/dist/test/src/security/regexValidator.d.ts +59 -0
- package/dist/test/src/security/regexValidator.d.ts.map +1 -0
- package/dist/test/src/security/regexValidator.js +214 -0
- package/dist/test/src/security/secureYamlParser.d.ts +46 -0
- package/dist/test/src/security/secureYamlParser.d.ts.map +1 -0
- package/dist/test/src/security/secureYamlParser.js +203 -0
- package/dist/test/src/security/securityMonitor.d.ts +58 -0
- package/dist/test/src/security/securityMonitor.d.ts.map +1 -0
- package/dist/test/src/security/securityMonitor.js +108 -0
- package/dist/test/src/security/tokenManager.d.ts +85 -0
- package/dist/test/src/security/tokenManager.d.ts.map +1 -0
- package/dist/test/src/security/tokenManager.js +286 -0
- package/dist/test/src/security/validators/unicodeValidator.d.ts +97 -0
- package/dist/test/src/security/validators/unicodeValidator.d.ts.map +1 -0
- package/dist/test/src/security/validators/unicodeValidator.js +312 -0
- package/dist/test/src/security/yamlValidator.d.ts +21 -0
- package/dist/test/src/security/yamlValidator.d.ts.map +1 -0
- package/dist/test/src/security/yamlValidator.js +164 -0
- package/dist/test/src/server/ServerSetup.d.ts +35 -0
- package/dist/test/src/server/ServerSetup.d.ts.map +1 -0
- package/dist/test/src/server/ServerSetup.js +116 -0
- package/dist/test/src/server/index.d.ts +7 -0
- package/dist/test/src/server/index.d.ts.map +1 -0
- package/dist/test/src/server/index.js +7 -0
- package/dist/test/src/server/startup.d.ts +31 -0
- package/dist/test/src/server/startup.d.ts.map +1 -0
- package/dist/test/src/server/startup.js +67 -0
- package/dist/test/src/server/tools/CollectionTools.d.ts +10 -0
- package/dist/test/src/server/tools/CollectionTools.d.ts.map +1 -0
- package/dist/test/src/server/tools/CollectionTools.js +96 -0
- package/dist/test/src/server/tools/ConfigTools.d.ts +10 -0
- package/dist/test/src/server/tools/ConfigTools.d.ts.map +1 -0
- package/dist/test/src/server/tools/ConfigTools.js +63 -0
- package/dist/test/src/server/tools/MarketplaceTools.d.ts +10 -0
- package/dist/test/src/server/tools/MarketplaceTools.d.ts.map +1 -0
- package/dist/test/src/server/tools/MarketplaceTools.js +92 -0
- package/dist/test/src/server/tools/PersonaTools.d.ts +10 -0
- package/dist/test/src/server/tools/PersonaTools.d.ts.map +1 -0
- package/dist/test/src/server/tools/PersonaTools.js +257 -0
- package/dist/test/src/server/tools/ToolRegistry.d.ts +37 -0
- package/dist/test/src/server/tools/ToolRegistry.d.ts.map +1 -0
- package/dist/test/src/server/tools/ToolRegistry.js +40 -0
- package/dist/test/src/server/tools/UpdateTools.d.ts +10 -0
- package/dist/test/src/server/tools/UpdateTools.d.ts.map +1 -0
- package/dist/test/src/server/tools/UpdateTools.js +64 -0
- package/dist/test/src/server/tools/UserTools.d.ts +10 -0
- package/dist/test/src/server/tools/UserTools.d.ts.map +1 -0
- package/dist/test/src/server/tools/UserTools.js +51 -0
- package/dist/test/src/server/tools/index.d.ts +10 -0
- package/dist/test/src/server/tools/index.d.ts.map +1 -0
- package/dist/test/src/server/tools/index.js +10 -0
- package/dist/test/src/server/types.d.ts +34 -0
- package/dist/test/src/server/types.d.ts.map +1 -0
- package/dist/test/src/server/types.js +5 -0
- package/dist/test/src/tools/debug.d.ts +20 -0
- package/dist/test/src/tools/debug.d.ts.map +1 -0
- package/dist/test/src/tools/debug.js +37 -0
- package/dist/test/src/types/cache.d.ts +8 -0
- package/dist/test/src/types/cache.d.ts.map +1 -0
- package/dist/test/src/types/cache.js +5 -0
- package/dist/test/src/types/collection.d.ts +23 -0
- package/dist/test/src/types/collection.d.ts.map +1 -0
- package/dist/test/src/types/collection.js +5 -0
- package/dist/test/src/types/elements/IElement.d.ts +123 -0
- package/dist/test/src/types/elements/IElement.d.ts.map +1 -0
- package/dist/test/src/types/elements/IElement.js +30 -0
- package/dist/test/src/types/elements/IElementManager.d.ts +65 -0
- package/dist/test/src/types/elements/IElementManager.d.ts.map +1 -0
- package/dist/test/src/types/elements/IElementManager.js +6 -0
- package/dist/test/src/types/elements/IRatingManager.d.ts +109 -0
- package/dist/test/src/types/elements/IRatingManager.d.ts.map +1 -0
- package/dist/test/src/types/elements/IRatingManager.js +6 -0
- package/dist/test/src/types/elements/IReferenceResolver.d.ts +52 -0
- package/dist/test/src/types/elements/IReferenceResolver.d.ts.map +1 -0
- package/dist/test/src/types/elements/IReferenceResolver.js +6 -0
- package/dist/test/src/types/elements/RatingBreakdowns.d.ts +49 -0
- package/dist/test/src/types/elements/RatingBreakdowns.d.ts.map +1 -0
- package/dist/test/src/types/elements/RatingBreakdowns.js +6 -0
- package/dist/test/src/types/elements/index.d.ts +9 -0
- package/dist/test/src/types/elements/index.d.ts.map +1 -0
- package/dist/test/src/types/elements/index.js +11 -0
- package/dist/test/src/types/index.d.ts +9 -0
- package/dist/test/src/types/index.d.ts.map +1 -0
- package/dist/test/src/types/index.js +9 -0
- package/dist/test/src/types/marketplace.d.ts +23 -0
- package/dist/test/src/types/marketplace.d.ts.map +1 -0
- package/dist/test/src/types/marketplace.js +5 -0
- package/dist/test/src/types/mcp.d.ts +84 -0
- package/dist/test/src/types/mcp.d.ts.map +1 -0
- package/dist/test/src/types/mcp.js +80 -0
- package/dist/test/src/types/persona.d.ts +30 -0
- package/dist/test/src/types/persona.d.ts.map +1 -0
- package/dist/test/src/types/persona.js +5 -0
- package/dist/test/src/update/BackupManager.d.ts +46 -0
- package/dist/test/src/update/BackupManager.d.ts.map +1 -0
- package/dist/test/src/update/BackupManager.js +261 -0
- package/dist/test/src/update/DependencyChecker.d.ts +41 -0
- package/dist/test/src/update/DependencyChecker.d.ts.map +1 -0
- package/dist/test/src/update/DependencyChecker.js +132 -0
- package/dist/test/src/update/RateLimiter.d.ts +80 -0
- package/dist/test/src/update/RateLimiter.d.ts.map +1 -0
- package/dist/test/src/update/RateLimiter.js +172 -0
- package/dist/test/src/update/SignatureVerifier.d.ts +71 -0
- package/dist/test/src/update/SignatureVerifier.d.ts.map +1 -0
- package/dist/test/src/update/SignatureVerifier.js +214 -0
- package/dist/test/src/update/UpdateChecker.d.ts +127 -0
- package/dist/test/src/update/UpdateChecker.d.ts.map +1 -0
- package/dist/test/src/update/UpdateChecker.js +469 -0
- package/dist/test/src/update/UpdateManager.d.ts +41 -0
- package/dist/test/src/update/UpdateManager.d.ts.map +1 -0
- package/dist/test/src/update/UpdateManager.js +260 -0
- package/dist/test/src/update/VersionManager.d.ts +31 -0
- package/dist/test/src/update/VersionManager.d.ts.map +1 -0
- package/dist/test/src/update/VersionManager.js +134 -0
- package/dist/test/src/update/index.d.ts +9 -0
- package/dist/test/src/update/index.d.ts.map +1 -0
- package/dist/test/src/update/index.js +9 -0
- package/dist/test/src/utils/filesystem.d.ts +29 -0
- package/dist/test/src/utils/filesystem.d.ts.map +1 -0
- package/dist/test/src/utils/filesystem.js +94 -0
- package/dist/test/src/utils/git.d.ts +32 -0
- package/dist/test/src/utils/git.d.ts.map +1 -0
- package/dist/test/src/utils/git.js +65 -0
- package/dist/test/src/utils/index.d.ts +7 -0
- package/dist/test/src/utils/index.d.ts.map +1 -0
- package/dist/test/src/utils/index.js +7 -0
- package/dist/test/src/utils/logger.d.ts +45 -0
- package/dist/test/src/utils/logger.d.ts.map +1 -0
- package/dist/test/src/utils/logger.js +91 -0
- package/dist/test/src/utils/version.d.ts +25 -0
- package/dist/test/src/utils/version.d.ts.map +1 -0
- package/dist/test/src/utils/version.js +97 -0
- package/dist/test/test/__tests__/integration/helpers/file-utils.d.ts +33 -0
- package/dist/test/test/__tests__/integration/helpers/file-utils.d.ts.map +1 -0
- package/dist/test/test/__tests__/integration/helpers/file-utils.js +83 -0
- package/dist/test/test/__tests__/integration/helpers/test-fixtures.d.ts +26 -0
- package/dist/test/test/__tests__/integration/helpers/test-fixtures.d.ts.map +1 -0
- package/dist/test/test/__tests__/integration/helpers/test-fixtures.js +95 -0
- package/dist/test/test/__tests__/integration/helpers/test-server.d.ts +26 -0
- package/dist/test/test/__tests__/integration/helpers/test-server.d.ts.map +1 -0
- package/dist/test/test/__tests__/integration/helpers/test-server.js +41 -0
- package/dist/test/test/__tests__/integration/setup.d.ts +8 -0
- package/dist/test/test/__tests__/integration/setup.d.ts.map +1 -0
- package/dist/test/test/__tests__/integration/setup.js +31 -0
- package/dist/test/test/__tests__/integration/teardown.d.ts +5 -0
- package/dist/test/test/__tests__/integration/teardown.d.ts.map +1 -0
- package/dist/test/test/__tests__/integration/teardown.js +23 -0
- package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.d.ts +34 -0
- package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.d.ts.map +1 -0
- package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.js +224 -0
- package/dist/test/test/__tests__/security/framework/SecurityTestFramework.d.ts +89 -0
- package/dist/test/test/__tests__/security/framework/SecurityTestFramework.d.ts.map +1 -0
- package/dist/test/test/__tests__/security/framework/SecurityTestFramework.js +543 -0
- package/dist/test/test/__tests__/security/index.d.ts +46 -0
- package/dist/test/test/__tests__/security/index.d.ts.map +1 -0
- package/dist/test/test/__tests__/security/index.js +98 -0
- package/dist/test/test/__tests__/security/setup.d.ts +3 -0
- package/dist/test/test/__tests__/security/setup.d.ts.map +1 -0
- package/dist/test/test/__tests__/security/setup.js +23 -0
- package/dist/tools/debug.d.ts +20 -0
- package/dist/tools/debug.d.ts.map +1 -0
- package/dist/tools/debug.js +37 -0
- package/dist/types/cache.d.ts +8 -0
- package/dist/types/cache.d.ts.map +1 -0
- package/dist/types/cache.js +5 -0
- package/dist/types/collection.d.ts +23 -0
- package/dist/types/collection.d.ts.map +1 -0
- package/dist/types/collection.js +5 -0
- package/dist/types/elements/IElement.d.ts +123 -0
- package/dist/types/elements/IElement.d.ts.map +1 -0
- package/dist/types/elements/IElement.js +30 -0
- package/dist/types/elements/IElementManager.d.ts +65 -0
- package/dist/types/elements/IElementManager.d.ts.map +1 -0
- package/dist/types/elements/IElementManager.js +6 -0
- package/dist/types/elements/IRatingManager.d.ts +109 -0
- package/dist/types/elements/IRatingManager.d.ts.map +1 -0
- package/dist/types/elements/IRatingManager.js +6 -0
- package/dist/types/elements/IReferenceResolver.d.ts +52 -0
- package/dist/types/elements/IReferenceResolver.d.ts.map +1 -0
- package/dist/types/elements/IReferenceResolver.js +6 -0
- package/dist/types/elements/RatingBreakdowns.d.ts +49 -0
- package/dist/types/elements/RatingBreakdowns.d.ts.map +1 -0
- package/dist/types/elements/RatingBreakdowns.js +6 -0
- package/dist/types/elements/index.d.ts +9 -0
- package/dist/types/elements/index.d.ts.map +1 -0
- package/dist/types/elements/index.js +11 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +9 -0
- package/dist/types/marketplace.d.ts +23 -0
- package/dist/types/marketplace.d.ts.map +1 -0
- package/dist/types/marketplace.js +5 -0
- package/dist/types/mcp.d.ts +84 -0
- package/dist/types/mcp.d.ts.map +1 -0
- package/dist/types/mcp.js +80 -0
- package/dist/types/persona.d.ts +30 -0
- package/dist/types/persona.d.ts.map +1 -0
- package/dist/types/persona.js +5 -0
- package/dist/update/BackupManager.d.ts +46 -0
- package/dist/update/BackupManager.d.ts.map +1 -0
- package/dist/update/BackupManager.js +261 -0
- package/dist/update/DependencyChecker.d.ts +41 -0
- package/dist/update/DependencyChecker.d.ts.map +1 -0
- package/dist/update/DependencyChecker.js +132 -0
- package/dist/update/RateLimiter.d.ts +80 -0
- package/dist/update/RateLimiter.d.ts.map +1 -0
- package/dist/update/RateLimiter.js +172 -0
- package/dist/update/SignatureVerifier.d.ts +71 -0
- package/dist/update/SignatureVerifier.d.ts.map +1 -0
- package/dist/update/SignatureVerifier.js +214 -0
- package/dist/update/UpdateChecker.d.ts +127 -0
- package/dist/update/UpdateChecker.d.ts.map +1 -0
- package/dist/update/UpdateChecker.js +469 -0
- package/dist/update/UpdateManager.d.ts +41 -0
- package/dist/update/UpdateManager.d.ts.map +1 -0
- package/dist/update/UpdateManager.js +260 -0
- package/dist/update/VersionManager.d.ts +31 -0
- package/dist/update/VersionManager.d.ts.map +1 -0
- package/dist/update/VersionManager.js +134 -0
- package/dist/update/index.d.ts +9 -0
- package/dist/update/index.d.ts.map +1 -0
- package/dist/update/index.js +9 -0
- package/dist/utils/filesystem.d.ts +29 -0
- package/dist/utils/filesystem.d.ts.map +1 -0
- package/dist/utils/filesystem.js +94 -0
- package/dist/utils/git.d.ts +32 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +65 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/logger.d.ts +45 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +91 -0
- package/dist/utils/version.d.ts +25 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +97 -0
- package/package.json +128 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EnsembleManager - Implementation of IElementManager for Ensemble elements
|
|
3
|
+
* Handles CRUD operations and lifecycle management for ensembles
|
|
4
|
+
*
|
|
5
|
+
* SECURITY MEASURES (Following PersonaElementManager patterns):
|
|
6
|
+
* 1. CRITICAL: Uses FileLockManager for atomic file operations to prevent race conditions
|
|
7
|
+
* 2. HIGH: SecureYamlParser for YAML content validation to prevent injection attacks
|
|
8
|
+
* 3. MEDIUM: All user inputs validated and sanitized
|
|
9
|
+
* 4. MEDIUM: Audit logging for all security operations
|
|
10
|
+
* 5. Path validation to prevent directory traversal
|
|
11
|
+
*/
|
|
12
|
+
import { IElementManager } from '../../types/elements/index.js';
|
|
13
|
+
import { ElementValidationResult } from '../../types/elements/IElement.js';
|
|
14
|
+
import { Ensemble } from './Ensemble.js';
|
|
15
|
+
import { ElementType } from '../../portfolio/types.js';
|
|
16
|
+
export declare class EnsembleManager implements IElementManager<Ensemble> {
|
|
17
|
+
private baseDir;
|
|
18
|
+
constructor(baseDir: string);
|
|
19
|
+
/**
|
|
20
|
+
* Load an ensemble from file
|
|
21
|
+
* SECURITY FIX: Uses FileLockManager.atomicReadFile() to prevent race conditions
|
|
22
|
+
*/
|
|
23
|
+
load(filePath: string): Promise<Ensemble>;
|
|
24
|
+
/**
|
|
25
|
+
* Save an ensemble to file
|
|
26
|
+
* SECURITY FIX: Uses FileLockManager.atomicWriteFile() for atomic writes
|
|
27
|
+
*/
|
|
28
|
+
save(ensemble: Ensemble, filePath: string): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* List all ensembles in the directory
|
|
31
|
+
*/
|
|
32
|
+
list(): Promise<Ensemble[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Find an ensemble matching a predicate
|
|
35
|
+
*/
|
|
36
|
+
find(predicate: (ensemble: Ensemble) => boolean): Promise<Ensemble | undefined>;
|
|
37
|
+
/**
|
|
38
|
+
* Validate an ensemble
|
|
39
|
+
*/
|
|
40
|
+
validate(ensemble: Ensemble): ElementValidationResult;
|
|
41
|
+
/**
|
|
42
|
+
* Parse ensemble file content
|
|
43
|
+
* SECURITY FIX: Uses SecureYamlParser to prevent YAML injection attacks
|
|
44
|
+
*/
|
|
45
|
+
private parseEnsembleFile;
|
|
46
|
+
/**
|
|
47
|
+
* Convert ensemble data to YAML safely
|
|
48
|
+
* SECURITY FIX: Uses yaml.dump with security options
|
|
49
|
+
*/
|
|
50
|
+
private toYamlSafe;
|
|
51
|
+
/**
|
|
52
|
+
* Import an ensemble from JSON
|
|
53
|
+
* SECURITY: Full validation of imported data
|
|
54
|
+
*/
|
|
55
|
+
importElement(jsonData: string, format?: 'json' | 'yaml' | 'markdown'): Promise<Ensemble>;
|
|
56
|
+
/**
|
|
57
|
+
* Export an ensemble to JSON
|
|
58
|
+
*/
|
|
59
|
+
exportElement(ensemble: Ensemble): Promise<string>;
|
|
60
|
+
/**
|
|
61
|
+
* Delete an ensemble file
|
|
62
|
+
*/
|
|
63
|
+
delete(filePath: string): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* Check if an ensemble file exists
|
|
66
|
+
*/
|
|
67
|
+
exists(filePath: string): Promise<boolean>;
|
|
68
|
+
/**
|
|
69
|
+
* Find multiple ensembles matching a predicate
|
|
70
|
+
*/
|
|
71
|
+
findMany(predicate: (ensemble: Ensemble) => boolean): Promise<Ensemble[]>;
|
|
72
|
+
/**
|
|
73
|
+
* Validate a file path
|
|
74
|
+
*/
|
|
75
|
+
validatePath(filePath: string): boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Get the element type this manager handles
|
|
78
|
+
*/
|
|
79
|
+
getElementType(): ElementType;
|
|
80
|
+
/**
|
|
81
|
+
* Get the file extension for ensemble files
|
|
82
|
+
*/
|
|
83
|
+
getFileExtension(): string;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=EnsembleManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnsembleManager.d.ts","sourceRoot":"","sources":["../../../src/elements/ensembles/EnsembleManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAO3E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAKvD,qBAAa,eAAgB,YAAW,eAAe,CAAC,QAAQ,CAAC;IACnD,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IASnC;;;OAGG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAwD/C;;;OAGG;IACG,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8C/D;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAiCjC;;OAEG;IACG,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IAKrF;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,uBAAuB;IAIrD;;;OAGG;YACW,iBAAiB;IA4E/B;;;OAGG;IACH,OAAO,CAAC,UAAU;IAelB;;;OAGG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsD/F;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAWxD;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB7C;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBhD;;OAEG;IACG,QAAQ,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAK/E;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIvC;;OAEG;IACH,cAAc,IAAI,WAAW;IAI7B;;OAEG;IACH,gBAAgB,IAAI,MAAM;CAG3B"}
|
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EnsembleManager - Implementation of IElementManager for Ensemble elements
|
|
3
|
+
* Handles CRUD operations and lifecycle management for ensembles
|
|
4
|
+
*
|
|
5
|
+
* SECURITY MEASURES (Following PersonaElementManager patterns):
|
|
6
|
+
* 1. CRITICAL: Uses FileLockManager for atomic file operations to prevent race conditions
|
|
7
|
+
* 2. HIGH: SecureYamlParser for YAML content validation to prevent injection attacks
|
|
8
|
+
* 3. MEDIUM: All user inputs validated and sanitized
|
|
9
|
+
* 4. MEDIUM: Audit logging for all security operations
|
|
10
|
+
* 5. Path validation to prevent directory traversal
|
|
11
|
+
*/
|
|
12
|
+
import { FileLockManager } from '../../security/fileLockManager.js';
|
|
13
|
+
import { SecureYamlParser } from '../../security/secureYamlParser.js';
|
|
14
|
+
import { SecurityMonitor } from '../../security/securityMonitor.js';
|
|
15
|
+
import { validatePath } from '../../security/InputValidator.js';
|
|
16
|
+
import { logger } from '../../utils/logger.js';
|
|
17
|
+
import { Ensemble } from './Ensemble.js';
|
|
18
|
+
import { ElementType } from '../../portfolio/types.js';
|
|
19
|
+
import * as path from 'path';
|
|
20
|
+
import * as fs from 'fs/promises';
|
|
21
|
+
import * as yaml from 'js-yaml';
|
|
22
|
+
export class EnsembleManager {
|
|
23
|
+
baseDir;
|
|
24
|
+
constructor(baseDir) {
|
|
25
|
+
this.baseDir = baseDir;
|
|
26
|
+
// Validate base directory
|
|
27
|
+
const validatedPath = validatePath(baseDir);
|
|
28
|
+
if (!validatedPath) {
|
|
29
|
+
throw new Error('Invalid base directory path');
|
|
30
|
+
}
|
|
31
|
+
this.baseDir = validatedPath;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Load an ensemble from file
|
|
35
|
+
* SECURITY FIX: Uses FileLockManager.atomicReadFile() to prevent race conditions
|
|
36
|
+
*/
|
|
37
|
+
async load(filePath) {
|
|
38
|
+
// SECURITY: Validate file path
|
|
39
|
+
const validatedPath = validatePath(filePath);
|
|
40
|
+
if (!validatedPath) {
|
|
41
|
+
throw new Error('Invalid file path');
|
|
42
|
+
}
|
|
43
|
+
const fullPath = path.isAbsolute(validatedPath)
|
|
44
|
+
? validatedPath
|
|
45
|
+
: path.join(this.baseDir, validatedPath);
|
|
46
|
+
try {
|
|
47
|
+
// CRITICAL FIX: Use atomic file read to prevent race conditions
|
|
48
|
+
// Previously: const content = await fs.readFile(fullPath, 'utf-8');
|
|
49
|
+
// Now: Uses FileLockManager with proper encoding object format
|
|
50
|
+
const content = await FileLockManager.atomicReadFile(fullPath, { encoding: 'utf-8' });
|
|
51
|
+
// Parse ensemble data
|
|
52
|
+
const ensembleData = await this.parseEnsembleFile(content, fullPath);
|
|
53
|
+
// Create ensemble instance
|
|
54
|
+
const ensemble = new Ensemble(ensembleData.metadata);
|
|
55
|
+
// Add elements if present
|
|
56
|
+
if (ensembleData.elements) {
|
|
57
|
+
for (const element of ensembleData.elements) {
|
|
58
|
+
ensemble.addElement(element.elementId, element.elementType, element.role, {
|
|
59
|
+
priority: element.priority,
|
|
60
|
+
activationCondition: element.activationCondition,
|
|
61
|
+
dependencies: element.dependencies
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Restore shared context if present
|
|
66
|
+
if (ensembleData.sharedContext) {
|
|
67
|
+
ensemble.deserialize(JSON.stringify({
|
|
68
|
+
...ensembleData,
|
|
69
|
+
elements: Array.from(ensemble.getElements().entries())
|
|
70
|
+
}));
|
|
71
|
+
}
|
|
72
|
+
logger.info(`Loaded ensemble from ${fullPath}`);
|
|
73
|
+
return ensemble;
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
logger.error(`Failed to load ensemble from ${fullPath}:`, error);
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Save an ensemble to file
|
|
82
|
+
* SECURITY FIX: Uses FileLockManager.atomicWriteFile() for atomic writes
|
|
83
|
+
*/
|
|
84
|
+
async save(ensemble, filePath) {
|
|
85
|
+
// SECURITY: Validate file path
|
|
86
|
+
const validatedPath = validatePath(filePath);
|
|
87
|
+
if (!validatedPath) {
|
|
88
|
+
throw new Error('Invalid file path');
|
|
89
|
+
}
|
|
90
|
+
const fullPath = path.isAbsolute(validatedPath)
|
|
91
|
+
? validatedPath
|
|
92
|
+
: path.join(this.baseDir, validatedPath);
|
|
93
|
+
try {
|
|
94
|
+
// Ensure directory exists
|
|
95
|
+
await fs.mkdir(path.dirname(fullPath), { recursive: true });
|
|
96
|
+
// Prepare ensemble data
|
|
97
|
+
const ensembleData = {
|
|
98
|
+
metadata: ensemble.metadata,
|
|
99
|
+
elements: Array.from(ensemble.getElements().values()),
|
|
100
|
+
extensions: ensemble.extensions
|
|
101
|
+
};
|
|
102
|
+
// Convert to YAML with security measures
|
|
103
|
+
const yamlContent = this.toYamlSafe(ensembleData);
|
|
104
|
+
// CRITICAL FIX: Use atomic file write to prevent race conditions
|
|
105
|
+
// Previously: await fs.writeFile(fullPath, yamlContent, 'utf-8');
|
|
106
|
+
// Now: Uses FileLockManager for atomic operation
|
|
107
|
+
await FileLockManager.atomicWriteFile(fullPath, yamlContent, { encoding: 'utf-8' });
|
|
108
|
+
// Log security event
|
|
109
|
+
SecurityMonitor.logSecurityEvent({
|
|
110
|
+
type: 'ENSEMBLE_SAVED',
|
|
111
|
+
severity: 'LOW',
|
|
112
|
+
source: 'EnsembleManager.save',
|
|
113
|
+
details: `Ensemble saved to ${fullPath}`
|
|
114
|
+
});
|
|
115
|
+
logger.info(`Saved ensemble to ${fullPath}`);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
logger.error(`Failed to save ensemble to ${fullPath}:`, error);
|
|
119
|
+
throw error;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* List all ensembles in the directory
|
|
124
|
+
*/
|
|
125
|
+
async list() {
|
|
126
|
+
try {
|
|
127
|
+
const files = await fs.readdir(this.baseDir);
|
|
128
|
+
const ensembles = [];
|
|
129
|
+
// Process files in parallel with limit
|
|
130
|
+
const BATCH_SIZE = 10;
|
|
131
|
+
for (let i = 0; i < files.length; i += BATCH_SIZE) {
|
|
132
|
+
const batch = files.slice(i, i + BATCH_SIZE);
|
|
133
|
+
const batchPromises = batch
|
|
134
|
+
.filter(file => file.endsWith('.md') || file.endsWith('.yaml') || file.endsWith('.yml'))
|
|
135
|
+
.map(file => this.load(file).catch(error => {
|
|
136
|
+
logger.warn(`Failed to load ensemble ${file}:`, error);
|
|
137
|
+
return null;
|
|
138
|
+
}));
|
|
139
|
+
const batchResults = await Promise.all(batchPromises);
|
|
140
|
+
ensembles.push(...batchResults.filter((e) => e !== null));
|
|
141
|
+
}
|
|
142
|
+
return ensembles;
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
// Handle missing directory gracefully with type-safe check
|
|
146
|
+
if (error && typeof error === 'object' && 'code' in error && error.code === 'ENOENT') {
|
|
147
|
+
logger.debug('Ensembles directory does not exist yet, returning empty array');
|
|
148
|
+
return [];
|
|
149
|
+
}
|
|
150
|
+
logger.error('Failed to list ensembles:', error);
|
|
151
|
+
return [];
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Find an ensemble matching a predicate
|
|
156
|
+
*/
|
|
157
|
+
async find(predicate) {
|
|
158
|
+
const ensembles = await this.list();
|
|
159
|
+
return ensembles.find(predicate);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Validate an ensemble
|
|
163
|
+
*/
|
|
164
|
+
validate(ensemble) {
|
|
165
|
+
return ensemble.validate();
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Parse ensemble file content
|
|
169
|
+
* SECURITY FIX: Uses SecureYamlParser to prevent YAML injection attacks
|
|
170
|
+
*/
|
|
171
|
+
async parseEnsembleFile(content, filePath) {
|
|
172
|
+
try {
|
|
173
|
+
// Try to parse as YAML frontmatter (markdown file)
|
|
174
|
+
if (filePath.endsWith('.md')) {
|
|
175
|
+
const match = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
|
|
176
|
+
if (match) {
|
|
177
|
+
// HIGH SEVERITY FIX: Use SecureYamlParser to prevent YAML injection
|
|
178
|
+
// Previously: Used unsafe YAML parsing without validation
|
|
179
|
+
// Now: Uses SecureYamlParser which validates content
|
|
180
|
+
const parsed = SecureYamlParser.parse(match[1], {
|
|
181
|
+
maxYamlSize: 64 * 1024, // 64KB limit
|
|
182
|
+
validateContent: true
|
|
183
|
+
});
|
|
184
|
+
// Log security event
|
|
185
|
+
SecurityMonitor.logSecurityEvent({
|
|
186
|
+
type: 'YAML_PARSE_SUCCESS',
|
|
187
|
+
severity: 'LOW',
|
|
188
|
+
source: 'EnsembleManager.parseEnsembleFile',
|
|
189
|
+
details: 'YAML content safely parsed'
|
|
190
|
+
});
|
|
191
|
+
return {
|
|
192
|
+
metadata: parsed.data,
|
|
193
|
+
content: match[2].trim()
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// SECURITY FIX: For plain YAML files, check if content already has frontmatter
|
|
198
|
+
// Previously: Used direct YAML parsing without security validation
|
|
199
|
+
// Now: Uses SecureYamlParser for consistent security validation
|
|
200
|
+
// Check if content already has frontmatter markers
|
|
201
|
+
if (content.trim().startsWith('---')) {
|
|
202
|
+
// Content already has frontmatter, parse directly
|
|
203
|
+
const parsed = SecureYamlParser.parse(content, {
|
|
204
|
+
maxYamlSize: 64 * 1024, // 64KB limit
|
|
205
|
+
validateContent: true
|
|
206
|
+
});
|
|
207
|
+
// Log security event
|
|
208
|
+
SecurityMonitor.logSecurityEvent({
|
|
209
|
+
type: 'YAML_PARSE_SUCCESS',
|
|
210
|
+
severity: 'LOW',
|
|
211
|
+
source: 'EnsembleManager.parseEnsembleFile',
|
|
212
|
+
details: 'YAML frontmatter content safely parsed'
|
|
213
|
+
});
|
|
214
|
+
return parsed.data;
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
// Plain YAML without frontmatter - create frontmatter format
|
|
218
|
+
const frontmatterFormat = `---\n${content}\n---\n`;
|
|
219
|
+
const parsed = SecureYamlParser.parse(frontmatterFormat, {
|
|
220
|
+
maxYamlSize: 64 * 1024, // 64KB limit
|
|
221
|
+
validateContent: true
|
|
222
|
+
});
|
|
223
|
+
// Log security event
|
|
224
|
+
SecurityMonitor.logSecurityEvent({
|
|
225
|
+
type: 'YAML_PARSE_SUCCESS',
|
|
226
|
+
severity: 'LOW',
|
|
227
|
+
source: 'EnsembleManager.parseEnsembleFile',
|
|
228
|
+
details: 'Plain YAML content safely parsed'
|
|
229
|
+
});
|
|
230
|
+
return parsed.data;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
logger.error('Failed to parse ensemble file:', error);
|
|
235
|
+
throw new Error(`Invalid ensemble file format: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Convert ensemble data to YAML safely
|
|
240
|
+
* SECURITY FIX: Uses yaml.dump with security options
|
|
241
|
+
*/
|
|
242
|
+
toYamlSafe(data) {
|
|
243
|
+
// SECURITY FIX: Use yaml.dump with FAILSAFE_SCHEMA and security options
|
|
244
|
+
// This prevents arbitrary code execution via YAML
|
|
245
|
+
const yamlStr = yaml.dump(data, {
|
|
246
|
+
schema: yaml.FAILSAFE_SCHEMA,
|
|
247
|
+
noRefs: true,
|
|
248
|
+
skipInvalid: true,
|
|
249
|
+
quotingType: '"',
|
|
250
|
+
forceQuotes: true
|
|
251
|
+
});
|
|
252
|
+
// Add frontmatter delimiters for markdown files
|
|
253
|
+
return `---\n${yamlStr}---\n`;
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Import an ensemble from JSON
|
|
257
|
+
* SECURITY: Full validation of imported data
|
|
258
|
+
*/
|
|
259
|
+
async importElement(jsonData, format) {
|
|
260
|
+
// Validate JSON structure
|
|
261
|
+
let data;
|
|
262
|
+
try {
|
|
263
|
+
data = JSON.parse(jsonData);
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
throw new Error('Invalid JSON format');
|
|
267
|
+
}
|
|
268
|
+
// Validate required fields
|
|
269
|
+
if (!data.metadata || typeof data.metadata !== 'object') {
|
|
270
|
+
throw new Error('Missing or invalid metadata');
|
|
271
|
+
}
|
|
272
|
+
// Create ensemble with validated metadata
|
|
273
|
+
const ensemble = new Ensemble(data.metadata);
|
|
274
|
+
// Add elements with validation
|
|
275
|
+
if (data.elements && Array.isArray(data.elements)) {
|
|
276
|
+
for (const element of data.elements) {
|
|
277
|
+
if (!element.elementId || !element.elementType) {
|
|
278
|
+
logger.warn('Skipping invalid element during import');
|
|
279
|
+
continue;
|
|
280
|
+
}
|
|
281
|
+
try {
|
|
282
|
+
ensemble.addElement(element.elementId, element.elementType, element.role || 'support', {
|
|
283
|
+
priority: element.priority,
|
|
284
|
+
activationCondition: element.activationCondition,
|
|
285
|
+
dependencies: element.dependencies
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
catch (error) {
|
|
289
|
+
logger.warn(`Failed to add element ${element.elementId} during import:`, error);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// Return without saving - caller can save if needed
|
|
294
|
+
SecurityMonitor.logSecurityEvent({
|
|
295
|
+
type: 'ENSEMBLE_IMPORTED',
|
|
296
|
+
severity: 'MEDIUM',
|
|
297
|
+
source: 'EnsembleManager.importElement',
|
|
298
|
+
details: `Ensemble imported`
|
|
299
|
+
});
|
|
300
|
+
return ensemble;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Export an ensemble to JSON
|
|
304
|
+
*/
|
|
305
|
+
async exportElement(ensemble) {
|
|
306
|
+
const data = {
|
|
307
|
+
metadata: ensemble.metadata,
|
|
308
|
+
elements: Array.from(ensemble.getElements().values()),
|
|
309
|
+
extensions: ensemble.extensions
|
|
310
|
+
};
|
|
311
|
+
// SECURITY FIX: Ensure safe JSON serialization
|
|
312
|
+
return JSON.stringify(data, null, 2);
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Delete an ensemble file
|
|
316
|
+
*/
|
|
317
|
+
async delete(filePath) {
|
|
318
|
+
const validatedPath = validatePath(filePath);
|
|
319
|
+
if (!validatedPath) {
|
|
320
|
+
throw new Error('Invalid file path');
|
|
321
|
+
}
|
|
322
|
+
const fullPath = path.isAbsolute(validatedPath)
|
|
323
|
+
? validatedPath
|
|
324
|
+
: path.join(this.baseDir, validatedPath);
|
|
325
|
+
await fs.unlink(fullPath);
|
|
326
|
+
SecurityMonitor.logSecurityEvent({
|
|
327
|
+
type: 'ENSEMBLE_DELETED',
|
|
328
|
+
severity: 'MEDIUM',
|
|
329
|
+
source: 'EnsembleManager.delete',
|
|
330
|
+
details: `Ensemble deleted: ${fullPath}`
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Check if an ensemble file exists
|
|
335
|
+
*/
|
|
336
|
+
async exists(filePath) {
|
|
337
|
+
const validatedPath = validatePath(filePath);
|
|
338
|
+
if (!validatedPath) {
|
|
339
|
+
return false;
|
|
340
|
+
}
|
|
341
|
+
const fullPath = path.isAbsolute(validatedPath)
|
|
342
|
+
? validatedPath
|
|
343
|
+
: path.join(this.baseDir, validatedPath);
|
|
344
|
+
try {
|
|
345
|
+
await fs.access(fullPath);
|
|
346
|
+
return true;
|
|
347
|
+
}
|
|
348
|
+
catch {
|
|
349
|
+
return false;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Find multiple ensembles matching a predicate
|
|
354
|
+
*/
|
|
355
|
+
async findMany(predicate) {
|
|
356
|
+
const ensembles = await this.list();
|
|
357
|
+
return ensembles.filter(predicate);
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Validate a file path
|
|
361
|
+
*/
|
|
362
|
+
validatePath(filePath) {
|
|
363
|
+
return validatePath(filePath) !== null;
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Get the element type this manager handles
|
|
367
|
+
*/
|
|
368
|
+
getElementType() {
|
|
369
|
+
return ElementType.ENSEMBLE;
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Get the file extension for ensemble files
|
|
373
|
+
*/
|
|
374
|
+
getFileExtension() {
|
|
375
|
+
return '.yaml';
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW5zZW1ibGVNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2Vuc2VtYmxlcy9FbnNlbWJsZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUlILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFpQixZQUFZLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsTUFBTSxPQUFPLGVBQWU7SUFDTjtJQUFwQixZQUFvQixPQUFlO1FBQWYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNqQywwQkFBMEI7UUFDMUIsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQWdCO1FBQ3pCLCtCQUErQjtRQUMvQixNQUFNLGFB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bnNlbWJsZU1hbmFnZXIgLSBJbXBsZW1lbnRhdGlvbiBvZiBJRWxlbWVudE1hbmFnZXIgZm9yIEVuc2VtYmxlIGVsZW1lbnRzXG4gKiBIYW5kbGVzIENSVUQgb3BlcmF0aW9ucyBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgZm9yIGVuc2VtYmxlc1xuICogXG4gKiBTRUNVUklUWSBNRUFTVVJFUyAoRm9sbG93aW5nIFBlcnNvbmFFbGVtZW50TWFuYWdlciBwYXR0ZXJucyk6XG4gKiAxLiBDUklUSUNBTDogVXNlcyBGaWxlTG9ja01hbmFnZXIgZm9yIGF0b21pYyBmaWxlIG9wZXJhdGlvbnMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnNcbiAqIDIuIEhJR0g6IFNlY3VyZVlhbWxQYXJzZXIgZm9yIFlBTUwgY29udGVudCB2YWxpZGF0aW9uIHRvIHByZXZlbnQgaW5qZWN0aW9uIGF0dGFja3NcbiAqIDMuIE1FRElVTTogQWxsIHVzZXIgaW5wdXRzIHZhbGlkYXRlZCBhbmQgc2FuaXRpemVkXG4gKiA0LiBNRURJVU06IEF1ZGl0IGxvZ2dpbmcgZm9yIGFsbCBzZWN1cml0eSBvcGVyYXRpb25zXG4gKiA1LiBQYXRoIHZhbGlkYXRpb24gdG8gcHJldmVudCBkaXJlY3RvcnkgdHJhdmVyc2FsXG4gKi9cblxuaW1wb3J0IHsgSUVsZW1lbnRNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vdHlwZXMvZWxlbWVudHMvaW5kZXguanMnO1xuaW1wb3J0IHsgRWxlbWVudFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuLi8uLi90eXBlcy9lbGVtZW50cy9JRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBGaWxlTG9ja01hbmFnZXIgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9maWxlTG9ja01hbmFnZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IHNhbml0aXplSW5wdXQsIHZhbGlkYXRlUGF0aCB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L0lucHV0VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IEVuc2VtYmxlIH0gZnJvbSAnLi9FbnNlbWJsZS5qcyc7XG5pbXBvcnQgeyBFbnNlbWJsZU1ldGFkYXRhIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBFTlNFTUJMRV9MSU1JVFMgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4uLy4uL3BvcnRmb2xpby90eXBlcy5qcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICdqcy15YW1sJztcblxuZXhwb3J0IGNsYXNzIEVuc2VtYmxlTWFuYWdlciBpbXBsZW1lbnRzIElFbGVtZW50TWFuYWdlcjxFbnNlbWJsZT4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJhc2VEaXI6IHN0cmluZykge1xuICAgIC8vIFZhbGlkYXRlIGJhc2UgZGlyZWN0b3J5XG4gICAgY29uc3QgdmFsaWRhdGVkUGF0aCA9IHZhbGlkYXRlUGF0aChiYXNlRGlyKTtcbiAgICBpZiAoIXZhbGlkYXRlZFBhdGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBiYXNlIGRpcmVjdG9yeSBwYXRoJyk7XG4gICAgfVxuICAgIHRoaXMuYmFzZURpciA9IHZhbGlkYXRlZFBhdGg7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBhbiBlbnNlbWJsZSBmcm9tIGZpbGVcbiAgICogU0VDVVJJVFkgRklYOiBVc2VzIEZpbGVMb2NrTWFuYWdlci5hdG9taWNSZWFkRmlsZSgpIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAqL1xuICBhc3luYyBsb2FkKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPEVuc2VtYmxlPiB7XG4gICAgLy8gU0VDVVJJVFk6IFZhbGlkYXRlIGZpbGUgcGF0aFxuICAgIGNvbnN0IHZhbGlkYXRlZFBhdGggPSB2YWxpZGF0ZVBhdGgoZmlsZVBhdGgpO1xuICAgIGlmICghdmFsaWRhdGVkUGF0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZpbGUgcGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5pc0Fic29sdXRlKHZhbGlkYXRlZFBhdGgpIFxuICAgICAgPyB2YWxpZGF0ZWRQYXRoIFxuICAgICAgOiBwYXRoLmpvaW4odGhpcy5iYXNlRGlyLCB2YWxpZGF0ZWRQYXRoKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBDUklUSUNBTCBGSVg6IFVzZSBhdG9taWMgZmlsZSByZWFkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgICAvLyBQcmV2aW91c2x5OiBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoZnVsbFBhdGgsICd1dGYtOCcpO1xuICAgICAgLy8gTm93OiBVc2VzIEZpbGVMb2NrTWFuYWdlciB3aXRoIHByb3BlciBlbmNvZGluZyBvYmplY3QgZm9ybWF0XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1JlYWRGaWxlKGZ1bGxQYXRoLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuXG4gICAgICAvLyBQYXJzZSBlbnNlbWJsZSBkYXRhXG4gICAgICBjb25zdCBlbnNlbWJsZURhdGEgPSBhd2FpdCB0aGlzLnBhcnNlRW5zZW1ibGVGaWxlKGNvbnRlbnQsIGZ1bGxQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGVuc2VtYmxlIGluc3RhbmNlXG4gICAgICBjb25zdCBlbnNlbWJsZSA9IG5ldyBFbnNlbWJsZShlbnNlbWJsZURhdGEubWV0YWRhdGEpO1xuICAgICAgXG4gICAgICAvLyBBZGQgZWxlbWVudHMgaWYgcHJlc2VudFxuICAgICAgaWYgKGVuc2VtYmxlRGF0YS5lbGVtZW50cykge1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZW5zZW1ibGVEYXRhLmVsZW1lbnRzKSB7XG4gICAgICAgICAgZW5zZW1ibGUuYWRkRWxlbWVudChcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudElkLFxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSxcbiAgICAgICAgICAgIGVsZW1lbnQucm9sZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcHJpb3JpdHk6IGVsZW1lbnQucHJpb3JpdHksXG4gICAgICAgICAgICAgIGFjdGl2YXRpb25Db25kaXRpb246IGVsZW1lbnQuYWN0aXZhdGlvbkNvbmRpdGlvbixcbiAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiBlbGVtZW50LmRlcGVuZGVuY2llc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVzdG9yZSBzaGFyZWQgY29udGV4dCBpZiBwcmVzZW50XG4gICAgICBpZiAoZW5zZW1ibGVEYXRhLnNoYXJlZENvbnRleHQpIHtcbiAgICAgICAgZW5zZW1ibGUuZGVzZXJpYWxpemUoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIC4uLmVuc2VtYmxlRGF0YSxcbiAgICAgICAgICBlbGVtZW50czogQXJyYXkuZnJvbShlbnNlbWJsZS5nZXRFbGVtZW50cygpLmVudHJpZXMoKSlcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuaW5mbyhgTG9hZGVkIGVuc2VtYmxlIGZyb20gJHtmdWxsUGF0aH1gKTtcbiAgICAgIHJldHVybiBlbnNlbWJsZTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBsb2FkIGVuc2VtYmxlIGZyb20gJHtmdWxsUGF0aH06YCwgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgYW4gZW5zZW1ibGUgdG8gZmlsZVxuICAgKiBTRUNVUklUWSBGSVg6IFVzZXMgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1dyaXRlRmlsZSgpIGZvciBhdG9taWMgd3JpdGVzXG4gICAqL1xuICBhc3luYyBzYXZlKGVuc2VtYmxlOiBFbnNlbWJsZSwgZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFNFQ1VSSVRZOiBWYWxpZGF0ZSBmaWxlIHBhdGhcbiAgICBjb25zdCB2YWxpZGF0ZWRQYXRoID0gdmFsaWRhdGVQYXRoKGZpbGVQYXRoKTtcbiAgICBpZiAoIXZhbGlkYXRlZFBhdGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmaWxlIHBhdGgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguaXNBYnNvbHV0ZSh2YWxpZGF0ZWRQYXRoKSBcbiAgICAgID8gdmFsaWRhdGVkUGF0aCBcbiAgICAgIDogcGF0aC5qb2luKHRoaXMuYmFzZURpciwgdmFsaWRhdGVkUGF0aCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gRW5zdXJlIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGF3YWl0IGZzLm1rZGlyKHBhdGguZGlybmFtZShmdWxsUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgICAvLyBQcmVwYXJlIGVuc2VtYmxlIGRhdGFcbiAgICAgIGNvbnN0IGVuc2VtYmxlRGF0YSA9IHtcbiAgICAgICAgbWV0YWRhdGE6IGVuc2VtYmxlLm1ldGFkYXRhLFxuICAgICAgICBlbGVtZW50czogQXJyYXkuZnJvbShlbnNlbWJsZS5nZXRFbGVtZW50cygpLnZhbHVlcygpKSxcbiAgICAgICAgZXh0ZW5zaW9uczogZW5zZW1ibGUuZXh0ZW5zaW9uc1xuICAgICAgfTtcblxuICAgICAgLy8gQ29udmVydCB0byBZQU1MIHdpdGggc2VjdXJpdHkgbWVhc3VyZXNcbiAgICAgIGNvbnN0IHlhbWxDb250ZW50ID0gdGhpcy50b1lhbWxTYWZlKGVuc2VtYmxlRGF0YSk7XG5cbiAgICAgIC8vIENSSVRJQ0FMIEZJWDogVXNlIGF0b21pYyBmaWxlIHdyaXRlIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgICAvLyBQcmV2aW91c2x5OiBhd2FpdCBmcy53cml0ZUZpbGUoZnVsbFBhdGgsIHlhbWxDb250ZW50LCAndXRmLTgnKTtcbiAgICAgIC8vIE5vdzogVXNlcyBGaWxlTG9ja01hbmFnZXIgZm9yIGF0b21pYyBvcGVyYXRpb25cbiAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUoZnVsbFBhdGgsIHlhbWxDb250ZW50LCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuXG4gICAgICAvLyBMb2cgc2VjdXJpdHkgZXZlbnRcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ0VOU0VNQkxFX1NBVkVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdFbnNlbWJsZU1hbmFnZXIuc2F2ZScsXG4gICAgICAgIGRldGFpbHM6IGBFbnNlbWJsZSBzYXZlZCB0byAke2Z1bGxQYXRofWBcbiAgICAgIH0pO1xuXG4gICAgICBsb2dnZXIuaW5mbyhgU2F2ZWQgZW5zZW1ibGUgdG8gJHtmdWxsUGF0aH1gKTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBzYXZlIGVuc2VtYmxlIHRvICR7ZnVsbFBhdGh9OmAsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IGFsbCBlbnNlbWJsZXMgaW4gdGhlIGRpcmVjdG9yeVxuICAgKi9cbiAgYXN5bmMgbGlzdCgpOiBQcm9taXNlPEVuc2VtYmxlW10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHRoaXMuYmFzZURpcik7XG4gICAgICBjb25zdCBlbnNlbWJsZXM6IEVuc2VtYmxlW10gPSBbXTtcblxuICAgICAgLy8gUHJvY2VzcyBmaWxlcyBpbiBwYXJhbGxlbCB3aXRoIGxpbWl0XG4gICAgICBjb25zdCBCQVRDSF9TSVpFID0gMTA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSArPSBCQVRDSF9TSVpFKSB7XG4gICAgICAgIGNvbnN0IGJhdGNoID0gZmlsZXMuc2xpY2UoaSwgaSArIEJBVENIX1NJWkUpO1xuICAgICAgICBjb25zdCBiYXRjaFByb21pc2VzID0gYmF0Y2hcbiAgICAgICAgICAuZmlsdGVyKGZpbGUgPT4gZmlsZS5lbmRzV2l0aCgnLm1kJykgfHwgZmlsZS5lbmRzV2l0aCgnLnlhbWwnKSB8fCBmaWxlLmVuZHNXaXRoKCcueW1sJykpXG4gICAgICAgICAgLm1hcChmaWxlID0+IHRoaXMubG9hZChmaWxlKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIGxvYWQgZW5zZW1ibGUgJHtmaWxlfTpgLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9KSk7XG5cbiAgICAgICAgY29uc3QgYmF0Y2hSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoYmF0Y2hQcm9taXNlcyk7XG4gICAgICAgIGVuc2VtYmxlcy5wdXNoKC4uLmJhdGNoUmVzdWx0cy5maWx0ZXIoKGUpOiBlIGlzIEVuc2VtYmxlID0+IGUgIT09IG51bGwpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVuc2VtYmxlcztcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgbWlzc2luZyBkaXJlY3RvcnkgZ3JhY2VmdWxseSB3aXRoIHR5cGUtc2FmZSBjaGVja1xuICAgICAgaWYgKGVycm9yICYmIHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYgJ2NvZGUnIGluIGVycm9yICYmIGVycm9yLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnRW5zZW1ibGVzIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCB5ZXQsIHJldHVybmluZyBlbXB0eSBhcnJheScpO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBsaXN0IGVuc2VtYmxlczonLCBlcnJvcik7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYW4gZW5zZW1ibGUgbWF0Y2hpbmcgYSBwcmVkaWNhdGVcbiAgICovXG4gIGFzeW5jIGZpbmQocHJlZGljYXRlOiAoZW5zZW1ibGU6IEVuc2VtYmxlKSA9PiBib29sZWFuKTogUHJvbWlzZTxFbnNlbWJsZSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGVuc2VtYmxlcyA9IGF3YWl0IHRoaXMubGlzdCgpO1xuICAgIHJldHVybiBlbnNlbWJsZXMuZmluZChwcmVkaWNhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGFuIGVuc2VtYmxlXG4gICAqL1xuICB2YWxpZGF0ZShlbnNlbWJsZTogRW5zZW1ibGUpOiBFbGVtZW50VmFsaWRhdGlvblJlc3VsdCB7XG4gICAgcmV0dXJuIGVuc2VtYmxlLnZhbGlkYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgZW5zZW1ibGUgZmlsZSBjb250ZW50XG4gICAqIFNFQ1VSSVRZIEZJWDogVXNlcyBTZWN1cmVZYW1sUGFyc2VyIHRvIHByZXZlbnQgWUFNTCBpbmplY3Rpb24gYXR0YWNrc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwYXJzZUVuc2VtYmxlRmlsZShjb250ZW50OiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBUcnkgdG8gcGFyc2UgYXMgWUFNTCBmcm9udG1hdHRlciAobWFya2Rvd24gZmlsZSlcbiAgICAgIGlmIChmaWxlUGF0aC5lbmRzV2l0aCgnLm1kJykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9eLS0tXFxuKFtcXHNcXFNdKj8pXFxuLS0tXFxuKFtcXHNcXFNdKikkLyk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIC8vIEhJR0ggU0VWRVJJVFkgRklYOiBVc2UgU2VjdXJlWWFtbFBhcnNlciB0byBwcmV2ZW50IFlBTUwgaW5qZWN0aW9uXG4gICAgICAgICAgLy8gUHJldmlvdXNseTogVXNlZCB1bnNhZmUgWUFNTCBwYXJzaW5nIHdpdGhvdXQgdmFsaWRhdGlvblxuICAgICAgICAgIC8vIE5vdzogVXNlcyBTZWN1cmVZYW1sUGFyc2VyIHdoaWNoIHZhbGlkYXRlcyBjb250ZW50XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gU2VjdXJlWWFtbFBhcnNlci5wYXJzZShtYXRjaFsxXSwge1xuICAgICAgICAgICAgbWF4WWFtbFNpemU6IDY0ICogMTAyNCwgLy8gNjRLQiBsaW1pdFxuICAgICAgICAgICAgdmFsaWRhdGVDb250ZW50OiB0cnVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBMb2cgc2VjdXJpdHkgZXZlbnRcbiAgICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgICB0eXBlOiAnWUFNTF9QQVJTRV9TVUNDRVNTJyxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ0Vuc2VtYmxlTWFuYWdlci5wYXJzZUVuc2VtYmxlRmlsZScsXG4gICAgICAgICAgICBkZXRhaWxzOiAnWUFNTCBjb250ZW50IHNhZmVseSBwYXJzZWQnXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWV0YWRhdGE6IHBhcnNlZC5kYXRhIGFzIHVua25vd24gYXMgRW5zZW1ibGVNZXRhZGF0YSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IG1hdGNoWzJdLnRyaW0oKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU0VDVVJJVFkgRklYOiBGb3IgcGxhaW4gWUFNTCBmaWxlcywgY2hlY2sgaWYgY29udGVudCBhbHJlYWR5IGhhcyBmcm9udG1hdHRlclxuICAgICAgLy8gUHJldmlvdXNseTogVXNlZCBkaXJlY3QgWUFNTCBwYXJzaW5nIHdpdGhvdXQgc2VjdXJpdHkgdmFsaWRhdGlvblxuICAgICAgLy8gTm93OiBVc2VzIFNlY3VyZVlhbWxQYXJzZXIgZm9yIGNvbnNpc3RlbnQgc2VjdXJpdHkgdmFsaWRhdGlvblxuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBjb250ZW50IGFscmVhZHkgaGFzIGZyb250bWF0dGVyIG1hcmtlcnNcbiAgICAgIGlmIChjb250ZW50LnRyaW0oKS5zdGFydHNXaXRoKCctLS0nKSkge1xuICAgICAgICAvLyBDb250ZW50IGFscmVhZHkgaGFzIGZyb250bWF0dGVyLCBwYXJzZSBkaXJlY3RseSAgXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IFNlY3VyZVlhbWxQYXJzZXIucGFyc2UoY29udGVudCwge1xuICAgICAgICAgIG1heFlhbWxTaXplOiA2NCAqIDEwMjQsIC8vIDY0S0IgbGltaXRcbiAgICAgICAgICB2YWxpZGF0ZUNvbnRlbnQ6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTG9nIHNlY3VyaXR5IGV2ZW50XG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnWUFNTF9QQVJTRV9TVUNDRVNTJyxcbiAgICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgICAgc291cmNlOiAnRW5zZW1ibGVNYW5hZ2VyLnBhcnNlRW5zZW1ibGVGaWxlJyxcbiAgICAgICAgICBkZXRhaWxzOiAnWUFNTCBmcm9udG1hdHRlciBjb250ZW50IHNhZmVseSBwYXJzZWQnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBwYXJzZWQuZGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFBsYWluIFlBTUwgd2l0aG91dCBmcm9udG1hdHRlciAtIGNyZWF0ZSBmcm9udG1hdHRlciBmb3JtYXRcbiAgICAgICAgY29uc3QgZnJvbnRtYXR0ZXJGb3JtYXQgPSBgLS0tXFxuJHtjb250ZW50fVxcbi0tLVxcbmA7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBwYXJzZWQgPSBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKGZyb250bWF0dGVyRm9ybWF0LCB7XG4gICAgICAgICAgbWF4WWFtbFNpemU6IDY0ICogMTAyNCwgLy8gNjRLQiBsaW1pdFxuICAgICAgICAgIHZhbGlkYXRlQ29udGVudDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBMb2cgc2VjdXJpdHkgZXZlbnRcbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdZQU1MX1BBUlNFX1NVQ0NFU1MnLFxuICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICBzb3VyY2U6ICdFbnNlbWJsZU1hbmFnZXIucGFyc2VFbnNlbWJsZUZpbGUnLFxuICAgICAgICAgIGRldGFpbHM6ICdQbGFpbiBZQU1MIGNvbnRlbnQgc2FmZWx5IHBhcnNlZCdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZC5kYXRhO1xuICAgICAgfVxuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIGVuc2VtYmxlIGZpbGU6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVuc2VtYmxlIGZpbGUgZm9ybWF0OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGVuc2VtYmxlIGRhdGEgdG8gWUFNTCBzYWZlbHlcbiAgICogU0VDVVJJVFkgRklYOiBVc2VzIHlhbWwuZHVtcCB3aXRoIHNlY3VyaXR5IG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgdG9ZYW1sU2FmZShkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIC8vIFNFQ1VSSVRZIEZJWDogVXNlIHlhbWwuZHVtcCB3aXRoIEZBSUxTQUZFX1NDSEVNQSBhbmQgc2VjdXJpdHkgb3B0aW9uc1xuICAgIC8vIFRoaXMgcHJldmVudHMgYXJiaXRyYXJ5IGNvZGUgZXhlY3V0aW9uIHZpYSBZQU1MXG4gICAgY29uc3QgeWFtbFN0ciA9IHlhbWwuZHVtcChkYXRhLCB7XG4gICAgICBzY2hlbWE6IHlhbWwuRkFJTFNBRkVfU0NIRU1BLFxuICAgICAgbm9SZWZzOiB0cnVlLFxuICAgICAgc2tpcEludmFsaWQ6IHRydWUsXG4gICAgICBxdW90aW5nVHlwZTogJ1wiJyxcbiAgICAgIGZvcmNlUXVvdGVzOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgZnJvbnRtYXR0ZXIgZGVsaW1pdGVycyBmb3IgbWFya2Rvd24gZmlsZXNcbiAgICByZXR1cm4gYC0tLVxcbiR7eWFtbFN0cn0tLS1cXG5gO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBlbnNlbWJsZSBmcm9tIEpTT05cbiAgICogU0VDVVJJVFk6IEZ1bGwgdmFsaWRhdGlvbiBvZiBpbXBvcnRlZCBkYXRhXG4gICAqL1xuICBhc3luYyBpbXBvcnRFbGVtZW50KGpzb25EYXRhOiBzdHJpbmcsIGZvcm1hdD86ICdqc29uJyB8ICd5YW1sJyB8ICdtYXJrZG93bicpOiBQcm9taXNlPEVuc2VtYmxlPiB7XG4gICAgLy8gVmFsaWRhdGUgSlNPTiBzdHJ1Y3R1cmVcbiAgICBsZXQgZGF0YTogYW55O1xuICAgIHRyeSB7XG4gICAgICBkYXRhID0gSlNPTi5wYXJzZShqc29uRGF0YSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBKU09OIGZvcm1hdCcpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHJlcXVpcmVkIGZpZWxkc1xuICAgIGlmICghZGF0YS5tZXRhZGF0YSB8fCB0eXBlb2YgZGF0YS5tZXRhZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIG1ldGFkYXRhJyk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGVuc2VtYmxlIHdpdGggdmFsaWRhdGVkIG1ldGFkYXRhXG4gICAgY29uc3QgZW5zZW1ibGUgPSBuZXcgRW5zZW1ibGUoZGF0YS5tZXRhZGF0YSk7XG5cbiAgICAvLyBBZGQgZWxlbWVudHMgd2l0aCB2YWxpZGF0aW9uXG4gICAgaWYgKGRhdGEuZWxlbWVudHMgJiYgQXJyYXkuaXNBcnJheShkYXRhLmVsZW1lbnRzKSkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGRhdGEuZWxlbWVudHMpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50LmVsZW1lbnRJZCB8fCAhZWxlbWVudC5lbGVtZW50VHlwZSkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKCdTa2lwcGluZyBpbnZhbGlkIGVsZW1lbnQgZHVyaW5nIGltcG9ydCcpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBlbnNlbWJsZS5hZGRFbGVtZW50KFxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50SWQsXG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlLFxuICAgICAgICAgICAgZWxlbWVudC5yb2xlIHx8ICdzdXBwb3J0JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcHJpb3JpdHk6IGVsZW1lbnQucHJpb3JpdHksXG4gICAgICAgICAgICAgIGFjdGl2YXRpb25Db25kaXRpb246IGVsZW1lbnQuYWN0aXZhdGlvbkNvbmRpdGlvbixcbiAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiBlbGVtZW50LmRlcGVuZGVuY2llc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBhZGQgZWxlbWVudCAke2VsZW1lbnQuZWxlbWVudElkfSBkdXJpbmcgaW1wb3J0OmAsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiB3aXRob3V0IHNhdmluZyAtIGNhbGxlciBjYW4gc2F2ZSBpZiBuZWVkZWRcblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdFTlNFTUJMRV9JTVBPUlRFRCcsXG4gICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICBzb3VyY2U6ICdFbnNlbWJsZU1hbmFnZXIuaW1wb3J0RWxlbWVudCcsXG4gICAgICBkZXRhaWxzOiBgRW5zZW1ibGUgaW1wb3J0ZWRgXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5zZW1ibGU7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IGFuIGVuc2VtYmxlIHRvIEpTT05cbiAgICovXG4gIGFzeW5jIGV4cG9ydEVsZW1lbnQoZW5zZW1ibGU6IEVuc2VtYmxlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbWV0YWRhdGE6IGVuc2VtYmxlLm1ldGFkYXRhLFxuICAgICAgZWxlbWVudHM6IEFycmF5LmZyb20oZW5zZW1ibGUuZ2V0RWxlbWVudHMoKS52YWx1ZXMoKSksXG4gICAgICBleHRlbnNpb25zOiBlbnNlbWJsZS5leHRlbnNpb25zXG4gICAgfTtcblxuICAgIC8vIFNFQ1VSSVRZIEZJWDogRW5zdXJlIHNhZmUgSlNPTiBzZXJpYWxpemF0aW9uXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhbiBlbnNlbWJsZSBmaWxlXG4gICAqL1xuICBhc3luYyBkZWxldGUoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZhbGlkYXRlZFBhdGggPSB2YWxpZGF0ZVBhdGgoZmlsZVBhdGgpO1xuICAgIGlmICghdmFsaWRhdGVkUGF0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZpbGUgcGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5pc0Fic29sdXRlKHZhbGlkYXRlZFBhdGgpIFxuICAgICAgPyB2YWxpZGF0ZWRQYXRoIFxuICAgICAgOiBwYXRoLmpvaW4odGhpcy5iYXNlRGlyLCB2YWxpZGF0ZWRQYXRoKTtcblxuICAgIGF3YWl0IGZzLnVubGluayhmdWxsUGF0aCk7XG5cbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnRU5TRU1CTEVfREVMRVRFRCcsXG4gICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICBzb3VyY2U6ICdFbnNlbWJsZU1hbmFnZXIuZGVsZXRlJyxcbiAgICAgIGRldGFpbHM6IGBFbnNlbWJsZSBkZWxldGVkOiAke2Z1bGxQYXRofWBcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBlbnNlbWJsZSBmaWxlIGV4aXN0c1xuICAgKi9cbiAgYXN5bmMgZXhpc3RzKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB2YWxpZGF0ZWRQYXRoID0gdmFsaWRhdGVQYXRoKGZpbGVQYXRoKTtcbiAgICBpZiAoIXZhbGlkYXRlZFBhdGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguaXNBYnNvbHV0ZSh2YWxpZGF0ZWRQYXRoKSBcbiAgICAgID8gdmFsaWRhdGVkUGF0aCBcbiAgICAgIDogcGF0aC5qb2luKHRoaXMuYmFzZURpciwgdmFsaWRhdGVkUGF0aCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKGZ1bGxQYXRoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIG11bHRpcGxlIGVuc2VtYmxlcyBtYXRjaGluZyBhIHByZWRpY2F0ZVxuICAgKi9cbiAgYXN5bmMgZmluZE1hbnkocHJlZGljYXRlOiAoZW5zZW1ibGU6IEVuc2VtYmxlKSA9PiBib29sZWFuKTogUHJvbWlzZTxFbnNlbWJsZVtdPiB7XG4gICAgY29uc3QgZW5zZW1ibGVzID0gYXdhaXQgdGhpcy5saXN0KCk7XG4gICAgcmV0dXJuIGVuc2VtYmxlcy5maWx0ZXIocHJlZGljYXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhIGZpbGUgcGF0aFxuICAgKi9cbiAgdmFsaWRhdGVQYXRoKGZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsaWRhdGVQYXRoKGZpbGVQYXRoKSAhPT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGVsZW1lbnQgdHlwZSB0aGlzIG1hbmFnZXIgaGFuZGxlc1xuICAgKi9cbiAgZ2V0RWxlbWVudFR5cGUoKTogRWxlbWVudFR5cGUge1xuICAgIHJldHVybiBFbGVtZW50VHlwZS5FTlNFTUJMRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZpbGUgZXh0ZW5zaW9uIGZvciBlbnNlbWJsZSBmaWxlc1xuICAgKi9cbiAgZ2V0RmlsZUV4dGVuc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnLnlhbWwnO1xuICB9XG59Il19
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constants for Ensemble elements
|
|
3
|
+
*
|
|
4
|
+
* Defines limits, defaults, and security constants following patterns from other elements
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Resource limits to prevent DoS attacks
|
|
8
|
+
*/
|
|
9
|
+
export declare const ENSEMBLE_LIMITS: {
|
|
10
|
+
readonly MAX_ELEMENTS: 50;
|
|
11
|
+
readonly MAX_NESTING_DEPTH: 5;
|
|
12
|
+
readonly MAX_ACTIVATION_TIME: 30000;
|
|
13
|
+
readonly MAX_CONTEXT_SIZE: 1000;
|
|
14
|
+
readonly MAX_CONTEXT_VALUE_SIZE: 10000;
|
|
15
|
+
readonly MAX_DEPENDENCIES: 10;
|
|
16
|
+
readonly MAX_CONDITION_LENGTH: 200;
|
|
17
|
+
readonly MIN_ACTIVATION_INTERVAL: 100;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Default values for ensemble configuration
|
|
21
|
+
*/
|
|
22
|
+
export declare const ENSEMBLE_DEFAULTS: {
|
|
23
|
+
readonly ACTIVATION_STRATEGY: "sequential";
|
|
24
|
+
readonly CONFLICT_RESOLUTION: "last-write";
|
|
25
|
+
readonly ELEMENT_ROLE: "support";
|
|
26
|
+
readonly PRIORITY: 50;
|
|
27
|
+
readonly ALLOW_NESTED: true;
|
|
28
|
+
readonly ACTIVATION_TIMEOUT: 5000;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Supported activation strategies
|
|
32
|
+
*/
|
|
33
|
+
export declare const ACTIVATION_STRATEGIES: readonly ["all", "sequential", "lazy", "conditional", "priority"];
|
|
34
|
+
/**
|
|
35
|
+
* Supported conflict resolution strategies
|
|
36
|
+
*/
|
|
37
|
+
export declare const CONFLICT_STRATEGIES: readonly ["last-write", "first-write", "priority", "merge", "error"];
|
|
38
|
+
/**
|
|
39
|
+
* Element roles
|
|
40
|
+
*/
|
|
41
|
+
export declare const ELEMENT_ROLES: readonly ["primary", "support", "override", "monitor"];
|
|
42
|
+
/**
|
|
43
|
+
* Security event types for ensemble operations
|
|
44
|
+
*/
|
|
45
|
+
export declare const ENSEMBLE_SECURITY_EVENTS: {
|
|
46
|
+
readonly CIRCULAR_DEPENDENCY: "ENSEMBLE_CIRCULAR_DEPENDENCY";
|
|
47
|
+
readonly RESOURCE_LIMIT_EXCEEDED: "ENSEMBLE_RESOURCE_LIMIT_EXCEEDED";
|
|
48
|
+
readonly ACTIVATION_TIMEOUT: "ENSEMBLE_ACTIVATION_TIMEOUT";
|
|
49
|
+
readonly SUSPICIOUS_CONDITION: "ENSEMBLE_SUSPICIOUS_CONDITION";
|
|
50
|
+
readonly NESTED_DEPTH_EXCEEDED: "ENSEMBLE_NESTED_DEPTH_EXCEEDED";
|
|
51
|
+
readonly CONTEXT_SIZE_EXCEEDED: "ENSEMBLE_CONTEXT_SIZE_EXCEEDED";
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Error messages for validation
|
|
55
|
+
*/
|
|
56
|
+
export declare const ENSEMBLE_ERRORS: {
|
|
57
|
+
readonly TOO_MANY_ELEMENTS: "Ensemble cannot contain more than 50 elements";
|
|
58
|
+
readonly NESTING_TOO_DEEP: "Ensemble nesting depth cannot exceed 5";
|
|
59
|
+
readonly CIRCULAR_DEPENDENCY: "Circular dependency detected in ensemble";
|
|
60
|
+
readonly INVALID_STRATEGY: "Invalid activation strategy";
|
|
61
|
+
readonly INVALID_CONFLICT_RESOLUTION: "Invalid conflict resolution strategy";
|
|
62
|
+
readonly ELEMENT_NOT_FOUND: "Element not found in ensemble";
|
|
63
|
+
readonly ACTIVATION_TIMEOUT: "Ensemble activation timed out";
|
|
64
|
+
readonly CONTEXT_OVERFLOW: "Shared context size exceeded limits";
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Regex patterns for validation
|
|
68
|
+
*/
|
|
69
|
+
export declare const ENSEMBLE_PATTERNS: {
|
|
70
|
+
readonly CONDITION_PATTERN: RegExp;
|
|
71
|
+
readonly ELEMENT_ID_PATTERN: RegExp;
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/elements/ensembles/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;CASlB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;CAOpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,qBAAqB,mEAMxB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,mBAAmB,sEAMtB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,aAAa,wDAKhB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;CAO3B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;CASlB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;CAKpB,CAAC"}
|