@dollhousemcp/mcp-server 1.8.0 → 1.9.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.
Files changed (56) hide show
  1. package/CHANGELOG.md +118 -0
  2. package/README.github.md +126 -8
  3. package/README.md +1 -1
  4. package/README.md.backup +50 -795
  5. package/README.npm.md +1 -1
  6. package/dist/collection/CollectionBrowser.d.ts.map +1 -1
  7. package/dist/collection/CollectionBrowser.js +6 -5
  8. package/dist/config/ConfigWizardDisplay.d.ts +64 -0
  9. package/dist/config/ConfigWizardDisplay.d.ts.map +1 -0
  10. package/dist/config/ConfigWizardDisplay.js +150 -0
  11. package/dist/config/WizardFirstResponse.d.ts +25 -0
  12. package/dist/config/WizardFirstResponse.d.ts.map +1 -0
  13. package/dist/config/WizardFirstResponse.js +118 -0
  14. package/dist/elements/memories/Memory.d.ts +190 -0
  15. package/dist/elements/memories/Memory.d.ts.map +1 -0
  16. package/dist/elements/memories/Memory.js +627 -0
  17. package/dist/elements/memories/MemoryManager.d.ts +136 -0
  18. package/dist/elements/memories/MemoryManager.d.ts.map +1 -0
  19. package/dist/elements/memories/MemoryManager.js +607 -0
  20. package/dist/elements/memories/MemorySearchIndex.d.ts +156 -0
  21. package/dist/elements/memories/MemorySearchIndex.d.ts.map +1 -0
  22. package/dist/elements/memories/MemorySearchIndex.js +690 -0
  23. package/dist/elements/memories/constants.d.ts +95 -0
  24. package/dist/elements/memories/constants.d.ts.map +1 -0
  25. package/dist/elements/memories/constants.js +102 -0
  26. package/dist/elements/memories/index.d.ts +7 -0
  27. package/dist/elements/memories/index.d.ts.map +1 -0
  28. package/dist/elements/memories/index.js +7 -0
  29. package/dist/elements/memories/utils.d.ts +68 -0
  30. package/dist/elements/memories/utils.d.ts.map +1 -0
  31. package/dist/elements/memories/utils.js +137 -0
  32. package/dist/generated/version.d.ts +2 -2
  33. package/dist/generated/version.js +3 -3
  34. package/dist/scripts/scripts/run-config-wizard.js +57 -0
  35. package/dist/scripts/src/config/ConfigManager.js +799 -0
  36. package/dist/scripts/src/config/ConfigWizard.js +368 -0
  37. package/dist/scripts/src/errors/SecurityError.js +47 -0
  38. package/dist/scripts/src/security/constants.js +28 -0
  39. package/dist/scripts/src/security/contentValidator.js +415 -0
  40. package/dist/scripts/src/security/errors.js +32 -0
  41. package/dist/scripts/src/security/regexValidator.js +217 -0
  42. package/dist/scripts/src/security/secureYamlParser.js +272 -0
  43. package/dist/scripts/src/security/securityMonitor.js +111 -0
  44. package/dist/scripts/src/security/validators/unicodeValidator.js +315 -0
  45. package/dist/scripts/src/utils/logger.js +288 -0
  46. package/dist/security/audit/SecurityAuditor.d.ts.map +1 -1
  47. package/dist/security/audit/SecurityAuditor.js +24 -2
  48. package/dist/security/audit/config/suppressions.d.ts.map +1 -1
  49. package/dist/security/audit/config/suppressions.js +91 -1
  50. package/dist/security/securityMonitor.d.ts +1 -1
  51. package/dist/security/securityMonitor.d.ts.map +1 -1
  52. package/dist/security/securityMonitor.js +1 -1
  53. package/dist/tools/getWelcomeMessage.d.ts +41 -0
  54. package/dist/tools/getWelcomeMessage.d.ts.map +1 -0
  55. package/dist/tools/getWelcomeMessage.js +109 -0
  56. package/package.json +1 -1
@@ -0,0 +1,136 @@
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, MemoryMetadata } from './Memory.js';
13
+ import { IElementManager } from '../../types/elements/IElementManager.js';
14
+ import { ElementValidationResult } from '../../types/elements/IElement.js';
15
+ import { ElementType } from '../../portfolio/types.js';
16
+ export declare class MemoryManager implements IElementManager<Memory> {
17
+ private portfolioManager;
18
+ private memoriesDir;
19
+ private memoryCache;
20
+ private contentHashIndex;
21
+ private dateFoldersCache;
22
+ private dateFoldersCacheTimestamp;
23
+ constructor();
24
+ /**
25
+ * Load a memory from file
26
+ * SECURITY FIX #1: Uses FileLockManager.atomicReadFile() instead of fs.readFile()
27
+ * to prevent race conditions and ensure atomic file operations
28
+ * @param filePath Path to the memory file to load
29
+ * @returns Promise resolving to the loaded Memory instance
30
+ * @throws {Error} When file cannot be found or path validation fails
31
+ * @throws {Error} When YAML parsing fails or content is malformed
32
+ * @throws {Error} When memory validation fails after loading
33
+ */
34
+ load(filePath: string): Promise<Memory>;
35
+ /**
36
+ * Generate date-based path for memory storage
37
+ * Creates YYYY-MM-DD folder structure to prevent flat directory issues
38
+ * @param element Memory element to save
39
+ * @param fileName Optional custom filename
40
+ * @returns Full path to memory file
41
+ */
42
+ private generateMemoryPath;
43
+ /**
44
+ * Calculate SHA-256 hash of memory content for deduplication
45
+ * Implements Issue #994 - Content-based deduplication
46
+ */
47
+ private calculateContentHash;
48
+ /**
49
+ * Get all date folders in memories directory
50
+ * PERFORMANCE IMPROVEMENT: Uses cache to avoid repeated directory scanning
51
+ * Cache is invalidated when new folders are created or after 60 seconds
52
+ * @returns Array of date folder names
53
+ */
54
+ private getDateFolders;
55
+ /**
56
+ * Save a memory to file
57
+ * SECURITY FIX #1: Uses FileLockManager.atomicWriteFile() for atomic operations
58
+ * @param element Memory element to save
59
+ * @param filePath Optional custom file path, defaults to date-based path
60
+ * @returns Promise that resolves when save is complete
61
+ * @throws {Error} When memory validation fails before saving
62
+ * @throws {Error} When path validation fails or file system errors occur
63
+ * @throws {Error} When atomic write operation fails
64
+ */
65
+ save(element: Memory, filePath?: string): Promise<void>;
66
+ /**
67
+ * List all available memories
68
+ */
69
+ list(): Promise<Memory[]>;
70
+ /**
71
+ * Find memories matching a predicate
72
+ */
73
+ find(predicate: (element: Memory) => boolean): Promise<Memory | undefined>;
74
+ /**
75
+ * Find multiple memories matching a predicate
76
+ */
77
+ findMany(predicate: (element: Memory) => boolean): Promise<Memory[]>;
78
+ /**
79
+ * Delete a memory file
80
+ * SECURITY: Validates path and logs deletion
81
+ */
82
+ delete(filePath: string): Promise<void>;
83
+ /**
84
+ * Check if a memory file exists
85
+ */
86
+ exists(filePath: string): Promise<boolean>;
87
+ /**
88
+ * Create a new memory with metadata
89
+ */
90
+ create(metadata: Partial<MemoryMetadata>): Promise<Memory>;
91
+ /**
92
+ * Import a memory from JSON/YAML string
93
+ * SECURITY: Full validation of imported content
94
+ * @param data JSON or YAML string containing memory data
95
+ * @param format Format of the input data ('json' or 'yaml')
96
+ * @returns Promise resolving to the imported Memory instance
97
+ * @throws {Error} When JSON/YAML parsing fails
98
+ * @throws {Error} When imported data is missing required fields
99
+ * @throws {Error} When YAML content exceeds maximum allowed size
100
+ * @throws {Error} When imported memory fails validation
101
+ */
102
+ importElement(data: string, format?: 'json' | 'yaml'): Promise<Memory>;
103
+ /**
104
+ * Export a memory to YAML string
105
+ */
106
+ exportElement(element: Memory): Promise<string>;
107
+ /**
108
+ * Validate a memory element
109
+ */
110
+ validate(element: Memory): ElementValidationResult;
111
+ /**
112
+ * Validate and resolve a file path
113
+ * SECURITY: Prevents directory traversal attacks
114
+ */
115
+ validatePath(filePath: string): boolean;
116
+ /**
117
+ * Get the element type this manager handles
118
+ */
119
+ getElementType(): ElementType;
120
+ /**
121
+ * Get the file extension for memory files
122
+ */
123
+ getFileExtension(): string;
124
+ /**
125
+ * Validate and resolve a file path to prevent security issues
126
+ * @param filePath Path to validate and resolve
127
+ * @returns Promise resolving to the validated full path
128
+ * @throws {Error} When path contains traversal attempts (../)
129
+ * @throws {Error} When path is absolute or invalid
130
+ * @throws {Error} When file extension is not allowed (.md, .yaml, .yml)
131
+ * @throws {Error} When resolved path would be outside memories directory
132
+ */
133
+ private validateAndResolvePath;
134
+ private parseMemoryFile;
135
+ }
136
+ //# sourceMappingURL=MemoryManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryManager.d.ts","sourceRoot":"","sources":["../../../src/elements/memories/MemoryManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,EAAE,cAAc,EAAe,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAavD,qBAAa,aAAc,YAAW,eAAe,CAAC,MAAM,CAAC;IAC3D,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAkC;IACrD,OAAO,CAAC,gBAAgB,CAAkC;IAI1D,OAAO,CAAC,gBAAgB,CAAyB;IACjD,OAAO,CAAC,yBAAyB,CAAa;;IAO9C;;;;;;;;;OASG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6F7C;;;;;;OAMG;YACW,kBAAkB;IAyBhC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAQ5B;;;;;OAKG;YACW,cAAc;IAkC5B;;;;;;;;;OASG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0F7D;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IA4D/B;;OAEG;IACG,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAKhF;;OAEG;IACG,QAAQ,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAK1E;;;OAGG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B7C;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUhD;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAIhE;;;;;;;;;;OAUG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,GAAG,MAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IA0EpF;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBrD;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB;IAIlD;;;OAGG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAqBvC;;OAEG;IACH,cAAc,IAAI,WAAW;IAI7B;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAM1B;;;;;;;;OAQG;YACW,sBAAsB;IAgCpC,OAAO,CAAC,eAAe;CA0BxB"}