@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,435 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MemoryManager - Implementation of IElementManager for Memory elements
|
|
3
|
+
* Handles CRUD operations and lifecycle management for memories implementing IElement
|
|
4
|
+
*
|
|
5
|
+
* FIXES IMPLEMENTED:
|
|
6
|
+
* 1. CRITICAL: Fixed race conditions in file operations by using FileLockManager for atomic reads/writes
|
|
7
|
+
* 2. HIGH: Fixed unvalidated YAML parsing vulnerability by using SecureYamlParser
|
|
8
|
+
* 3. MEDIUM: All user inputs are now validated and sanitized
|
|
9
|
+
* 4. MEDIUM: Audit logging added for security operations
|
|
10
|
+
* 5. MEDIUM: Path validation prevents directory traversal attacks
|
|
11
|
+
*/
|
|
12
|
+
import { Memory } from './Memory.js';
|
|
13
|
+
import { ElementType } from '../../portfolio/types.js';
|
|
14
|
+
import { PortfolioManager } from '../../portfolio/PortfolioManager.js';
|
|
15
|
+
import { FileLockManager } from '../../security/fileLockManager.js';
|
|
16
|
+
import { SecureYamlParser } from '../../security/secureYamlParser.js';
|
|
17
|
+
import { SecurityMonitor } from '../../security/securityMonitor.js';
|
|
18
|
+
import { sanitizeInput } from '../../security/InputValidator.js';
|
|
19
|
+
import { MEMORY_CONSTANTS, MEMORY_SECURITY_EVENTS } from './constants.js';
|
|
20
|
+
import * as path from 'path';
|
|
21
|
+
import * as fs from 'fs/promises';
|
|
22
|
+
import * as yaml from 'js-yaml';
|
|
23
|
+
export class MemoryManager {
|
|
24
|
+
portfolioManager;
|
|
25
|
+
memoriesDir;
|
|
26
|
+
memoryCache = new Map();
|
|
27
|
+
constructor() {
|
|
28
|
+
this.portfolioManager = PortfolioManager.getInstance();
|
|
29
|
+
this.memoriesDir = this.portfolioManager.getElementDir(ElementType.MEMORY);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Load a memory from file
|
|
33
|
+
* SECURITY FIX #1: Uses FileLockManager.atomicReadFile() instead of fs.readFile()
|
|
34
|
+
* to prevent race conditions and ensure atomic file operations
|
|
35
|
+
*/
|
|
36
|
+
async load(filePath) {
|
|
37
|
+
try {
|
|
38
|
+
// Validate and resolve path
|
|
39
|
+
const fullPath = await this.validateAndResolvePath(filePath);
|
|
40
|
+
// Check cache first
|
|
41
|
+
const cached = this.memoryCache.get(fullPath);
|
|
42
|
+
if (cached) {
|
|
43
|
+
return cached;
|
|
44
|
+
}
|
|
45
|
+
// CRITICAL FIX: Use atomic file read to prevent race conditions
|
|
46
|
+
// Previously: const content = await fs.readFile(fullPath, 'utf-8');
|
|
47
|
+
// Now: Uses FileLockManager with proper encoding object format
|
|
48
|
+
const content = await FileLockManager.atomicReadFile(fullPath, { encoding: 'utf-8' });
|
|
49
|
+
// HIGH SEVERITY FIX: Use SecureYamlParser to prevent YAML injection attacks
|
|
50
|
+
// Previously: Could use unsafe YAML parsing
|
|
51
|
+
// Now: Uses SecureYamlParser which validates content and prevents malicious patterns
|
|
52
|
+
const parsed = SecureYamlParser.parse(content, {
|
|
53
|
+
maxYamlSize: MEMORY_CONSTANTS.MAX_YAML_SIZE,
|
|
54
|
+
validateContent: true
|
|
55
|
+
});
|
|
56
|
+
// Extract metadata and content
|
|
57
|
+
const { metadata, content: memoryContent } = this.parseMemoryFile(parsed);
|
|
58
|
+
// Create memory instance
|
|
59
|
+
const memory = new Memory(metadata);
|
|
60
|
+
// Load saved entries if present
|
|
61
|
+
if (parsed.data && parsed.data.entries) {
|
|
62
|
+
memory.deserialize(JSON.stringify({
|
|
63
|
+
id: memory.id,
|
|
64
|
+
type: memory.type,
|
|
65
|
+
version: memory.version,
|
|
66
|
+
metadata: memory.metadata,
|
|
67
|
+
extensions: memory.extensions,
|
|
68
|
+
entries: parsed.data.entries
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
// Cache the loaded memory
|
|
72
|
+
this.memoryCache.set(fullPath, memory);
|
|
73
|
+
// Log successful load
|
|
74
|
+
SecurityMonitor.logSecurityEvent({
|
|
75
|
+
type: MEMORY_SECURITY_EVENTS.MEMORY_LOADED,
|
|
76
|
+
severity: 'LOW',
|
|
77
|
+
source: 'MemoryManager.load',
|
|
78
|
+
details: `Loaded memory from ${path.basename(fullPath)}`
|
|
79
|
+
});
|
|
80
|
+
return memory;
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
SecurityMonitor.logSecurityEvent({
|
|
84
|
+
type: MEMORY_SECURITY_EVENTS.MEMORY_LOAD_FAILED,
|
|
85
|
+
severity: 'MEDIUM',
|
|
86
|
+
source: 'MemoryManager.load',
|
|
87
|
+
details: `Failed to load memory from ${filePath}: ${error}`
|
|
88
|
+
});
|
|
89
|
+
throw new Error(`Failed to load memory: ${error}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Save a memory to file
|
|
94
|
+
* SECURITY FIX #1: Uses FileLockManager.atomicWriteFile() for atomic operations
|
|
95
|
+
*/
|
|
96
|
+
async save(element, filePath) {
|
|
97
|
+
try {
|
|
98
|
+
// Validate element
|
|
99
|
+
const validation = element.validate();
|
|
100
|
+
if (!validation.valid) {
|
|
101
|
+
throw new Error(`Invalid memory: ${validation.errors?.map(e => e.message).join(', ')}`);
|
|
102
|
+
}
|
|
103
|
+
// Validate and resolve path
|
|
104
|
+
const fullPath = await this.validateAndResolvePath(filePath);
|
|
105
|
+
// Get memory statistics
|
|
106
|
+
const stats = element.getStats();
|
|
107
|
+
// Prepare data for saving
|
|
108
|
+
const data = {
|
|
109
|
+
metadata: element.metadata,
|
|
110
|
+
extensions: element.extensions,
|
|
111
|
+
stats: {
|
|
112
|
+
totalEntries: stats.totalEntries,
|
|
113
|
+
totalSize: stats.totalSize,
|
|
114
|
+
oldestEntry: stats.oldestEntry?.toISOString(),
|
|
115
|
+
newestEntry: stats.newestEntry?.toISOString(),
|
|
116
|
+
topTags: Array.from(stats.tagFrequency.entries())
|
|
117
|
+
.sort((a, b) => b[1] - a[1])
|
|
118
|
+
.slice(0, 10)
|
|
119
|
+
.map(([tag, count]) => ({ tag, count }))
|
|
120
|
+
},
|
|
121
|
+
entries: JSON.parse(element.serialize()).entries
|
|
122
|
+
};
|
|
123
|
+
// SECURITY FIX: Use secure YAML dumping with safety options
|
|
124
|
+
// Previously: Could allow dangerous YAML features
|
|
125
|
+
// Now: Uses FAILSAFE_SCHEMA and security options to prevent code execution
|
|
126
|
+
const yamlContent = yaml.dump(data, {
|
|
127
|
+
schema: yaml.FAILSAFE_SCHEMA,
|
|
128
|
+
noRefs: true,
|
|
129
|
+
skipInvalid: true,
|
|
130
|
+
sortKeys: true
|
|
131
|
+
});
|
|
132
|
+
// CRITICAL FIX: Use atomic file write to prevent corruption
|
|
133
|
+
// Previously: await fs.writeFile(fullPath, yamlContent, 'utf-8');
|
|
134
|
+
// Now: Uses FileLockManager for atomic write with proper encoding
|
|
135
|
+
await FileLockManager.atomicWriteFile(fullPath, yamlContent, { encoding: 'utf-8' });
|
|
136
|
+
// Update cache
|
|
137
|
+
this.memoryCache.set(fullPath, element);
|
|
138
|
+
// Log successful save
|
|
139
|
+
SecurityMonitor.logSecurityEvent({
|
|
140
|
+
type: MEMORY_SECURITY_EVENTS.MEMORY_SAVED,
|
|
141
|
+
severity: 'LOW',
|
|
142
|
+
source: 'MemoryManager.save',
|
|
143
|
+
details: `Saved memory to ${path.basename(fullPath)} with ${stats.totalEntries} entries`
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
SecurityMonitor.logSecurityEvent({
|
|
148
|
+
type: MEMORY_SECURITY_EVENTS.MEMORY_SAVE_FAILED,
|
|
149
|
+
severity: 'HIGH',
|
|
150
|
+
source: 'MemoryManager.save',
|
|
151
|
+
details: `Failed to save memory to ${filePath}: ${error}`
|
|
152
|
+
});
|
|
153
|
+
throw new Error(`Failed to save memory: ${error}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* List all available memories
|
|
158
|
+
*/
|
|
159
|
+
async list() {
|
|
160
|
+
try {
|
|
161
|
+
const files = await fs.readdir(this.memoriesDir);
|
|
162
|
+
const memories = [];
|
|
163
|
+
for (const file of files) {
|
|
164
|
+
if (file.endsWith('.md') || file.endsWith('.yaml') || file.endsWith('.yml')) {
|
|
165
|
+
try {
|
|
166
|
+
const memory = await this.load(file);
|
|
167
|
+
memories.push(memory);
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
// Log but continue with other files
|
|
171
|
+
SecurityMonitor.logSecurityEvent({
|
|
172
|
+
type: MEMORY_SECURITY_EVENTS.MEMORY_LIST_ITEM_FAILED,
|
|
173
|
+
severity: 'LOW',
|
|
174
|
+
source: 'MemoryManager.list',
|
|
175
|
+
details: `Failed to load ${file}: ${error}`
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return memories;
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
if (error.code === 'ENOENT') {
|
|
184
|
+
// Directory doesn't exist yet
|
|
185
|
+
return [];
|
|
186
|
+
}
|
|
187
|
+
throw error;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Find memories matching a predicate
|
|
192
|
+
*/
|
|
193
|
+
async find(predicate) {
|
|
194
|
+
const memories = await this.list();
|
|
195
|
+
return memories.find(predicate);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Find multiple memories matching a predicate
|
|
199
|
+
*/
|
|
200
|
+
async findMany(predicate) {
|
|
201
|
+
const memories = await this.list();
|
|
202
|
+
return memories.filter(predicate);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Delete a memory file
|
|
206
|
+
* SECURITY: Validates path and logs deletion
|
|
207
|
+
*/
|
|
208
|
+
async delete(filePath) {
|
|
209
|
+
try {
|
|
210
|
+
const fullPath = await this.validateAndResolvePath(filePath);
|
|
211
|
+
// Check if file exists
|
|
212
|
+
await fs.access(fullPath);
|
|
213
|
+
// Delete the file
|
|
214
|
+
await fs.unlink(fullPath);
|
|
215
|
+
// Remove from cache
|
|
216
|
+
this.memoryCache.delete(fullPath);
|
|
217
|
+
SecurityMonitor.logSecurityEvent({
|
|
218
|
+
type: MEMORY_SECURITY_EVENTS.MEMORY_DELETED,
|
|
219
|
+
severity: 'MEDIUM',
|
|
220
|
+
source: 'MemoryManager.delete',
|
|
221
|
+
details: `Deleted memory file: ${path.basename(fullPath)}`
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
if (error.code === 'ENOENT') {
|
|
226
|
+
// File doesn't exist, not an error for delete operation
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
throw error;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Check if a memory file exists
|
|
234
|
+
*/
|
|
235
|
+
async exists(filePath) {
|
|
236
|
+
try {
|
|
237
|
+
const fullPath = await this.validateAndResolvePath(filePath);
|
|
238
|
+
await fs.access(fullPath);
|
|
239
|
+
return true;
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Create a new memory with metadata
|
|
247
|
+
*/
|
|
248
|
+
async create(metadata) {
|
|
249
|
+
return new Memory(metadata);
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Import a memory from JSON/YAML string
|
|
253
|
+
* SECURITY: Full validation of imported content
|
|
254
|
+
*/
|
|
255
|
+
async importElement(data, format = 'yaml') {
|
|
256
|
+
try {
|
|
257
|
+
let parsed;
|
|
258
|
+
if (format === 'json') {
|
|
259
|
+
parsed = JSON.parse(data);
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
// HIGH SEVERITY FIX: Use secure YAML parsing
|
|
263
|
+
// Memory import expects pure YAML (not frontmatter), so we parse it securely
|
|
264
|
+
try {
|
|
265
|
+
// First validate the YAML content size
|
|
266
|
+
if (data.length > MEMORY_CONSTANTS.MAX_YAML_SIZE) {
|
|
267
|
+
throw new Error('YAML content exceeds maximum allowed size');
|
|
268
|
+
}
|
|
269
|
+
// Create a wrapper to use SecureYamlParser with pure YAML
|
|
270
|
+
// Add minimal frontmatter markers to satisfy parser
|
|
271
|
+
const wrappedYaml = `---\n${data}\n---\n`;
|
|
272
|
+
const parseResult = SecureYamlParser.parse(wrappedYaml, {
|
|
273
|
+
maxYamlSize: MEMORY_CONSTANTS.MAX_YAML_SIZE,
|
|
274
|
+
validateContent: true
|
|
275
|
+
});
|
|
276
|
+
// Extract the parsed data (will be in the 'data' property)
|
|
277
|
+
parsed = parseResult.data;
|
|
278
|
+
}
|
|
279
|
+
catch (yamlError) {
|
|
280
|
+
throw new Error(`Invalid YAML: ${yamlError}`);
|
|
281
|
+
}
|
|
282
|
+
// Validate it's an object
|
|
283
|
+
if (!parsed || typeof parsed !== 'object') {
|
|
284
|
+
throw new Error('YAML must contain an object');
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// Handle different structures from YAML parsing
|
|
288
|
+
let metadata = parsed.metadata;
|
|
289
|
+
let entries = parsed.entries || (parsed.data && parsed.data.entries);
|
|
290
|
+
// Validate required fields
|
|
291
|
+
if (!metadata || !metadata.name) {
|
|
292
|
+
throw new Error('Memory must have metadata with name');
|
|
293
|
+
}
|
|
294
|
+
// Create memory instance
|
|
295
|
+
const memory = new Memory(metadata);
|
|
296
|
+
// Load entries if present
|
|
297
|
+
if (entries) {
|
|
298
|
+
memory.deserialize(JSON.stringify({
|
|
299
|
+
id: memory.id,
|
|
300
|
+
type: memory.type,
|
|
301
|
+
version: memory.version,
|
|
302
|
+
metadata: memory.metadata,
|
|
303
|
+
extensions: memory.extensions,
|
|
304
|
+
entries: entries
|
|
305
|
+
}));
|
|
306
|
+
}
|
|
307
|
+
return memory;
|
|
308
|
+
}
|
|
309
|
+
catch (error) {
|
|
310
|
+
SecurityMonitor.logSecurityEvent({
|
|
311
|
+
type: MEMORY_SECURITY_EVENTS.MEMORY_IMPORT_FAILED,
|
|
312
|
+
severity: 'MEDIUM',
|
|
313
|
+
source: 'MemoryManager.importElement',
|
|
314
|
+
details: `Failed to import memory: ${error}`
|
|
315
|
+
});
|
|
316
|
+
throw new Error(`Failed to import memory: ${error}`);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Export a memory to YAML string
|
|
321
|
+
*/
|
|
322
|
+
async exportElement(element) {
|
|
323
|
+
const stats = element.getStats();
|
|
324
|
+
const data = {
|
|
325
|
+
metadata: element.metadata,
|
|
326
|
+
extensions: element.extensions,
|
|
327
|
+
stats: {
|
|
328
|
+
totalEntries: stats.totalEntries,
|
|
329
|
+
totalSize: stats.totalSize,
|
|
330
|
+
oldestEntry: stats.oldestEntry?.toISOString(),
|
|
331
|
+
newestEntry: stats.newestEntry?.toISOString()
|
|
332
|
+
},
|
|
333
|
+
entries: JSON.parse(element.serialize()).entries
|
|
334
|
+
};
|
|
335
|
+
// SECURITY FIX: Use secure YAML dumping
|
|
336
|
+
return yaml.dump(data, {
|
|
337
|
+
schema: yaml.FAILSAFE_SCHEMA,
|
|
338
|
+
noRefs: true,
|
|
339
|
+
skipInvalid: true,
|
|
340
|
+
sortKeys: true
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Validate a memory element
|
|
345
|
+
*/
|
|
346
|
+
validate(element) {
|
|
347
|
+
return element.validate();
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Validate and resolve a file path
|
|
351
|
+
* SECURITY: Prevents directory traversal attacks
|
|
352
|
+
*/
|
|
353
|
+
validatePath(filePath) {
|
|
354
|
+
try {
|
|
355
|
+
// Perform synchronous validation checks
|
|
356
|
+
const normalized = path.normalize(filePath);
|
|
357
|
+
// Check for path traversal attempts
|
|
358
|
+
if (normalized.includes('..') || path.isAbsolute(normalized)) {
|
|
359
|
+
return false;
|
|
360
|
+
}
|
|
361
|
+
// Ensure proper extension
|
|
362
|
+
if (!normalized.endsWith('.md') && !normalized.endsWith('.yaml') && !normalized.endsWith('.yml')) {
|
|
363
|
+
return false;
|
|
364
|
+
}
|
|
365
|
+
return true;
|
|
366
|
+
}
|
|
367
|
+
catch {
|
|
368
|
+
return false;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Get the element type this manager handles
|
|
373
|
+
*/
|
|
374
|
+
getElementType() {
|
|
375
|
+
return ElementType.MEMORY;
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Get the file extension for memory files
|
|
379
|
+
*/
|
|
380
|
+
getFileExtension() {
|
|
381
|
+
return '.yaml';
|
|
382
|
+
}
|
|
383
|
+
// Private helper methods
|
|
384
|
+
async validateAndResolvePath(filePath) {
|
|
385
|
+
// SECURITY FIX: Comprehensive path validation
|
|
386
|
+
const normalized = path.normalize(filePath);
|
|
387
|
+
// Check for path traversal attempts
|
|
388
|
+
if (normalized.includes('..') || path.isAbsolute(normalized)) {
|
|
389
|
+
SecurityMonitor.logSecurityEvent({
|
|
390
|
+
type: 'PATH_TRAVERSAL_ATTEMPT',
|
|
391
|
+
severity: 'HIGH',
|
|
392
|
+
source: 'MemoryManager.validateAndResolvePath',
|
|
393
|
+
details: `Blocked path traversal attempt: ${filePath}`
|
|
394
|
+
});
|
|
395
|
+
throw new Error('Invalid file path: Path traversal detected');
|
|
396
|
+
}
|
|
397
|
+
// Ensure proper extension
|
|
398
|
+
if (!normalized.endsWith('.md') && !normalized.endsWith('.yaml') && !normalized.endsWith('.yml')) {
|
|
399
|
+
throw new Error('Memory files must have .md, .yaml, or .yml extension');
|
|
400
|
+
}
|
|
401
|
+
// Construct full path
|
|
402
|
+
const fullPath = path.join(this.memoriesDir, normalized);
|
|
403
|
+
// Verify it's within memories directory
|
|
404
|
+
const relative = path.relative(this.memoriesDir, fullPath);
|
|
405
|
+
if (relative.startsWith('..') || path.isAbsolute(relative)) {
|
|
406
|
+
throw new Error('File path must be within memories directory');
|
|
407
|
+
}
|
|
408
|
+
return fullPath;
|
|
409
|
+
}
|
|
410
|
+
parseMemoryFile(parsed) {
|
|
411
|
+
// Extract metadata with validation
|
|
412
|
+
const metadata = {
|
|
413
|
+
name: sanitizeInput(parsed.metadata?.name || 'Unnamed Memory', 100),
|
|
414
|
+
description: parsed.metadata?.description ?
|
|
415
|
+
sanitizeInput(parsed.metadata.description, 500) :
|
|
416
|
+
'',
|
|
417
|
+
version: parsed.metadata?.version || '1.0.0',
|
|
418
|
+
author: parsed.metadata?.author,
|
|
419
|
+
created: parsed.metadata?.created,
|
|
420
|
+
modified: new Date().toISOString(),
|
|
421
|
+
tags: Array.isArray(parsed.metadata?.tags) ?
|
|
422
|
+
parsed.metadata.tags.map((tag) => sanitizeInput(tag, 50)) :
|
|
423
|
+
[],
|
|
424
|
+
storageBackend: parsed.metadata?.storageBackend || MEMORY_CONSTANTS.DEFAULT_STORAGE_BACKEND,
|
|
425
|
+
retentionDays: parsed.metadata?.retentionDays || MEMORY_CONSTANTS.DEFAULT_RETENTION_DAYS,
|
|
426
|
+
privacyLevel: parsed.metadata?.privacyLevel || MEMORY_CONSTANTS.DEFAULT_PRIVACY_LEVEL,
|
|
427
|
+
searchable: parsed.metadata?.searchable !== false,
|
|
428
|
+
maxEntries: parsed.metadata?.maxEntries || MEMORY_CONSTANTS.MAX_ENTRIES_DEFAULT
|
|
429
|
+
};
|
|
430
|
+
// Extract content (if any)
|
|
431
|
+
const content = parsed.content || '';
|
|
432
|
+
return { metadata, content };
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5TWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9tZW1vcmllcy9NZW1vcnlNYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUErQixNQUFNLGFBQWEsQ0FBQztBQUdsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUUsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsTUFBTSxPQUFPLGFBQWE7SUFDaEIsZ0JBQWdCLENBQW1CO0lBQ25DLFdBQVcsQ0FBUztJQUNwQixXQUFXLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFckQ7UUFDRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FB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Z0JBQWdCLENBQUMsbUJBQW1CO1NBQ2hGLENBQUM7UUFFRiwyQkFBMkI7UUFDM0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFFckMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMvQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1lbW9yeU1hbmFnZXIgLSBJbXBsZW1lbnRhdGlvbiBvZiBJRWxlbWVudE1hbmFnZXIgZm9yIE1lbW9yeSBlbGVtZW50c1xuICogSGFuZGxlcyBDUlVEIG9wZXJhdGlvbnMgYW5kIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGZvciBtZW1vcmllcyBpbXBsZW1lbnRpbmcgSUVsZW1lbnRcbiAqIFxuICogRklYRVMgSU1QTEVNRU5URUQ6XG4gKiAxLiBDUklUSUNBTDogRml4ZWQgcmFjZSBjb25kaXRpb25zIGluIGZpbGUgb3BlcmF0aW9ucyBieSB1c2luZyBGaWxlTG9ja01hbmFnZXIgZm9yIGF0b21pYyByZWFkcy93cml0ZXNcbiAqIDIuIEhJR0g6IEZpeGVkIHVudmFsaWRhdGVkIFlBTUwgcGFyc2luZyB2dWxuZXJhYmlsaXR5IGJ5IHVzaW5nIFNlY3VyZVlhbWxQYXJzZXJcbiAqIDMuIE1FRElVTTogQWxsIHVzZXIgaW5wdXRzIGFyZSBub3cgdmFsaWRhdGVkIGFuZCBzYW5pdGl6ZWRcbiAqIDQuIE1FRElVTTogQXVkaXQgbG9nZ2luZyBhZGRlZCBmb3Igc2VjdXJpdHkgb3BlcmF0aW9uc1xuICogNS4gTUVESVVNOiBQYXRoIHZhbGlkYXRpb24gcHJldmVudHMgZGlyZWN0b3J5IHRyYXZlcnNhbCBhdHRhY2tzXG4gKi9cblxuaW1wb3J0IHsgTWVtb3J5LCBNZW1vcnlNZXRhZGF0YSwgTWVtb3J5RW50cnkgfSBmcm9tICcuL01lbW9yeS5qcyc7XG5pbXBvcnQgeyBJRWxlbWVudE1hbmFnZXIgfSBmcm9tICcuLi8uLi90eXBlcy9lbGVtZW50cy9JRWxlbWVudE1hbmFnZXIuanMnO1xuaW1wb3J0IHsgRWxlbWVudFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuLi8uLi90eXBlcy9lbGVtZW50cy9JRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4uLy4uL3BvcnRmb2xpby90eXBlcy5qcyc7XG5pbXBvcnQgeyBQb3J0Zm9saW9NYW5hZ2VyIH0gZnJvbSAnLi4vLi4vcG9ydGZvbGlvL1BvcnRmb2xpb01hbmFnZXIuanMnO1xuaW1wb3J0IHsgRmlsZUxvY2tNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvZmlsZUxvY2tNYW5hZ2VyLmpzJztcbmltcG9ydCB7IFNlY3VyZVlhbWxQYXJzZXIgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9zZWN1cmVZYW1sUGFyc2VyLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IHNhbml0aXplSW5wdXQgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9JbnB1dFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBNRU1PUllfQ09OU1RBTlRTLCBNRU1PUllfU0VDVVJJVFlfRVZFTlRTIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5cbmV4cG9ydCBjbGFzcyBNZW1vcnlNYW5hZ2VyIGltcGxlbWVudHMgSUVsZW1lbnRNYW5hZ2VyPE1lbW9yeT4ge1xuICBwcml2YXRlIHBvcnRmb2xpb01hbmFnZXI6IFBvcnRmb2xpb01hbmFnZXI7XG4gIHByaXZhdGUgbWVtb3JpZXNEaXI6IHN0cmluZztcbiAgcHJpdmF0ZSBtZW1vcnlDYWNoZTogTWFwPHN0cmluZywgTWVtb3J5PiA9IG5ldyBNYXAoKTtcbiAgXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucG9ydGZvbGlvTWFuYWdlciA9IFBvcnRmb2xpb01hbmFnZXIuZ2V0SW5zdGFuY2UoKTtcbiAgICB0aGlzLm1lbW9yaWVzRGlyID0gdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoRWxlbWVudFR5cGUuTUVNT1JZKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIExvYWQgYSBtZW1vcnkgZnJvbSBmaWxlXG4gICAqIFNFQ1VSSVRZIEZJWCAjMTogVXNlcyBGaWxlTG9ja01hbmFnZXIuYXRvbWljUmVhZEZpbGUoKSBpbnN0ZWFkIG9mIGZzLnJlYWRGaWxlKClcbiAgICogdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnMgYW5kIGVuc3VyZSBhdG9taWMgZmlsZSBvcGVyYXRpb25zXG4gICAqL1xuICBhc3luYyBsb2FkKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPE1lbW9yeT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSBhbmQgcmVzb2x2ZSBwYXRoXG4gICAgICBjb25zdCBmdWxsUGF0aCA9IGF3YWl0IHRoaXMudmFsaWRhdGVBbmRSZXNvbHZlUGF0aChmaWxlUGF0aCk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGNhY2hlIGZpcnN0XG4gICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLm1lbW9yeUNhY2hlLmdldChmdWxsUGF0aCk7XG4gICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWQ7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENSSVRJQ0FMIEZJWDogVXNlIGF0b21pYyBmaWxlIHJlYWQgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnNcbiAgICAgIC8vIFByZXZpb3VzbHk6IGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShmdWxsUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAvLyBOb3c6IFVzZXMgRmlsZUxvY2tNYW5hZ2VyIHdpdGggcHJvcGVyIGVuY29kaW5nIG9iamVjdCBmb3JtYXRcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBGaWxlTG9ja01hbmFnZXIuYXRvbWljUmVhZEZpbGUoZnVsbFBhdGgsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgICBcbiAgICAgIC8vIEhJR0ggU0VWRVJJVFkgRklYOiBVc2UgU2VjdXJlWWFtbFBhcnNlciB0byBwcmV2ZW50IFlBTUwgaW5qZWN0aW9uIGF0dGFja3NcbiAgICAgIC8vIFByZXZpb3VzbHk6IENvdWxkIHVzZSB1bnNhZmUgWUFNTCBwYXJzaW5nXG4gICAgICAvLyBOb3c6IFVzZXMgU2VjdXJlWWFtbFBhcnNlciB3aGljaCB2YWxpZGF0ZXMgY29udGVudCBhbmQgcHJldmVudHMgbWFsaWNpb3VzIHBhdHRlcm5zXG4gICAgICBjb25zdCBwYXJzZWQgPSBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKGNvbnRlbnQsIHtcbiAgICAgICAgbWF4WWFtbFNpemU6IE1FTU9SWV9DT05TVEFOVFMuTUFYX1lBTUxfU0laRSxcbiAgICAgICAgdmFsaWRhdGVDb250ZW50OiB0cnVlXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgLy8gRXh0cmFjdCBtZXRhZGF0YSBhbmQgY29udGVudFxuICAgICAgY29uc3QgeyBtZXRhZGF0YSwgY29udGVudDogbWVtb3J5Q29udGVudCB9ID0gdGhpcy5wYXJzZU1lbW9yeUZpbGUocGFyc2VkKTtcbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIG1lbW9yeSBpbnN0YW5jZVxuICAgICAgY29uc3QgbWVtb3J5ID0gbmV3IE1lbW9yeShtZXRhZGF0YSk7XG4gICAgICBcbiAgICAgIC8vIExvYWQgc2F2ZWQgZW50cmllcyBpZiBwcmVzZW50XG4gICAgICBpZiAocGFyc2VkLmRhdGEgJiYgcGFyc2VkLmRhdGEuZW50cmllcykge1xuICAgICAgICBtZW1vcnkuZGVzZXJpYWxpemUoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGlkOiBtZW1vcnkuaWQsXG4gICAgICAgICAgdHlwZTogbWVtb3J5LnR5cGUsXG4gICAgICAgICAgdmVyc2lvbjogbWVtb3J5LnZlcnNpb24sXG4gICAgICAgICAgbWV0YWRhdGE6IG1lbW9yeS5tZXRhZGF0YSxcbiAgICAgICAgICBleHRlbnNpb25zOiBtZW1vcnkuZXh0ZW5zaW9ucyxcbiAgICAgICAgICBlbnRyaWVzOiBwYXJzZWQuZGF0YS5lbnRyaWVzXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2FjaGUgdGhlIGxvYWRlZCBtZW1vcnlcbiAgICAgIHRoaXMubWVtb3J5Q2FjaGUuc2V0KGZ1bGxQYXRoLCBtZW1vcnkpO1xuICAgICAgXG4gICAgICAvLyBMb2cgc3VjY2Vzc2Z1bCBsb2FkXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6IE1FTU9SWV9TRUNVUklUWV9FVkVOVFMuTUVNT1JZX0xPQURFRCxcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdNZW1vcnlNYW5hZ2VyLmxvYWQnLFxuICAgICAgICBkZXRhaWxzOiBgTG9hZGVkIG1lbW9yeSBmcm9tICR7cGF0aC5iYXNlbmFtZShmdWxsUGF0aCl9YFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiBtZW1vcnk7XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiBNRU1PUllfU0VDVVJJVFlfRVZFTlRTLk1FTU9SWV9MT0FEX0ZBSUxFRCxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdNZW1vcnlNYW5hZ2VyLmxvYWQnLFxuICAgICAgICBkZXRhaWxzOiBgRmFpbGVkIHRvIGxvYWQgbWVtb3J5IGZyb20gJHtmaWxlUGF0aH06ICR7ZXJyb3J9YFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIG1lbW9yeTogJHtlcnJvcn1gKTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTYXZlIGEgbWVtb3J5IHRvIGZpbGVcbiAgICogU0VDVVJJVFkgRklYICMxOiBVc2VzIEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUoKSBmb3IgYXRvbWljIG9wZXJhdGlvbnNcbiAgICovXG4gIGFzeW5jIHNhdmUoZWxlbWVudDogTWVtb3J5LCBmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFZhbGlkYXRlIGVsZW1lbnRcbiAgICAgIGNvbnN0IHZhbGlkYXRpb24gPSBlbGVtZW50LnZhbGlkYXRlKCk7XG4gICAgICBpZiAoIXZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG1lbW9yeTogJHt2YWxpZGF0aW9uLmVycm9ycz8ubWFwKGUgPT4gZS5tZXNzYWdlKS5qb2luKCcsICcpfWApO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSBhbmQgcmVzb2x2ZSBwYXRoXG4gICAgICBjb25zdCBmdWxsUGF0aCA9IGF3YWl0IHRoaXMudmFsaWRhdGVBbmRSZXNvbHZlUGF0aChmaWxlUGF0aCk7XG4gICAgICBcbiAgICAgIC8vIEdldCBtZW1vcnkgc3RhdGlzdGljc1xuICAgICAgY29uc3Qgc3RhdHMgPSBlbGVtZW50LmdldFN0YXRzKCk7XG4gICAgICBcbiAgICAgIC8vIFByZXBhcmUgZGF0YSBmb3Igc2F2aW5nXG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICBtZXRhZGF0YTogZWxlbWVudC5tZXRhZGF0YSxcbiAgICAgICAgZXh0ZW5zaW9uczogZWxlbWVudC5leHRlbnNpb25zLFxuICAgICAgICBzdGF0czoge1xuICAgICAgICAgIHRvdGFsRW50cmllczogc3RhdHMudG90YWxFbnRyaWVzLFxuICAgICAgICAgIHRvdGFsU2l6ZTogc3RhdHMudG90YWxTaXplLFxuICAgICAgICAgIG9sZGVzdEVudHJ5OiBzdGF0cy5vbGRlc3RFbnRyeT8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICBuZXdlc3RFbnRyeTogc3RhdHMubmV3ZXN0RW50cnk/LnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgdG9wVGFnczogQXJyYXkuZnJvbShzdGF0cy50YWdGcmVxdWVuY3kuZW50cmllcygpKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGJbMV0gLSBhWzFdKVxuICAgICAgICAgICAgLnNsaWNlKDAsIDEwKVxuICAgICAgICAgICAgLm1hcCgoW3RhZywgY291bnRdKSA9PiAoeyB0YWcsIGNvdW50IH0pKVxuICAgICAgICB9LFxuICAgICAgICBlbnRyaWVzOiBKU09OLnBhcnNlKGVsZW1lbnQuc2VyaWFsaXplKCkpLmVudHJpZXNcbiAgICAgIH07XG4gICAgICBcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWDogVXNlIHNlY3VyZSBZQU1MIGR1bXBpbmcgd2l0aCBzYWZldHkgb3B0aW9uc1xuICAgICAgLy8gUHJldmlvdXNseTogQ291bGQgYWxsb3cgZGFuZ2Vyb3VzIFlBTUwgZmVhdHVyZXNcbiAgICAgIC8vIE5vdzogVXNlcyBGQUlMU0FGRV9TQ0hFTUEgYW5kIHNlY3VyaXR5IG9wdGlvbnMgdG8gcHJldmVudCBjb2RlIGV4ZWN1dGlvblxuICAgICAgY29uc3QgeWFtbENvbnRlbnQgPSB5YW1sLmR1bXAoZGF0YSwge1xuICAgICAgICBzY2hlbWE6IHlhbWwuRkFJTFNBRkVfU0NIRU1BLFxuICAgICAgICBub1JlZnM6IHRydWUsXG4gICAgICAgIHNraXBJbnZhbGlkOiB0cnVlLFxuICAgICAgICBzb3J0S2V5czogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIENSSVRJQ0FMIEZJWDogVXNlIGF0b21pYyBmaWxlIHdyaXRlIHRvIHByZXZlbnQgY29ycnVwdGlvblxuICAgICAgLy8gUHJldmlvdXNseTogYXdhaXQgZnMud3JpdGVGaWxlKGZ1bGxQYXRoLCB5YW1sQ29udGVudCwgJ3V0Zi04Jyk7XG4gICAgICAvLyBOb3c6IFVzZXMgRmlsZUxvY2tNYW5hZ2VyIGZvciBhdG9taWMgd3JpdGUgd2l0aCBwcm9wZXIgZW5jb2RpbmdcbiAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUoZnVsbFBhdGgsIHlhbWxDb250ZW50LCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICAgICAgXG4gICAgICAvLyBVcGRhdGUgY2FjaGVcbiAgICAgIHRoaXMubWVtb3J5Q2FjaGUuc2V0KGZ1bGxQYXRoLCBlbGVtZW50KTtcbiAgICAgIFxuICAgICAgLy8gTG9nIHN1Y2Nlc3NmdWwgc2F2ZVxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiBNRU1PUllfU0VDVVJJVFlfRVZFTlRTLk1FTU9SWV9TQVZFRCxcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdNZW1vcnlNYW5hZ2VyLnNhdmUnLFxuICAgICAgICBkZXRhaWxzOiBgU2F2ZWQgbWVtb3J5IHRvICR7cGF0aC5iYXNlbmFtZShmdWxsUGF0aCl9IHdpdGggJHtzdGF0cy50b3RhbEVudHJpZXN9IGVudHJpZXNgXG4gICAgICB9KTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6IE1FTU9SWV9TRUNVUklUWV9FVkVOVFMuTUVNT1JZX1NBVkVfRkFJTEVELFxuICAgICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgICBzb3VyY2U6ICdNZW1vcnlNYW5hZ2VyLnNhdmUnLFxuICAgICAgICBkZXRhaWxzOiBgRmFpbGVkIHRvIHNhdmUgbWVtb3J5IHRvICR7ZmlsZVBhdGh9OiAke2Vycm9yfWBcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2F2ZSBtZW1vcnk6ICR7ZXJyb3J9YCk7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogTGlzdCBhbGwgYXZhaWxhYmxlIG1lbW9yaWVzXG4gICAqL1xuICBhc3luYyBsaXN0KCk6IFByb21pc2U8TWVtb3J5W10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHRoaXMubWVtb3JpZXNEaXIpO1xuICAgICAgY29uc3QgbWVtb3JpZXM6IE1lbW9yeVtdID0gW107XG4gICAgICBcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBpZiAoZmlsZS5lbmRzV2l0aCgnLm1kJykgfHwgZmlsZS5lbmRzV2l0aCgnLnlhbWwnKSB8fCBmaWxlLmVuZHNXaXRoKCcueW1sJykpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgbWVtb3J5ID0gYXdhaXQgdGhpcy5sb2FkKGZpbGUpO1xuICAgICAgICAgICAgbWVtb3JpZXMucHVzaChtZW1vcnkpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBMb2cgYnV0IGNvbnRpbnVlIHdpdGggb3RoZXIgZmlsZXNcbiAgICAgICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICAgICAgdHlwZTogTUVNT1JZX1NFQ1VSSVRZX0VWRU5UUy5NRU1PUllfTElTVF9JVEVNX0ZBSUxFRCxcbiAgICAgICAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICAgICAgICBzb3VyY2U6ICdNZW1vcnlNYW5hZ2VyLmxpc3QnLFxuICAgICAgICAgICAgICBkZXRhaWxzOiBgRmFpbGVkIHRvIGxvYWQgJHtmaWxlfTogJHtlcnJvcn1gXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIG1lbW9yaWVzO1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICgoZXJyb3IgYXMgYW55KS5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAvLyBEaXJlY3RvcnkgZG9lc24ndCBleGlzdCB5ZXRcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogRmluZCBtZW1vcmllcyBtYXRjaGluZyBhIHByZWRpY2F0ZVxuICAgKi9cbiAgYXN5bmMgZmluZChwcmVkaWNhdGU6IChlbGVtZW50OiBNZW1vcnkpID0+IGJvb2xlYW4pOiBQcm9taXNlPE1lbW9yeSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IG1lbW9yaWVzID0gYXdhaXQgdGhpcy5saXN0KCk7XG4gICAgcmV0dXJuIG1lbW9yaWVzLmZpbmQocHJlZGljYXRlKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEZpbmQgbXVsdGlwbGUgbWVtb3JpZXMgbWF0Y2hpbmcgYSBwcmVkaWNhdGVcbiAgICovXG4gIGFzeW5jIGZpbmRNYW55KHByZWRpY2F0ZTogKGVsZW1lbnQ6IE1lbW9yeSkgPT4gYm9vbGVhbik6IFByb21pc2U8TWVtb3J5W10+IHtcbiAgICBjb25zdCBtZW1vcmllcyA9IGF3YWl0IHRoaXMubGlzdCgpO1xuICAgIHJldHVybiBtZW1vcmllcy5maWx0ZXIocHJlZGljYXRlKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIERlbGV0ZSBhIG1lbW9yeSBmaWxlXG4gICAqIFNFQ1VSSVRZOiBWYWxpZGF0ZXMgcGF0aCBhbmQgbG9ncyBkZWxldGlvblxuICAgKi9cbiAgYXN5bmMgZGVsZXRlKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBhd2FpdCB0aGlzLnZhbGlkYXRlQW5kUmVzb2x2ZVBhdGgoZmlsZVBhdGgpO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBmaWxlIGV4aXN0c1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKGZ1bGxQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gRGVsZXRlIHRoZSBmaWxlXG4gICAgICBhd2FpdCBmcy51bmxpbmsoZnVsbFBhdGgpO1xuICAgICAgXG4gICAgICAvLyBSZW1vdmUgZnJvbSBjYWNoZVxuICAgICAgdGhpcy5tZW1vcnlDYWNoZS5kZWxldGUoZnVsbFBhdGgpO1xuICAgICAgXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6IE1FTU9SWV9TRUNVUklUWV9FVkVOVFMuTUVNT1JZX0RFTEVURUQsXG4gICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgc291cmNlOiAnTWVtb3J5TWFuYWdlci5kZWxldGUnLFxuICAgICAgICBkZXRhaWxzOiBgRGVsZXRlZCBtZW1vcnkgZmlsZTogJHtwYXRoLmJhc2VuYW1lKGZ1bGxQYXRoKX1gXG4gICAgICB9KTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoKGVycm9yIGFzIGFueSkuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgLy8gRmlsZSBkb2Vzbid0IGV4aXN0LCBub3QgYW4gZXJyb3IgZm9yIGRlbGV0ZSBvcGVyYXRpb25cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBtZW1vcnkgZmlsZSBleGlzdHNcbiAgICovXG4gIGFzeW5jIGV4aXN0cyhmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gYXdhaXQgdGhpcy52YWxpZGF0ZUFuZFJlc29sdmVQYXRoKGZpbGVQYXRoKTtcbiAgICAgIGF3YWl0IGZzLmFjY2VzcyhmdWxsUGF0aCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgbWVtb3J5IHdpdGggbWV0YWRhdGFcbiAgICovXG4gIGFzeW5jIGNyZWF0ZShtZXRhZGF0YTogUGFydGlhbDxNZW1vcnlNZXRhZGF0YT4pOiBQcm9taXNlPE1lbW9yeT4ge1xuICAgIHJldHVybiBuZXcgTWVtb3J5KG1ldGFkYXRhKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEltcG9ydCBhIG1lbW9yeSBmcm9tIEpTT04vWUFNTCBzdHJpbmdcbiAgICogU0VDVVJJVFk6IEZ1bGwgdmFsaWRhdGlvbiBvZiBpbXBvcnRlZCBjb250ZW50XG4gICAqL1xuICBhc3luYyBpbXBvcnRFbGVtZW50KGRhdGE6IHN0cmluZywgZm9ybWF0OiAnanNvbicgfCAneWFtbCcgPSAneWFtbCcpOiBQcm9taXNlPE1lbW9yeT4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcGFyc2VkOiBhbnk7XG4gICAgICBcbiAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICBwYXJzZWQgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSElHSCBTRVZFUklUWSBGSVg6IFVzZSBzZWN1cmUgWUFNTCBwYXJzaW5nXG4gICAgICAgIC8vIE1lbW9yeSBpbXBvcnQgZXhwZWN0cyBwdXJlIFlBTUwgKG5vdCBmcm9udG1hdHRlciksIHNvIHdlIHBhcnNlIGl0IHNlY3VyZWx5XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gRmlyc3QgdmFsaWRhdGUgdGhlIFlBTUwgY29udGVudCBzaXplXG4gICAgICAgICAgaWYgKGRhdGEubGVuZ3RoID4gTUVNT1JZX0NPTlNUQU5UUy5NQVhfWUFNTF9TSVpFKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lBTUwgY29udGVudCBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIENyZWF0ZSBhIHdyYXBwZXIgdG8gdXNlIFNlY3VyZVlhbWxQYXJzZXIgd2l0aCBwdXJlIFlBTUxcbiAgICAgICAgICAvLyBBZGQgbWluaW1hbCBmcm9udG1hdHRlciBtYXJrZXJzIHRvIHNhdGlzZnkgcGFyc2VyXG4gICAgICAgICAgY29uc3Qgd3JhcHBlZFlhbWwgPSBgLS0tXFxuJHtkYXRhfVxcbi0tLVxcbmA7XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgcGFyc2VSZXN1bHQgPSBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKHdyYXBwZWRZYW1sLCB7XG4gICAgICAgICAgICBtYXhZYW1sU2l6ZTogTUVNT1JZX0NPTlNUQU5UUy5NQVhfWUFNTF9TSVpFLFxuICAgICAgICAgICAgdmFsaWRhdGVDb250ZW50OiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gRXh0cmFjdCB0aGUgcGFyc2VkIGRhdGEgKHdpbGwgYmUgaW4gdGhlICdkYXRhJyBwcm9wZXJ0eSlcbiAgICAgICAgICBwYXJzZWQgPSBwYXJzZVJlc3VsdC5kYXRhO1xuICAgICAgICAgIFxuICAgICAgICB9IGNhdGNoICh5YW1sRXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgWUFNTDogJHt5YW1sRXJyb3J9YCk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFZhbGlkYXRlIGl0J3MgYW4gb2JqZWN0XG4gICAgICAgIGlmICghcGFyc2VkIHx8IHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZQU1MIG11c3QgY29udGFpbiBhbiBvYmplY3QnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBIYW5kbGUgZGlmZmVyZW50IHN0cnVjdHVyZXMgZnJvbSBZQU1MIHBhcnNpbmdcbiAgICAgIGxldCBtZXRhZGF0YSA9IHBhcnNlZC5tZXRhZGF0YTtcbiAgICAgIGxldCBlbnRyaWVzID0gcGFyc2VkLmVudHJpZXMgfHwgKHBhcnNlZC5kYXRhICYmIHBhcnNlZC5kYXRhLmVudHJpZXMpO1xuICAgICAgXG4gICAgICAvLyBWYWxpZGF0ZSByZXF1aXJlZCBmaWVsZHNcbiAgICAgIGlmICghbWV0YWRhdGEgfHwgIW1ldGFkYXRhLm5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNZW1vcnkgbXVzdCBoYXZlIG1ldGFkYXRhIHdpdGggbmFtZScpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBDcmVhdGUgbWVtb3J5IGluc3RhbmNlXG4gICAgICBjb25zdCBtZW1vcnkgPSBuZXcgTWVtb3J5KG1ldGFkYXRhKTtcbiAgICAgIFxuICAgICAgLy8gTG9hZCBlbnRyaWVzIGlmIHByZXNlbnRcbiAgICAgIGlmIChlbnRyaWVzKSB7XG4gICAgICAgIG1lbW9yeS5kZXNlcmlhbGl6ZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgaWQ6IG1lbW9yeS5pZCxcbiAgICAgICAgICB0eXBlOiBtZW1vcnkudHlwZSxcbiAgICAgICAgICB2ZXJzaW9uOiBtZW1vcnkudmVyc2lvbixcbiAgICAgICAgICBtZXRhZGF0YTogbWVtb3J5Lm1ldGFkYXRhLFxuICAgICAgICAgIGV4dGVuc2lvbnM6IG1lbW9yeS5leHRlbnNpb25zLFxuICAgICAgICAgIGVudHJpZXM6IGVudHJpZXNcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgXG4gICAgICByZXR1cm4gbWVtb3J5O1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogTUVNT1JZX1NFQ1VSSVRZX0VWRU5UUy5NRU1PUllfSU1QT1JUX0ZBSUxFRCxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdNZW1vcnlNYW5hZ2VyLmltcG9ydEVsZW1lbnQnLFxuICAgICAgICBkZXRhaWxzOiBgRmFpbGVkIHRvIGltcG9ydCBtZW1vcnk6ICR7ZXJyb3J9YFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBpbXBvcnQgbWVtb3J5OiAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEV4cG9ydCBhIG1lbW9yeSB0byBZQU1MIHN0cmluZ1xuICAgKi9cbiAgYXN5bmMgZXhwb3J0RWxlbWVudChlbGVtZW50OiBNZW1vcnkpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHN0YXRzID0gZWxlbWVudC5nZXRTdGF0cygpO1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBtZXRhZGF0YTogZWxlbWVudC5tZXRhZGF0YSxcbiAgICAgIGV4dGVuc2lvbnM6IGVsZW1lbnQuZXh0ZW5zaW9ucyxcbiAgICAgIHN0YXRzOiB7XG4gICAgICAgIHRvdGFsRW50cmllczogc3RhdHMudG90YWxFbnRyaWVzLFxuICAgICAgICB0b3RhbFNpemU6IHN0YXRzLnRvdGFsU2l6ZSxcbiAgICAgICAgb2xkZXN0RW50cnk6IHN0YXRzLm9sZGVzdEVudHJ5Py50b0lTT1N0cmluZygpLFxuICAgICAgICBuZXdlc3RFbnRyeTogc3RhdHMubmV3ZXN0RW50cnk/LnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICBlbnRyaWVzOiBKU09OLnBhcnNlKGVsZW1lbnQuc2VyaWFsaXplKCkpLmVudHJpZXNcbiAgICB9O1xuICAgIFxuICAgIC8vIFNFQ1VSSVRZIEZJWDogVXNlIHNlY3VyZSBZQU1MIGR1bXBpbmdcbiAgICByZXR1cm4geWFtbC5kdW1wKGRhdGEsIHtcbiAgICAgIHNjaGVtYTogeWFtbC5GQUlMU0FGRV9TQ0hFTUEsXG4gICAgICBub1JlZnM6IHRydWUsXG4gICAgICBza2lwSW52YWxpZDogdHJ1ZSxcbiAgICAgIHNvcnRLZXlzOiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhIG1lbW9yeSBlbGVtZW50XG4gICAqL1xuICB2YWxpZGF0ZShlbGVtZW50OiBNZW1vcnkpOiBFbGVtZW50VmFsaWRhdGlvblJlc3VsdCB7XG4gICAgcmV0dXJuIGVsZW1lbnQudmFsaWRhdGUoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFZhbGlkYXRlIGFuZCByZXNvbHZlIGEgZmlsZSBwYXRoXG4gICAqIFNFQ1VSSVRZOiBQcmV2ZW50cyBkaXJlY3RvcnkgdHJhdmVyc2FsIGF0dGFja3NcbiAgICovXG4gIHZhbGlkYXRlUGF0aChmaWxlUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFBlcmZvcm0gc3luY2hyb25vdXMgdmFsaWRhdGlvbiBjaGVja3NcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBwYXRoLm5vcm1hbGl6ZShmaWxlUGF0aCk7XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGZvciBwYXRoIHRyYXZlcnNhbCBhdHRlbXB0c1xuICAgICAgaWYgKG5vcm1hbGl6ZWQuaW5jbHVkZXMoJy4uJykgfHwgcGF0aC5pc0Fic29sdXRlKG5vcm1hbGl6ZWQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRW5zdXJlIHByb3BlciBleHRlbnNpb25cbiAgICAgIGlmICghbm9ybWFsaXplZC5lbmRzV2l0aCgnLm1kJykgJiYgIW5vcm1hbGl6ZWQuZW5kc1dpdGgoJy55YW1sJykgJiYgIW5vcm1hbGl6ZWQuZW5kc1dpdGgoJy55bWwnKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCB0aGUgZWxlbWVudCB0eXBlIHRoaXMgbWFuYWdlciBoYW5kbGVzXG4gICAqL1xuICBnZXRFbGVtZW50VHlwZSgpOiBFbGVtZW50VHlwZSB7XG4gICAgcmV0dXJuIEVsZW1lbnRUeXBlLk1FTU9SWTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCB0aGUgZmlsZSBleHRlbnNpb24gZm9yIG1lbW9yeSBmaWxlc1xuICAgKi9cbiAgZ2V0RmlsZUV4dGVuc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnLnlhbWwnO1xuICB9XG4gIFxuICAvLyBQcml2YXRlIGhlbHBlciBtZXRob2RzXG4gIFxuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlQW5kUmVzb2x2ZVBhdGgoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgLy8gU0VDVVJJVFkgRklYOiBDb21wcmVoZW5zaXZlIHBhdGggdmFsaWRhdGlvblxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBwYXRoLm5vcm1hbGl6ZShmaWxlUGF0aCk7XG4gICAgXG4gICAgLy8gQ2hlY2sgZm9yIHBhdGggdHJhdmVyc2FsIGF0dGVtcHRzXG4gICAgaWYgKG5vcm1hbGl6ZWQuaW5jbHVkZXMoJy4uJykgfHwgcGF0aC5pc0Fic29sdXRlKG5vcm1hbGl6ZWQpKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdQQVRIX1RSQVZFUlNBTF9BVFRFTVBUJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgc291cmNlOiAnTWVtb3J5TWFuYWdlci52YWxpZGF0ZUFuZFJlc29sdmVQYXRoJyxcbiAgICAgICAgZGV0YWlsczogYEJsb2NrZWQgcGF0aCB0cmF2ZXJzYWwgYXR0ZW1wdDogJHtmaWxlUGF0aH1gXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmaWxlIHBhdGg6IFBhdGggdHJhdmVyc2FsIGRldGVjdGVkJyk7XG4gICAgfVxuICAgIFxuICAgIC8vIEVuc3VyZSBwcm9wZXIgZXh0ZW5zaW9uXG4gICAgaWYgKCFub3JtYWxpemVkLmVuZHNXaXRoKCcubWQnKSAmJiAhbm9ybWFsaXplZC5lbmRzV2l0aCgnLnlhbWwnKSAmJiAhbm9ybWFsaXplZC5lbmRzV2l0aCgnLnltbCcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01lbW9yeSBmaWxlcyBtdXN0IGhhdmUgLm1kLCAueWFtbCwgb3IgLnltbCBleHRlbnNpb24nKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ29uc3RydWN0IGZ1bGwgcGF0aFxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKHRoaXMubWVtb3JpZXNEaXIsIG5vcm1hbGl6ZWQpO1xuICAgIFxuICAgIC8vIFZlcmlmeSBpdCdzIHdpdGhpbiBtZW1vcmllcyBkaXJlY3RvcnlcbiAgICBjb25zdCByZWxhdGl2ZSA9IHBhdGgucmVsYXRpdmUodGhpcy5tZW1vcmllc0RpciwgZnVsbFBhdGgpO1xuICAgIGlmIChyZWxhdGl2ZS5zdGFydHNXaXRoKCcuLicpIHx8IHBhdGguaXNBYnNvbHV0ZShyZWxhdGl2ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmlsZSBwYXRoIG11c3QgYmUgd2l0aGluIG1lbW9yaWVzIGRpcmVjdG9yeScpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZnVsbFBhdGg7XG4gIH1cbiAgXG4gIHByaXZhdGUgcGFyc2VNZW1vcnlGaWxlKHBhcnNlZDogYW55KTogeyBtZXRhZGF0YTogTWVtb3J5TWV0YWRhdGE7IGNvbnRlbnQ6IHN0cmluZyB9IHtcbiAgICAvLyBFeHRyYWN0IG1ldGFkYXRhIHdpdGggdmFsaWRhdGlvblxuICAgIGNvbnN0IG1ldGFkYXRhOiBNZW1vcnlNZXRhZGF0YSA9IHtcbiAgICAgIG5hbWU6IHNhbml0aXplSW5wdXQocGFyc2VkLm1ldGFkYXRhPy5uYW1lIHx8ICdVbm5hbWVkIE1lbW9yeScsIDEwMCksXG4gICAgICBkZXNjcmlwdGlvbjogcGFyc2VkLm1ldGFkYXRhPy5kZXNjcmlwdGlvbiA/IFxuICAgICAgICBzYW5pdGl6ZUlucHV0KHBhcnNlZC5tZXRhZGF0YS5kZXNjcmlwdGlvbiwgNTAwKSA6IFxuICAgICAgICAnJyxcbiAgICAgIHZlcnNpb246IHBhcnNlZC5tZXRhZGF0YT8udmVyc2lvbiB8fCAnMS4wLjAnLFxuICAgICAgYXV0aG9yOiBwYXJzZWQubWV0YWRhdGE/LmF1dGhvcixcbiAgICAgIGNyZWF0ZWQ6IHBhcnNlZC5tZXRhZGF0YT8uY3JlYXRlZCxcbiAgICAgIG1vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB0YWdzOiBBcnJheS5pc0FycmF5KHBhcnNlZC5tZXRhZGF0YT8udGFncykgPyBcbiAgICAgICAgcGFyc2VkLm1ldGFkYXRhLnRhZ3MubWFwKCh0YWc6IHN0cmluZykgPT4gc2FuaXRpemVJbnB1dCh0YWcsIDUwKSkgOiBcbiAgICAgICAgW10sXG4gICAgICBzdG9yYWdlQmFja2VuZDogcGFyc2VkLm1ldGFkYXRhPy5zdG9yYWdlQmFja2VuZCB8fCBNRU1PUllfQ09OU1RBTlRTLkRFRkFVTFRfU1RPUkFHRV9CQUNLRU5ELFxuICAgICAgcmV0ZW50aW9uRGF5czogcGFyc2VkLm1ldGFkYXRhPy5yZXRlbnRpb25EYXlzIHx8IE1FTU9SWV9DT05TVEFOVFMuREVGQVVMVF9SRVRFTlRJT05fREFZUyxcbiAgICAgIHByaXZhY3lMZXZlbDogcGFyc2VkLm1ldGFkYXRhPy5wcml2YWN5TGV2ZWwgfHwgTUVNT1JZX0NPTlNUQU5UUy5ERUZBVUxUX1BSSVZBQ1lfTEVWRUwsXG4gICAgICBzZWFyY2hhYmxlOiBwYXJzZWQubWV0YWRhdGE/LnNlYXJjaGFibGUgIT09IGZhbHNlLFxuICAgICAgbWF4RW50cmllczogcGFyc2VkLm1ldGFkYXRhPy5tYXhFbnRyaWVzIHx8IE1FTU9SWV9DT05TVEFOVFMuTUFYX0VOVFJJRVNfREVGQVVMVFxuICAgIH07XG4gICAgXG4gICAgLy8gRXh0cmFjdCBjb250ZW50IChpZiBhbnkpXG4gICAgY29uc3QgY29udGVudCA9IHBhcnNlZC5jb250ZW50IHx8ICcnO1xuICAgIFxuICAgIHJldHVybiB7IG1ldGFkYXRhLCBjb250ZW50IH07XG4gIH1cbn0iXX0=
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constants for Memory element implementation
|
|
3
|
+
* Extracted for reusability and maintainability
|
|
4
|
+
*/
|
|
5
|
+
export declare const MEMORY_CONSTANTS: {
|
|
6
|
+
readonly MAX_MEMORY_SIZE: number;
|
|
7
|
+
readonly MAX_ENTRY_SIZE: number;
|
|
8
|
+
readonly MAX_ENTRIES_DEFAULT: 1000;
|
|
9
|
+
readonly MAX_TAGS_PER_ENTRY: 20;
|
|
10
|
+
readonly MAX_TAG_LENGTH: 50;
|
|
11
|
+
readonly MAX_METADATA_KEYS: 20;
|
|
12
|
+
readonly MAX_METADATA_KEY_LENGTH: 50;
|
|
13
|
+
readonly MAX_METADATA_VALUE_LENGTH: 200;
|
|
14
|
+
readonly DEFAULT_RETENTION_DAYS: 30;
|
|
15
|
+
readonly MIN_RETENTION_DAYS: 1;
|
|
16
|
+
readonly MAX_RETENTION_DAYS: 365;
|
|
17
|
+
readonly DEFAULT_SEARCH_LIMIT: 100;
|
|
18
|
+
readonly MAX_YAML_SIZE: number;
|
|
19
|
+
readonly PRIVACY_LEVELS: readonly ["public", "private", "sensitive"];
|
|
20
|
+
readonly DEFAULT_PRIVACY_LEVEL: "private";
|
|
21
|
+
readonly DEFAULT_STORAGE_BACKEND: "memory";
|
|
22
|
+
readonly SUPPORTED_STORAGE_BACKENDS: readonly ["memory", "file", "indexed"];
|
|
23
|
+
};
|
|
24
|
+
export type PrivacyLevel = typeof MEMORY_CONSTANTS.PRIVACY_LEVELS[number];
|
|
25
|
+
export type StorageBackend = typeof MEMORY_CONSTANTS.SUPPORTED_STORAGE_BACKENDS[number];
|
|
26
|
+
export declare const MEMORY_SECURITY_EVENTS: {
|
|
27
|
+
readonly MEMORY_CREATED: "MEMORY_CREATED";
|
|
28
|
+
readonly MEMORY_ADDED: "MEMORY_ADDED";
|
|
29
|
+
readonly MEMORY_SEARCHED: "MEMORY_SEARCHED";
|
|
30
|
+
readonly SENSITIVE_MEMORY_DELETED: "SENSITIVE_MEMORY_DELETED";
|
|
31
|
+
readonly RETENTION_POLICY_ENFORCED: "RETENTION_POLICY_ENFORCED";
|
|
32
|
+
readonly MEMORY_CLEARED: "MEMORY_CLEARED";
|
|
33
|
+
readonly MEMORY_LOADED: "MEMORY_LOADED";
|
|
34
|
+
readonly MEMORY_SAVED: "MEMORY_SAVED";
|
|
35
|
+
readonly MEMORY_DELETED: "MEMORY_DELETED";
|
|
36
|
+
readonly MEMORY_LOAD_FAILED: "MEMORY_LOAD_FAILED";
|
|
37
|
+
readonly MEMORY_SAVE_FAILED: "MEMORY_SAVE_FAILED";
|
|
38
|
+
readonly MEMORY_DESERIALIZE_FAILED: "MEMORY_DESERIALIZE_FAILED";
|
|
39
|
+
readonly MEMORY_LIST_ITEM_FAILED: "MEMORY_LIST_ITEM_FAILED";
|
|
40
|
+
readonly MEMORY_IMPORT_FAILED: "MEMORY_IMPORT_FAILED";
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/elements/memories/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;CA+BnB,CAAC;AAGX,MAAM,MAAM,YAAY,GAAG,OAAO,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AAC1E,MAAM,MAAM,cAAc,GAAG,OAAO,gBAAgB,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;AAGxF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;CAezB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constants for Memory element implementation
|
|
3
|
+
* Extracted for reusability and maintainability
|
|
4
|
+
*/
|
|
5
|
+
// Memory size limits
|
|
6
|
+
export const MEMORY_CONSTANTS = {
|
|
7
|
+
// Size limits
|
|
8
|
+
MAX_MEMORY_SIZE: 1024 * 1024, // 1MB total memory size
|
|
9
|
+
MAX_ENTRY_SIZE: 100 * 1024, // 100KB per entry
|
|
10
|
+
MAX_ENTRIES_DEFAULT: 1000, // Maximum number of entries
|
|
11
|
+
// Entry limits
|
|
12
|
+
MAX_TAGS_PER_ENTRY: 20, // Maximum tags per memory entry
|
|
13
|
+
MAX_TAG_LENGTH: 50, // Maximum length of each tag
|
|
14
|
+
MAX_METADATA_KEYS: 20, // Maximum metadata keys per entry
|
|
15
|
+
MAX_METADATA_KEY_LENGTH: 50, // Maximum metadata key length
|
|
16
|
+
MAX_METADATA_VALUE_LENGTH: 200, // Maximum metadata value length
|
|
17
|
+
// Retention defaults
|
|
18
|
+
DEFAULT_RETENTION_DAYS: 30, // Default retention period
|
|
19
|
+
MIN_RETENTION_DAYS: 1, // Minimum retention period
|
|
20
|
+
MAX_RETENTION_DAYS: 365, // Maximum retention period
|
|
21
|
+
// Search limits
|
|
22
|
+
DEFAULT_SEARCH_LIMIT: 100, // Default search result limit
|
|
23
|
+
// YAML limits
|
|
24
|
+
MAX_YAML_SIZE: 256 * 1024, // 256KB max YAML size for import
|
|
25
|
+
// Privacy levels (ordered by access level)
|
|
26
|
+
PRIVACY_LEVELS: ['public', 'private', 'sensitive'],
|
|
27
|
+
DEFAULT_PRIVACY_LEVEL: 'private',
|
|
28
|
+
// Storage backends
|
|
29
|
+
DEFAULT_STORAGE_BACKEND: 'memory',
|
|
30
|
+
SUPPORTED_STORAGE_BACKENDS: ['memory', 'file', 'indexed'],
|
|
31
|
+
};
|
|
32
|
+
// Security event types for memory operations
|
|
33
|
+
export const MEMORY_SECURITY_EVENTS = {
|
|
34
|
+
MEMORY_CREATED: 'MEMORY_CREATED',
|
|
35
|
+
MEMORY_ADDED: 'MEMORY_ADDED',
|
|
36
|
+
MEMORY_SEARCHED: 'MEMORY_SEARCHED',
|
|
37
|
+
SENSITIVE_MEMORY_DELETED: 'SENSITIVE_MEMORY_DELETED',
|
|
38
|
+
RETENTION_POLICY_ENFORCED: 'RETENTION_POLICY_ENFORCED',
|
|
39
|
+
MEMORY_CLEARED: 'MEMORY_CLEARED',
|
|
40
|
+
MEMORY_LOADED: 'MEMORY_LOADED',
|
|
41
|
+
MEMORY_SAVED: 'MEMORY_SAVED',
|
|
42
|
+
MEMORY_DELETED: 'MEMORY_DELETED',
|
|
43
|
+
MEMORY_LOAD_FAILED: 'MEMORY_LOAD_FAILED',
|
|
44
|
+
MEMORY_SAVE_FAILED: 'MEMORY_SAVE_FAILED',
|
|
45
|
+
MEMORY_DESERIALIZE_FAILED: 'MEMORY_DESERIALIZE_FAILED',
|
|
46
|
+
MEMORY_LIST_ITEM_FAILED: 'MEMORY_LIST_ITEM_FAILED',
|
|
47
|
+
MEMORY_IMPORT_FAILED: 'MEMORY_IMPORT_FAILED',
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL21lbW9yaWVzL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxxQkFBcUI7QUFDckIsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUc7SUFDOUIsY0FBYztJQUNkLGVBQWUsRUFBRSxJQUFJLEdBQUcsSUFBSSxFQUFTLHdCQUF3QjtJQUM3RCxjQUFjLEVBQUUsR0FBRyxHQUFHLElBQUksRUFBVyxrQkFBa0I7SUFDdkQsbUJBQW1CLEVBQUUsSUFBSSxFQUFZLDRCQUE0QjtJQUVqRSxlQUFlO0lBQ2Ysa0JBQWtCLEVBQUUsRUFBRSxFQUFlLGdDQUFnQztJQUNyRSxjQUFjLEVBQUUsRUFBRSxFQUFtQiw2QkFBNkI7SUFDbEUsaUJBQWlCLEVBQUUsRUFBRSxFQUFnQixrQ0FBa0M7SUFDdkUsdUJBQXVCLEVBQUUsRUFBRSxFQUFVLDhCQUE4QjtJQUNuRSx5QkFBeUIsRUFBRSxHQUFHLEVBQU8sZ0NBQWdDO0lBRXJFLHFCQUFxQjtJQUNyQixzQkFBc0IsRUFBRSxFQUFFLEVBQVcsMkJBQTJCO0lBQ2hFLGtCQUFrQixFQUFFLENBQUMsRUFBZ0IsMkJBQTJCO0lBQ2hFLGtCQUFrQixFQUFFLEdBQUcsRUFBYywyQkFBMkI7SUFFaEUsZ0JBQWdCO0lBQ2hCLG9CQUFvQixFQUFFLEdBQUcsRUFBWSw4QkFBOEI7SUFFbkUsY0FBYztJQUNkLGFBQWEsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFZLGlDQUFpQztJQUV0RSwyQ0FBMkM7SUFDM0MsY0FBYyxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQVU7SUFDM0QscUJBQXFCLEVBQUUsU0FBa0I7SUFFekMsbUJBQW1CO0lBQ25CLHVCQUF1QixFQUFFLFFBQWlCO0lBQzFDLDBCQUEwQixFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQVU7Q0FDMUQsQ0FBQztBQU1YLDZDQUE2QztBQUM3QyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRztJQUNwQyxjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLFlBQVksRUFBRSxjQUFjO0lBQzVCLGVBQWUsRUFBRSxpQkFBaUI7SUFDbEMsd0JBQXdCLEVBQUUsMEJBQTBCO0lBQ3BELHlCQUF5QixFQUFFLDJCQUEyQjtJQUN0RCxjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLGFBQWEsRUFBRSxlQUFlO0lBQzlCLFlBQVksRUFBRSxjQUFjO0lBQzVCLGNBQWMsRUFBRSxnQkFBZ0I7SUFDaEMsa0JBQWtCLEVBQUUsb0JBQW9CO0lBQ3hDLGtCQUFrQixFQUFFLG9CQUFvQjtJQUN4Qyx5QkFBeUIsRUFBRSwyQkFBMkI7SUFDdEQsdUJBQXVCLEVBQUUseUJBQXlCO0lBQ2xELG9CQUFvQixFQUFFLHNCQUFzQjtDQUNwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb25zdGFudHMgZm9yIE1lbW9yeSBlbGVtZW50IGltcGxlbWVudGF0aW9uXG4gKiBFeHRyYWN0ZWQgZm9yIHJldXNhYmlsaXR5IGFuZCBtYWludGFpbmFiaWxpdHlcbiAqL1xuXG4vLyBNZW1vcnkgc2l6ZSBsaW1pdHNcbmV4cG9ydCBjb25zdCBNRU1PUllfQ09OU1RBTlRTID0ge1xuICAvLyBTaXplIGxpbWl0c1xuICBNQVhfTUVNT1JZX1NJWkU6IDEwMjQgKiAxMDI0LCAgICAgICAgLy8gMU1CIHRvdGFsIG1lbW9yeSBzaXplXG4gIE1BWF9FTlRSWV9TSVpFOiAxMDAgKiAxMDI0LCAgICAgICAgICAvLyAxMDBLQiBwZXIgZW50cnlcbiAgTUFYX0VOVFJJRVNfREVGQVVMVDogMTAwMCwgICAgICAgICAgIC8vIE1heGltdW0gbnVtYmVyIG9mIGVudHJpZXNcbiAgXG4gIC8vIEVudHJ5IGxpbWl0c1xuICBNQVhfVEFHU19QRVJfRU5UUlk6IDIwLCAgICAgICAgICAgICAgLy8gTWF4aW11bSB0YWdzIHBlciBtZW1vcnkgZW50cnlcbiAgTUFYX1RBR19MRU5HVEg6IDUwLCAgICAgICAgICAgICAgICAgIC8vIE1heGltdW0gbGVuZ3RoIG9mIGVhY2ggdGFnXG4gIE1BWF9NRVRBREFUQV9LRVlTOiAyMCwgICAgICAgICAgICAgICAvLyBNYXhpbXVtIG1ldGFkYXRhIGtleXMgcGVyIGVudHJ5XG4gIE1BWF9NRVRBREFUQV9LRVlfTEVOR1RIOiA1MCwgICAgICAgICAvLyBNYXhpbXVtIG1ldGFkYXRhIGtleSBsZW5ndGhcbiAgTUFYX01FVEFEQVRBX1ZBTFVFX0xFTkdUSDogMjAwLCAgICAgIC8vIE1heGltdW0gbWV0YWRhdGEgdmFsdWUgbGVuZ3RoXG4gIFxuICAvLyBSZXRlbnRpb24gZGVmYXVsdHNcbiAgREVGQVVMVF9SRVRFTlRJT05fREFZUzogMzAsICAgICAgICAgIC8vIERlZmF1bHQgcmV0ZW50aW9uIHBlcmlvZFxuICBNSU5fUkVURU5USU9OX0RBWVM6IDEsICAgICAgICAgICAgICAgLy8gTWluaW11bSByZXRlbnRpb24gcGVyaW9kXG4gIE1BWF9SRVRFTlRJT05fREFZUzogMzY1LCAgICAgICAgICAgICAvLyBNYXhpbXVtIHJldGVudGlvbiBwZXJpb2RcbiAgXG4gIC8vIFNlYXJjaCBsaW1pdHNcbiAgREVGQVVMVF9TRUFSQ0hfTElNSVQ6IDEwMCwgICAgICAgICAgIC8vIERlZmF1bHQgc2VhcmNoIHJlc3VsdCBsaW1pdFxuICBcbiAgLy8gWUFNTCBsaW1pdHNcbiAgTUFYX1lBTUxfU0laRTogMjU2ICogMTAyNCwgICAgICAgICAgIC8vIDI1NktCIG1heCBZQU1MIHNpemUgZm9yIGltcG9ydFxuICBcbiAgLy8gUHJpdmFjeSBsZXZlbHMgKG9yZGVyZWQgYnkgYWNjZXNzIGxldmVsKVxuICBQUklWQUNZX0xFVkVMUzogWydwdWJsaWMnLCAncHJpdmF0ZScsICdzZW5zaXRpdmUnXSBhcyBjb25zdCxcbiAgREVGQVVMVF9QUklWQUNZX0xFVkVMOiAncHJpdmF0ZScgYXMgY29uc3QsXG4gIFxuICAvLyBTdG9yYWdlIGJhY2tlbmRzXG4gIERFRkFVTFRfU1RPUkFHRV9CQUNLRU5EOiAnbWVtb3J5JyBhcyBjb25zdCxcbiAgU1VQUE9SVEVEX1NUT1JBR0VfQkFDS0VORFM6IFsnbWVtb3J5JywgJ2ZpbGUnLCAnaW5kZXhlZCddIGFzIGNvbnN0LFxufSBhcyBjb25zdDtcblxuLy8gVHlwZSBleHBvcnRzIGZvciBwcml2YWN5IGxldmVscyBhbmQgc3RvcmFnZSBiYWNrZW5kc1xuZXhwb3J0IHR5cGUgUHJpdmFjeUxldmVsID0gdHlwZW9mIE1FTU9SWV9DT05TVEFOVFMuUFJJVkFDWV9MRVZFTFNbbnVtYmVyXTtcbmV4cG9ydCB0eXBlIFN0b3JhZ2VCYWNrZW5kID0gdHlwZW9mIE1FTU9SWV9DT05TVEFOVFMuU1VQUE9SVEVEX1NUT1JBR0VfQkFDS0VORFNbbnVtYmVyXTtcblxuLy8gU2VjdXJpdHkgZXZlbnQgdHlwZXMgZm9yIG1lbW9yeSBvcGVyYXRpb25zXG5leHBvcnQgY29uc3QgTUVNT1JZX1NFQ1VSSVRZX0VWRU5UUyA9IHtcbiAgTUVNT1JZX0NSRUFURUQ6ICdNRU1PUllfQ1JFQVRFRCcsXG4gIE1FTU9SWV9BRERFRDogJ01FTU9SWV9BRERFRCcsXG4gIE1FTU9SWV9TRUFSQ0hFRDogJ01FTU9SWV9TRUFSQ0hFRCcsXG4gIFNFTlNJVElWRV9NRU1PUllfREVMRVRFRDogJ1NFTlNJVElWRV9NRU1PUllfREVMRVRFRCcsXG4gIFJFVEVOVElPTl9QT0xJQ1lfRU5GT1JDRUQ6ICdSRVRFTlRJT05fUE9MSUNZX0VORk9SQ0VEJyxcbiAgTUVNT1JZX0NMRUFSRUQ6ICdNRU1PUllfQ0xFQVJFRCcsXG4gIE1FTU9SWV9MT0FERUQ6ICdNRU1PUllfTE9BREVEJyxcbiAgTUVNT1JZX1NBVkVEOiAnTUVNT1JZX1NBVkVEJyxcbiAgTUVNT1JZX0RFTEVURUQ6ICdNRU1PUllfREVMRVRFRCcsXG4gIE1FTU9SWV9MT0FEX0ZBSUxFRDogJ01FTU9SWV9MT0FEX0ZBSUxFRCcsXG4gIE1FTU9SWV9TQVZFX0ZBSUxFRDogJ01FTU9SWV9TQVZFX0ZBSUxFRCcsXG4gIE1FTU9SWV9ERVNFUklBTElaRV9GQUlMRUQ6ICdNRU1PUllfREVTRVJJQUxJWkVfRkFJTEVEJyxcbiAgTUVNT1JZX0xJU1RfSVRFTV9GQUlMRUQ6ICdNRU1PUllfTElTVF9JVEVNX0ZBSUxFRCcsXG4gIE1FTU9SWV9JTVBPUlRfRkFJTEVEOiAnTUVNT1JZX0lNUE9SVF9GQUlMRUQnLFxufSBhcyBjb25zdDsiXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/memories/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory element exports
|
|
3
|
+
*/
|
|
4
|
+
export { Memory } from './Memory.js';
|
|
5
|
+
export { MemoryManager } from './MemoryManager.js';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvbWVtb3JpZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFvRCxNQUFNLGFBQWEsQ0FBQztBQUN2RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1lbW9yeSBlbGVtZW50IGV4cG9ydHNcbiAqL1xuXG5leHBvcnQgeyBNZW1vcnksIE1lbW9yeU1ldGFkYXRhLCBNZW1vcnlFbnRyeSwgTWVtb3J5U2VhcmNoT3B0aW9ucyB9IGZyb20gJy4vTWVtb3J5LmpzJztcbmV4cG9ydCB7IE1lbW9yeU1hbmFnZXIgfSBmcm9tICcuL01lbW9yeU1hbmFnZXIuanMnOyJdfQ==
|