UNPKG

@dollhousemcp/mcp-server

Version:

DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.

125 lines 4.47 kB
/** * Base abstract class implementing IElement interface. * Provides common functionality that all element types can extend. */ import { IElement, IElementMetadata, ElementStatus, ElementRatings, Reference, ElementValidationResult, FeedbackContext } from '../types/elements/index.js'; import { ElementType } from '../portfolio/types.js'; import { MetadataService } from '../services/MetadataService.js'; /** * Normalizes version strings to full semver format (X.Y.Z) * This helps maintain consistency while accepting flexible input formats * * @param version - The version string to normalize * @returns Normalized version string in X.Y.Z format with leading zeros removed * * @example * normalizeVersion("1") // "1.0.0" * normalizeVersion("1.2") // "1.2.0" * normalizeVersion("1.2.3") // "1.2.3" * normalizeVersion("1.0-beta") // "1.0.0-beta" * normalizeVersion("01.02.03") // "1.2.3" (strips leading zeros) */ export declare function normalizeVersion(version: string): string; export declare abstract class BaseElement implements IElement { private static readonly TRANSIENT_METADATA_FIELDS; id: string; type: ElementType; version: string; metadata: IElementMetadata; protected _instructions: string; protected _content: string; get instructions(): string; set instructions(value: string); get content(): string; set content(value: string); references?: Reference[]; extensions?: Record<string, any>; ratings?: ElementRatings; protected _status: ElementStatus; protected _isDirty: boolean; private readonly MAX_FEEDBACK_HISTORY; constructor(type: ElementType, metadata: Partial<IElementMetadata> | undefined, metadataService: MetadataService); /** * Generate a unique ID for the element based on its name and type. * Format: type_name-slug_timestamp */ protected generateId(name: string): string; /** * Core validation that all elements share. * Subclasses should override and call super.validate() first. */ validate(): ElementValidationResult; /** * Serialize to JSON format for internal use and testing. * Maintains backward compatibility with existing tests. */ serializeToJSON(): string; /** * Default serialization to markdown with YAML frontmatter. * Uses js-yaml for secure YAML generation to prevent injection attacks. * FIX: Changed from JSON to proper markdown format for GitHub portfolio storage. * This ensures elements are readable on GitHub and compatible with collection workflow. */ serialize(): string; /** * Get element content for serialization. * Subclasses should override this to provide their specific content. */ protected getContent?(): string; /** * Recursively remove undefined and null values from an object. * This ensures YAML serialization doesn't fail on undefined values. */ private deepCleanObject; /** * Default deserialization from JSON. * Subclasses can override for custom formats. */ deserialize(data: string): void; /** * Process user feedback and update ratings. */ receiveFeedback(feedback: string, context?: FeedbackContext): void; /** * Simple sentiment analysis. * Subclasses can override for more sophisticated analysis. */ protected analyzeSentiment(feedback: string): 'positive' | 'negative' | 'neutral'; /** * Simple rating inference from feedback. * Subclasses can override for more sophisticated inference. */ protected inferRating(feedback: string): number | undefined; /** * Update user rating with a new value. */ protected updateUserRating(newRating: number): void; /** * Get current element status. */ getStatus(): ElementStatus; /** * Status property getter for convenient access. */ get status(): ElementStatus; /** * Default lifecycle methods - subclasses should override as needed. */ beforeActivate(): Promise<void>; activate(): Promise<void>; afterActivate(): Promise<void>; deactivate(): Promise<void>; /** * Mark element as modified. */ protected markDirty(): void; /** * Check if element has unsaved changes. */ isDirty(): boolean; /** * Mark element as saved. */ markClean(): void; } //# sourceMappingURL=BaseElement.d.ts.map