Skip to main content
Glama

DollhouseMCP

by DollhouseMCP
ELEMENT_SYSTEM_QUICK_REFERENCE.md5.95 kB
# Element System Quick Reference ## 🚀 What We Built (July 20, 2025) Complete abstract element interface system with 53 tests, security hardening, and natural language feedback processing. ## 🏗️ Core Architecture ### Element Types Supported ```typescript enum ElementType { PERSONA = 'personas', // ✅ Legacy (ready for refactoring) SKILL = 'skills', // 🔄 Next to implement TEMPLATE = 'templates', // 📋 Planned ENSEMBLE = 'ensembles', // 📋 Planned AGENT = 'agents', // 📋 Planned MEMORY = 'memories' // 📋 Planned } ``` ### Universal Interface Every element implements: ```typescript interface IElement { id: string; // Format: type_name-slug_timestamp type: ElementType; version: string; metadata: IElementMetadata; references?: Reference[]; extensions?: Record<string, any>; ratings?: ElementRatings; validate(): ElementValidationResult; serialize(): string; deserialize(data: string): void; receiveFeedback?(feedback: string): void; } ``` ## 🎯 Key Patterns ### Creating New Elements ```typescript class MySkill extends BaseElement { constructor() { super(ElementType.SKILL, { name: 'Code Review', description: 'Analyzes code quality' }); } } ``` ### Feedback Processing ```typescript element.receiveFeedback("This is excellent! 5 stars!"); // ✅ Automatically extracts sentiment, rating, suggestions // ✅ Unicode normalized for security // ✅ Audit logged for monitoring ``` ### Validation Pattern ```typescript public validate(): ElementValidationResult { const result = super.validate(); // ✅ Security built-in // Add element-specific rules return result; } ``` ## 🔒 Security Features Built-In ### Unicode Attack Prevention - **Where**: All user input (feedback, deserialization) - **Prevents**: Homograph attacks, direction override, mixed scripts - **Implementation**: UnicodeValidator.normalize() automatic ### Audit Logging - **Where**: All security operations - **Covers**: Validation, feedback processing, path traversal - **Implementation**: SecurityMonitor.logSecurityEvent() automatic ### Memory Protection - **Feedback History**: Limited to 100 entries (MAX_FEEDBACK_HISTORY) - **Input Length**: Limited to 5000 chars (MAX_FEEDBACK_LENGTH) - **Path Validation**: Built into PortfolioManager ## 📊 Rating System ### Dual Rating Approach ```typescript interface ElementRatings { aiRating: number; // 0-5 AI evaluation userRating?: number; // 0-5 user feedback ratingCount: number; confidence: number; // 0-1 trend: 'improving' | 'declining' | 'stable'; feedbackHistory?: UserFeedback[]; } ``` ### Natural Language Processing - **Sentiment**: positive/negative/neutral + confidence - **Rating Inference**: "5 stars!" → rating: 5 - **Suggestions**: "should be faster" → extracted automatically - **Entities**: Features, issues, topics mentioned ## 🗂️ File Structure ### Core Implementation ``` src/ ├── types/elements/ │ ├── IElement.ts # ✅ Universal interface │ ├── IElementManager.ts # ✅ CRUD patterns │ ├── IRatingManager.ts # ✅ Rating system │ └── IReferenceResolver.ts # ✅ Reference system ├── elements/ │ ├── BaseElement.ts # ✅ Abstract foundation │ ├── FeedbackProcessor.ts # ✅ NLP processing │ └── [future element types]/ └── portfolio/ └── types.ts # ✅ Element types enum ``` ### Test Coverage ``` test/__tests__/unit/elements/ ├── BaseElement.test.ts # ✅ 25 tests └── FeedbackProcessor.test.ts # ✅ 28 tests ``` ## 🛠️ Next Implementation Steps ### 1. PersonaInstaller Update (Issue #317) ```typescript // Before const personasDir = path.join(homedir(), '.dollhouse', 'personas'); // After const portfolioManager = PortfolioManager.getInstance(); const personasDir = portfolioManager.getElementDir(ElementType.PERSONA); ``` ### 2. Persona Refactoring (Issue #318) ```typescript export class Persona extends BaseElement implements IElement { constructor(metadata: Partial<PersonaMetadata>, content: string) { super(ElementType.PERSONA, metadata); this.content = content; } } ``` ### 3. Skills Implementation (Next New Type) ```typescript export class Skill extends BaseElement implements IElement { constructor(metadata: Partial<SkillMetadata>) { super(ElementType.SKILL, metadata); this.extensions = { languages: metadata.languages || [], complexity: metadata.complexity || 'beginner' }; } } ``` ## 🎯 Success Patterns ### ✅ What Works - Extend BaseElement for all new types - Use PortfolioManager for all paths - Include comprehensive validation - Follow established test patterns - Leverage built-in security features ### ❌ What to Avoid - Don't skip validation in new elements - Don't hardcode paths (use PortfolioManager) - Don't forget security features (built-in) - Don't break existing persona functionality ## 📋 Quick Commands ### Run Element Tests ```bash npm test -- test/__tests__/unit/elements/ --no-coverage ``` ### Check All Tests ```bash npm test --no-coverage ``` ### Build System ```bash npm run build ``` ## 🔄 Current Status - **✅ Foundation Complete**: Abstract interface system ready - **✅ Security Hardened**: Unicode + audit logging implemented - **✅ Test Coverage**: 53 comprehensive tests passing - **✅ Patterns Established**: Clear examples for future development - **🔄 Ready for Implementation**: PersonaInstaller + Persona refactoring next ## 🎉 Achievement Unlocked **Element System Foundation** - Production-ready architecture for all future element types with comprehensive security, testing, and extensibility built-in! --- *Reference this for quick implementation guidance when building new element types.*

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DollhouseMCP/DollhouseMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server