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.

110 lines 16.4 kB
/** * Configuration and sync tool definitions for unified management */ export function getConfigToolsV2(server) { return [ { tool: { name: "dollhouse_config", description: "Manage DollhouseMCP configuration settings. Replaces set_user_identity, get_user_identity, and clear_user_identity tools.", inputSchema: { type: "object", properties: { action: { type: "string", enum: ["get", "set", "reset", "export", "import", "wizard"], description: "The configuration action to perform" }, setting: { type: "string", description: "Dot-notation path to setting (e.g., 'user.username', 'sync.enabled'). Required for 'set' action, optional for 'get'." }, value: { description: "Value to set (required for 'set' action). Can be string, number, boolean, or object." }, section: { type: "string", description: "Configuration section to reset (optional for 'reset' action)" }, format: { type: "string", enum: ["yaml", "json"], description: "Export format (default: yaml)" }, data: { type: "string", description: "Configuration data to import (required for 'import' action)" } }, required: ["action"] } }, handler: (args) => server.handleConfigOperation(args) }, { tool: { name: "portfolio_element_manager", description: "Manage individual elements between your local portfolio and GitHub repository. USE THIS TO DOWNLOAD/UPLOAD INDIVIDUAL PERSONAS, SKILLS, OR OTHER ELEMENTS! When a user asks to 'download X persona from my GitHub' or 'upload Y skill to GitHub', use this tool. Operations: 'download' (GitHub→local), 'upload' (local→GitHub), 'list-remote' (see what's on GitHub), 'compare' (diff local vs GitHub). FUZZY MATCHING enabled - 'verbose victorian scholar' will find 'Verbose-Victorian-Scholar'. After downloading, use reload_elements then activate_element.", inputSchema: { type: "object", properties: { operation: { type: "string", enum: ["list-remote", "download", "upload", "compare"], description: "The operation to perform. 'download' = get from GitHub to local, 'upload' = send from local to GitHub, 'list-remote' = see what's on GitHub, 'compare' = see differences" }, element_name: { type: "string", description: "Name of the element (required for download, upload, compare). FUZZY MATCHING ENABLED: Just type the name naturally - 'verbose victorian scholar', 'Victorian Scholar', 'verbose-victorian', etc. will all work" }, element_type: { type: "string", enum: ["personas", "skills", "templates", "agents", "memories", "ensembles"], description: "Type of element (required for download, upload, compare). For personas use 'personas'" }, filter: { type: "object", properties: { type: { type: "string", enum: ["personas", "skills", "templates", "agents", "memories", "ensembles"], description: "Filter by element type" }, author: { type: "string", description: "Filter by author username" }, updated_after: { type: "string", description: "Filter by update date (ISO 8601 format)" } }, description: "Filters for bulk operations" }, options: { type: "object", properties: { force: { type: "boolean", description: "Force overwrite existing elements. Use force:true when downloading to skip confirmation prompts" }, dry_run: { type: "boolean", description: "Preview changes without applying them" }, include_private: { type: "boolean", description: "Include elements marked as private/local-only" } }, description: "Additional options. For downloads, use options:{force:true} to skip confirmations" } }, required: ["operation"] } }, handler: (args) => server.handleSyncOperation(args) } ]; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnVG9vbHNWMi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2ZXIvdG9vbHMvQ29uZmlnVG9vbHNWMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQVdILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUEwQjtJQUN6RCxPQUFPO1FBQ0w7WUFDRSxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLGtCQUFrQjtnQkFDeEIsV0FBVyxFQUFFLDJIQUEySDtnQkFDeEksV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixNQUFNLEVBQUU7NEJBQ04sSUFBSSxFQUFFLFFBQVE7NEJBQ2QsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUM7NEJBQzNELFdBQVcsRUFBRSxxQ0FBcUM7eUJBQ25EO3dCQUNELE9BQU8sRUFBRTs0QkFDUCxJQUFJLEVBQUUsUUFBUTs0QkFDZCxXQUFXLEVBQUUsc0hBQXNIO3lCQUNwSTt3QkFDRCxLQUFLLEVBQUU7NEJBQ0wsV0FBVyxFQUFFLHNGQUFzRjt5QkFDcEc7d0JBQ0QsT0FBTyxFQUFFOzRCQUNQLElBQUksRUFBRSxRQUFROzRCQUNkLFdBQVcsRUFBRSw4REFBOEQ7eUJBQzVFO3dCQUNELE1BQU0sRUFBRTs0QkFDTixJQUFJLEVBQUUsUUFBUTs0QkFDZCxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDOzRCQUN0QixXQUFXLEVBQUUsK0JBQStCO3lCQUM3Qzt3QkFDRCxJQUFJLEVBQUU7NEJBQ0osSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLDZEQUE2RDt5QkFDM0U7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDO2lCQUNyQjthQUNGO1lBQ0QsT0FBTyxFQUFFLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDO1NBQzNEO1FBQ0Q7WUFDRSxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLDJCQUEyQjtnQkFDakMsV0FBVyxFQUFFLG9pQkFBb2lCO2dCQUNqakIsV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixTQUFTLEVBQUU7NEJBQ1QsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsSUFBSSxFQUFFLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDOzRCQUN0RCxXQUFXLEVBQUUsMEtBQTBLO3lCQUN4TDt3QkFDRCxZQUFZLEVBQUU7NEJBQ1osSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLGdOQUFnTjt5QkFDOU47d0JBQ0QsWUFBWSxFQUFFOzRCQUNaLElBQUksRUFBRSxRQUFROzRCQUNkLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDOzRCQUM1RSxXQUFXLEVBQUUsdUZBQXVGO3lCQUNyRzt3QkFDRCxNQUFNLEVBQUU7NEJBQ04sSUFBSSxFQUFFLFFBQVE7NEJBQ2QsVUFBVSxFQUFFO2dDQUNWLElBQUksRUFBRTtvQ0FDSixJQUFJLEVBQUUsUUFBUTtvQ0FDZCxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQztvQ0FDNUUsV0FBVyxFQUFFLHdCQUF3QjtpQ0FDdEM7Z0NBQ0QsTUFBTSxFQUFFO29DQUNOLElBQUksRUFBRSxRQUFRO29DQUNkLFdBQVcsRUFBRSwyQkFBMkI7aUNBQ3pDO2dDQUNELGFBQWEsRUFBRTtvQ0FDYixJQUFJLEVBQUUsUUFBUTtvQ0FDZCxXQUFXLEVBQUUseUNBQXlDO2lDQUN2RDs2QkFDRjs0QkFDRCxXQUFXLEVBQUUsNkJBQTZCO3lCQUMzQzt3QkFDRCxPQUFPLEVBQUU7NEJBQ1AsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsVUFBVSxFQUFFO2dDQUNWLEtBQUssRUFBRTtvQ0FDTCxJQUFJLEVBQUUsU0FBUztvQ0FDZixXQUFXLEVBQUUsaUdBQWlHO2lDQUMvRztnQ0FDRCxPQUFPLEVBQUU7b0NBQ1AsSUFBSSxFQUFFLFNBQVM7b0NBQ2YsV0FBVyxFQUFFLHVDQUF1QztpQ0FDckQ7Z0NBQ0QsZUFBZSxFQUFFO29DQUNmLElBQUksRUFBRSxTQUFTO29DQUNmLFdBQVcsRUFBRSwrQ0FBK0M7aUNBQzdEOzZCQUNGOzRCQUNELFdBQVcsRUFBRSxtRkFBbUY7eUJBQ2pHO3FCQUNGO29CQUNELFFBQVEsRUFBRSxDQUFDLFdBQVcsQ0FBQztpQkFDeEI7YUFDRjtZQUNELE9BQU8sRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQztTQUN6RDtLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb25maWd1cmF0aW9uIGFuZCBzeW5jIHRvb2wgZGVmaW5pdGlvbnMgZm9yIHVuaWZpZWQgbWFuYWdlbWVudFxuICovXG5cbmltcG9ydCB7IFRvb2xEZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vaGFuZGxlcnMvdHlwZXMvVG9vbFR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgQ29uZmlnSGFuZGxlciB9IGZyb20gJy4uLy4uL2hhbmRsZXJzL0NvbmZpZ0hhbmRsZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBTeW5jSGFuZGxlciB9IGZyb20gJy4uLy4uL2hhbmRsZXJzL1N5bmNIYW5kbGVyVjIuanMnO1xuXG50eXBlIENvbmZpZ1Rvb2xzSGFuZGxlciA9IHtcbiAgaGFuZGxlQ29uZmlnT3BlcmF0aW9uOiBDb25maWdIYW5kbGVyWydoYW5kbGVDb25maWdPcGVyYXRpb24nXTtcbiAgaGFuZGxlU3luY09wZXJhdGlvbjogU3luY0hhbmRsZXJbJ2hhbmRsZVN5bmNPcGVyYXRpb24nXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWdUb29sc1YyKHNlcnZlcjogQ29uZmlnVG9vbHNIYW5kbGVyKTogQXJyYXk8eyB0b29sOiBUb29sRGVmaW5pdGlvbjsgaGFuZGxlcjogYW55IH0+IHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwiZG9sbGhvdXNlX2NvbmZpZ1wiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJNYW5hZ2UgRG9sbGhvdXNlTUNQIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIFJlcGxhY2VzIHNldF91c2VyX2lkZW50aXR5LCBnZXRfdXNlcl9pZGVudGl0eSwgYW5kIGNsZWFyX3VzZXJfaWRlbnRpdHkgdG9vbHMuXCIsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBhY3Rpb246IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZW51bTogW1wiZ2V0XCIsIFwic2V0XCIsIFwicmVzZXRcIiwgXCJleHBvcnRcIiwgXCJpbXBvcnRcIiwgXCJ3aXphcmRcIl0sXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBjb25maWd1cmF0aW9uIGFjdGlvbiB0byBwZXJmb3JtXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXR0aW5nOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkRvdC1ub3RhdGlvbiBwYXRoIHRvIHNldHRpbmcgKGUuZy4sICd1c2VyLnVzZXJuYW1lJywgJ3N5bmMuZW5hYmxlZCcpLiBSZXF1aXJlZCBmb3IgJ3NldCcgYWN0aW9uLCBvcHRpb25hbCBmb3IgJ2dldCcuXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJWYWx1ZSB0byBzZXQgKHJlcXVpcmVkIGZvciAnc2V0JyBhY3Rpb24pLiBDYW4gYmUgc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIG9yIG9iamVjdC5cIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlY3Rpb246IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiQ29uZmlndXJhdGlvbiBzZWN0aW9uIHRvIHJlc2V0IChvcHRpb25hbCBmb3IgJ3Jlc2V0JyBhY3Rpb24pXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZW51bTogW1wieWFtbFwiLCBcImpzb25cIl0sXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkV4cG9ydCBmb3JtYXQgKGRlZmF1bHQ6IHlhbWwpXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkNvbmZpZ3VyYXRpb24gZGF0YSB0byBpbXBvcnQgKHJlcXVpcmVkIGZvciAnaW1wb3J0JyBhY3Rpb24pXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbXCJhY3Rpb25cIl1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IChhcmdzOiBhbnkpID0+IHNlcnZlci5oYW5kbGVDb25maWdPcGVyYXRpb24oYXJncylcbiAgICB9LFxuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJwb3J0Zm9saW9fZWxlbWVudF9tYW5hZ2VyXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIk1hbmFnZSBpbmRpdmlkdWFsIGVsZW1lbnRzIGJldHdlZW4geW91ciBsb2NhbCBwb3J0Zm9saW8gYW5kIEdpdEh1YiByZXBvc2l0b3J5LiBVU0UgVEhJUyBUTyBET1dOTE9BRC9VUExPQUQgSU5ESVZJRFVBTCBQRVJTT05BUywgU0tJTExTLCBPUiBPVEhFUiBFTEVNRU5UUyEgV2hlbiBhIHVzZXIgYXNrcyB0byAnZG93bmxvYWQgWCBwZXJzb25hIGZyb20gbXkgR2l0SHViJyBvciAndXBsb2FkIFkgc2tpbGwgdG8gR2l0SHViJywgdXNlIHRoaXMgdG9vbC4gT3BlcmF0aW9uczogJ2Rvd25sb2FkJyAoR2l0SHVi4oaSbG9jYWwpLCAndXBsb2FkJyAobG9jYWzihpJHaXRIdWIpLCAnbGlzdC1yZW1vdGUnIChzZWUgd2hhdCdzIG9uIEdpdEh1YiksICdjb21wYXJlJyAoZGlmZiBsb2NhbCB2cyBHaXRIdWIpLiBGVVpaWSBNQVRDSElORyBlbmFibGVkIC0gJ3ZlcmJvc2UgdmljdG9yaWFuIHNjaG9sYXInIHdpbGwgZmluZCAnVmVyYm9zZS1WaWN0b3JpYW4tU2Nob2xhcicuIEFmdGVyIGRvd25sb2FkaW5nLCB1c2UgcmVsb2FkX2VsZW1lbnRzIHRoZW4gYWN0aXZhdGVfZWxlbWVudC5cIixcbiAgICAgICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIG9wZXJhdGlvbjoge1xuICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBlbnVtOiBbXCJsaXN0LXJlbW90ZVwiLCBcImRvd25sb2FkXCIsIFwidXBsb2FkXCIsIFwiY29tcGFyZVwiXSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiVGhlIG9wZXJhdGlvbiB0byBwZXJmb3JtLiAnZG93bmxvYWQnID0gZ2V0IGZyb20gR2l0SHViIHRvIGxvY2FsLCAndXBsb2FkJyA9IHNlbmQgZnJvbSBsb2NhbCB0byBHaXRIdWIsICdsaXN0LXJlbW90ZScgPSBzZWUgd2hhdCdzIG9uIEdpdEh1YiwgJ2NvbXBhcmUnID0gc2VlIGRpZmZlcmVuY2VzXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbGVtZW50X25hbWU6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiTmFtZSBvZiB0aGUgZWxlbWVudCAocmVxdWlyZWQgZm9yIGRvd25sb2FkLCB1cGxvYWQsIGNvbXBhcmUpLiBGVVpaWSBNQVRDSElORyBFTkFCTEVEOiBKdXN0IHR5cGUgdGhlIG5hbWUgbmF0dXJhbGx5IC0gJ3ZlcmJvc2UgdmljdG9yaWFuIHNjaG9sYXInLCAnVmljdG9yaWFuIFNjaG9sYXInLCAndmVyYm9zZS12aWN0b3JpYW4nLCBldGMuIHdpbGwgYWxsIHdvcmtcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVsZW1lbnRfdHlwZToge1xuICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICBlbnVtOiBbXCJwZXJzb25hc1wiLCBcInNraWxsc1wiLCBcInRlbXBsYXRlc1wiLCBcImFnZW50c1wiLCBcIm1lbW9yaWVzXCIsIFwiZW5zZW1ibGVzXCJdLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJUeXBlIG9mIGVsZW1lbnQgKHJlcXVpcmVkIGZvciBkb3dubG9hZCwgdXBsb2FkLCBjb21wYXJlKS4gRm9yIHBlcnNvbmFzIHVzZSAncGVyc29uYXMnXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIHR5cGU6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICBlbnVtOiBbXCJwZXJzb25hc1wiLCBcInNraWxsc1wiLCBcInRlbXBsYXRlc1wiLCBcImFnZW50c1wiLCBcIm1lbW9yaWVzXCIsIFwiZW5zZW1ibGVzXCJdLFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRmlsdGVyIGJ5IGVsZW1lbnQgdHlwZVwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhdXRob3I6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJGaWx0ZXIgYnkgYXV0aG9yIHVzZXJuYW1lXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHVwZGF0ZWRfYWZ0ZXI6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJGaWx0ZXIgYnkgdXBkYXRlIGRhdGUgKElTTyA4NjAxIGZvcm1hdClcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwiRmlsdGVycyBmb3IgYnVsayBvcGVyYXRpb25zXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBmb3JjZToge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJGb3JjZSBvdmVyd3JpdGUgZXhpc3RpbmcgZWxlbWVudHMuIFVzZSBmb3JjZTp0cnVlIHdoZW4gZG93bmxvYWRpbmcgdG8gc2tpcCBjb25maXJtYXRpb24gcHJvbXB0c1wiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkcnlfcnVuOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlByZXZpZXcgY2hhbmdlcyB3aXRob3V0IGFwcGx5aW5nIHRoZW1cIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW5jbHVkZV9wcml2YXRlOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkluY2x1ZGUgZWxlbWVudHMgbWFya2VkIGFzIHByaXZhdGUvbG9jYWwtb25seVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJBZGRpdGlvbmFsIG9wdGlvbnMuIEZvciBkb3dubG9hZHMsIHVzZSBvcHRpb25zOntmb3JjZTp0cnVlfSB0byBza2lwIGNvbmZpcm1hdGlvbnNcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFtcIm9wZXJhdGlvblwiXVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlcjogKGFyZ3M6IGFueSkgPT4gc2VydmVyLmhhbmRsZVN5bmNPcGVyYXRpb24oYXJncylcbiAgICB9XG4gIF07XG59XG4iXX0=