@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.
253 lines • 26.6 kB
JavaScript
/**
* Persona-related tool definitions and handlers
*/
export function getPersonaTools(server) {
return [
{
tool: {
name: "list_personas",
description: "List all available personas",
inputSchema: {
type: "object",
properties: {},
},
},
handler: () => server.listPersonas()
},
{
tool: {
name: "activate_persona",
description: "Activate a specific persona by name or filename",
inputSchema: {
type: "object",
properties: {
persona: {
type: "string",
description: "The persona name or filename to activate",
},
},
required: ["persona"],
},
},
handler: (args) => server.activatePersona(args.persona)
},
{
tool: {
name: "get_active_persona",
description: "Get information about the currently active persona",
inputSchema: {
type: "object",
properties: {},
},
},
handler: () => server.getActivePersona()
},
{
tool: {
name: "deactivate_persona",
description: "Deactivate the current persona",
inputSchema: {
type: "object",
properties: {},
},
},
handler: () => server.deactivatePersona()
},
{
tool: {
name: "get_persona_details",
description: "Get detailed information about a specific persona",
inputSchema: {
type: "object",
properties: {
persona: {
type: "string",
description: "The persona name or filename to get details for",
},
},
required: ["persona"],
},
},
handler: (args) => server.getPersonaDetails(args.persona)
},
{
tool: {
name: "reload_personas",
description: "Reload all personas from the personas directory",
inputSchema: {
type: "object",
properties: {},
},
},
handler: () => server.reloadPersonas()
},
{
tool: {
name: "create_persona",
description: "Create a new persona with guided assistance",
inputSchema: {
type: "object",
properties: {
name: {
type: "string",
description: "The display name for the persona",
},
description: {
type: "string",
description: "A brief description of the persona",
},
instructions: {
type: "string",
description: "The main instructions/prompt for the persona",
},
triggers: {
type: "string",
description: "Comma-separated list of trigger words (optional)",
},
},
required: ["name", "description", "instructions"],
},
},
handler: (args) => server.createPersona(args.name, args.description, args.instructions, args.triggers)
},
{
tool: {
name: "edit_persona",
description: "Edit an existing persona's properties",
inputSchema: {
type: "object",
properties: {
persona: {
type: "string",
description: "The persona name or filename to edit",
},
field: {
type: "string",
description: "Field to edit: name, description, instructions, triggers, category, version, or metadata fields",
},
value: {
type: "string",
description: "The new value for the field",
},
},
required: ["persona", "field", "value"],
},
},
handler: (args) => server.editPersona(args.persona, args.field, args.value)
},
{
tool: {
name: "validate_persona",
description: "Validate a persona's format and provide quality feedback",
inputSchema: {
type: "object",
properties: {
persona: {
type: "string",
description: "The persona name or filename to validate",
},
},
required: ["persona"],
},
},
handler: (args) => server.validatePersona(args.persona)
},
{
tool: {
name: "export_persona",
description: "Export a single persona to a JSON format",
inputSchema: {
type: "object",
properties: {
persona: {
type: "string",
description: "The persona name or filename to export",
},
},
required: ["persona"],
},
},
handler: (args) => server.exportPersona(args.persona)
},
{
tool: {
name: "export_all_personas",
description: "Export all personas to a JSON bundle",
inputSchema: {
type: "object",
properties: {
includeDefaults: {
type: "boolean",
description: "Include default personas in export (default: true)",
},
},
},
},
handler: (args) => server.exportAllPersonas(args.includeDefaults)
},
{
tool: {
name: "import_persona",
description: "Import a persona from a file path or JSON string",
inputSchema: {
type: "object",
properties: {
source: {
type: "string",
description: "File path to a .md or .json file, or a JSON string of the persona",
},
overwrite: {
type: "boolean",
description: "Overwrite if persona already exists (default: false)",
},
},
required: ["source"],
},
},
handler: (args) => server.importPersona(args.source, args.overwrite)
},
{
tool: {
name: "share_persona",
description: "Generate a shareable URL for a persona",
inputSchema: {
type: "object",
properties: {
persona: {
type: "string",
description: "The persona name or filename to share",
},
expiryDays: {
type: "number",
description: "Number of days the share link is valid (default: 7)",
},
},
required: ["persona"],
},
},
handler: (args) => server.sharePersona(args.persona, args.expiryDays)
},
{
tool: {
name: "import_from_url",
description: "Import a persona from a shared URL",
inputSchema: {
type: "object",
properties: {
url: {
type: "string",
description: "The shared URL to import from",
},
overwrite: {
type: "boolean",
description: "Overwrite if persona already exists (default: false)",
},
},
required: ["url"],
},
},
handler: (args) => server.importFromUrl(args.url, args.overwrite)
}
];
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYVRvb2xzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZlci90b29scy9QZXJzb25hVG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFLSCxNQUFNLFVBQVUsZUFBZSxDQUFDLE1BQW9CO0lBQ2xELE9BQU87UUFDTDtZQUNFLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsZUFBZTtnQkFDckIsV0FBVyxFQUFFLDZCQUE2QjtnQkFDMUMsV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRSxFQUFFO2lCQUNmO2FBQ0Y7WUFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRTtTQUNyQztRQUNEO1lBQ0UsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLFdBQVcsRUFBRSxpREFBaUQ7Z0JBQzlELFdBQVcsRUFBRTtvQkFDWCxJQUFJLEVBQUUsUUFBUTtvQkFDZCxVQUFVLEVBQUU7d0JBQ1YsT0FBTyxFQUFFOzRCQUNQLElBQUksRUFBRSxRQUFROzRCQUNkLFdBQVcsRUFBRSwwQ0FBMEM7eUJBQ3hEO3FCQUNGO29CQUNELFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQztpQkFDdEI7YUFDRjtZQUNELE9BQU8sRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQzdEO1FBQ0Q7WUFDRSxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLG9CQUFvQjtnQkFDMUIsV0FBVyxFQUFFLG9EQUFvRDtnQkFDakUsV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRSxFQUFFO2lCQUNmO2FBQ0Y7WUFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFO1NBQ3pDO1FBQ0Q7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LEVBQUU7Z0JBQ0osSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsV0FBVyxFQUFFLG9DQUFvQztnQkFDakQsV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixHQUFHLEVBQUU7NEJBQ0gsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLCtCQUErQjt5QkFDN0M7d0JBQ0QsU0FBUyxFQUFFOzRCQUNULElBQUksRUFBRSxTQUFTOzRCQUNmLFdBQVcsRUFBRSxzREFBc0Q7eUJBQ3BFO3FCQUNGO29CQUNELFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQztpQkFDbEI7YUFDRjtZQUNELE9BQU8sRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDdkU7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGVyc29uYS1yZWxhdGVkIHRvb2wgZGVmaW5pdGlvbnMgYW5kIGhhbmRsZXJzXG4gKi9cblxuaW1wb3J0IHsgVG9vbERlZmluaXRpb24gfSBmcm9tICcuL1Rvb2xSZWdpc3RyeS5qcyc7XG5pbXBvcnQgeyBJVG9vbEhhbmRsZXIgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQZXJzb25hVG9vbHMoc2VydmVyOiBJVG9vbEhhbmRsZXIpOiBBcnJheTx7IHRvb2w6IFRvb2xEZWZpbml0aW9uOyBoYW5kbGVyOiBhbnkgfT4ge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJsaXN0X3BlcnNvbmFzXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkxpc3QgYWxsIGF2YWlsYWJsZSBwZXJzb25hc1wiLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogKCkgPT4gc2VydmVyLmxpc3RQZXJzb25hcygpXG4gICAgfSxcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwiYWN0aXZhdGVfcGVyc29uYVwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJBY3RpdmF0ZSBhIHNwZWNpZmljIHBlcnNvbmEgYnkgbmFtZSBvciBmaWxlbmFtZVwiLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgcGVyc29uYToge1xuICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJUaGUgcGVyc29uYSBuYW1lIG9yIGZpbGVuYW1lIHRvIGFjdGl2YXRlXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFtcInBlcnNvbmFcIl0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogKGFyZ3M6IGFueSkgPT4gc2VydmVyLmFjdGl2YXRlUGVyc29uYShhcmdzLnBlcnNvbmEpXG4gICAgfSxcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwiZ2V0X2FjdGl2ZV9wZXJzb25hXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudGx5IGFjdGl2ZSBwZXJzb25hXCIsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7fSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiAoKSA9PiBzZXJ2ZXIuZ2V0QWN0aXZlUGVyc29uYSgpXG4gICAgfSxcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwiZGVhY3RpdmF0ZV9wZXJzb25hXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkRlYWN0aXZhdGUgdGhlIGN1cnJlbnQgcGVyc29uYVwiLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogKCkgPT4gc2VydmVyLmRlYWN0aXZhdGVQZXJzb25hKClcbiAgICB9LFxuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJnZXRfcGVyc29uYV9kZXRhaWxzXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkdldCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBhIHNwZWNpZmljIHBlcnNvbmFcIixcbiAgICAgICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHBlcnNvbmE6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiVGhlIHBlcnNvbmEgbmFtZSBvciBmaWxlbmFtZSB0byBnZXQgZGV0YWlscyBmb3JcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogW1wicGVyc29uYVwiXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiAoYXJnczogYW55KSA9PiBzZXJ2ZXIuZ2V0UGVyc29uYURldGFpbHMoYXJncy5wZXJzb25hKVxuICAgIH0sXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcInJlbG9hZF9wZXJzb25hc1wiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJSZWxvYWQgYWxsIHBlcnNvbmFzIGZyb20gdGhlIHBlcnNvbmFzIGRpcmVjdG9yeVwiLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgcHJvcGVydGllczoge30sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogKCkgPT4gc2VydmVyLnJlbG9hZFBlcnNvbmFzKClcbiAgICB9LFxuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJjcmVhdGVfcGVyc29uYVwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJDcmVhdGUgYSBuZXcgcGVyc29uYSB3aXRoIGd1aWRlZCBhc3Npc3RhbmNlXCIsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBuYW1lOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBkaXNwbGF5IG5hbWUgZm9yIHRoZSBwZXJzb25hXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiQSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgcGVyc29uYVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluc3RydWN0aW9uczoge1xuICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbWFpbiBpbnN0cnVjdGlvbnMvcHJvbXB0IGZvciB0aGUgcGVyc29uYVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRyaWdnZXJzOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHRyaWdnZXIgd29yZHMgKG9wdGlvbmFsKVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbXCJuYW1lXCIsIFwiZGVzY3JpcHRpb25cIiwgXCJpbnN0cnVjdGlvbnNcIl0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogKGFyZ3M6IGFueSkgPT4gc2VydmVyLmNyZWF0ZVBlcnNvbmEoXG4gICAgICAgIGFyZ3MubmFtZSxcbiAgICAgICAgYXJncy5kZXNjcmlwdGlvbixcbiAgICAgICAgYXJncy5pbnN0cnVjdGlvbnMsXG4gICAgICAgIGFyZ3MudHJpZ2dlcnNcbiAgICAgIClcbiAgICB9LFxuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJlZGl0X3BlcnNvbmFcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiRWRpdCBhbiBleGlzdGluZyBwZXJzb25hJ3MgcHJvcGVydGllc1wiLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgcGVyc29uYToge1xuICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJUaGUgcGVyc29uYSBuYW1lIG9yIGZpbGVuYW1lIHRvIGVkaXRcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaWVsZDoge1xuICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJGaWVsZCB0byBlZGl0OiBuYW1lLCBkZXNjcmlwdGlvbiwgaW5zdHJ1Y3Rpb25zLCB0cmlnZ2VycywgY2F0ZWdvcnksIHZlcnNpb24sIG9yIG1ldGFkYXRhIGZpZWxkc1wiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuZXcgdmFsdWUgZm9yIHRoZSBmaWVsZFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbXCJwZXJzb25hXCIsIFwiZmllbGRcIiwgXCJ2YWx1ZVwiXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiAoYXJnczogYW55KSA9PiBzZXJ2ZXIuZWRpdFBlcnNvbmEoYXJncy5wZXJzb25hLCBhcmdzLmZpZWxkLCBhcmdzLnZhbHVlKVxuICAgIH0sXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcInZhbGlkYXRlX3BlcnNvbmFcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiVmFsaWRhdGUgYSBwZXJzb25hJ3MgZm9ybWF0IGFuZCBwcm92aWRlIHF1YWxpdHkgZmVlZGJhY2tcIixcbiAgICAgICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHBlcnNvbmE6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiVGhlIHBlcnNvbmEgbmFtZSBvciBmaWxlbmFtZSB0byB2YWxpZGF0ZVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbXCJwZXJzb25hXCJdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IChhcmdzOiBhbnkpID0+IHNlcnZlci52YWxpZGF0ZVBlcnNvbmEoYXJncy5wZXJzb25hKVxuICAgIH0sXG4gICAge1xuICAgICAgdG9vbDoge1xuICAgICAgICBuYW1lOiBcImV4cG9ydF9wZXJzb25hXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkV4cG9ydCBhIHNpbmdsZSBwZXJzb25hIHRvIGEgSlNPTiBmb3JtYXRcIixcbiAgICAgICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHBlcnNvbmE6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiVGhlIHBlcnNvbmEgbmFtZSBvciBmaWxlbmFtZSB0byBleHBvcnRcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogW1wicGVyc29uYVwiXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiAoYXJnczogYW55KSA9PiBzZXJ2ZXIuZXhwb3J0UGVyc29uYShhcmdzLnBlcnNvbmEpXG4gICAgfSxcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwiZXhwb3J0X2FsbF9wZXJzb25hc1wiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJFeHBvcnQgYWxsIHBlcnNvbmFzIHRvIGEgSlNPTiBidW5kbGVcIixcbiAgICAgICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGluY2x1ZGVEZWZhdWx0czoge1xuICAgICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiSW5jbHVkZSBkZWZhdWx0IHBlcnNvbmFzIGluIGV4cG9ydCAoZGVmYXVsdDogdHJ1ZSlcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiAoYXJnczogYW55KSA9PiBzZXJ2ZXIuZXhwb3J0QWxsUGVyc29uYXMoYXJncy5pbmNsdWRlRGVmYXVsdHMpXG4gICAgfSxcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwiaW1wb3J0X3BlcnNvbmFcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiSW1wb3J0IGEgcGVyc29uYSBmcm9tIGEgZmlsZSBwYXRoIG9yIEpTT04gc3RyaW5nXCIsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBzb3VyY2U6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRmlsZSBwYXRoIHRvIGEgLm1kIG9yIC5qc29uIGZpbGUsIG9yIGEgSlNPTiBzdHJpbmcgb2YgdGhlIHBlcnNvbmFcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvdmVyd3JpdGU6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk92ZXJ3cml0ZSBpZiBwZXJzb25hIGFscmVhZHkgZXhpc3RzIChkZWZhdWx0OiBmYWxzZSlcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogW1wic291cmNlXCJdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IChhcmdzOiBhbnkpID0+IHNlcnZlci5pbXBvcnRQZXJzb25hKGFyZ3Muc291cmNlLCBhcmdzLm92ZXJ3cml0ZSlcbiAgICB9LFxuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJzaGFyZV9wZXJzb25hXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkdlbmVyYXRlIGEgc2hhcmVhYmxlIFVSTCBmb3IgYSBwZXJzb25hXCIsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBwZXJzb25hOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBwZXJzb25hIG5hbWUgb3IgZmlsZW5hbWUgdG8gc2hhcmVcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHBpcnlEYXlzOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIk51bWJlciBvZiBkYXlzIHRoZSBzaGFyZSBsaW5rIGlzIHZhbGlkIChkZWZhdWx0OiA3KVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbXCJwZXJzb25hXCJdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IChhcmdzOiBhbnkpID0+IHNlcnZlci5zaGFyZVBlcnNvbmEoYXJncy5wZXJzb25hLCBhcmdzLmV4cGlyeURheXMpXG4gICAgfSxcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwiaW1wb3J0X2Zyb21fdXJsXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkltcG9ydCBhIHBlcnNvbmEgZnJvbSBhIHNoYXJlZCBVUkxcIixcbiAgICAgICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHVybDoge1xuICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJUaGUgc2hhcmVkIFVSTCB0byBpbXBvcnQgZnJvbVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG92ZXJ3cml0ZToge1xuICAgICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiT3ZlcndyaXRlIGlmIHBlcnNvbmEgYWxyZWFkeSBleGlzdHMgKGRlZmF1bHQ6IGZhbHNlKVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbXCJ1cmxcIl0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogKGFyZ3M6IGFueSkgPT4gc2VydmVyLmltcG9ydEZyb21VcmwoYXJncy51cmwsIGFyZ3Mub3ZlcndyaXRlKVxuICAgIH1cbiAgXTtcbn0iXX0=