@dollhousemcp/mcp-server 2.0.17 → 2.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/elements/BaseElement.d.ts +1 -0
  3. package/dist/elements/BaseElement.d.ts.map +1 -1
  4. package/dist/elements/BaseElement.js +7 -1
  5. package/dist/elements/agents/AgentManager.js +2 -2
  6. package/dist/elements/base/ElementFileOperations.js +2 -2
  7. package/dist/elements/ensembles/EnsembleManager.js +3 -3
  8. package/dist/elements/memories/MemoryManager.js +2 -2
  9. package/dist/elements/skills/SkillManager.js +2 -2
  10. package/dist/elements/templates/TemplateManager.js +2 -2
  11. package/dist/generated/version.d.ts +2 -2
  12. package/dist/generated/version.js +3 -3
  13. package/dist/handlers/ElementCRUDHandler.d.ts.map +1 -1
  14. package/dist/handlers/ElementCRUDHandler.js +3 -2
  15. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +1 -0
  16. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  17. package/dist/handlers/mcp-aql/MCPAQLHandler.js +35 -14
  18. package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts +9 -1
  19. package/dist/handlers/mcp-aql/policies/ElementPolicies.d.ts.map +1 -1
  20. package/dist/handlers/mcp-aql/policies/ElementPolicies.js +63 -4
  21. package/dist/handlers/strategies/AgentActivationStrategy.d.ts.map +1 -1
  22. package/dist/handlers/strategies/AgentActivationStrategy.js +5 -1
  23. package/dist/handlers/strategies/BaseActivationStrategy.d.ts +1 -0
  24. package/dist/handlers/strategies/BaseActivationStrategy.d.ts.map +1 -1
  25. package/dist/handlers/strategies/BaseActivationStrategy.js +15 -1
  26. package/dist/handlers/strategies/EnsembleActivationStrategy.d.ts.map +1 -1
  27. package/dist/handlers/strategies/EnsembleActivationStrategy.js +5 -1
  28. package/dist/handlers/strategies/MemoryActivationStrategy.d.ts.map +1 -1
  29. package/dist/handlers/strategies/MemoryActivationStrategy.js +5 -1
  30. package/dist/handlers/strategies/PersonaActivationStrategy.d.ts.map +1 -1
  31. package/dist/handlers/strategies/PersonaActivationStrategy.js +5 -1
  32. package/dist/handlers/strategies/SkillActivationStrategy.d.ts.map +1 -1
  33. package/dist/handlers/strategies/SkillActivationStrategy.js +5 -1
  34. package/dist/handlers/strategies/TemplateActivationStrategy.d.ts.map +1 -1
  35. package/dist/handlers/strategies/TemplateActivationStrategy.js +7 -2
  36. package/dist/persona/PersonaElement.js +2 -2
  37. package/dist/services/SerializationService.d.ts.map +1 -1
  38. package/dist/services/SerializationService.js +7 -1
  39. package/dist/types/elements/IElement.d.ts +9 -0
  40. package/dist/types/elements/IElement.d.ts.map +1 -1
  41. package/dist/types/elements/IElement.js +1 -1
  42. package/dist/web/public/permissions.css +190 -2
  43. package/dist/web/public/permissions.js +171 -30
  44. package/dist/web/public/setup.js +131 -60
  45. package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
  46. package/dist/web/routes/permissionRoutes.js +77 -5
  47. package/dist/web/routes/setupRoutes.d.ts.map +1 -1
  48. package/dist/web/routes/setupRoutes.js +16 -2
  49. package/package.json +1 -1
  50. package/scripts/pretooluse-dollhouse.sh +39 -1
  51. package/server.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"IElement.d.ts","sourceRoot":"","sources":["../../../src/types/elements/IElement.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IElement.d.ts","sourceRoot":"","sources":["../../../src/types/elements/IElement.ts"],"names":[],"mappings":"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"}
@@ -27,4 +27,4 @@ export var ElementStatus;
27
27
  ElementStatus["ERROR"] = "error";
28
28
  ElementStatus["SUSPENDED"] = "suspended";
29
29
  })(ElementStatus || (ElementStatus = {}));
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHlwZXMvZWxlbWVudHMvSUVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFxR0gsZ0NBQWdDO0FBQ2hDLE1BQU0sQ0FBTixJQUFZLGFBT1g7QUFQRCxXQUFZLGFBQWE7SUFDdkIsc0NBQXFCLENBQUE7SUFDckIsc0NBQXFCLENBQUE7SUFDckIsc0NBQXFCLENBQUE7SUFDckIsMENBQXlCLENBQUE7SUFDekIsNEJBQVcsQ0FBQTtJQUNYLHdDQUF1QixDQUFBLENBQUssNkJBQTZCO0FBQzNELENBQUMsRUFQVyxhQUFhLEtBQWIsYUFBYSxRQU94QjtBQThCRCwwQkFBMEI7QUFDMUIsTUFBTSxDQUFOLElBQVksYUFPWDtBQVBELFdBQVksYUFBYTtJQUN2QixzQ0FBcUIsQ0FBQTtJQUNyQiwwQ0FBeUIsQ0FBQTtJQUN6QixrQ0FBaUIsQ0FBQTtJQUNqQiw4Q0FBNkIsQ0FBQTtJQUM3QixnQ0FBZSxDQUFBO0lBQ2Ysd0NBQXVCLENBQUE7QUFDekIsQ0FBQyxFQVBXLGFBQWEsS0FBYixhQUFhLFFBT3hCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3JlIGVsZW1lbnQgaW50ZXJmYWNlIHRoYXQgYWxsIGVsZW1lbnQgdHlwZXMgbXVzdCBpbXBsZW1lbnQuXG4gKiBUaGlzIHByb3ZpZGVzIHRoZSBmb3VuZGF0aW9uIGZvciB0aGUgcG9ydGZvbGlvIHN5c3RlbSB3aXRoIHN1cHBvcnQgZm9yOlxuICogLSBJZGVudGl0eSBhbmQgdmVyc2lvbmluZ1xuICogLSBSZWZlcmVuY2VzIHRvIGV4dGVybmFsL2ludGVybmFsIHJlc291cmNlc1xuICogLSBFeHRlbnNpYmlsaXR5IGZvciBmdXR1cmUgZmVhdHVyZXNcbiAqIC0gUmF0aW5ncyBhbmQgZmVlZGJhY2sgbWVjaGFuaXNtc1xuICogLSBMaWZlY3ljbGUgbWFuYWdlbWVudFxuICovXG5cbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vLi4vcG9ydGZvbGlvL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRWxlbWVudEdhdGVrZWVwZXJQb2xpY3kgfSBmcm9tICcuLi8uLi9oYW5kbGVycy9tY3AtYXFsL0dhdGVrZWVwZXJUeXBlcy5qcyc7XG5cbi8vIENvcmUgaWRlbnRpdHkgYW5kIG1ldGFkYXRhXG5leHBvcnQgaW50ZXJmYWNlIElFbGVtZW50IHtcbiAgLy8gSWRlbnRpdHlcbiAgaWQ6IHN0cmluZztcbiAgdHlwZTogRWxlbWVudFR5cGU7XG4gIHZlcnNpb246IHN0cmluZztcbiAgXG4gIC8vIE1ldGFkYXRhXG4gIG1ldGFkYXRhOiBJRWxlbWVudE1ldGFkYXRhO1xuICBcbiAgLy8gRmVhdHVyZXNcbiAgcmVmZXJlbmNlcz86IFJlZmVyZW5jZVtdO1xuICBleHRlbnNpb25zPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgcmF0aW5ncz86IEVsZW1lbnRSYXRpbmdzO1xuICBcbiAgLy8gQ29yZSBvcGVyYXRpb25zXG4gIHZhbGlkYXRlKCk6IEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0O1xuICBzZXJpYWxpemUoKTogc3RyaW5nO1xuICBkZXNlcmlhbGl6ZShkYXRhOiBzdHJpbmcpOiB2b2lkO1xuICByZWNlaXZlRmVlZGJhY2s/KGZlZWRiYWNrOiBzdHJpbmcsIGNvbnRleHQ/OiBGZWVkYmFja0NvbnRleHQpOiB2b2lkO1xuICBcbiAgLy8gTGlmZWN5Y2xlIChvcHRpb25hbClcbiAgYmVmb3JlQWN0aXZhdGU/KCk6IFByb21pc2U8dm9pZD47XG4gIGFjdGl2YXRlPygpOiBQcm9taXNlPHZvaWQ+O1xuICBhZnRlckFjdGl2YXRlPygpOiBQcm9taXNlPHZvaWQ+O1xuICBkZWFjdGl2YXRlPygpOiBQcm9taXNlPHZvaWQ+O1xuICBnZXRTdGF0dXMoKTogRWxlbWVudFN0YXR1cztcbn1cblxuLy8gRWxlbWVudCBtZXRhZGF0YSBjb21tb24gdG8gYWxsIHR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIElFbGVtZW50TWV0YWRhdGEge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHR5cGU/OiBFbGVtZW50VHlwZTsgICAgICAgLy8gRWxlbWVudCB0eXBlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCB0eXBlIHNhZmV0eVxuICBhdXRob3I/OiBzdHJpbmc7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIGNyZWF0ZWQ/OiBzdHJpbmc7XG4gIG1vZGlmaWVkPzogc3RyaW5nO1xuICB0YWdzPzogc3RyaW5nW107XG5cbiAgLy8gUmVmZXJlbmNlcyBzdXBwb3J0XG4gIGRlcGVuZGVuY2llcz86IEVsZW1lbnREZXBlbmRlbmN5W107XG5cbiAgLy8gRXh0ZW5zaWJpbGl0eVxuICBjdXN0b20/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiB2Mi4wIGR1YWwtZmllbGQgYXJjaGl0ZWN0dXJlOiBiZWhhdmlvcmFsIGRpcmVjdGl2ZXMgbG9hZGVkIGZyb20gWUFNTCBmcm9udG1hdHRlci5cbiAgICpcbiAgICogRHVyaW5nIGRlc2VyaWFsaXphdGlvbiwgbWFuYWdlcnMgZXh0cmFjdCBgaW5zdHJ1Y3Rpb25zYCBmcm9tIHRoZSBwYXJzZWQgWUFNTFxuICAgKiBtZXRhZGF0YSBhbmQgYXNzaWduIGl0IHRvIGBlbGVtZW50Lmluc3RydWN0aW9uc2AuIFRoaXMgZmllbGQgaXMgdGhlbiBkZWxldGVkXG4gICAqIGZyb20gdGhlIG1ldGFkYXRhIG9iamVjdCB0byBhdm9pZCBkdXBsaWNhdGlvbi4gSXRzIHByZXNlbmNlIGluIFlBTUwgZnJvbnRtYXR0ZXJcbiAgICogaXMgdXNlZCB0byBkZXRlY3QgdjIgZm9ybWF0IHZzIHYxIChib2R5LXRleHQtb25seSkgZm9ybWF0LlxuICAgKlxuICAgKiBAc2luY2UgSXNzdWUgIzYwMiDigJQgRHVhbC1maWVsZCBlbGVtZW50IGFyY2hpdGVjdHVyZVxuICAgKi9cbiAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHYXRla2VlcGVyIGFjY2Vzcy1jb250cm9sIHBvbGljeSBmb3IgdGhpcyBlbGVtZW50LlxuICAgKlxuICAgKiBXaGVuIHRoZSBlbGVtZW50IGlzIGFjdGl2ZSwgaXRzIHBvbGljeSBwYXJ0aWNpcGF0ZXMgaW4gTGF5ZXIgMlxuICAgKiAoZWxlbWVudCBwb2xpY3kgcmVzb2x1dGlvbikgb2YgdGhlIEdhdGVrZWVwZXIgZW5mb3JjZW1lbnQgcGlwZWxpbmUuXG4gICAqIHtAbGluayByZXNvbHZlRWxlbWVudFBvbGljeX0gaXRlcmF0ZXMgYWxsIGFjdGl2ZSBlbGVtZW50cyBhbmQgZXZhbHVhdGVzXG4gICAqIHRoZWlyIGBnYXRla2VlcGVyYCBmaWVsZCB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBNQ1AtQVFMIG9wZXJhdGlvblxuICAgKiBzaG91bGQgYmUgYWxsb3dlZCwgZGVuaWVkLCBvciByZXF1aXJlIGNvbmZpcm1hdGlvbi5cbiAgICpcbiAgICogUG9saWN5IGZpZWxkcyAoYWxsIG9wdGlvbmFsKTpcbiAgICogLSBgYWxsb3dgICDigJQgT3BlcmF0aW9ucyBhdXRvLWFwcHJvdmVkIHdoZW4gdGhpcyBlbGVtZW50IGlzIGFjdGl2ZVxuICAgKiAtIGBjb25maXJtYCDigJQgT3BlcmF0aW9ucyByZXF1aXJpbmcgdXNlciBjb25maXJtYXRpb25cbiAgICogLSBgZGVueWAgICDigJQgT3BlcmF0aW9ucyBibG9ja2VkIG91dHJpZ2h0XG4gICAqIC0gYHNjb3BlUmVzdHJpY3Rpb25zYCDigJQgUmVzdHJpY3Qgb3BlcmF0aW9ucyB0by9mcm9tIHNwZWNpZmljIGVsZW1lbnQgdHlwZXNcbiAgICpcbiAgICogRGVmaW5lZCBpbiBZQU1MIGZyb250IG1hdHRlciBhbmQgdmFsaWRhdGVkIGF0IGJvdGggd3JpdGUgdGltZVxuICAgKiAoe0BsaW5rIHZhbGlkYXRlR2F0ZWtlZXBlclBvbGljeX0pIGFuZCByZWFkIHRpbWUgdmlhXG4gICAqIHtAbGluayBwYXJzZUVsZW1lbnRQb2xpY3l9LiBNYWxmb3JtZWQgcG9saWNpZXMgYXJlIGxvZ2dlZCBhbmQgc3RyaXBwZWQuXG4gICAqXG4gICAqIEBzaW5jZSBJc3N1ZSAjNTI0IOKAlCBFeHRlbmRlZCBmcm9tIGFnZW50cyB0byBhbGwgZWxlbWVudCB0eXBlc1xuICAgKiBAc2VlIEVsZW1lbnRHYXRla2VlcGVyUG9saWN5XG4gICAqIEBzZWUgcmVzb2x2ZUVsZW1lbnRQb2xpY3lcbiAgICovXG4gIGdhdGVrZWVwZXI/OiBFbGVtZW50R2F0ZWtlZXBlclBvbGljeTtcbn1cblxuLy8gUmVmZXJlbmNlIHRvIGV4dGVybmFsIG9yIGludGVybmFsIHJlc291cmNlc1xuZXhwb3J0IGludGVyZmFjZSBSZWZlcmVuY2Uge1xuICB0eXBlOiBSZWZlcmVuY2VUeXBlO1xuICB1cmk6IHN0cmluZzsgICAgICAgICAgICAgIC8vIFVSTCwgZmlsZSBwYXRoLCBkb2N1bWVudCBJRCwgcG9ydGZvbGlvIHJlZmVyZW5jZVxuICB0aXRsZTogc3RyaW5nOyAgICAgICAgICAgIC8vIEh1bWFuLXJlYWRhYmxlIG5hbWVcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7ICAgICAvLyBXaGF0IHRoaXMgcmVmZXJlbmNlIHByb3ZpZGVzXG4gIHJlcXVpcmVkPzogYm9vbGVhbjsgICAgICAgLy8gSXMgdGhpcyByZWZlcmVuY2UgZXNzZW50aWFsP1xuICByYWdFbmFibGVkPzogYm9vbGVhbjsgICAgIC8vIFNob3VsZCB0aGlzIGJlIGxvYWRlZCBmb3IgUkFHP1xuICBjYWNoZWFibGU/OiBib29sZWFuOyAgICAgIC8vIENhbiB0aGlzIGJlIGNhY2hlZCBsb2NhbGx5P1xuICByZWZyZXNoSW50ZXJ2YWw/OiBudW1iZXI7IC8vIEhvdyBvZnRlbiB0byByZWZyZXNoIChpbiBob3Vycylcbn1cblxuLy8gVHlwZXMgb2YgcmVmZXJlbmNlcyBzdXBwb3J0ZWRcbmV4cG9ydCBlbnVtIFJlZmVyZW5jZVR5cGUge1xuICBJTlRFUk5BTCA9ICdpbnRlcm5hbCcsICAgICAgLy8gUmVmZXJlbmNlIHRvIGFub3RoZXIgZWxlbWVudFxuICBFWFRFUk5BTCA9ICdleHRlcm5hbCcsICAgICAgLy8gV2ViIFVSTFxuICBET0NVTUVOVCA9ICdkb2N1bWVudCcsICAgICAgLy8gTG9jYWwgb3IgUkFHIGRvY3VtZW50XG4gIFJFUE9TSVRPUlkgPSAncmVwb3NpdG9yeScsICAvLyBHaXQgcmVwb3NpdG9yeVxuICBBUEkgPSAnYXBpJywgICAgICAgICAgICAgICAvLyBBUEkgZW5kcG9pbnRcbiAgUE9SVEZPTElPID0gJ3BvcnRmb2xpbycgICAgIC8vIFJlZmVyZW5jZSB3aXRoaW4gcG9ydGZvbGlvXG59XG5cbi8vIEVsZW1lbnQgZGVwZW5kZW5jeSBzcGVjaWZpY2F0aW9uXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnREZXBlbmRlbmN5IHtcbiAgZWxlbWVudElkOiBzdHJpbmc7XG4gIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZTtcbiAgdmVyc2lvbkNvbnN0cmFpbnQ/OiBzdHJpbmc7ICAvLyBlLmcuLCBcIl4xLjAuMFwiLCBcIj49Mi4wLjBcIlxuICBvcHRpb25hbD86IGJvb2xlYW47XG59XG5cbi8vIFZhbGlkYXRpb24gcmVzdWx0IGZvciBlbGVtZW50c1xuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50VmFsaWRhdGlvblJlc3VsdCB7XG4gIHZhbGlkOiBib29sZWFuO1xuICBlcnJvcnM/OiBWYWxpZGF0aW9uRXJyb3JbXTtcbiAgd2FybmluZ3M/OiBWYWxpZGF0aW9uV2FybmluZ1tdO1xuICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb25FcnJvciB7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgY29kZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uV2FybmluZyB7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2V2ZXJpdHk/OiAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnO1xufVxuXG4vLyBFbGVtZW50IHN0YXR1cyB0cmFja2luZ1xuZXhwb3J0IGVudW0gRWxlbWVudFN0YXR1cyB7XG4gIElOQUNUSVZFID0gJ2luYWN0aXZlJyxcbiAgQUNUSVZBVElORyA9ICdhY3RpdmF0aW5nJyxcbiAgQUNUSVZFID0gJ2FjdGl2ZScsXG4gIERFQUNUSVZBVElORyA9ICdkZWFjdGl2YXRpbmcnLFxuICBFUlJPUiA9ICdlcnJvcicsXG4gIFNVU1BFTkRFRCA9ICdzdXNwZW5kZWQnXG59XG5cbi8vIFJhdGluZyBzeXN0ZW0gZm9yIGNvbnRpbnVvdXMgaW1wcm92ZW1lbnRcbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudFJhdGluZ3Mge1xuICBhaVJhdGluZzogbnVtYmVyOyAgICAgICAgICAgICAgLy8gMC01IHN0YXJzIChBSSBldmFsdWF0aW9uKVxuICB1c2VyUmF0aW5nPzogbnVtYmVyOyAgICAgICAgICAgLy8gMC01IHN0YXJzICh1c2VyIGZlZWRiYWNrKVxuICByYXRpbmdDb3VudDogbnVtYmVyOyAgICAgICAgICAgLy8gTnVtYmVyIG9mIHJhdGluZ3NcbiAgbGFzdEV2YWx1YXRlZDogRGF0ZTsgICAgICAgICAgLy8gV2hlbiBsYXN0IGV2YWx1YXRlZFxuICBjb25maWRlbmNlOiBudW1iZXI7ICAgICAgICAgICAgLy8gMC0xIGNvbmZpZGVuY2UgaW4gcmF0aW5nXG4gIFxuICAvLyBEZXRhaWxlZCBicmVha2Rvd25zIChjdXN0b21pemFibGUgcGVyIGVsZW1lbnQgdHlwZSlcbiAgYnJlYWtkb3duPzogUmF0aW5nQnJlYWtkb3duO1xuICBcbiAgLy8gRGVsdGEgdHJhY2tpbmdcbiAgcmF0aW5nRGVsdGE/OiBudW1iZXI7ICAgICAgICAgLy8gRGlmZmVyZW5jZSBiZXR3ZWVuIEFJIGFuZCB1c2VyIHJhdGluZ1xuICB0cmVuZDogJ2ltcHJvdmluZycgfCAnZGVjbGluaW5nJyB8ICdzdGFibGUnO1xuICBcbiAgLy8gRmVlZGJhY2sgaGlzdG9yeVxuICBmZWVkYmFja0hpc3Rvcnk/OiBVc2VyRmVlZGJhY2tbXTtcbn1cblxuLy8gQmFzZSByYXRpbmcgYnJlYWtkb3duIC0gZWxlbWVudCB0eXBlcyBjYW4gZXh0ZW5kIHRoaXNcbmV4cG9ydCBpbnRlcmZhY2UgUmF0aW5nQnJlYWtkb3duIHtcbiAgLy8gQmFzZSBtZXRyaWNzIGFsbCBlbGVtZW50cyBzaGFyZVxuICBlZmZlY3RpdmVuZXNzOiBudW1iZXI7ICAgICAgICAgLy8gSG93IHdlbGwgaXQgYWNoaWV2ZXMgaXRzIHB1cnBvc2VcbiAgcmVsaWFiaWxpdHk6IG51bWJlcjsgICAgICAgICAgLy8gSG93IGNvbnNpc3RlbnQgaXQgaXNcbiAgdXNhYmlsaXR5OiBudW1iZXI7ICAgICAgICAgICAvLyBIb3cgZWFzeSB0byB3b3JrIHdpdGhcbiAgXG4gIC8vIEVsZW1lbnQtc3BlY2lmaWMgbWV0cmljcyAodmlhIGluZGV4IHNpZ25hdHVyZSlcbiAgW2tleTogc3RyaW5nXTogbnVtYmVyO1xufVxuXG4vLyBVc2VyIGZlZWRiYWNrIHRyYWNraW5nXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJGZWVkYmFjayB7XG4gIHRpbWVzdGFtcDogRGF0ZTtcbiAgZmVlZGJhY2s6IHN0cmluZzsgICAgICAgICAgICAgLy8gTmF0dXJhbCBsYW5ndWFnZSBmZWVkYmFja1xuICBzZW50aW1lbnQ6ICdwb3NpdGl2ZScgfCAnbmVnYXRpdmUnIHwgJ25ldXRyYWwnO1xuICBpbmZlcnJlZFJhdGluZz86IG51bWJlcjsgICAgICAvLyBSYXRpbmcgaW5mZXJyZWQgZnJvbSBmZWVkYmFja1xuICBjb250ZXh0PzogRmVlZGJhY2tDb250ZXh0OyAgICAvLyBXaGF0IHdhcyBoYXBwZW5pbmdcbiAgZWxlbWVudFZlcnNpb24/OiBzdHJpbmc7ICAgICAgLy8gVmVyc2lvbiBhdCB0aW1lIG9mIGZlZWRiYWNrXG59XG5cbi8vIENvbnRleHQgZm9yIGZlZWRiYWNrXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRiYWNrQ29udGV4dCB7XG4gIHRhc2s/OiBzdHJpbmc7ICAgICAgICAgICAgICAgIC8vIFdoYXQgdGFzayB3YXMgYmVpbmcgcGVyZm9ybWVkXG4gIHJlbGF0ZWRFbGVtZW50cz86IHN0cmluZ1tdOyAgIC8vIE90aGVyIGFjdGl2ZSBlbGVtZW50c1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7ICAgICAgICAgIC8vIEZvciBncm91cGluZyByZWxhdGVkIGZlZWRiYWNrXG4gIGVudmlyb25tZW50RGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8vIFNjaGVtYSB2ZXJzaW9uaW5nIHN1cHBvcnRcbmV4cG9ydCBpbnRlcmZhY2UgSVNjaGVtYVZlcnNpb24ge1xuICBzY2hlbWFWZXJzaW9uPzogc3RyaW5nOyAgICAgICAvLyBUcmFjayBpbnRlcmZhY2UgdmVyc2lvblxuICBtaWdyYXRlPyhmcm9tVmVyc2lvbjogc3RyaW5nKTogdm9pZDsgIC8vIE1pZ3JhdGlvbiBzdXBwb3J0XG59Il19
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHlwZXMvZWxlbWVudHMvSUVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUErR0gsZ0NBQWdDO0FBQ2hDLE1BQU0sQ0FBTixJQUFZLGFBT1g7QUFQRCxXQUFZLGFBQWE7SUFDdkIsc0NBQXFCLENBQUE7SUFDckIsc0NBQXFCLENBQUE7SUFDckIsc0NBQXFCLENBQUE7SUFDckIsMENBQXlCLENBQUE7SUFDekIsNEJBQVcsQ0FBQTtJQUNYLHdDQUF1QixDQUFBLENBQUssNkJBQTZCO0FBQzNELENBQUMsRUFQVyxhQUFhLEtBQWIsYUFBYSxRQU94QjtBQThCRCwwQkFBMEI7QUFDMUIsTUFBTSxDQUFOLElBQVksYUFPWDtBQVBELFdBQVksYUFBYTtJQUN2QixzQ0FBcUIsQ0FBQTtJQUNyQiwwQ0FBeUIsQ0FBQTtJQUN6QixrQ0FBaUIsQ0FBQTtJQUNqQiw4Q0FBNkIsQ0FBQTtJQUM3QixnQ0FBZSxDQUFBO0lBQ2Ysd0NBQXVCLENBQUE7QUFDekIsQ0FBQyxFQVBXLGFBQWEsS0FBYixhQUFhLFFBT3hCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3JlIGVsZW1lbnQgaW50ZXJmYWNlIHRoYXQgYWxsIGVsZW1lbnQgdHlwZXMgbXVzdCBpbXBsZW1lbnQuXG4gKiBUaGlzIHByb3ZpZGVzIHRoZSBmb3VuZGF0aW9uIGZvciB0aGUgcG9ydGZvbGlvIHN5c3RlbSB3aXRoIHN1cHBvcnQgZm9yOlxuICogLSBJZGVudGl0eSBhbmQgdmVyc2lvbmluZ1xuICogLSBSZWZlcmVuY2VzIHRvIGV4dGVybmFsL2ludGVybmFsIHJlc291cmNlc1xuICogLSBFeHRlbnNpYmlsaXR5IGZvciBmdXR1cmUgZmVhdHVyZXNcbiAqIC0gUmF0aW5ncyBhbmQgZmVlZGJhY2sgbWVjaGFuaXNtc1xuICogLSBMaWZlY3ljbGUgbWFuYWdlbWVudFxuICovXG5cbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vLi4vcG9ydGZvbGlvL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRWxlbWVudEdhdGVrZWVwZXJQb2xpY3kgfSBmcm9tICcuLi8uLi9oYW5kbGVycy9tY3AtYXFsL0dhdGVrZWVwZXJUeXBlcy5qcyc7XG5cbi8vIENvcmUgaWRlbnRpdHkgYW5kIG1ldGFkYXRhXG5leHBvcnQgaW50ZXJmYWNlIElFbGVtZW50IHtcbiAgLy8gSWRlbnRpdHlcbiAgaWQ6IHN0cmluZztcbiAgdHlwZTogRWxlbWVudFR5cGU7XG4gIHZlcnNpb246IHN0cmluZztcbiAgXG4gIC8vIE1ldGFkYXRhXG4gIG1ldGFkYXRhOiBJRWxlbWVudE1ldGFkYXRhO1xuICBcbiAgLy8gRmVhdHVyZXNcbiAgcmVmZXJlbmNlcz86IFJlZmVyZW5jZVtdO1xuICBleHRlbnNpb25zPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgcmF0aW5ncz86IEVsZW1lbnRSYXRpbmdzO1xuICBcbiAgLy8gQ29yZSBvcGVyYXRpb25zXG4gIHZhbGlkYXRlKCk6IEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0O1xuICBzZXJpYWxpemUoKTogc3RyaW5nO1xuICBkZXNlcmlhbGl6ZShkYXRhOiBzdHJpbmcpOiB2b2lkO1xuICByZWNlaXZlRmVlZGJhY2s/KGZlZWRiYWNrOiBzdHJpbmcsIGNvbnRleHQ/OiBGZWVkYmFja0NvbnRleHQpOiB2b2lkO1xuICBcbiAgLy8gTGlmZWN5Y2xlIChvcHRpb25hbClcbiAgYmVmb3JlQWN0aXZhdGU/KCk6IFByb21pc2U8dm9pZD47XG4gIGFjdGl2YXRlPygpOiBQcm9taXNlPHZvaWQ+O1xuICBhZnRlckFjdGl2YXRlPygpOiBQcm9taXNlPHZvaWQ+O1xuICBkZWFjdGl2YXRlPygpOiBQcm9taXNlPHZvaWQ+O1xuICBnZXRTdGF0dXMoKTogRWxlbWVudFN0YXR1cztcbn1cblxuLy8gRWxlbWVudCBtZXRhZGF0YSBjb21tb24gdG8gYWxsIHR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIElFbGVtZW50TWV0YWRhdGEge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHR5cGU/OiBFbGVtZW50VHlwZTsgICAgICAgLy8gRWxlbWVudCB0eXBlIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCB0eXBlIHNhZmV0eVxuICBhdXRob3I/OiBzdHJpbmc7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIGNyZWF0ZWQ/OiBzdHJpbmc7XG4gIG1vZGlmaWVkPzogc3RyaW5nO1xuICB0YWdzPzogc3RyaW5nW107XG5cbiAgLy8gUmVmZXJlbmNlcyBzdXBwb3J0XG4gIGRlcGVuZGVuY2llcz86IEVsZW1lbnREZXBlbmRlbmN5W107XG5cbiAgLy8gRXh0ZW5zaWJpbGl0eVxuICBjdXN0b20/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIC8qKlxuICAgKiB2Mi4wIGR1YWwtZmllbGQgYXJjaGl0ZWN0dXJlOiBiZWhhdmlvcmFsIGRpcmVjdGl2ZXMgbG9hZGVkIGZyb20gWUFNTCBmcm9udG1hdHRlci5cbiAgICpcbiAgICogRHVyaW5nIGRlc2VyaWFsaXphdGlvbiwgbWFuYWdlcnMgZXh0cmFjdCBgaW5zdHJ1Y3Rpb25zYCBmcm9tIHRoZSBwYXJzZWQgWUFNTFxuICAgKiBtZXRhZGF0YSBhbmQgYXNzaWduIGl0IHRvIGBlbGVtZW50Lmluc3RydWN0aW9uc2AuIFRoaXMgZmllbGQgaXMgdGhlbiBkZWxldGVkXG4gICAqIGZyb20gdGhlIG1ldGFkYXRhIG9iamVjdCB0byBhdm9pZCBkdXBsaWNhdGlvbi4gSXRzIHByZXNlbmNlIGluIFlBTUwgZnJvbnRtYXR0ZXJcbiAgICogaXMgdXNlZCB0byBkZXRlY3QgdjIgZm9ybWF0IHZzIHYxIChib2R5LXRleHQtb25seSkgZm9ybWF0LlxuICAgKlxuICAgKiBAc2luY2UgSXNzdWUgIzYwMiDigJQgRHVhbC1maWVsZCBlbGVtZW50IGFyY2hpdGVjdHVyZVxuICAgKi9cbiAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHYXRla2VlcGVyIGFjY2Vzcy1jb250cm9sIHBvbGljeSBmb3IgdGhpcyBlbGVtZW50LlxuICAgKlxuICAgKiBXaGVuIHRoZSBlbGVtZW50IGlzIGFjdGl2ZSwgaXRzIHBvbGljeSBwYXJ0aWNpcGF0ZXMgaW4gTGF5ZXIgMlxuICAgKiAoZWxlbWVudCBwb2xpY3kgcmVzb2x1dGlvbikgb2YgdGhlIEdhdGVrZWVwZXIgZW5mb3JjZW1lbnQgcGlwZWxpbmUuXG4gICAqIHtAbGluayByZXNvbHZlRWxlbWVudFBvbGljeX0gaXRlcmF0ZXMgYWxsIGFjdGl2ZSBlbGVtZW50cyBhbmQgZXZhbHVhdGVzXG4gICAqIHRoZWlyIGBnYXRla2VlcGVyYCBmaWVsZCB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBNQ1AtQVFMIG9wZXJhdGlvblxuICAgKiBzaG91bGQgYmUgYWxsb3dlZCwgZGVuaWVkLCBvciByZXF1aXJlIGNvbmZpcm1hdGlvbi5cbiAgICpcbiAgICogUG9saWN5IGZpZWxkcyAoYWxsIG9wdGlvbmFsKTpcbiAgICogLSBgYWxsb3dgICDigJQgT3BlcmF0aW9ucyBhdXRvLWFwcHJvdmVkIHdoZW4gdGhpcyBlbGVtZW50IGlzIGFjdGl2ZVxuICAgKiAtIGBjb25maXJtYCDigJQgT3BlcmF0aW9ucyByZXF1aXJpbmcgdXNlciBjb25maXJtYXRpb25cbiAgICogLSBgZGVueWAgICDigJQgT3BlcmF0aW9ucyBibG9ja2VkIG91dHJpZ2h0XG4gICAqIC0gYHNjb3BlUmVzdHJpY3Rpb25zYCDigJQgUmVzdHJpY3Qgb3BlcmF0aW9ucyB0by9mcm9tIHNwZWNpZmljIGVsZW1lbnQgdHlwZXNcbiAgICpcbiAgICogRGVmaW5lZCBpbiBZQU1MIGZyb250IG1hdHRlciBhbmQgdmFsaWRhdGVkIGF0IGJvdGggd3JpdGUgdGltZVxuICAgKiAoe0BsaW5rIHZhbGlkYXRlR2F0ZWtlZXBlclBvbGljeX0pIGFuZCByZWFkIHRpbWUgdmlhXG4gICAqIHtAbGluayBwYXJzZUVsZW1lbnRQb2xpY3l9LiBNYWxmb3JtZWQgcG9saWNpZXMgYXJlIGxvZ2dlZCBhbmQgc3RyaXBwZWQuXG4gICAqXG4gICAqIEBzaW5jZSBJc3N1ZSAjNTI0IOKAlCBFeHRlbmRlZCBmcm9tIGFnZW50cyB0byBhbGwgZWxlbWVudCB0eXBlc1xuICAgKiBAc2VlIEVsZW1lbnRHYXRla2VlcGVyUG9saWN5XG4gICAqIEBzZWUgcmVzb2x2ZUVsZW1lbnRQb2xpY3lcbiAgICovXG4gIGdhdGVrZWVwZXI/OiBFbGVtZW50R2F0ZWtlZXBlclBvbGljeTtcblxuICAvKipcbiAgICogUnVudGltZS1vbmx5IGRpYWdub3N0aWNzIGZvciBtYWxmb3JtZWQgZ2F0ZWtlZXBlciBwb2xpY3kgZGlzY292ZXJlZCBkdXJpbmcgbG9hZC5cbiAgICogVGhpcyBpcyByZXBvcnRpbmcgc3RhdGUsIG5vdCBlbmZvcmNlYWJsZSBwb2xpY3ksIGFuZCBtdXN0IG5ldmVyIGJlIHBlcnNpc3RlZC5cbiAgICovXG4gIGdhdGVrZWVwZXJEaWFnbm9zdGljcz86IHtcbiAgICB2YWxpZDogZmFsc2U7XG4gICAgZW5mb3JjZWFibGU6IGZhbHNlO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgfTtcbn1cblxuLy8gUmVmZXJlbmNlIHRvIGV4dGVybmFsIG9yIGludGVybmFsIHJlc291cmNlc1xuZXhwb3J0IGludGVyZmFjZSBSZWZlcmVuY2Uge1xuICB0eXBlOiBSZWZlcmVuY2VUeXBlO1xuICB1cmk6IHN0cmluZzsgICAgICAgICAgICAgIC8vIFVSTCwgZmlsZSBwYXRoLCBkb2N1bWVudCBJRCwgcG9ydGZvbGlvIHJlZmVyZW5jZVxuICB0aXRsZTogc3RyaW5nOyAgICAgICAgICAgIC8vIEh1bWFuLXJlYWRhYmxlIG5hbWVcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7ICAgICAvLyBXaGF0IHRoaXMgcmVmZXJlbmNlIHByb3ZpZGVzXG4gIHJlcXVpcmVkPzogYm9vbGVhbjsgICAgICAgLy8gSXMgdGhpcyByZWZlcmVuY2UgZXNzZW50aWFsP1xuICByYWdFbmFibGVkPzogYm9vbGVhbjsgICAgIC8vIFNob3VsZCB0aGlzIGJlIGxvYWRlZCBmb3IgUkFHP1xuICBjYWNoZWFibGU/OiBib29sZWFuOyAgICAgIC8vIENhbiB0aGlzIGJlIGNhY2hlZCBsb2NhbGx5P1xuICByZWZyZXNoSW50ZXJ2YWw/OiBudW1iZXI7IC8vIEhvdyBvZnRlbiB0byByZWZyZXNoIChpbiBob3Vycylcbn1cblxuLy8gVHlwZXMgb2YgcmVmZXJlbmNlcyBzdXBwb3J0ZWRcbmV4cG9ydCBlbnVtIFJlZmVyZW5jZVR5cGUge1xuICBJTlRFUk5BTCA9ICdpbnRlcm5hbCcsICAgICAgLy8gUmVmZXJlbmNlIHRvIGFub3RoZXIgZWxlbWVudFxuICBFWFRFUk5BTCA9ICdleHRlcm5hbCcsICAgICAgLy8gV2ViIFVSTFxuICBET0NVTUVOVCA9ICdkb2N1bWVudCcsICAgICAgLy8gTG9jYWwgb3IgUkFHIGRvY3VtZW50XG4gIFJFUE9TSVRPUlkgPSAncmVwb3NpdG9yeScsICAvLyBHaXQgcmVwb3NpdG9yeVxuICBBUEkgPSAnYXBpJywgICAgICAgICAgICAgICAvLyBBUEkgZW5kcG9pbnRcbiAgUE9SVEZPTElPID0gJ3BvcnRmb2xpbycgICAgIC8vIFJlZmVyZW5jZSB3aXRoaW4gcG9ydGZvbGlvXG59XG5cbi8vIEVsZW1lbnQgZGVwZW5kZW5jeSBzcGVjaWZpY2F0aW9uXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnREZXBlbmRlbmN5IHtcbiAgZWxlbWVudElkOiBzdHJpbmc7XG4gIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZTtcbiAgdmVyc2lvbkNvbnN0cmFpbnQ/OiBzdHJpbmc7ICAvLyBlLmcuLCBcIl4xLjAuMFwiLCBcIj49Mi4wLjBcIlxuICBvcHRpb25hbD86IGJvb2xlYW47XG59XG5cbi8vIFZhbGlkYXRpb24gcmVzdWx0IGZvciBlbGVtZW50c1xuZXhwb3J0IGludGVyZmFjZSBFbGVtZW50VmFsaWRhdGlvblJlc3VsdCB7XG4gIHZhbGlkOiBib29sZWFuO1xuICBlcnJvcnM/OiBWYWxpZGF0aW9uRXJyb3JbXTtcbiAgd2FybmluZ3M/OiBWYWxpZGF0aW9uV2FybmluZ1tdO1xuICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb25FcnJvciB7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgY29kZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uV2FybmluZyB7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2V2ZXJpdHk/OiAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnO1xufVxuXG4vLyBFbGVtZW50IHN0YXR1cyB0cmFja2luZ1xuZXhwb3J0IGVudW0gRWxlbWVudFN0YXR1cyB7XG4gIElOQUNUSVZFID0gJ2luYWN0aXZlJyxcbiAgQUNUSVZBVElORyA9ICdhY3RpdmF0aW5nJyxcbiAgQUNUSVZFID0gJ2FjdGl2ZScsXG4gIERFQUNUSVZBVElORyA9ICdkZWFjdGl2YXRpbmcnLFxuICBFUlJPUiA9ICdlcnJvcicsXG4gIFNVU1BFTkRFRCA9ICdzdXNwZW5kZWQnXG59XG5cbi8vIFJhdGluZyBzeXN0ZW0gZm9yIGNvbnRpbnVvdXMgaW1wcm92ZW1lbnRcbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudFJhdGluZ3Mge1xuICBhaVJhdGluZzogbnVtYmVyOyAgICAgICAgICAgICAgLy8gMC01IHN0YXJzIChBSSBldmFsdWF0aW9uKVxuICB1c2VyUmF0aW5nPzogbnVtYmVyOyAgICAgICAgICAgLy8gMC01IHN0YXJzICh1c2VyIGZlZWRiYWNrKVxuICByYXRpbmdDb3VudDogbnVtYmVyOyAgICAgICAgICAgLy8gTnVtYmVyIG9mIHJhdGluZ3NcbiAgbGFzdEV2YWx1YXRlZDogRGF0ZTsgICAgICAgICAgLy8gV2hlbiBsYXN0IGV2YWx1YXRlZFxuICBjb25maWRlbmNlOiBudW1iZXI7ICAgICAgICAgICAgLy8gMC0xIGNvbmZpZGVuY2UgaW4gcmF0aW5nXG4gIFxuICAvLyBEZXRhaWxlZCBicmVha2Rvd25zIChjdXN0b21pemFibGUgcGVyIGVsZW1lbnQgdHlwZSlcbiAgYnJlYWtkb3duPzogUmF0aW5nQnJlYWtkb3duO1xuICBcbiAgLy8gRGVsdGEgdHJhY2tpbmdcbiAgcmF0aW5nRGVsdGE/OiBudW1iZXI7ICAgICAgICAgLy8gRGlmZmVyZW5jZSBiZXR3ZWVuIEFJIGFuZCB1c2VyIHJhdGluZ1xuICB0cmVuZDogJ2ltcHJvdmluZycgfCAnZGVjbGluaW5nJyB8ICdzdGFibGUnO1xuICBcbiAgLy8gRmVlZGJhY2sgaGlzdG9yeVxuICBmZWVkYmFja0hpc3Rvcnk/OiBVc2VyRmVlZGJhY2tbXTtcbn1cblxuLy8gQmFzZSByYXRpbmcgYnJlYWtkb3duIC0gZWxlbWVudCB0eXBlcyBjYW4gZXh0ZW5kIHRoaXNcbmV4cG9ydCBpbnRlcmZhY2UgUmF0aW5nQnJlYWtkb3duIHtcbiAgLy8gQmFzZSBtZXRyaWNzIGFsbCBlbGVtZW50cyBzaGFyZVxuICBlZmZlY3RpdmVuZXNzOiBudW1iZXI7ICAgICAgICAgLy8gSG93IHdlbGwgaXQgYWNoaWV2ZXMgaXRzIHB1cnBvc2VcbiAgcmVsaWFiaWxpdHk6IG51bWJlcjsgICAgICAgICAgLy8gSG93IGNvbnNpc3RlbnQgaXQgaXNcbiAgdXNhYmlsaXR5OiBudW1iZXI7ICAgICAgICAgICAvLyBIb3cgZWFzeSB0byB3b3JrIHdpdGhcbiAgXG4gIC8vIEVsZW1lbnQtc3BlY2lmaWMgbWV0cmljcyAodmlhIGluZGV4IHNpZ25hdHVyZSlcbiAgW2tleTogc3RyaW5nXTogbnVtYmVyO1xufVxuXG4vLyBVc2VyIGZlZWRiYWNrIHRyYWNraW5nXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJGZWVkYmFjayB7XG4gIHRpbWVzdGFtcDogRGF0ZTtcbiAgZmVlZGJhY2s6IHN0cmluZzsgICAgICAgICAgICAgLy8gTmF0dXJhbCBsYW5ndWFnZSBmZWVkYmFja1xuICBzZW50aW1lbnQ6ICdwb3NpdGl2ZScgfCAnbmVnYXRpdmUnIHwgJ25ldXRyYWwnO1xuICBpbmZlcnJlZFJhdGluZz86IG51bWJlcjsgICAgICAvLyBSYXRpbmcgaW5mZXJyZWQgZnJvbSBmZWVkYmFja1xuICBjb250ZXh0PzogRmVlZGJhY2tDb250ZXh0OyAgICAvLyBXaGF0IHdhcyBoYXBwZW5pbmdcbiAgZWxlbWVudFZlcnNpb24/OiBzdHJpbmc7ICAgICAgLy8gVmVyc2lvbiBhdCB0aW1lIG9mIGZlZWRiYWNrXG59XG5cbi8vIENvbnRleHQgZm9yIGZlZWRiYWNrXG5leHBvcnQgaW50ZXJmYWNlIEZlZWRiYWNrQ29udGV4dCB7XG4gIHRhc2s/OiBzdHJpbmc7ICAgICAgICAgICAgICAgIC8vIFdoYXQgdGFzayB3YXMgYmVpbmcgcGVyZm9ybWVkXG4gIHJlbGF0ZWRFbGVtZW50cz86IHN0cmluZ1tdOyAgIC8vIE90aGVyIGFjdGl2ZSBlbGVtZW50c1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7ICAgICAgICAgIC8vIEZvciBncm91cGluZyByZWxhdGVkIGZlZWRiYWNrXG4gIGVudmlyb25tZW50RGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8vIFNjaGVtYSB2ZXJzaW9uaW5nIHN1cHBvcnRcbmV4cG9ydCBpbnRlcmZhY2UgSVNjaGVtYVZlcnNpb24ge1xuICBzY2hlbWFWZXJzaW9uPzogc3RyaW5nOyAgICAgICAvLyBUcmFjayBpbnRlcmZhY2UgdmVyc2lvblxuICBtaWdyYXRlPyhmcm9tVmVyc2lvbjogc3RyaW5nKTogdm9pZDsgIC8vIE1pZ3JhdGlvbiBzdXBwb3J0XG59XG4iXX0=
@@ -355,9 +355,10 @@
355
355
  }
356
356
 
357
357
  .perm-feed--modal {
358
- height: calc(100vh - 11rem);
358
+ height: 100%;
359
359
  max-height: none;
360
360
  min-height: 0;
361
+ overflow: auto;
361
362
  }
362
363
 
363
364
  .perm-feed-empty {
@@ -398,6 +399,16 @@
398
399
  .perm-selected-grid {
399
400
  grid-template-columns: 1fr;
400
401
  }
402
+
403
+ .perm-audit-summary-row {
404
+ grid-template-columns: 1fr;
405
+ gap: 0.45rem;
406
+ }
407
+
408
+ .perm-audit-detail-row {
409
+ grid-template-columns: 1fr;
410
+ gap: 0.25rem;
411
+ }
401
412
  }
402
413
 
403
414
  .perm-feed-tool {
@@ -420,6 +431,133 @@
420
431
  width: min(82rem, 100%);
421
432
  }
422
433
 
434
+ .perm-audit-modal .modal-body {
435
+ display: flex;
436
+ min-height: 0;
437
+ padding: 0;
438
+ }
439
+
440
+ .perm-audit-modal .modal-meta {
441
+ row-gap: 0.35rem;
442
+ }
443
+
444
+ .perm-audit-modal .perm-feed--modal {
445
+ padding: 0.875rem 1rem 1rem;
446
+ }
447
+
448
+ .perm-audit-entry {
449
+ border: 1px solid var(--ink-100, #e2e8f0);
450
+ border-radius: 0.75rem;
451
+ background: var(--paper-strong, #fff);
452
+ margin-bottom: 0.75rem;
453
+ overflow: hidden;
454
+ }
455
+
456
+ .perm-audit-entry:last-child {
457
+ margin-bottom: 0;
458
+ }
459
+
460
+ .perm-audit-entry[open] {
461
+ box-shadow: 0 10px 24px color-mix(in srgb, var(--ink-900, #0f172a) 10%, transparent);
462
+ }
463
+
464
+ .perm-audit-summary-row {
465
+ display: grid;
466
+ grid-template-columns: minmax(6rem, auto) auto minmax(9rem, auto) minmax(0, 1fr);
467
+ gap: 0.75rem;
468
+ align-items: center;
469
+ padding: 0.875rem 1rem;
470
+ cursor: pointer;
471
+ list-style: none;
472
+ }
473
+
474
+ .perm-audit-summary-row::-webkit-details-marker {
475
+ display: none;
476
+ }
477
+
478
+ .perm-audit-summary-row:hover {
479
+ background: var(--ink-50, #f8fafc);
480
+ }
481
+
482
+ .perm-audit-time-group {
483
+ display: flex;
484
+ flex-direction: column;
485
+ gap: 0.15rem;
486
+ min-width: 0;
487
+ }
488
+
489
+ .perm-audit-time {
490
+ color: var(--ink-800, #1e293b);
491
+ font-size: 0.82rem;
492
+ font-weight: 700;
493
+ }
494
+
495
+ .perm-audit-date {
496
+ color: var(--ink-500, #64748b);
497
+ font-size: 0.72rem;
498
+ }
499
+
500
+ .perm-audit-tool {
501
+ color: var(--ink-800, #1e293b);
502
+ font-weight: 700;
503
+ min-width: 0;
504
+ overflow-wrap: anywhere;
505
+ }
506
+
507
+ .perm-audit-context {
508
+ color: var(--ink-600, #475569);
509
+ min-width: 0;
510
+ overflow-wrap: anywhere;
511
+ }
512
+
513
+ .perm-audit-entry-body {
514
+ border-top: 1px solid var(--ink-100, #e2e8f0);
515
+ padding: 0.95rem 1rem 1rem;
516
+ background: color-mix(in srgb, var(--paper-base, #f8fafc) 82%, white);
517
+ }
518
+
519
+ .perm-audit-reason-block {
520
+ margin-bottom: 0.85rem;
521
+ }
522
+
523
+ .perm-audit-reason-text {
524
+ margin: 0.3rem 0 0;
525
+ color: var(--ink-700, #334155);
526
+ line-height: 1.55;
527
+ }
528
+
529
+ .perm-audit-detail-list {
530
+ display: grid;
531
+ gap: 0.625rem;
532
+ margin: 0;
533
+ }
534
+
535
+ .perm-audit-detail-row {
536
+ display: grid;
537
+ grid-template-columns: minmax(8rem, 11rem) minmax(0, 1fr);
538
+ gap: 0.75rem;
539
+ align-items: start;
540
+ }
541
+
542
+ .perm-audit-meta-label {
543
+ color: var(--ink-500, #64748b);
544
+ font-family: var(--font-mono, 'IBM Plex Mono', monospace);
545
+ font-size: 0.74rem;
546
+ text-transform: uppercase;
547
+ letter-spacing: 0.05em;
548
+ }
549
+
550
+ .perm-audit-meta-value {
551
+ margin: 0;
552
+ color: var(--ink-800, #1e293b);
553
+ overflow-wrap: anywhere;
554
+ }
555
+
556
+ .perm-audit-detail-value--mono {
557
+ font-family: var(--font-mono, 'IBM Plex Mono', monospace);
558
+ font-size: 0.82rem;
559
+ }
560
+
423
561
  /* ── Source Elements ───────────────────────────────────────── */
424
562
 
425
563
  .perm-source-list {
@@ -464,6 +602,29 @@
464
602
  overflow-wrap: anywhere;
465
603
  }
466
604
 
605
+ .perm-source-warning {
606
+ display: inline-flex;
607
+ align-items: center;
608
+ padding: 0.125rem 0.375rem;
609
+ border-radius: 999px;
610
+ background: color-mix(in srgb, #f59e0b 16%, white);
611
+ color: #431407;
612
+ font-size: 0.6875rem;
613
+ font-weight: 700;
614
+ text-transform: uppercase;
615
+ }
616
+
617
+ .perm-inline-warning {
618
+ margin-top: 0.5rem;
619
+ padding: 0.625rem 0.75rem;
620
+ border: 1px solid color-mix(in srgb, #f59e0b 35%, white);
621
+ border-radius: 0.75rem;
622
+ background: color-mix(in srgb, #f59e0b 10%, white);
623
+ color: #431407;
624
+ font-size: 0.8125rem;
625
+ line-height: 1.45;
626
+ }
627
+
467
628
  /* ── Dark Mode ─────────────────────────────────────────────── */
468
629
 
469
630
  [data-theme="dark"] .perm-status-bar,
@@ -527,7 +688,10 @@
527
688
  [data-theme="dark"] .perm-selected-title,
528
689
  [data-theme="dark"] .perm-feed-tool,
529
690
  [data-theme="dark"] .perm-pattern-text,
530
- [data-theme="dark"] .perm-source-name {
691
+ [data-theme="dark"] .perm-source-name,
692
+ [data-theme="dark"] .perm-audit-time,
693
+ [data-theme="dark"] .perm-audit-tool,
694
+ [data-theme="dark"] .perm-audit-meta-value {
531
695
  color: var(--ink-200, #e2e8f0);
532
696
  }
533
697
 
@@ -537,6 +701,20 @@
537
701
  background: color-mix(in srgb, var(--paper) 36%, var(--surface-1));
538
702
  }
539
703
 
704
+ [data-theme="dark"] .perm-audit-entry {
705
+ background: color-mix(in srgb, var(--paper) 22%, var(--surface-1));
706
+ border-color: color-mix(in srgb, var(--line) 88%, transparent);
707
+ }
708
+
709
+ [data-theme="dark"] .perm-audit-summary-row:hover {
710
+ background: color-mix(in srgb, var(--surface-2) 72%, var(--paper-strong));
711
+ }
712
+
713
+ [data-theme="dark"] .perm-audit-entry-body {
714
+ background: color-mix(in srgb, var(--surface-1) 82%, var(--paper-strong));
715
+ border-color: color-mix(in srgb, var(--line) 92%, transparent);
716
+ }
717
+
540
718
  [data-theme="dark"] .perm-source-item,
541
719
  [data-theme="dark"] .perm-pattern-item,
542
720
  [data-theme="dark"] .perm-feed-row {
@@ -548,6 +726,16 @@
548
726
  background: color-mix(in srgb, var(--surface-2) 72%, var(--paper-strong));
549
727
  }
550
728
 
729
+ [data-theme="dark"] .perm-audit-context,
730
+ [data-theme="dark"] .perm-audit-reason-text {
731
+ color: var(--ink-300, #cbd5e1);
732
+ }
733
+
734
+ [data-theme="dark"] .perm-audit-date,
735
+ [data-theme="dark"] .perm-audit-meta-label {
736
+ color: var(--ink-500, #7b93a7);
737
+ }
738
+
551
739
  [data-theme="dark"] .perm-source-type {
552
740
  background: color-mix(in srgb, var(--surface-2) 90%, var(--paper-strong));
553
741
  color: var(--ink-900, #dce6f2);
@@ -217,16 +217,14 @@
217
217
  const selectedSessionId = selectedData?.sessionId;
218
218
  if (elements.length === 0) {
219
219
  list.innerHTML = '<li class="perm-pattern-empty">No active elements with policies</li>';
220
+ renderInvalidPolicySummary('perm-all-invalid-policy-summary', []);
220
221
  return;
221
222
  }
222
223
 
223
- list.innerHTML = elements.map(el => `
224
- <li class="perm-source-item${elementMatchesSelected(el, selectedSessionId) ? ' perm-source-item--selected' : ''}">
225
- <span class="perm-source-type">${esc(el.type)}</span>
226
- <span class="perm-source-name">${esc(el.element_name || el.name || '')}</span>
227
- ${el.description ? `<span style="color:var(--ink-400);font-size:0.75rem;margin-left:auto">${esc(el.description)}</span>` : ''}
228
- </li>
229
- `).join('');
224
+ renderInvalidPolicySummary('perm-all-invalid-policy-summary', elements);
225
+ list.innerHTML = elements.map(el =>
226
+ renderPolicySourceItem(el, elementMatchesSelected(el, selectedSessionId) ? ' perm-source-item--selected' : '')
227
+ ).join('');
230
228
  }
231
229
 
232
230
  function renderSelectedSessionDetail(selectedData) {
@@ -267,15 +265,10 @@
267
265
  }
268
266
 
269
267
  const elements = selectedData.elements || [];
268
+ renderInvalidPolicySummary('perm-selected-invalid-policy-summary', elements);
270
269
  sourceList.innerHTML = elements.length === 0
271
270
  ? '<li class="perm-pattern-empty">No policy-bearing elements found for this session</li>'
272
- : elements.map(el => `
273
- <li class="perm-source-item perm-source-item--detail">
274
- <span class="perm-source-type">${esc(el.type)}</span>
275
- <span class="perm-source-name">${esc(el.element_name || el.name || '')}</span>
276
- ${el.description ? `<span style="color:var(--ink-400);font-size:0.75rem;margin-left:auto">${esc(el.description)}</span>` : ''}
277
- </li>
278
- `).join('');
271
+ : elements.map(el => renderPolicySourceItem(el, ' perm-source-item--detail')).join('');
279
272
 
280
273
  renderPatternList('perm-selected-deny-list', selectedData.denyRules || [], 'deny');
281
274
  renderPatternList('perm-selected-allow-list', selectedData.allowRules || [], 'allow');
@@ -331,29 +324,152 @@
331
324
  if (latestId === lastDecisionId) return; // no change
332
325
  lastDecisionId = latestId;
333
326
 
334
- const html = decisions.map(d => {
335
- const time = new Date(d.timestamp).toLocaleTimeString();
336
- const toolDisplay = d.tool_name === 'Bash'
337
- ? `Bash: ${esc(truncate(d.command || '', 60))}`
338
- : esc(d.tool_name);
339
-
340
- return `
341
- <div class="perm-feed-row">
342
- <span class="perm-feed-time">${time}</span>
343
- <span class="perm-feed-decision perm-feed-decision--${d.decision}">${d.decision.toUpperCase()}</span>
344
- <span class="perm-feed-tool" title="${esc(d.command || d.tool_name)}">${toolDisplay}</span>
345
- <span class="perm-feed-reason" title="${esc(d.reason || '')}">${esc(d.reason || '')}</span>
346
- </div>
347
- `;
348
- }).join('');
327
+ const html = decisions.map(renderCompactDecisionRow).join('');
349
328
 
350
329
  feed.innerHTML = html;
351
- if (modalFeed) modalFeed.innerHTML = html;
330
+ if (modalFeed) modalFeed.innerHTML = renderAuditModal(decisions);
352
331
  if (modalCount) {
353
332
  modalCount.textContent = `${decisions.length} captured ${decisions.length === 1 ? 'entry' : 'entries'}`;
354
333
  }
355
334
  }
356
335
 
336
+ function renderCompactDecisionRow(decision) {
337
+ const toolDisplay = decision.tool_name === 'Bash'
338
+ ? `Bash: ${esc(truncate(decision.command || '', 60))}`
339
+ : esc(decision.tool_name);
340
+
341
+ return `
342
+ <div class="perm-feed-row">
343
+ <span class="perm-feed-time">${esc(formatShortTime(decision.timestamp))}</span>
344
+ <span class="perm-feed-decision perm-feed-decision--${decision.decision}">${esc(getDecisionLabel(decision.decision))}</span>
345
+ <span class="perm-feed-tool" title="${esc(decision.command || decision.tool_name)}">${toolDisplay}</span>
346
+ <span class="perm-feed-reason" title="${esc(decision.reason || '')}">${esc(decision.reason || '')}</span>
347
+ </div>
348
+ `;
349
+ }
350
+
351
+ function renderAuditModal(decisions) {
352
+ if (!decisions || decisions.length === 0) {
353
+ return '<div class="perm-feed-empty">No permission decisions yet. Waiting for tool calls...</div>';
354
+ }
355
+
356
+ return decisions.map(renderAuditDecisionEntry).join('');
357
+ }
358
+
359
+ function renderAuditDecisionEntry(decision) {
360
+ const compactContext = getCompactContext(decision);
361
+ const detailRows = Array.isArray(decision.details) ? decision.details : [];
362
+ const reasonBlock = decision.reason
363
+ ? `
364
+ <div class="perm-audit-reason-block">
365
+ <div class="perm-audit-meta-label">Reason</div>
366
+ <p class="perm-audit-reason-text">${esc(decision.reason)}</p>
367
+ </div>
368
+ `
369
+ : '';
370
+ const detailList = detailRows.length > 0
371
+ ? `
372
+ <dl class="perm-audit-detail-list">
373
+ ${detailRows.map(detail => `
374
+ <div class="perm-audit-detail-row">
375
+ <dt class="perm-audit-meta-label">${esc(detail.label)}</dt>
376
+ <dd class="perm-audit-meta-value${detail.monospace ? ' perm-audit-detail-value--mono' : ''}">${esc(detail.value)}</dd>
377
+ </div>
378
+ `).join('')}
379
+ <div class="perm-audit-detail-row">
380
+ <dt class="perm-audit-meta-label">Exact Time</dt>
381
+ <dd class="perm-audit-meta-value perm-audit-detail-value--mono">${esc(formatExactTimestamp(decision.timestamp))}</dd>
382
+ </div>
383
+ </dl>
384
+ `
385
+ : `
386
+ <dl class="perm-audit-detail-list">
387
+ <div class="perm-audit-detail-row">
388
+ <dt class="perm-audit-meta-label">Exact Time</dt>
389
+ <dd class="perm-audit-meta-value perm-audit-detail-value--mono">${esc(formatExactTimestamp(decision.timestamp))}</dd>
390
+ </div>
391
+ </dl>
392
+ `;
393
+
394
+ return `
395
+ <details class="perm-audit-entry">
396
+ <summary class="perm-audit-summary-row">
397
+ <span class="perm-audit-time-group">
398
+ <span class="perm-audit-time">${esc(formatShortTime(decision.timestamp))}</span>
399
+ <span class="perm-audit-date">${esc(formatShortDate(decision.timestamp))}</span>
400
+ </span>
401
+ <span class="perm-feed-decision perm-feed-decision--${decision.decision}">${esc(getDecisionLabel(decision.decision))}</span>
402
+ <span class="perm-audit-tool">${esc(decision.tool_name)}</span>
403
+ <span class="perm-audit-context">${esc(compactContext)}</span>
404
+ </summary>
405
+ <div class="perm-audit-entry-body">
406
+ ${reasonBlock}
407
+ ${detailList}
408
+ </div>
409
+ </details>
410
+ `;
411
+ }
412
+
413
+ function formatShortTime(timestamp) {
414
+ return new Date(timestamp).toLocaleTimeString([], {
415
+ hour: 'numeric',
416
+ minute: '2-digit',
417
+ second: '2-digit',
418
+ });
419
+ }
420
+
421
+ function formatShortDate(timestamp) {
422
+ return new Date(timestamp).toLocaleDateString([], {
423
+ month: 'short',
424
+ day: 'numeric',
425
+ });
426
+ }
427
+
428
+ function formatExactTimestamp(timestamp) {
429
+ const date = new Date(timestamp);
430
+ return date.toLocaleString([], {
431
+ year: 'numeric',
432
+ month: 'short',
433
+ day: 'numeric',
434
+ hour: 'numeric',
435
+ minute: '2-digit',
436
+ second: '2-digit',
437
+ timeZoneName: 'short',
438
+ });
439
+ }
440
+
441
+ function getDecisionLabel(decision) {
442
+ return String(decision || '').toUpperCase();
443
+ }
444
+
445
+ function getCompactContext(decision) {
446
+ if (decision.targetLabel && decision.target) {
447
+ return `${decision.targetLabel}: ${truncate(decision.target, 96)}`;
448
+ }
449
+ if (decision.command) {
450
+ return truncate(decision.command, 96);
451
+ }
452
+ return decision.reason || 'No extra context captured';
453
+ }
454
+
455
+ function renderPolicySourceItem(el, extraClass = '') {
456
+ const invalidBadge = el.invalidGatekeeperPolicy
457
+ ? `<span class="perm-source-warning" title="${esc(el.invalidGatekeeperMessage || '')}">policy invalid</span>`
458
+ : '';
459
+ const description = el.description
460
+ ? `<span style="color:var(--ink-400);font-size:0.75rem;margin-left:auto">${esc(el.description)}</span>`
461
+ : '';
462
+
463
+ return `
464
+ <li class="perm-source-item${extraClass}">
465
+ <span class="perm-source-type">${esc(el.type)}</span>
466
+ <span class="perm-source-name">${esc(el.element_name || el.name || '')}</span>
467
+ ${invalidBadge}
468
+ ${description}
469
+ </li>
470
+ `;
471
+ }
472
+
357
473
  function deriveSelectedSessionData(aggregateData, sessionId) {
358
474
  if (!sessionId) return null;
359
475
 
@@ -375,6 +491,8 @@
375
491
  type: element.type,
376
492
  element_name: element.element_name,
377
493
  description: element.description,
494
+ invalidGatekeeperPolicy: !!element.invalidGatekeeperPolicy,
495
+ invalidGatekeeperMessage: element.invalidGatekeeperMessage,
378
496
  };
379
497
  }),
380
498
  permissionPromptActive: !!aggregateData?.permissionPromptActive,
@@ -501,6 +619,7 @@
501
619
  <div>
502
620
  <div class="perm-selected-title" id="perm-selected-title">Selected Session</div>
503
621
  <div class="perm-selected-subtitle" id="perm-selected-subtitle"></div>
622
+ <div class="perm-inline-warning" id="perm-selected-invalid-policy-summary" hidden></div>
504
623
  </div>
505
624
  <span class="perm-selected-badge" id="perm-selected-badge" hidden>Persisted Policy State (Debug Info)</span>
506
625
  </div>
@@ -544,6 +663,7 @@
544
663
  <div>
545
664
  <div class="perm-selected-title">All Sessions</div>
546
665
  <div class="perm-selected-subtitle">${esc('Aggregate policy state across all live and persisted sessions. Rules shown here include both Dollhouse operation policies and external tool restrictions.')}${dataAdvisoryPlaceholder()}</div>
666
+ <div class="perm-inline-warning" id="perm-all-invalid-policy-summary" hidden></div>
547
667
  </div>
548
668
  </div>
549
669
 
@@ -697,4 +817,25 @@
697
817
  return '<span id="perm-all-sessions-advisory" class="perm-inline-advisory" hidden></span>';
698
818
  }
699
819
 
820
+ function renderInvalidPolicySummary(elementId, elements) {
821
+ const banner = document.getElementById(elementId);
822
+ if (!banner) return;
823
+
824
+ const invalid = (elements || []).filter(function (element) {
825
+ return !!element.invalidGatekeeperPolicy;
826
+ });
827
+
828
+ if (invalid.length === 0) {
829
+ banner.hidden = true;
830
+ banner.textContent = '';
831
+ return;
832
+ }
833
+
834
+ const names = invalid.map(function (element) {
835
+ return element.element_name || element.name || 'unknown';
836
+ });
837
+ banner.hidden = false;
838
+ banner.textContent = `${invalid.length} active element${invalid.length === 1 ? '' : 's'} ha${invalid.length === 1 ? 's' : 've'} malformed gatekeeper policy. These elements remain active, but that policy is not being enforced: ${names.join(', ')}`;
839
+ }
840
+
700
841
  })();