@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.
75 lines • 11 kB
JavaScript
/**
* ElementValidator - Interface for element-type specific validators
*
* Defines the contract for all element validators in the ValidationRegistry.
* Each element type can have its own validator implementation that provides
* specialized validation logic while conforming to this common interface.
*
* @example
* ```typescript
* const validator = validationRegistry.getValidator(ElementType.PERSONA);
* const result = await validator.validateCreate(personaData);
* if (!result.isValid) {
* throw new Error(result.errors.join(', '));
* }
* ```
*/
/**
* Base implementation helpers for validators
*/
export const ValidatorHelpers = {
/**
* Create a passing validation result
*/
pass(suggestions) {
return {
isValid: true,
errors: [],
warnings: [],
suggestions
};
},
/**
* Create a failing validation result
*/
fail(errors, warnings) {
return {
isValid: false,
errors,
warnings: warnings || []
};
},
/**
* Create a result with warnings but still valid
*/
warn(warnings, suggestions) {
return {
isValid: true,
errors: [],
warnings,
suggestions
};
},
/**
* Merge multiple validation results
*/
merge(...results) {
const errors = [];
const warnings = [];
const suggestions = [];
for (const result of results) {
errors.push(...result.errors);
warnings.push(...result.warnings);
if (result.suggestions) {
suggestions.push(...result.suggestions);
}
}
return {
isValid: errors.length === 0,
errors,
warnings,
suggestions: suggestions.length > 0 ? suggestions : undefined
};
}
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWxlbWVudFZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy92YWxpZGF0aW9uL0VsZW1lbnRWYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBOEhIOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUc7SUFDOUI7O09BRUc7SUFDSCxJQUFJLENBQUMsV0FBc0I7UUFDekIsT0FBTztZQUNMLE9BQU8sRUFBRSxJQUFJO1lBQ2IsTUFBTSxFQUFFLEVBQUU7WUFDVixRQUFRLEVBQUUsRUFBRTtZQUNaLFdBQVc7U0FDWixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxDQUFDLE1BQWdCLEVBQUUsUUFBbUI7UUFDeEMsT0FBTztZQUNMLE9BQU8sRUFBRSxLQUFLO1lBQ2QsTUFBTTtZQUNOLFFBQVEsRUFBRSxRQUFRLElBQUksRUFBRTtTQUN6QixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxDQUFDLFFBQWtCLEVBQUUsV0FBc0I7UUFDN0MsT0FBTztZQUNMLE9BQU8sRUFBRSxJQUFJO1lBQ2IsTUFBTSxFQUFFLEVBQUU7WUFDVixRQUFRO1lBQ1IsV0FBVztTQUNaLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsR0FBRyxPQUEyQjtRQUNsQyxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFDNUIsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO1FBQzlCLE1BQU0sV0FBVyxHQUFhLEVBQUUsQ0FBQztRQUVqQyxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsQyxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDdkIsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU87WUFDTCxPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQzVCLE1BQU07WUFDTixRQUFRO1lBQ1IsV0FBVyxFQUFFLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDOUQsQ0FBQztJQUNKLENBQUM7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbGVtZW50VmFsaWRhdG9yIC0gSW50ZXJmYWNlIGZvciBlbGVtZW50LXR5cGUgc3BlY2lmaWMgdmFsaWRhdG9yc1xuICpcbiAqIERlZmluZXMgdGhlIGNvbnRyYWN0IGZvciBhbGwgZWxlbWVudCB2YWxpZGF0b3JzIGluIHRoZSBWYWxpZGF0aW9uUmVnaXN0cnkuXG4gKiBFYWNoIGVsZW1lbnQgdHlwZSBjYW4gaGF2ZSBpdHMgb3duIHZhbGlkYXRvciBpbXBsZW1lbnRhdGlvbiB0aGF0IHByb3ZpZGVzXG4gKiBzcGVjaWFsaXplZCB2YWxpZGF0aW9uIGxvZ2ljIHdoaWxlIGNvbmZvcm1pbmcgdG8gdGhpcyBjb21tb24gaW50ZXJmYWNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB2YWxpZGF0b3IgPSB2YWxpZGF0aW9uUmVnaXN0cnkuZ2V0VmFsaWRhdG9yKEVsZW1lbnRUeXBlLlBFUlNPTkEpO1xuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgdmFsaWRhdG9yLnZhbGlkYXRlQ3JlYXRlKHBlcnNvbmFEYXRhKTtcbiAqIGlmICghcmVzdWx0LmlzVmFsaWQpIHtcbiAqICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5lcnJvcnMuam9pbignLCAnKSk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4uLy4uL3BvcnRmb2xpby90eXBlcy5qcyc7XG5cbi8qKlxuICogUmVzdWx0IG9mIGEgdmFsaWRhdGlvbiBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgLyoqIFdoZXRoZXIgdGhlIHZhbGlkYXRpb24gcGFzc2VkICovXG4gIGlzVmFsaWQ6IGJvb2xlYW47XG4gIC8qKiBMaXN0IG9mIHZhbGlkYXRpb24gZXJyb3JzIChpZiBhbnkpICovXG4gIGVycm9yczogc3RyaW5nW107XG4gIC8qKiBMaXN0IG9mIHZhbGlkYXRpb24gd2FybmluZ3MgKG5vbi1mYXRhbCBpc3N1ZXMpICovXG4gIHdhcm5pbmdzOiBzdHJpbmdbXTtcbiAgLyoqIFN1Z2dlc3Rpb25zIGZvciBpbXByb3ZlbWVudCAob3B0aW9uYWwpICovXG4gIHN1Z2dlc3Rpb25zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogRGV0YWlsZWQgdmFsaWRhdGlvbiByZXBvcnQgZm9yIGFuIGVsZW1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uUmVwb3J0IHtcbiAgLyoqIE92ZXJhbGwgc3RhdHVzIG9mIHZhbGlkYXRpb24gKi9cbiAgc3RhdHVzOiAncGFzcycgfCAnZmFpbCcgfCAnd2FybmluZyc7XG4gIC8qKiBTdW1tYXJ5IGRlc2NyaXB0aW9uIG9mIHZhbGlkYXRpb24gcmVzdWx0ICovXG4gIHN1bW1hcnk6IHN0cmluZztcbiAgLyoqIERldGFpbGVkIHZhbGlkYXRpb24gZmluZGluZ3MgKi9cbiAgZGV0YWlsczogc3RyaW5nW107XG4gIC8qKiBXaGVuIHRoZSB2YWxpZGF0aW9uIHdhcyBwZXJmb3JtZWQgKi9cbiAgdGltZXN0YW1wOiBEYXRlO1xuICAvKiogT3B0aW9uYWwgZWxlbWVudC1zcGVjaWZpYyBtZXRyaWNzICovXG4gIG1ldHJpY3M/OiB7XG4gICAgLyoqIENvbnRlbnQgbGVuZ3RoIGluIGNoYXJhY3RlcnMgKi9cbiAgICBjb250ZW50TGVuZ3RoPzogbnVtYmVyO1xuICAgIC8qKiBOdW1iZXIgb2YgdHJpZ2dlcnMgZGVmaW5lZCAqL1xuICAgIHRyaWdnZXJDb3VudD86IG51bWJlcjtcbiAgICAvKiogRXN0aW1hdGVkIHF1YWxpdHkgc2NvcmUgKDAtMTAwKSAqL1xuICAgIHF1YWxpdHlTY29yZT86IG51bWJlcjtcbiAgfTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBlbGVtZW50IHZhbGlkYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50VmFsaWRhdGlvbk9wdGlvbnMge1xuICAvKiogV2hldGhlciB0byBwZXJmb3JtIHN0cmljdCB2YWxpZGF0aW9uIChkZWZhdWx0OiBmYWxzZSkgKi9cbiAgc3RyaWN0PzogYm9vbGVhbjtcbiAgLyoqIFNraXAgY29udGVudCB2YWxpZGF0aW9uIChmb3IgcGVyZm9ybWFuY2UpICovXG4gIHNraXBDb250ZW50VmFsaWRhdGlvbj86IGJvb2xlYW47XG4gIC8qKiBNYXhpbXVtIGNvbnRlbnQgbGVuZ3RoIHRvIHZhbGlkYXRlICovXG4gIG1heENvbnRlbnRMZW5ndGg/OiBudW1iZXI7XG4gIC8qKiBDb250ZXh0IGZvciB2YWxpZGF0aW9uIChlLmcuLCAnY3JlYXRlJywgJ2VkaXQnLCAnaW1wb3J0JykgKi9cbiAgY29udGV4dD86ICdjcmVhdGUnIHwgJ2VkaXQnIHwgJ2ltcG9ydCcgfCAndmFsaWRhdGUnO1xufVxuXG4vKipcbiAqIE1ldGFkYXRhIHZhbGlkYXRpb24gb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFkYXRhVmFsaWRhdGlvbk9wdGlvbnMge1xuICAvKiogRmllbGRzIHRoYXQgYXJlIHJlcXVpcmVkICovXG4gIHJlcXVpcmVkRmllbGRzPzogc3RyaW5nW107XG4gIC8qKiBGaWVsZHMgdGhhdCBzaG91bGQgYmUgdmFsaWRhdGVkIGZvciBmb3JtYXQgKi9cbiAgZm9ybWF0RmllbGRzPzogUmVjb3JkPHN0cmluZywgUmVnRXhwPjtcbiAgLyoqIE1heGltdW0gbGVuZ3RocyBmb3Igc3RyaW5nIGZpZWxkcyAqL1xuICBtYXhMZW5ndGhzPzogUmVjb3JkPHN0cmluZywgbnVtYmVyPjtcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGVsZW1lbnQtdHlwZSBzcGVjaWZpYyB2YWxpZGF0b3JzXG4gKlxuICogRWFjaCBlbGVtZW50IHR5cGUgKHBlcnNvbmEsIHNraWxsLCB0ZW1wbGF0ZSwgZXRjLikgY2FuIGhhdmUgaXRzIG93blxuICogdmFsaWRhdG9yIGltcGxlbWVudGF0aW9uIHRoYXQgcHJvdmlkZXMgc3BlY2lhbGl6ZWQgdmFsaWRhdGlvbiBsb2dpYy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50VmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHR5cGUgdGhpcyB2YWxpZGF0b3IgaGFuZGxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlO1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBkYXRhIGZvciBlbGVtZW50IGNyZWF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIC0gUmF3IGRhdGEgZm9yIGNyZWF0aW5nIGFuIGVsZW1lbnRcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBWYWxpZGF0aW9uIG9wdGlvbnNcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdmFsaWRhdGlvbiByZXN1bHRcbiAgICovXG4gIHZhbGlkYXRlQ3JlYXRlKFxuICAgIGRhdGE6IHVua25vd24sXG4gICAgb3B0aW9ucz86IEVsZW1lbnRWYWxpZGF0aW9uT3B0aW9uc1xuICApOiBQcm9taXNlPFZhbGlkYXRpb25SZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBjaGFuZ2VzIHRvIGFuIGV4aXN0aW5nIGVsZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZXhpc3RpbmcgZWxlbWVudFxuICAgKiBAcGFyYW0gY2hhbmdlcyAtIFByb3Bvc2VkIGNoYW5nZXMgdG8gdGhlIGVsZW1lbnRcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBWYWxpZGF0aW9uIG9wdGlvbnNcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdmFsaWRhdGlvbiByZXN1bHRcbiAgICovXG4gIHZhbGlkYXRlRWRpdChcbiAgICBlbGVtZW50OiB1bmtub3duLFxuICAgIGNoYW5nZXM6IHVua25vd24sXG4gICAgb3B0aW9ucz86IEVsZW1lbnRWYWxpZGF0aW9uT3B0aW9uc1xuICApOiBQcm9taXNlPFZhbGlkYXRpb25SZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBlbGVtZW50IG1ldGFkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBtZXRhZGF0YSAtIEVsZW1lbnQgbWV0YWRhdGEgdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBNZXRhZGF0YSB2YWxpZGF0aW9uIG9wdGlvbnNcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdmFsaWRhdGlvbiByZXN1bHRcbiAgICovXG4gIHZhbGlkYXRlTWV0YWRhdGEoXG4gICAgbWV0YWRhdGE6IHVua25vd24sXG4gICAgb3B0aW9ucz86IE1ldGFkYXRhVmFsaWRhdGlvbk9wdGlvbnNcbiAgKTogUHJvbWlzZTxWYWxpZGF0aW9uUmVzdWx0PjtcblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBjb21wcmVoZW5zaXZlIHZhbGlkYXRpb24gcmVwb3J0IGZvciBhbiBlbGVtZW50XG4gICAqXG4gICAqIEBwYXJhbSBlbGVtZW50IC0gRWxlbWVudCB0byBnZW5lcmF0ZSByZXBvcnQgZm9yXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHZhbGlkYXRpb24gcmVwb3J0XG4gICAqL1xuICBnZW5lcmF0ZVJlcG9ydChlbGVtZW50OiB1bmtub3duKTogUHJvbWlzZTxWYWxpZGF0aW9uUmVwb3J0Pjtcbn1cblxuLyoqXG4gKiBCYXNlIGltcGxlbWVudGF0aW9uIGhlbHBlcnMgZm9yIHZhbGlkYXRvcnNcbiAqL1xuZXhwb3J0IGNvbnN0IFZhbGlkYXRvckhlbHBlcnMgPSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBwYXNzaW5nIHZhbGlkYXRpb24gcmVzdWx0XG4gICAqL1xuICBwYXNzKHN1Z2dlc3Rpb25zPzogc3RyaW5nW10pOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDogdHJ1ZSxcbiAgICAgIGVycm9yczogW10sXG4gICAgICB3YXJuaW5nczogW10sXG4gICAgICBzdWdnZXN0aW9uc1xuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGZhaWxpbmcgdmFsaWRhdGlvbiByZXN1bHRcbiAgICovXG4gIGZhaWwoZXJyb3JzOiBzdHJpbmdbXSwgd2FybmluZ3M/OiBzdHJpbmdbXSk6IFZhbGlkYXRpb25SZXN1bHQge1xuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgIGVycm9ycyxcbiAgICAgIHdhcm5pbmdzOiB3YXJuaW5ncyB8fCBbXVxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJlc3VsdCB3aXRoIHdhcm5pbmdzIGJ1dCBzdGlsbCB2YWxpZFxuICAgKi9cbiAgd2Fybih3YXJuaW5nczogc3RyaW5nW10sIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10pOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDogdHJ1ZSxcbiAgICAgIGVycm9yczogW10sXG4gICAgICB3YXJuaW5ncyxcbiAgICAgIHN1Z2dlc3Rpb25zXG4gICAgfTtcbiAgfSxcblxuICAvKipcbiAgICogTWVyZ2UgbXVsdGlwbGUgdmFsaWRhdGlvbiByZXN1bHRzXG4gICAqL1xuICBtZXJnZSguLi5yZXN1bHRzOiBWYWxpZGF0aW9uUmVzdWx0W10pOiBWYWxpZGF0aW9uUmVzdWx0IHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3Qgc3VnZ2VzdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICBlcnJvcnMucHVzaCguLi5yZXN1bHQuZXJyb3JzKTtcbiAgICAgIHdhcm5pbmdzLnB1c2goLi4ucmVzdWx0Lndhcm5pbmdzKTtcbiAgICAgIGlmIChyZXN1bHQuc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgc3VnZ2VzdGlvbnMucHVzaCguLi5yZXN1bHQuc3VnZ2VzdGlvbnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiBlcnJvcnMubGVuZ3RoID09PSAwLFxuICAgICAgZXJyb3JzLFxuICAgICAgd2FybmluZ3MsXG4gICAgICBzdWdnZXN0aW9uczogc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IHN1Z2dlc3Rpb25zIDogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxufTtcbiJdfQ==