@dollhousemcp/mcp-server 1.3.0 → 1.3.3

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 (684) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +99 -17
  3. package/dist/collection/ElementInstaller.d.ts.map +1 -1
  4. package/dist/collection/ElementInstaller.js +3 -7
  5. package/dist/elements/index.d.ts +0 -2
  6. package/dist/elements/index.d.ts.map +1 -1
  7. package/dist/elements/index.js +1 -3
  8. package/dist/elements/skills/Skill.d.ts.map +1 -1
  9. package/dist/elements/skills/Skill.js +3 -2
  10. package/dist/elements/skills/SkillManager.d.ts +83 -0
  11. package/dist/elements/skills/SkillManager.d.ts.map +1 -0
  12. package/dist/elements/skills/SkillManager.js +383 -0
  13. package/dist/elements/skills/index.d.ts +1 -0
  14. package/dist/elements/skills/index.d.ts.map +1 -1
  15. package/dist/elements/skills/index.js +2 -1
  16. package/dist/index.d.ts +51 -0
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +577 -3
  19. package/dist/portfolio/PortfolioManager.d.ts.map +1 -1
  20. package/dist/portfolio/PortfolioManager.js +1 -3
  21. package/dist/portfolio/types.d.ts +1 -3
  22. package/dist/portfolio/types.d.ts.map +1 -1
  23. package/dist/portfolio/types.js +1 -3
  24. package/dist/security/audit/config/suppressions.d.ts.map +1 -1
  25. package/dist/security/audit/config/suppressions.js +6 -1
  26. package/dist/server/ServerSetup.d.ts.map +1 -1
  27. package/dist/server/ServerSetup.js +5 -2
  28. package/dist/server/tools/CollectionTools.d.ts.map +1 -1
  29. package/dist/server/tools/CollectionTools.js +52 -7
  30. package/dist/server/tools/ElementTools.d.ts +11 -0
  31. package/dist/server/tools/ElementTools.d.ts.map +1 -0
  32. package/dist/server/tools/ElementTools.js +174 -0
  33. package/dist/server/tools/index.d.ts +1 -0
  34. package/dist/server/tools/index.d.ts.map +1 -1
  35. package/dist/server/tools/index.js +2 -1
  36. package/dist/server/types.d.ts +8 -0
  37. package/dist/server/types.d.ts.map +1 -1
  38. package/dist/server/types.js +1 -1
  39. package/package.json +1 -1
  40. package/dist/collection/MarketplaceBrowser.d.ts +0 -24
  41. package/dist/collection/MarketplaceBrowser.d.ts.map +0 -1
  42. package/dist/collection/MarketplaceBrowser.js +0 -115
  43. package/dist/collection/MarketplaceSearch.d.ts +0 -18
  44. package/dist/collection/MarketplaceSearch.d.ts.map +0 -1
  45. package/dist/collection/MarketplaceSearch.js +0 -48
  46. package/dist/collection/PersonaInstaller.d.ts +0 -26
  47. package/dist/collection/PersonaInstaller.d.ts.map +0 -1
  48. package/dist/collection/PersonaInstaller.js +0 -103
  49. package/dist/elements/ensembles/Ensemble.d.ts +0 -144
  50. package/dist/elements/ensembles/Ensemble.d.ts.map +0 -1
  51. package/dist/elements/ensembles/Ensemble.js +0 -860
  52. package/dist/elements/ensembles/EnsembleManager.d.ts +0 -85
  53. package/dist/elements/ensembles/EnsembleManager.d.ts.map +0 -1
  54. package/dist/elements/ensembles/EnsembleManager.js +0 -378
  55. package/dist/elements/ensembles/constants.d.ts +0 -73
  56. package/dist/elements/ensembles/constants.d.ts.map +0 -1
  57. package/dist/elements/ensembles/constants.js +0 -92
  58. package/dist/elements/ensembles/index.d.ts +0 -8
  59. package/dist/elements/ensembles/index.d.ts.map +0 -1
  60. package/dist/elements/ensembles/index.js +0 -8
  61. package/dist/elements/ensembles/types.d.ts +0 -92
  62. package/dist/elements/ensembles/types.d.ts.map +0 -1
  63. package/dist/elements/ensembles/types.js +0 -8
  64. package/dist/elements/memories/Memory.d.ts +0 -110
  65. package/dist/elements/memories/Memory.d.ts.map +0 -1
  66. package/dist/elements/memories/Memory.js +0 -470
  67. package/dist/elements/memories/MemoryManager.d.ts +0 -86
  68. package/dist/elements/memories/MemoryManager.d.ts.map +0 -1
  69. package/dist/elements/memories/MemoryManager.js +0 -435
  70. package/dist/elements/memories/constants.d.ts +0 -42
  71. package/dist/elements/memories/constants.d.ts.map +0 -1
  72. package/dist/elements/memories/constants.js +0 -49
  73. package/dist/elements/memories/index.d.ts +0 -6
  74. package/dist/elements/memories/index.d.ts.map +0 -1
  75. package/dist/elements/memories/index.js +0 -6
  76. package/dist/marketplace/GitHubClient.d.ts +0 -22
  77. package/dist/marketplace/GitHubClient.d.ts.map +0 -1
  78. package/dist/marketplace/GitHubClient.js +0 -112
  79. package/dist/marketplace/MarketplaceBrowser.d.ts +0 -24
  80. package/dist/marketplace/MarketplaceBrowser.d.ts.map +0 -1
  81. package/dist/marketplace/MarketplaceBrowser.js +0 -115
  82. package/dist/marketplace/MarketplaceSearch.d.ts +0 -18
  83. package/dist/marketplace/MarketplaceSearch.d.ts.map +0 -1
  84. package/dist/marketplace/MarketplaceSearch.js +0 -48
  85. package/dist/marketplace/PersonaDetails.d.ts +0 -22
  86. package/dist/marketplace/PersonaDetails.d.ts.map +0 -1
  87. package/dist/marketplace/PersonaDetails.js +0 -71
  88. package/dist/marketplace/PersonaInstaller.d.ts +0 -25
  89. package/dist/marketplace/PersonaInstaller.d.ts.map +0 -1
  90. package/dist/marketplace/PersonaInstaller.js +0 -100
  91. package/dist/marketplace/PersonaSubmitter.d.ts +0 -19
  92. package/dist/marketplace/PersonaSubmitter.d.ts.map +0 -1
  93. package/dist/marketplace/PersonaSubmitter.js +0 -57
  94. package/dist/marketplace/index.d.ts +0 -10
  95. package/dist/marketplace/index.d.ts.map +0 -1
  96. package/dist/marketplace/index.js +0 -10
  97. package/dist/server/tools/MarketplaceTools.d.ts +0 -10
  98. package/dist/server/tools/MarketplaceTools.d.ts.map +0 -1
  99. package/dist/server/tools/MarketplaceTools.js +0 -96
  100. package/dist/src/cache/APICache.d.ts +0 -23
  101. package/dist/src/cache/APICache.d.ts.map +0 -1
  102. package/dist/src/cache/APICache.js +0 -42
  103. package/dist/src/cache/index.d.ts +0 -5
  104. package/dist/src/cache/index.d.ts.map +0 -1
  105. package/dist/src/cache/index.js +0 -5
  106. package/dist/src/config/constants.d.ts +0 -25
  107. package/dist/src/config/constants.d.ts.map +0 -1
  108. package/dist/src/config/constants.js +0 -30
  109. package/dist/src/config/index.d.ts +0 -6
  110. package/dist/src/config/index.d.ts.map +0 -1
  111. package/dist/src/config/index.js +0 -6
  112. package/dist/src/config/indicator-config.d.ts +0 -107
  113. package/dist/src/config/indicator-config.d.ts.map +0 -1
  114. package/dist/src/config/indicator-config.js +0 -158
  115. package/dist/src/constants/defaultPersonas.d.ts +0 -10
  116. package/dist/src/constants/defaultPersonas.d.ts.map +0 -1
  117. package/dist/src/constants/defaultPersonas.js +0 -18
  118. package/dist/src/constants/limits.d.ts +0 -10
  119. package/dist/src/constants/limits.d.ts.map +0 -1
  120. package/dist/src/constants/limits.js +0 -13
  121. package/dist/src/errors/SecurityError.d.ts +0 -29
  122. package/dist/src/errors/SecurityError.d.ts.map +0 -1
  123. package/dist/src/errors/SecurityError.js +0 -47
  124. package/dist/src/errors/index.d.ts +0 -2
  125. package/dist/src/errors/index.d.ts.map +0 -1
  126. package/dist/src/errors/index.js +0 -2
  127. package/dist/src/index.barrel.d.ts +0 -21
  128. package/dist/src/index.barrel.d.ts.map +0 -1
  129. package/dist/src/index.barrel.js +0 -31
  130. package/dist/src/index.d.ts +0 -220
  131. package/dist/src/index.d.ts.map +0 -1
  132. package/dist/src/index.js +0 -1559
  133. package/dist/src/marketplace/GitHubClient.d.ts +0 -22
  134. package/dist/src/marketplace/GitHubClient.d.ts.map +0 -1
  135. package/dist/src/marketplace/GitHubClient.js +0 -112
  136. package/dist/src/marketplace/MarketplaceBrowser.d.ts +0 -21
  137. package/dist/src/marketplace/MarketplaceBrowser.d.ts.map +0 -1
  138. package/dist/src/marketplace/MarketplaceBrowser.js +0 -45
  139. package/dist/src/marketplace/MarketplaceSearch.d.ts +0 -18
  140. package/dist/src/marketplace/MarketplaceSearch.d.ts.map +0 -1
  141. package/dist/src/marketplace/MarketplaceSearch.js +0 -36
  142. package/dist/src/marketplace/PersonaDetails.d.ts +0 -22
  143. package/dist/src/marketplace/PersonaDetails.d.ts.map +0 -1
  144. package/dist/src/marketplace/PersonaDetails.js +0 -71
  145. package/dist/src/marketplace/PersonaInstaller.d.ts +0 -25
  146. package/dist/src/marketplace/PersonaInstaller.d.ts.map +0 -1
  147. package/dist/src/marketplace/PersonaInstaller.js +0 -100
  148. package/dist/src/marketplace/PersonaSubmitter.d.ts +0 -19
  149. package/dist/src/marketplace/PersonaSubmitter.d.ts.map +0 -1
  150. package/dist/src/marketplace/PersonaSubmitter.js +0 -57
  151. package/dist/src/marketplace/index.d.ts +0 -10
  152. package/dist/src/marketplace/index.d.ts.map +0 -1
  153. package/dist/src/marketplace/index.js +0 -10
  154. package/dist/src/persona/PersonaLoader.d.ts +0 -33
  155. package/dist/src/persona/PersonaLoader.d.ts.map +0 -1
  156. package/dist/src/persona/PersonaLoader.js +0 -139
  157. package/dist/src/persona/PersonaManager.d.ts +0 -112
  158. package/dist/src/persona/PersonaManager.d.ts.map +0 -1
  159. package/dist/src/persona/PersonaManager.js +0 -341
  160. package/dist/src/persona/PersonaValidator.d.ts +0 -33
  161. package/dist/src/persona/PersonaValidator.d.ts.map +0 -1
  162. package/dist/src/persona/PersonaValidator.js +0 -157
  163. package/dist/src/persona/export-import/PersonaExporter.d.ts +0 -43
  164. package/dist/src/persona/export-import/PersonaExporter.d.ts.map +0 -1
  165. package/dist/src/persona/export-import/PersonaExporter.js +0 -99
  166. package/dist/src/persona/export-import/PersonaImporter.d.ts +0 -65
  167. package/dist/src/persona/export-import/PersonaImporter.d.ts.map +0 -1
  168. package/dist/src/persona/export-import/PersonaImporter.js +0 -313
  169. package/dist/src/persona/export-import/PersonaSharer.d.ts +0 -60
  170. package/dist/src/persona/export-import/PersonaSharer.d.ts.map +0 -1
  171. package/dist/src/persona/export-import/PersonaSharer.js +0 -363
  172. package/dist/src/persona/export-import/index.d.ts +0 -10
  173. package/dist/src/persona/export-import/index.d.ts.map +0 -1
  174. package/dist/src/persona/export-import/index.js +0 -7
  175. package/dist/src/persona/index.d.ts +0 -7
  176. package/dist/src/persona/index.d.ts.map +0 -1
  177. package/dist/src/persona/index.js +0 -7
  178. package/dist/src/security/InputValidator.d.ts +0 -69
  179. package/dist/src/security/InputValidator.d.ts.map +0 -1
  180. package/dist/src/security/InputValidator.js +0 -381
  181. package/dist/src/security/commandValidator.d.ts +0 -7
  182. package/dist/src/security/commandValidator.d.ts.map +0 -1
  183. package/dist/src/security/commandValidator.js +0 -77
  184. package/dist/src/security/constants.d.ts +0 -21
  185. package/dist/src/security/constants.d.ts.map +0 -1
  186. package/dist/src/security/constants.js +0 -23
  187. package/dist/src/security/contentValidator.d.ts +0 -47
  188. package/dist/src/security/contentValidator.d.ts.map +0 -1
  189. package/dist/src/security/contentValidator.js +0 -188
  190. package/dist/src/security/fileLockManager.d.ts +0 -70
  191. package/dist/src/security/fileLockManager.d.ts.map +0 -1
  192. package/dist/src/security/fileLockManager.js +0 -187
  193. package/dist/src/security/index.d.ts +0 -12
  194. package/dist/src/security/index.d.ts.map +0 -1
  195. package/dist/src/security/index.js +0 -14
  196. package/dist/src/security/pathValidator.d.ts +0 -9
  197. package/dist/src/security/pathValidator.d.ts.map +0 -1
  198. package/dist/src/security/pathValidator.js +0 -97
  199. package/dist/src/security/secureYamlParser.d.ts +0 -46
  200. package/dist/src/security/secureYamlParser.d.ts.map +0 -1
  201. package/dist/src/security/secureYamlParser.js +0 -203
  202. package/dist/src/security/securityMonitor.d.ts +0 -58
  203. package/dist/src/security/securityMonitor.d.ts.map +0 -1
  204. package/dist/src/security/securityMonitor.js +0 -108
  205. package/dist/src/security/tokenManager.d.ts +0 -59
  206. package/dist/src/security/tokenManager.d.ts.map +0 -1
  207. package/dist/src/security/tokenManager.js +0 -216
  208. package/dist/src/security/yamlValidator.d.ts +0 -20
  209. package/dist/src/security/yamlValidator.d.ts.map +0 -1
  210. package/dist/src/security/yamlValidator.js +0 -138
  211. package/dist/src/server/ServerSetup.d.ts +0 -31
  212. package/dist/src/server/ServerSetup.d.ts.map +0 -1
  213. package/dist/src/server/ServerSetup.js +0 -79
  214. package/dist/src/server/index.d.ts +0 -7
  215. package/dist/src/server/index.d.ts.map +0 -1
  216. package/dist/src/server/index.js +0 -7
  217. package/dist/src/server/tools/ConfigTools.d.ts +0 -10
  218. package/dist/src/server/tools/ConfigTools.d.ts.map +0 -1
  219. package/dist/src/server/tools/ConfigTools.js +0 -63
  220. package/dist/src/server/tools/MarketplaceTools.d.ts +0 -10
  221. package/dist/src/server/tools/MarketplaceTools.d.ts.map +0 -1
  222. package/dist/src/server/tools/MarketplaceTools.js +0 -92
  223. package/dist/src/server/tools/PersonaTools.d.ts +0 -10
  224. package/dist/src/server/tools/PersonaTools.d.ts.map +0 -1
  225. package/dist/src/server/tools/PersonaTools.js +0 -257
  226. package/dist/src/server/tools/ToolRegistry.d.ts +0 -37
  227. package/dist/src/server/tools/ToolRegistry.d.ts.map +0 -1
  228. package/dist/src/server/tools/ToolRegistry.js +0 -40
  229. package/dist/src/server/tools/UpdateTools.d.ts +0 -10
  230. package/dist/src/server/tools/UpdateTools.d.ts.map +0 -1
  231. package/dist/src/server/tools/UpdateTools.js +0 -64
  232. package/dist/src/server/tools/UserTools.d.ts +0 -10
  233. package/dist/src/server/tools/UserTools.d.ts.map +0 -1
  234. package/dist/src/server/tools/UserTools.js +0 -51
  235. package/dist/src/server/tools/index.d.ts +0 -10
  236. package/dist/src/server/tools/index.d.ts.map +0 -1
  237. package/dist/src/server/tools/index.js +0 -10
  238. package/dist/src/server/types.d.ts +0 -34
  239. package/dist/src/server/types.d.ts.map +0 -1
  240. package/dist/src/server/types.js +0 -5
  241. package/dist/src/tools/debug.d.ts +0 -20
  242. package/dist/src/tools/debug.d.ts.map +0 -1
  243. package/dist/src/tools/debug.js +0 -37
  244. package/dist/src/types/cache.d.ts +0 -8
  245. package/dist/src/types/cache.d.ts.map +0 -1
  246. package/dist/src/types/cache.js +0 -5
  247. package/dist/src/types/index.d.ts +0 -8
  248. package/dist/src/types/index.d.ts.map +0 -1
  249. package/dist/src/types/index.js +0 -8
  250. package/dist/src/types/marketplace.d.ts +0 -23
  251. package/dist/src/types/marketplace.d.ts.map +0 -1
  252. package/dist/src/types/marketplace.js +0 -5
  253. package/dist/src/types/mcp.d.ts +0 -161
  254. package/dist/src/types/mcp.d.ts.map +0 -1
  255. package/dist/src/types/mcp.js +0 -75
  256. package/dist/src/types/persona.d.ts +0 -30
  257. package/dist/src/types/persona.d.ts.map +0 -1
  258. package/dist/src/types/persona.js +0 -5
  259. package/dist/src/update/BackupManager.d.ts +0 -46
  260. package/dist/src/update/BackupManager.d.ts.map +0 -1
  261. package/dist/src/update/BackupManager.js +0 -261
  262. package/dist/src/update/DependencyChecker.d.ts +0 -41
  263. package/dist/src/update/DependencyChecker.d.ts.map +0 -1
  264. package/dist/src/update/DependencyChecker.js +0 -132
  265. package/dist/src/update/RateLimiter.d.ts +0 -80
  266. package/dist/src/update/RateLimiter.d.ts.map +0 -1
  267. package/dist/src/update/RateLimiter.js +0 -172
  268. package/dist/src/update/SignatureVerifier.d.ts +0 -71
  269. package/dist/src/update/SignatureVerifier.d.ts.map +0 -1
  270. package/dist/src/update/SignatureVerifier.js +0 -214
  271. package/dist/src/update/UpdateChecker.d.ts +0 -127
  272. package/dist/src/update/UpdateChecker.d.ts.map +0 -1
  273. package/dist/src/update/UpdateChecker.js +0 -460
  274. package/dist/src/update/UpdateManager.d.ts +0 -41
  275. package/dist/src/update/UpdateManager.d.ts.map +0 -1
  276. package/dist/src/update/UpdateManager.js +0 -260
  277. package/dist/src/update/VersionManager.d.ts +0 -31
  278. package/dist/src/update/VersionManager.d.ts.map +0 -1
  279. package/dist/src/update/VersionManager.js +0 -134
  280. package/dist/src/update/index.d.ts +0 -9
  281. package/dist/src/update/index.d.ts.map +0 -1
  282. package/dist/src/update/index.js +0 -9
  283. package/dist/src/utils/filesystem.d.ts +0 -32
  284. package/dist/src/utils/filesystem.d.ts.map +0 -1
  285. package/dist/src/utils/filesystem.js +0 -73
  286. package/dist/src/utils/git.d.ts +0 -32
  287. package/dist/src/utils/git.d.ts.map +0 -1
  288. package/dist/src/utils/git.js +0 -65
  289. package/dist/src/utils/index.d.ts +0 -7
  290. package/dist/src/utils/index.d.ts.map +0 -1
  291. package/dist/src/utils/index.js +0 -7
  292. package/dist/src/utils/logger.d.ts +0 -45
  293. package/dist/src/utils/logger.d.ts.map +0 -1
  294. package/dist/src/utils/logger.js +0 -91
  295. package/dist/src/utils/version.d.ts +0 -25
  296. package/dist/src/utils/version.d.ts.map +0 -1
  297. package/dist/src/utils/version.js +0 -97
  298. package/dist/test/src/cache/APICache.d.ts +0 -23
  299. package/dist/test/src/cache/APICache.d.ts.map +0 -1
  300. package/dist/test/src/cache/APICache.js +0 -42
  301. package/dist/test/src/cache/index.d.ts +0 -5
  302. package/dist/test/src/cache/index.d.ts.map +0 -1
  303. package/dist/test/src/cache/index.js +0 -5
  304. package/dist/test/src/collection/CollectionBrowser.d.ts +0 -24
  305. package/dist/test/src/collection/CollectionBrowser.d.ts.map +0 -1
  306. package/dist/test/src/collection/CollectionBrowser.js +0 -115
  307. package/dist/test/src/collection/CollectionSearch.d.ts +0 -18
  308. package/dist/test/src/collection/CollectionSearch.d.ts.map +0 -1
  309. package/dist/test/src/collection/CollectionSearch.js +0 -48
  310. package/dist/test/src/collection/GitHubClient.d.ts +0 -22
  311. package/dist/test/src/collection/GitHubClient.d.ts.map +0 -1
  312. package/dist/test/src/collection/GitHubClient.js +0 -114
  313. package/dist/test/src/collection/PersonaDetails.d.ts +0 -22
  314. package/dist/test/src/collection/PersonaDetails.d.ts.map +0 -1
  315. package/dist/test/src/collection/PersonaDetails.js +0 -71
  316. package/dist/test/src/collection/PersonaInstaller.d.ts +0 -26
  317. package/dist/test/src/collection/PersonaInstaller.d.ts.map +0 -1
  318. package/dist/test/src/collection/PersonaInstaller.js +0 -103
  319. package/dist/test/src/collection/PersonaSubmitter.d.ts +0 -19
  320. package/dist/test/src/collection/PersonaSubmitter.d.ts.map +0 -1
  321. package/dist/test/src/collection/PersonaSubmitter.js +0 -57
  322. package/dist/test/src/collection/index.d.ts +0 -10
  323. package/dist/test/src/collection/index.d.ts.map +0 -1
  324. package/dist/test/src/collection/index.js +0 -10
  325. package/dist/test/src/config/constants.d.ts +0 -25
  326. package/dist/test/src/config/constants.d.ts.map +0 -1
  327. package/dist/test/src/config/constants.js +0 -30
  328. package/dist/test/src/config/index.d.ts +0 -6
  329. package/dist/test/src/config/index.d.ts.map +0 -1
  330. package/dist/test/src/config/index.js +0 -6
  331. package/dist/test/src/config/indicator-config.d.ts +0 -107
  332. package/dist/test/src/config/indicator-config.d.ts.map +0 -1
  333. package/dist/test/src/config/indicator-config.js +0 -158
  334. package/dist/test/src/constants/defaultPersonas.d.ts +0 -10
  335. package/dist/test/src/constants/defaultPersonas.d.ts.map +0 -1
  336. package/dist/test/src/constants/defaultPersonas.js +0 -18
  337. package/dist/test/src/constants/limits.d.ts +0 -10
  338. package/dist/test/src/constants/limits.d.ts.map +0 -1
  339. package/dist/test/src/constants/limits.js +0 -13
  340. package/dist/test/src/elements/BaseElement.d.ts +0 -81
  341. package/dist/test/src/elements/BaseElement.d.ts.map +0 -1
  342. package/dist/test/src/elements/BaseElement.js +0 -381
  343. package/dist/test/src/elements/FeedbackProcessor.d.ts +0 -57
  344. package/dist/test/src/elements/FeedbackProcessor.d.ts.map +0 -1
  345. package/dist/test/src/elements/FeedbackProcessor.js +0 -418
  346. package/dist/test/src/elements/agents/Agent.d.ts +0 -145
  347. package/dist/test/src/elements/agents/Agent.d.ts.map +0 -1
  348. package/dist/test/src/elements/agents/Agent.js +0 -848
  349. package/dist/test/src/elements/agents/AgentManager.d.ts +0 -125
  350. package/dist/test/src/elements/agents/AgentManager.d.ts.map +0 -1
  351. package/dist/test/src/elements/agents/AgentManager.js +0 -608
  352. package/dist/test/src/elements/agents/constants.d.ts +0 -42
  353. package/dist/test/src/elements/agents/constants.d.ts.map +0 -1
  354. package/dist/test/src/elements/agents/constants.js +0 -45
  355. package/dist/test/src/elements/agents/goalTemplates.d.ts +0 -44
  356. package/dist/test/src/elements/agents/goalTemplates.d.ts.map +0 -1
  357. package/dist/test/src/elements/agents/goalTemplates.js +0 -297
  358. package/dist/test/src/elements/agents/index.d.ts +0 -8
  359. package/dist/test/src/elements/agents/index.d.ts.map +0 -1
  360. package/dist/test/src/elements/agents/index.js +0 -8
  361. package/dist/test/src/elements/agents/ruleEngineConfig.d.ts +0 -76
  362. package/dist/test/src/elements/agents/ruleEngineConfig.d.ts.map +0 -1
  363. package/dist/test/src/elements/agents/ruleEngineConfig.js +0 -143
  364. package/dist/test/src/elements/agents/types.d.ts +0 -97
  365. package/dist/test/src/elements/agents/types.d.ts.map +0 -1
  366. package/dist/test/src/elements/agents/types.js +0 -5
  367. package/dist/test/src/elements/index.d.ts +0 -6
  368. package/dist/test/src/elements/index.d.ts.map +0 -1
  369. package/dist/test/src/elements/index.js +0 -6
  370. package/dist/test/src/elements/memories/Memory.d.ts +0 -110
  371. package/dist/test/src/elements/memories/Memory.d.ts.map +0 -1
  372. package/dist/test/src/elements/memories/Memory.js +0 -470
  373. package/dist/test/src/elements/memories/MemoryManager.d.ts +0 -86
  374. package/dist/test/src/elements/memories/MemoryManager.d.ts.map +0 -1
  375. package/dist/test/src/elements/memories/MemoryManager.js +0 -435
  376. package/dist/test/src/elements/memories/constants.d.ts +0 -42
  377. package/dist/test/src/elements/memories/constants.d.ts.map +0 -1
  378. package/dist/test/src/elements/memories/constants.js +0 -49
  379. package/dist/test/src/elements/memories/index.d.ts +0 -6
  380. package/dist/test/src/elements/memories/index.d.ts.map +0 -1
  381. package/dist/test/src/elements/memories/index.js +0 -6
  382. package/dist/test/src/elements/skills/Skill.d.ts +0 -109
  383. package/dist/test/src/elements/skills/Skill.d.ts.map +0 -1
  384. package/dist/test/src/elements/skills/Skill.js +0 -381
  385. package/dist/test/src/elements/templates/Template.d.ts +0 -138
  386. package/dist/test/src/elements/templates/Template.d.ts.map +0 -1
  387. package/dist/test/src/elements/templates/Template.js +0 -673
  388. package/dist/test/src/elements/templates/TemplateManager.d.ts +0 -104
  389. package/dist/test/src/elements/templates/TemplateManager.d.ts.map +0 -1
  390. package/dist/test/src/elements/templates/TemplateManager.js +0 -496
  391. package/dist/test/src/elements/templates/index.d.ts +0 -6
  392. package/dist/test/src/elements/templates/index.d.ts.map +0 -1
  393. package/dist/test/src/elements/templates/index.js +0 -6
  394. package/dist/test/src/errors/SecurityError.d.ts +0 -29
  395. package/dist/test/src/errors/SecurityError.d.ts.map +0 -1
  396. package/dist/test/src/errors/SecurityError.js +0 -47
  397. package/dist/test/src/errors/index.d.ts +0 -2
  398. package/dist/test/src/errors/index.d.ts.map +0 -1
  399. package/dist/test/src/errors/index.js +0 -2
  400. package/dist/test/src/index.barrel.d.ts +0 -21
  401. package/dist/test/src/index.barrel.d.ts.map +0 -1
  402. package/dist/test/src/index.barrel.js +0 -31
  403. package/dist/test/src/index.d.ts +0 -223
  404. package/dist/test/src/index.d.ts.map +0 -1
  405. package/dist/test/src/index.js +0 -1594
  406. package/dist/test/src/marketplace/GitHubClient.d.ts +0 -22
  407. package/dist/test/src/marketplace/GitHubClient.d.ts.map +0 -1
  408. package/dist/test/src/marketplace/GitHubClient.js +0 -112
  409. package/dist/test/src/marketplace/MarketplaceBrowser.d.ts +0 -21
  410. package/dist/test/src/marketplace/MarketplaceBrowser.d.ts.map +0 -1
  411. package/dist/test/src/marketplace/MarketplaceBrowser.js +0 -45
  412. package/dist/test/src/marketplace/MarketplaceSearch.d.ts +0 -18
  413. package/dist/test/src/marketplace/MarketplaceSearch.d.ts.map +0 -1
  414. package/dist/test/src/marketplace/MarketplaceSearch.js +0 -36
  415. package/dist/test/src/marketplace/PersonaDetails.d.ts +0 -22
  416. package/dist/test/src/marketplace/PersonaDetails.d.ts.map +0 -1
  417. package/dist/test/src/marketplace/PersonaDetails.js +0 -71
  418. package/dist/test/src/marketplace/PersonaInstaller.d.ts +0 -25
  419. package/dist/test/src/marketplace/PersonaInstaller.d.ts.map +0 -1
  420. package/dist/test/src/marketplace/PersonaInstaller.js +0 -100
  421. package/dist/test/src/marketplace/PersonaSubmitter.d.ts +0 -19
  422. package/dist/test/src/marketplace/PersonaSubmitter.d.ts.map +0 -1
  423. package/dist/test/src/marketplace/PersonaSubmitter.js +0 -57
  424. package/dist/test/src/marketplace/index.d.ts +0 -10
  425. package/dist/test/src/marketplace/index.d.ts.map +0 -1
  426. package/dist/test/src/marketplace/index.js +0 -10
  427. package/dist/test/src/persona/PersonaElement.d.ts +0 -64
  428. package/dist/test/src/persona/PersonaElement.d.ts.map +0 -1
  429. package/dist/test/src/persona/PersonaElement.js +0 -223
  430. package/dist/test/src/persona/PersonaElementManager.d.ts +0 -97
  431. package/dist/test/src/persona/PersonaElementManager.d.ts.map +0 -1
  432. package/dist/test/src/persona/PersonaElementManager.js +0 -342
  433. package/dist/test/src/persona/PersonaLoader.d.ts +0 -34
  434. package/dist/test/src/persona/PersonaLoader.d.ts.map +0 -1
  435. package/dist/test/src/persona/PersonaLoader.js +0 -145
  436. package/dist/test/src/persona/PersonaManager.d.ts +0 -112
  437. package/dist/test/src/persona/PersonaManager.d.ts.map +0 -1
  438. package/dist/test/src/persona/PersonaManager.js +0 -341
  439. package/dist/test/src/persona/PersonaValidator.d.ts +0 -33
  440. package/dist/test/src/persona/PersonaValidator.d.ts.map +0 -1
  441. package/dist/test/src/persona/PersonaValidator.js +0 -157
  442. package/dist/test/src/persona/export-import/PersonaExporter.d.ts +0 -43
  443. package/dist/test/src/persona/export-import/PersonaExporter.d.ts.map +0 -1
  444. package/dist/test/src/persona/export-import/PersonaExporter.js +0 -99
  445. package/dist/test/src/persona/export-import/PersonaImporter.d.ts +0 -65
  446. package/dist/test/src/persona/export-import/PersonaImporter.d.ts.map +0 -1
  447. package/dist/test/src/persona/export-import/PersonaImporter.js +0 -315
  448. package/dist/test/src/persona/export-import/PersonaSharer.d.ts +0 -60
  449. package/dist/test/src/persona/export-import/PersonaSharer.d.ts.map +0 -1
  450. package/dist/test/src/persona/export-import/PersonaSharer.js +0 -502
  451. package/dist/test/src/persona/export-import/index.d.ts +0 -10
  452. package/dist/test/src/persona/export-import/index.d.ts.map +0 -1
  453. package/dist/test/src/persona/export-import/index.js +0 -7
  454. package/dist/test/src/persona/index.d.ts +0 -7
  455. package/dist/test/src/persona/index.d.ts.map +0 -1
  456. package/dist/test/src/persona/index.js +0 -7
  457. package/dist/test/src/portfolio/MigrationManager.d.ts +0 -44
  458. package/dist/test/src/portfolio/MigrationManager.d.ts.map +0 -1
  459. package/dist/test/src/portfolio/MigrationManager.js +0 -163
  460. package/dist/test/src/portfolio/PortfolioManager.d.ts +0 -54
  461. package/dist/test/src/portfolio/PortfolioManager.d.ts.map +0 -1
  462. package/dist/test/src/portfolio/PortfolioManager.js +0 -224
  463. package/dist/test/src/portfolio/types.d.ts +0 -18
  464. package/dist/test/src/portfolio/types.d.ts.map +0 -1
  465. package/dist/test/src/portfolio/types.js +0 -13
  466. package/dist/test/src/security/InputValidator.d.ts +0 -80
  467. package/dist/test/src/security/InputValidator.d.ts.map +0 -1
  468. package/dist/test/src/security/InputValidator.js +0 -436
  469. package/dist/test/src/security/audit/SecurityAuditor.d.ts +0 -44
  470. package/dist/test/src/security/audit/SecurityAuditor.d.ts.map +0 -1
  471. package/dist/test/src/security/audit/SecurityAuditor.js +0 -274
  472. package/dist/test/src/security/audit/config/suppressions.d.ts +0 -34
  473. package/dist/test/src/security/audit/config/suppressions.d.ts.map +0 -1
  474. package/dist/test/src/security/audit/config/suppressions.js +0 -575
  475. package/dist/test/src/security/audit/index.d.ts +0 -14
  476. package/dist/test/src/security/audit/index.d.ts.map +0 -1
  477. package/dist/test/src/security/audit/index.js +0 -15
  478. package/dist/test/src/security/audit/reporters/ConsoleReporter.d.ts +0 -46
  479. package/dist/test/src/security/audit/reporters/ConsoleReporter.d.ts.map +0 -1
  480. package/dist/test/src/security/audit/reporters/ConsoleReporter.js +0 -174
  481. package/dist/test/src/security/audit/reporters/JsonReporter.d.ts +0 -13
  482. package/dist/test/src/security/audit/reporters/JsonReporter.d.ts.map +0 -1
  483. package/dist/test/src/security/audit/reporters/JsonReporter.js +0 -25
  484. package/dist/test/src/security/audit/reporters/MarkdownReporter.d.ts +0 -13
  485. package/dist/test/src/security/audit/reporters/MarkdownReporter.d.ts.map +0 -1
  486. package/dist/test/src/security/audit/reporters/MarkdownReporter.js +0 -79
  487. package/dist/test/src/security/audit/rules/SecurityRules.d.ts +0 -20
  488. package/dist/test/src/security/audit/rules/SecurityRules.d.ts.map +0 -1
  489. package/dist/test/src/security/audit/rules/SecurityRules.js +0 -244
  490. package/dist/test/src/security/audit/scanners/CodeScanner.d.ts +0 -47
  491. package/dist/test/src/security/audit/scanners/CodeScanner.d.ts.map +0 -1
  492. package/dist/test/src/security/audit/scanners/CodeScanner.js +0 -174
  493. package/dist/test/src/security/audit/scanners/ConfigurationScanner.d.ts +0 -13
  494. package/dist/test/src/security/audit/scanners/ConfigurationScanner.d.ts.map +0 -1
  495. package/dist/test/src/security/audit/scanners/ConfigurationScanner.js +0 -22
  496. package/dist/test/src/security/audit/scanners/DependencyScanner.d.ts +0 -13
  497. package/dist/test/src/security/audit/scanners/DependencyScanner.d.ts.map +0 -1
  498. package/dist/test/src/security/audit/scanners/DependencyScanner.js +0 -22
  499. package/dist/test/src/security/audit/types.d.ts +0 -94
  500. package/dist/test/src/security/audit/types.d.ts.map +0 -1
  501. package/dist/test/src/security/audit/types.js +0 -6
  502. package/dist/test/src/security/commandValidator.d.ts +0 -7
  503. package/dist/test/src/security/commandValidator.d.ts.map +0 -1
  504. package/dist/test/src/security/commandValidator.js +0 -78
  505. package/dist/test/src/security/constants.d.ts +0 -24
  506. package/dist/test/src/security/constants.d.ts.map +0 -1
  507. package/dist/test/src/security/constants.js +0 -26
  508. package/dist/test/src/security/contentValidator.d.ts +0 -47
  509. package/dist/test/src/security/contentValidator.d.ts.map +0 -1
  510. package/dist/test/src/security/contentValidator.js +0 -301
  511. package/dist/test/src/security/errors.d.ts +0 -14
  512. package/dist/test/src/security/errors.d.ts.map +0 -1
  513. package/dist/test/src/security/errors.js +0 -28
  514. package/dist/test/src/security/fileLockManager.d.ts +0 -70
  515. package/dist/test/src/security/fileLockManager.d.ts.map +0 -1
  516. package/dist/test/src/security/fileLockManager.js +0 -187
  517. package/dist/test/src/security/index.d.ts +0 -12
  518. package/dist/test/src/security/index.d.ts.map +0 -1
  519. package/dist/test/src/security/index.js +0 -14
  520. package/dist/test/src/security/pathValidator.d.ts +0 -9
  521. package/dist/test/src/security/pathValidator.d.ts.map +0 -1
  522. package/dist/test/src/security/pathValidator.js +0 -98
  523. package/dist/test/src/security/regexValidator.d.ts +0 -59
  524. package/dist/test/src/security/regexValidator.d.ts.map +0 -1
  525. package/dist/test/src/security/regexValidator.js +0 -214
  526. package/dist/test/src/security/secureYamlParser.d.ts +0 -46
  527. package/dist/test/src/security/secureYamlParser.d.ts.map +0 -1
  528. package/dist/test/src/security/secureYamlParser.js +0 -203
  529. package/dist/test/src/security/securityMonitor.d.ts +0 -58
  530. package/dist/test/src/security/securityMonitor.d.ts.map +0 -1
  531. package/dist/test/src/security/securityMonitor.js +0 -108
  532. package/dist/test/src/security/tokenManager.d.ts +0 -85
  533. package/dist/test/src/security/tokenManager.d.ts.map +0 -1
  534. package/dist/test/src/security/tokenManager.js +0 -286
  535. package/dist/test/src/security/validators/unicodeValidator.d.ts +0 -97
  536. package/dist/test/src/security/validators/unicodeValidator.d.ts.map +0 -1
  537. package/dist/test/src/security/validators/unicodeValidator.js +0 -312
  538. package/dist/test/src/security/yamlValidator.d.ts +0 -21
  539. package/dist/test/src/security/yamlValidator.d.ts.map +0 -1
  540. package/dist/test/src/security/yamlValidator.js +0 -164
  541. package/dist/test/src/server/ServerSetup.d.ts +0 -35
  542. package/dist/test/src/server/ServerSetup.d.ts.map +0 -1
  543. package/dist/test/src/server/ServerSetup.js +0 -116
  544. package/dist/test/src/server/index.d.ts +0 -7
  545. package/dist/test/src/server/index.d.ts.map +0 -1
  546. package/dist/test/src/server/index.js +0 -7
  547. package/dist/test/src/server/startup.d.ts +0 -31
  548. package/dist/test/src/server/startup.d.ts.map +0 -1
  549. package/dist/test/src/server/startup.js +0 -67
  550. package/dist/test/src/server/tools/CollectionTools.d.ts +0 -10
  551. package/dist/test/src/server/tools/CollectionTools.d.ts.map +0 -1
  552. package/dist/test/src/server/tools/CollectionTools.js +0 -96
  553. package/dist/test/src/server/tools/ConfigTools.d.ts +0 -10
  554. package/dist/test/src/server/tools/ConfigTools.d.ts.map +0 -1
  555. package/dist/test/src/server/tools/ConfigTools.js +0 -63
  556. package/dist/test/src/server/tools/MarketplaceTools.d.ts +0 -10
  557. package/dist/test/src/server/tools/MarketplaceTools.d.ts.map +0 -1
  558. package/dist/test/src/server/tools/MarketplaceTools.js +0 -92
  559. package/dist/test/src/server/tools/PersonaTools.d.ts +0 -10
  560. package/dist/test/src/server/tools/PersonaTools.d.ts.map +0 -1
  561. package/dist/test/src/server/tools/PersonaTools.js +0 -257
  562. package/dist/test/src/server/tools/ToolRegistry.d.ts +0 -37
  563. package/dist/test/src/server/tools/ToolRegistry.d.ts.map +0 -1
  564. package/dist/test/src/server/tools/ToolRegistry.js +0 -40
  565. package/dist/test/src/server/tools/UpdateTools.d.ts +0 -10
  566. package/dist/test/src/server/tools/UpdateTools.d.ts.map +0 -1
  567. package/dist/test/src/server/tools/UpdateTools.js +0 -64
  568. package/dist/test/src/server/tools/UserTools.d.ts +0 -10
  569. package/dist/test/src/server/tools/UserTools.d.ts.map +0 -1
  570. package/dist/test/src/server/tools/UserTools.js +0 -51
  571. package/dist/test/src/server/tools/index.d.ts +0 -10
  572. package/dist/test/src/server/tools/index.d.ts.map +0 -1
  573. package/dist/test/src/server/tools/index.js +0 -10
  574. package/dist/test/src/server/types.d.ts +0 -34
  575. package/dist/test/src/server/types.d.ts.map +0 -1
  576. package/dist/test/src/server/types.js +0 -5
  577. package/dist/test/src/tools/debug.d.ts +0 -20
  578. package/dist/test/src/tools/debug.d.ts.map +0 -1
  579. package/dist/test/src/tools/debug.js +0 -37
  580. package/dist/test/src/types/cache.d.ts +0 -8
  581. package/dist/test/src/types/cache.d.ts.map +0 -1
  582. package/dist/test/src/types/cache.js +0 -5
  583. package/dist/test/src/types/collection.d.ts +0 -23
  584. package/dist/test/src/types/collection.d.ts.map +0 -1
  585. package/dist/test/src/types/collection.js +0 -5
  586. package/dist/test/src/types/elements/IElement.d.ts +0 -123
  587. package/dist/test/src/types/elements/IElement.d.ts.map +0 -1
  588. package/dist/test/src/types/elements/IElement.js +0 -30
  589. package/dist/test/src/types/elements/IElementManager.d.ts +0 -65
  590. package/dist/test/src/types/elements/IElementManager.d.ts.map +0 -1
  591. package/dist/test/src/types/elements/IElementManager.js +0 -6
  592. package/dist/test/src/types/elements/IRatingManager.d.ts +0 -109
  593. package/dist/test/src/types/elements/IRatingManager.d.ts.map +0 -1
  594. package/dist/test/src/types/elements/IRatingManager.js +0 -6
  595. package/dist/test/src/types/elements/IReferenceResolver.d.ts +0 -52
  596. package/dist/test/src/types/elements/IReferenceResolver.d.ts.map +0 -1
  597. package/dist/test/src/types/elements/IReferenceResolver.js +0 -6
  598. package/dist/test/src/types/elements/RatingBreakdowns.d.ts +0 -49
  599. package/dist/test/src/types/elements/RatingBreakdowns.d.ts.map +0 -1
  600. package/dist/test/src/types/elements/RatingBreakdowns.js +0 -6
  601. package/dist/test/src/types/elements/index.d.ts +0 -9
  602. package/dist/test/src/types/elements/index.d.ts.map +0 -1
  603. package/dist/test/src/types/elements/index.js +0 -11
  604. package/dist/test/src/types/index.d.ts +0 -9
  605. package/dist/test/src/types/index.d.ts.map +0 -1
  606. package/dist/test/src/types/index.js +0 -9
  607. package/dist/test/src/types/marketplace.d.ts +0 -23
  608. package/dist/test/src/types/marketplace.d.ts.map +0 -1
  609. package/dist/test/src/types/marketplace.js +0 -5
  610. package/dist/test/src/types/mcp.d.ts +0 -84
  611. package/dist/test/src/types/mcp.d.ts.map +0 -1
  612. package/dist/test/src/types/mcp.js +0 -80
  613. package/dist/test/src/types/persona.d.ts +0 -30
  614. package/dist/test/src/types/persona.d.ts.map +0 -1
  615. package/dist/test/src/types/persona.js +0 -5
  616. package/dist/test/src/update/BackupManager.d.ts +0 -46
  617. package/dist/test/src/update/BackupManager.d.ts.map +0 -1
  618. package/dist/test/src/update/BackupManager.js +0 -261
  619. package/dist/test/src/update/DependencyChecker.d.ts +0 -41
  620. package/dist/test/src/update/DependencyChecker.d.ts.map +0 -1
  621. package/dist/test/src/update/DependencyChecker.js +0 -132
  622. package/dist/test/src/update/RateLimiter.d.ts +0 -80
  623. package/dist/test/src/update/RateLimiter.d.ts.map +0 -1
  624. package/dist/test/src/update/RateLimiter.js +0 -172
  625. package/dist/test/src/update/SignatureVerifier.d.ts +0 -71
  626. package/dist/test/src/update/SignatureVerifier.d.ts.map +0 -1
  627. package/dist/test/src/update/SignatureVerifier.js +0 -214
  628. package/dist/test/src/update/UpdateChecker.d.ts +0 -127
  629. package/dist/test/src/update/UpdateChecker.d.ts.map +0 -1
  630. package/dist/test/src/update/UpdateChecker.js +0 -469
  631. package/dist/test/src/update/UpdateManager.d.ts +0 -41
  632. package/dist/test/src/update/UpdateManager.d.ts.map +0 -1
  633. package/dist/test/src/update/UpdateManager.js +0 -260
  634. package/dist/test/src/update/VersionManager.d.ts +0 -31
  635. package/dist/test/src/update/VersionManager.d.ts.map +0 -1
  636. package/dist/test/src/update/VersionManager.js +0 -134
  637. package/dist/test/src/update/index.d.ts +0 -9
  638. package/dist/test/src/update/index.d.ts.map +0 -1
  639. package/dist/test/src/update/index.js +0 -9
  640. package/dist/test/src/utils/filesystem.d.ts +0 -29
  641. package/dist/test/src/utils/filesystem.d.ts.map +0 -1
  642. package/dist/test/src/utils/filesystem.js +0 -94
  643. package/dist/test/src/utils/git.d.ts +0 -32
  644. package/dist/test/src/utils/git.d.ts.map +0 -1
  645. package/dist/test/src/utils/git.js +0 -65
  646. package/dist/test/src/utils/index.d.ts +0 -7
  647. package/dist/test/src/utils/index.d.ts.map +0 -1
  648. package/dist/test/src/utils/index.js +0 -7
  649. package/dist/test/src/utils/logger.d.ts +0 -45
  650. package/dist/test/src/utils/logger.d.ts.map +0 -1
  651. package/dist/test/src/utils/logger.js +0 -91
  652. package/dist/test/src/utils/version.d.ts +0 -25
  653. package/dist/test/src/utils/version.d.ts.map +0 -1
  654. package/dist/test/src/utils/version.js +0 -97
  655. package/dist/test/test/__tests__/integration/helpers/file-utils.d.ts +0 -33
  656. package/dist/test/test/__tests__/integration/helpers/file-utils.d.ts.map +0 -1
  657. package/dist/test/test/__tests__/integration/helpers/file-utils.js +0 -83
  658. package/dist/test/test/__tests__/integration/helpers/test-fixtures.d.ts +0 -26
  659. package/dist/test/test/__tests__/integration/helpers/test-fixtures.d.ts.map +0 -1
  660. package/dist/test/test/__tests__/integration/helpers/test-fixtures.js +0 -95
  661. package/dist/test/test/__tests__/integration/helpers/test-server.d.ts +0 -26
  662. package/dist/test/test/__tests__/integration/helpers/test-server.d.ts.map +0 -1
  663. package/dist/test/test/__tests__/integration/helpers/test-server.js +0 -41
  664. package/dist/test/test/__tests__/integration/setup.d.ts +0 -8
  665. package/dist/test/test/__tests__/integration/setup.d.ts.map +0 -1
  666. package/dist/test/test/__tests__/integration/setup.js +0 -31
  667. package/dist/test/test/__tests__/integration/teardown.d.ts +0 -5
  668. package/dist/test/test/__tests__/integration/teardown.d.ts.map +0 -1
  669. package/dist/test/test/__tests__/integration/teardown.js +0 -23
  670. package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.d.ts +0 -34
  671. package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.d.ts.map +0 -1
  672. package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.js +0 -224
  673. package/dist/test/test/__tests__/security/framework/SecurityTestFramework.d.ts +0 -89
  674. package/dist/test/test/__tests__/security/framework/SecurityTestFramework.d.ts.map +0 -1
  675. package/dist/test/test/__tests__/security/framework/SecurityTestFramework.js +0 -543
  676. package/dist/test/test/__tests__/security/index.d.ts +0 -46
  677. package/dist/test/test/__tests__/security/index.d.ts.map +0 -1
  678. package/dist/test/test/__tests__/security/index.js +0 -98
  679. package/dist/test/test/__tests__/security/setup.d.ts +0 -3
  680. package/dist/test/test/__tests__/security/setup.d.ts.map +0 -1
  681. package/dist/test/test/__tests__/security/setup.js +0 -23
  682. package/dist/types/marketplace.d.ts +0 -23
  683. package/dist/types/marketplace.d.ts.map +0 -1
  684. package/dist/types/marketplace.js +0 -5
package/CHANGELOG.md CHANGED
@@ -5,6 +5,34 @@ All notable changes to DollhouseMCP will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.3.2] - 2025-07-29
9
+
10
+ ### Fixed
11
+ - **NPM Release Workflow**: Fixed CI environment tests failing during releases
12
+ - Added TEST_PERSONAS_DIR environment variable to release workflow
13
+ - Added test environment preparation step
14
+ - Ensures automated NPM publishing works correctly
15
+
16
+ ## [1.3.1] - 2025-07-29
17
+
18
+ ### Added
19
+ - **GitFlow Workflows**: Complete GitHub Actions implementation for GitFlow
20
+ - Automated release creation from release branches
21
+ - PR title validation for GitFlow compliance
22
+ - Branch naming enforcement
23
+ - Protected branch configuration
24
+
25
+ ### Changed
26
+ - **Documentation**: Updated all references to reflect flat element structure
27
+ - Removed category-based paths from examples
28
+ - Updated tool documentation for new parameters
29
+ - Fixed MCP tool names in documentation
30
+
31
+ ### Fixed
32
+ - **Backward Compatibility**: Added deprecated aliases for old MCP tool names
33
+ - Old tools continue to work with deprecation warnings
34
+ - Smooth transition for existing users
35
+
8
36
  ## [1.2.2] - 2025-07-10
9
37
 
10
38
  ### Security
package/README.md CHANGED
@@ -23,7 +23,7 @@ A comprehensive Model Context Protocol (MCP) server that enables dynamic AI pers
23
23
  **🏪 Collection**: https://github.com/DollhouseMCP/collection
24
24
  **📦 NPM Package**: https://www.npmjs.com/package/@dollhousemcp/mcp-server
25
25
  **🌍 Website**: https://dollhousemcp.com (planned)
26
- **📦 Version**: v1.3.0 (Ready for NPM publish)
26
+ **📦 Version**: v1.3.3
27
27
 
28
28
  > **⚠️ Breaking Change Notice**: Tool names have changed from "marketplace" to "collection" terminology. Old names still work but are deprecated. See [Migration Guide](docs/MIGRATION_GUIDE_COLLECTION_RENAME.md) for details.
29
29
 
@@ -56,7 +56,7 @@ Restart Claude Desktop and you're ready to use DollhouseMCP! Try `list_personas`
56
56
 
57
57
  | Feature | Description |
58
58
  |---------|-------------|
59
- | 🎭 **23 MCP Tools** | Complete persona lifecycle management through chat interface |
59
+ | 🎭 **30 MCP Tools** | Complete portfolio element management through chat interface |
60
60
  | 🏪 **GitHub Collection** | Browse, search, install, and submit personas to community collection |
61
61
  | 👤 **User Identity System** | Environment-based attribution for persona creators |
62
62
  | 🆔 **Unique ID System** | Advanced ID generation: `{type}_{name}_{author}_{YYYYMMDD}-{HHMMSS}` |
@@ -66,6 +66,76 @@ Restart Claude Desktop and you're ready to use DollhouseMCP! Try `list_personas`
66
66
  | 🛡️ **Data Protection** | Copy-on-write for default personas, comprehensive backup system |
67
67
  | 🏠 **Local-First Architecture** | Full functionality without cloud dependency |
68
68
 
69
+ ## 🎨 Portfolio Customization Elements (NEW! v1.3.3)
70
+
71
+ DollhouseMCP introduces a comprehensive portfolio system for customizing AI behavior. Your portfolio is your personal collection of AI customization elements that enhance and tailor your AI experience.
72
+
73
+ ### Portfolio Element Types
74
+
75
+ | Element | Purpose | Status |
76
+ |---------|---------|--------|
77
+ | 🎭 **Personas** | Define AI personality, tone, and behavioral characteristics | ✅ Available |
78
+ | 🛠️ **Skills** | Add specific capabilities like code review, data analysis, or creative writing | ✅ Available |
79
+ | 📝 **Templates** | Create reusable response formats for emails, reports, documentation | ✅ Available |
80
+ | 🤖 **Agents** | Build autonomous assistants that can pursue goals and make decisions | ✅ Available |
81
+
82
+ ### Managing Your Portfolio
83
+
84
+ Use these new generic tools to manage any element type in your portfolio:
85
+
86
+ - **`list_elements`** - Browse your portfolio elements by type
87
+ - **`activate_element`** - Activate elements to customize AI behavior
88
+ - **`get_active_elements`** - View currently active customizations
89
+ - **`deactivate_element`** - Deactivate specific customizations
90
+ - **`get_element_details`** - Examine element configuration and metadata
91
+ - **`reload_elements`** - Refresh portfolio from filesystem
92
+
93
+ ### Specialized Element Tools
94
+
95
+ Some portfolio elements have specialized operations:
96
+
97
+ - **`render_template`** - Generate content using template elements with variables
98
+ - **`execute_agent`** - Deploy agent elements to accomplish specific goals
99
+
100
+ ### Portfolio Examples
101
+
102
+ ```
103
+ # Browse your skill portfolio
104
+ list_elements type="skills"
105
+
106
+ # Activate a code review skill
107
+ activate_element name="code-review" type="skills"
108
+
109
+ # Activate a professional email template
110
+ activate_element name="email-professional" type="templates"
111
+
112
+ # Use a template to generate content
113
+ render_template name="project-update" variables='{"project": "DollhouseMCP", "status": "Released"}'
114
+
115
+ # Deploy an agent for a specific task
116
+ execute_agent name="project-manager" goal="Create a sprint plan for next week"
117
+ ```
118
+
119
+ ### Portfolio Structure
120
+
121
+ Your portfolio lives in `~/.dollhouse/portfolio/` with elements organized by type:
122
+
123
+ ```
124
+ ~/.dollhouse/portfolio/
125
+ ├── personas/ # Personality and behavior profiles
126
+ ├── skills/ # Specialized capabilities
127
+ ├── templates/ # Reusable content structures
128
+ └── agents/ # Autonomous assistants
129
+ ```
130
+
131
+ ### Legacy Persona Tools
132
+
133
+ For backward compatibility, the original persona-specific tools still work:
134
+ - `list_personas` → calls `list_elements type="personas"`
135
+ - `activate_persona` → calls `activate_element type="personas"`
136
+ - `get_active_persona` → calls `get_active_elements type="personas"`
137
+ - etc.
138
+
69
139
  ## 🔒 Enterprise-Grade Security (v1.2.4)
70
140
 
71
141
  DollhouseMCP implements comprehensive security measures to protect your personas and system:
@@ -195,11 +265,23 @@ Add DollhouseMCP to your Claude Desktop configuration:
195
265
  **🔄 After configuration:**
196
266
  1. Save the file
197
267
  2. Restart Claude Desktop completely
198
- 3. All 23 DollhouseMCP tools will be available
268
+ 3. All 30 DollhouseMCP tools will be available
269
+
270
+ ## 🛠️ Available Tools (30 Total)
271
+
272
+ ### Portfolio Element Management (NEW!)
273
+ - **`list_elements`** - List all elements of a specific type
274
+ - **`activate_element`** - Activate an element by name and type
275
+ - **`get_active_elements`** - Get currently active elements of a type
276
+ - **`deactivate_element`** - Deactivate a specific element
277
+ - **`get_element_details`** - View detailed information about an element
278
+ - **`reload_elements`** - Refresh elements from filesystem
199
279
 
200
- ## 🛠️ Available Tools (23 Total)
280
+ ### Element-Specific Operations (NEW!)
281
+ - **`render_template`** - Render a template element with provided variables
282
+ - **`execute_agent`** - Execute an agent element with a specific goal
201
283
 
202
- ### Core Persona Management
284
+ ### Core Persona Management (Legacy - Still Supported)
203
285
  - **`list_personas`** - Display all local personas with enhanced metadata
204
286
  - **`activate_persona`** - Activate by name, filename, or unique ID
205
287
  - **`get_active_persona`** - Get current persona information
@@ -208,10 +290,10 @@ Add DollhouseMCP to your Claude Desktop configuration:
208
290
  - **`reload_personas`** - Refresh from filesystem
209
291
 
210
292
  ### GitHub Collection Integration
211
- - **`browse_collection`** - Browse personas by category
212
- - **`search_collection`** - Search across all collection personas
213
- - **`get_collection_persona`** - View detailed collection persona info
214
- - **`install_persona`** - One-click download and installation
293
+ - **`browse_collection`** - Browse content by section and type (flat structure, no categories)
294
+ - **`search_collection`** - Search across all collection content
295
+ - **`get_collection_content`** - View detailed content info
296
+ - **`install_element`** - One-click download and installation of any element type
215
297
  - **`submit_persona`** - Submit to collection via GitHub issue
216
298
 
217
299
  ### User Identity Management
@@ -238,10 +320,10 @@ Add DollhouseMCP to your Claude Desktop configuration:
238
320
 
239
321
  ### Collection Operations
240
322
  ```
241
- browse_collection # See all categories
242
- browse_collection "creative" # Browse creative personas
323
+ browse_collection(section="library", type="personas") # Browse all personas
324
+ browse_collection(section="library", type="skills") # Browse skills
243
325
  search_collection "writing" # Search for writing personas
244
- install_persona "creative/storyteller.md" # Install from collection
326
+ install_element "library/personas/storyteller.md" # Install from collection
245
327
  ```
246
328
 
247
329
  ### Persona Creation & Management
@@ -758,7 +840,7 @@ DollhouseMCP includes an experimental GitHub-powered collection:
758
840
  **Important**: Tool names have changed in recent versions:
759
841
  - `browse_marketplace` → `browse_collection`
760
842
  - `search_marketplace` → `search_collection`
761
- - `get_marketplace_persona` → `get_collection_persona`
843
+ - `get_marketplace_persona` → `get_collection_content`
762
844
 
763
845
  If you have scripts or workflows using the old tool names, please update them to use the new names.
764
846
 
@@ -973,10 +1055,10 @@ interface DollhouseTool {
973
1055
 
974
1056
  #### Collection Integration
975
1057
  ```typescript
976
- // browse_collection - { category?: string }
1058
+ // browse_collection - { section?: string, type?: string }
977
1059
  // search_collection - { query: string }
978
- // get_collection_persona - { path: string }
979
- // install_persona - { path: string }
1060
+ // get_collection_content - { path: string }
1061
+ // install_element - { path: string, type?: string }
980
1062
  // submit_persona - { persona: string }
981
1063
  ```
982
1064
 
@@ -1037,7 +1119,7 @@ This project is licensed under the **AGPL-3.0** License with Platform Stability
1037
1119
  - 🔄 **Renamed all "marketplace" tools to "collection"**:
1038
1120
  - `browse_marketplace` → `browse_collection`
1039
1121
  - `search_marketplace` → `search_collection`
1040
- - `get_marketplace_persona` → `get_collection_persona`
1122
+ - `get_marketplace_persona` → `get_collection_content`
1041
1123
  - `install_persona` → `install_persona` (unchanged)
1042
1124
  - `submit_persona` → `submit_persona` (unchanged)
1043
1125
  - ✅ **Added backward compatibility aliases** (deprecated, will be removed in v2.0.0)
@@ -1 +1 @@
1
- {"version":3,"file":"ElementInstaller.d.ts","sourceRoot":"","sources":["../../src/collection/ElementInstaller.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAMjE,OAAO,EAAoB,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEjF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,OAAO,CAAmE;gBAEtE,YAAY,EAAE,YAAY;IAKtC;;;OAGG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAC/C,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;QAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IA+FF;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAkBhC;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM;CAmBrG"}
1
+ {"version":3,"file":"ElementInstaller.d.ts","sourceRoot":"","sources":["../../src/collection/ElementInstaller.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAMjE,OAAO,EAAoB,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEjF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,OAAO,CAAmE;gBAEtE,YAAY,EAAE,YAAY;IAKtC;;;OAGG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAC/C,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;QAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IA+FF;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAgBhC;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM;CAiBrG"}
@@ -108,9 +108,7 @@ export class ElementInstaller {
108
108
  'personas': ElementType.PERSONA,
109
109
  'skills': ElementType.SKILL,
110
110
  'templates': ElementType.TEMPLATE,
111
- 'agents': ElementType.AGENT,
112
- 'memories': ElementType.MEMORY,
113
- 'ensembles': ElementType.ENSEMBLE
111
+ 'agents': ElementType.AGENT
114
112
  };
115
113
  const elementType = typeMap[typeStr];
116
114
  if (!elementType) {
@@ -126,9 +124,7 @@ export class ElementInstaller {
126
124
  [ElementType.PERSONA]: '🎭',
127
125
  [ElementType.SKILL]: '🎯',
128
126
  [ElementType.TEMPLATE]: '📄',
129
- [ElementType.AGENT]: '🤖',
130
- [ElementType.MEMORY]: '🧠',
131
- [ElementType.ENSEMBLE]: '🎼'
127
+ [ElementType.AGENT]: '🤖'
132
128
  };
133
129
  const emoji = typeEmojis[elementType] || '📦';
134
130
  const typeName = elementType.charAt(0).toUpperCase() + elementType.slice(1);
@@ -139,4 +135,4 @@ export class ElementInstaller {
139
135
  `🚀 **Ready to use!**`;
140
136
  }
141
137
  }
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWxlbWVudEluc3RhbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL0VsZW1lbnRJbnN0YWxsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFHN0IsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRWpGLE1BQU0sT0FBTyxnQkFBZ0I7SUFDbkIsWUFBWSxDQUFlO0lBQzNCLGdCQUFnQixDQUFtQjtJQUNuQyxPQUFPLEdBQUcsK0RBQStELENBQUM7SUFFbEYsWUFBWSxZQUEwQjtRQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBaUI7UUFPcEMsdUNBQXVDO1FBQ3ZDLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU5QywwQ0FBMEM7UUFDMUMsa0VBQWtFO1FBQ2xFLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFD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dGFsbCBBSSBjdXN0b21pemF0aW9uIGVsZW1lbnRzIGZyb20gY29sbGVjdGlvblxuICogU3VwcG9ydHMgYWxsIGVsZW1lbnQgdHlwZXM6IHBlcnNvbmFzLCBza2lsbHMsIHRlbXBsYXRlcywgYWdlbnRzLCBtZW1vcmllcywgZW5zZW1ibGVzXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEdpdEh1YkNsaWVudCB9IGZyb20gJy4vR2l0SHViQ2xpZW50LmpzJztcbmltcG9ydCB7IElFbGVtZW50TWV0YWRhdGEgfSBmcm9tICcuLi90eXBlcy9lbGVtZW50cy9JRWxlbWVudC5qcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVBhdGgsIHZhbGlkYXRlRmlsZW5hbWUsIHZhbGlkYXRlQ29udGVudFNpemUgfSBmcm9tICcuLi9zZWN1cml0eS9JbnB1dFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9MSU1JVFMgfSBmcm9tICcuLi9zZWN1cml0eS9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgQ29udGVudFZhbGlkYXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L2NvbnRlbnRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlFcnJvciB9IGZyb20gJy4uL2Vycm9ycy9TZWN1cml0eUVycm9yLmpzJztcbmltcG9ydCB7IFBvcnRmb2xpb01hbmFnZXIsIEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vcG9ydGZvbGlvL1BvcnRmb2xpb01hbmFnZXIuanMnO1xuXG5leHBvcnQgY2xhc3MgRWxlbWVudEluc3RhbGxlciB7XG4gIHByaXZhdGUgZ2l0aHViQ2xpZW50OiBHaXRIdWJDbGllbnQ7XG4gIHByaXZhdGUgcG9ydGZvbGlvTWFuYWdlcjogUG9ydGZvbGlvTWFuYWdlcjtcbiAgcHJpdmF0ZSBiYXNlVXJsID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vY29udGVudHMnO1xuICBcbiAgY29uc3RydWN0b3IoZ2l0aHViQ2xpZW50OiBHaXRIdWJDbGllbnQpIHtcbiAgICB0aGlzLmdpdGh1YkNsaWVudCA9IGdpdGh1YkNsaWVudDtcbiAgICB0aGlzLnBvcnRmb2xpb01hbmFnZXIgPSBQb3J0Zm9saW9NYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBJbnN0YWxsIEFJIGN1c3RvbWl6YXRpb24gZWxlbWVudCBmcm9tIHRoZSBjb2xsZWN0aW9uXG4gICAqIEF1dG9tYXRpY2FsbHkgZGV0ZWN0cyBlbGVtZW50IHR5cGUgZnJvbSBwYXRoIHN0cnVjdHVyZVxuICAgKi9cbiAgYXN5bmMgaW5zdGFsbENvbnRlbnQoaW5wdXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHsgXG4gICAgc3VjY2VzczogYm9vbGVhbjsgXG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIG1ldGFkYXRhPzogSUVsZW1lbnRNZXRhZGF0YTtcbiAgICBlbGVtZW50VHlwZT86IEVsZW1lbnRUeXBlO1xuICAgIGZpbGVuYW1lPzogc3RyaW5nO1xuICB9PiB7XG4gICAgLy8gVmFsaWRhdGUgYW5kIHNhbml0aXplIHRoZSBpbnB1dCBwYXRoXG4gICAgY29uc3Qgc2FuaXRpemVkUGF0aCA9IHZhbGlkYXRlUGF0aChpbnB1dFBhdGgpO1xuICAgIFxuICAgIC8vIERldGVjdCBlbGVtZW50IHR5cGUgZnJvbSBwYXRoIHN0cnVjdHVyZVxuICAgIC8vIEV4cGVjdGVkIGZvcm1hdDogbGlicmFyeS9bZWxlbWVudC10eXBlXS9bY2F0ZWdvcnldL1tlbGVtZW50XS5tZFxuICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHNhbml0aXplZFBhdGguc3BsaXQoJy8nKTtcbiAgICBpZiAocGF0aFBhcnRzLmxlbmd0aCA8IDMgfHwgcGF0aFBhcnRzWzBdICE9PSAnbGlicmFyeScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2xsZWN0aW9uIHBhdGggZm9ybWF0LiBFeHBlY3RlZDogbGlicmFyeS9bZWxlbWVudC10eXBlXS9bY2F0ZWdvcnldL1tlbGVtZW50XS5tZCcpO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBlbGVtZW50VHlwZVN0ciA9IHBhdGhQYXJ0c1sxXTtcbiAgICBjb25zdCBlbGVtZW50VHlwZSA9IHRoaXMuZ2V0RWxlbWVudFR5cGVGcm9tU3RyaW5nKGVsZW1lbnRUeXBlU3RyKTtcbiAgICBcbiAgICAvLyBFbnN1cmUgdGhlIHBhdGggZW5kcyB3aXRoIC5tZFxuICAgIGlmICghc2FuaXRpemVkUGF0aC5lbmRzV2l0aCgnLm1kJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmaWxlIHR5cGUuIE9ubHkgLm1kIGZpbGVzIGFyZSBhbGxvd2VkLicpO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9LyR7c2FuaXRpemVkUGF0aH1gO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdpdGh1YkNsaWVudC5mZXRjaEZyb21HaXRIdWIodXJsKTtcbiAgICBcbiAgICBpZiAoZGF0YS50eXBlICE9PSAnZmlsZScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGF0aCBkb2VzIG5vdCBwb2ludCB0byBhIGZpbGUnKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgZmlsZSBzaXplIGJlZm9yZSBkb3dubG9hZGluZ1xuICAgIGlmIChkYXRhLnNpemUgPiBTRUNVUklUWV9MSU1JVFMuTUFYX1BFUlNPTkFfU0laRV9CWVRFUykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIHRvbyBsYXJnZSAoJHtkYXRhLnNpemV9IGJ5dGVzLCBtYXggJHtTRUNVUklUWV9MSU1JVFMuTUFYX1BFUlNPTkFfU0laRV9CWVRFU30gYnl0ZXMpYCk7XG4gICAgfVxuICAgIFxuICAgIC8vIERlY29kZSBCYXNlNjQgY29udGVudFxuICAgIGNvbnN0IGNvbnRlbnQgPSBCdWZmZXIuZnJvbShkYXRhLmNvbnRlbnQsICdiYXNlNjQnKS50b1N0cmluZygndXRmLTgnKTtcbiAgICBcbiAgICAvLyBWYWxpZGF0ZSBjb250ZW50IHNpemUgYWZ0ZXIgZGVjb2RpbmdcbiAgICB2YWxpZGF0ZUNvbnRlbnRTaXplKGNvbnRlbnQsIFNFQ1VSSVRZX0xJTUlUUy5NQVhfUEVSU09OQV9TSVpFX0JZVEVTKTtcbiAgICBcbiAgICAvLyBTYW5pdGl6ZSBjb250ZW50IGZvciBzZWN1cml0eSB0aHJlYXRzXG4gICAgY29uc3Qgc2FuaXRpemVkQ29udGVudCA9IENvbnRlbnRWYWxpZGF0b3Iuc2FuaXRpemVQZXJzb25hQ29udGVudChjb250ZW50KTtcbiAgICBcbiAgICAvLyBVc2Ugc2VjdXJlIFlBTUwgcGFyc2VyXG4gICAgbGV0IHBhcnNlZDtcbiAgICB0cnkge1xuICAgICAgcGFyc2VkID0gU2VjdXJlWWFtbFBhcnNlci5zYWZlTWF0dGVyKHNhbml0aXplZENvbnRlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTZWN1cml0eUVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2VjdXJpdHkgdGhyZWF0IGluIGNvbnRlbnQ6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBtZXRhZGF0YSA9IHBhcnNlZC5kYXRhIGFzIElFbGVtZW50TWV0YWRhdGE7XG4gICAgXG4gICAgLy8gQWRkaXRpb25hbCBtZXRhZGF0YSB2YWxpZGF0aW9uIGZvciBpbmplY3Rpb24gYXR0YWNrc1xuICAgIGNvbnN0IG1ldGFkYXRhVmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgaWYgKCFtZXRhZGF0YVZhbGlkYXRpb24uaXNWYWxpZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZWN1cml0eSB2YWxpZGF0aW9uIGZhaWxlZDogJHttZXRhZGF0YVZhbGlkYXRpb24uZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgbWV0YWRhdGFcbiAgICBpZiAoIW1ldGFkYXRhLm5hbWUgfHwgIW1ldGFkYXRhLmRlc2NyaXB0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29udGVudDogbWlzc2luZyByZXF1aXJlZCBuYW1lIG9yIGRlc2NyaXB0aW9uJyk7XG4gICAgfVxuICAgIFxuICAgIC8vIEdlbmVyYXRlIGFuZCB2YWxpZGF0ZSBsb2NhbCBmaWxlbmFtZVxuICAgIGNvbnN0IG9yaWdpbmFsRmlsZW5hbWUgPSBzYW5pdGl6ZWRQYXRoLnNwbGl0KCcvJykucG9wKCkgfHwgJ2Rvd25sb2FkZWQtZWxlbWVudC5tZCc7XG4gICAgY29uc3QgZmlsZW5hbWUgPSB2YWxpZGF0ZUZpbGVuYW1lKG9yaWdpbmFsRmlsZW5hbWUpO1xuICAgIFxuICAgIC8vIEdldCBhcHByb3ByaWF0ZSBkaXJlY3RvcnkgZm9yIGVsZW1lbnQgdHlwZVxuICAgIGNvbnN0IGVsZW1lbnREaXIgPSB0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihlbGVtZW50VHlwZSk7XG4gICAgY29uc3QgbG9jYWxQYXRoID0gcGF0aC5qb2luKGVsZW1lbnREaXIsIGZpbGVuYW1lKTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiBmaWxlIGFscmVhZHkgZXhpc3RzXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLmFjY2Vzcyhsb2NhbFBhdGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IGBBSSBjdXN0b21pemF0aW9uIGVsZW1lbnQgYWxyZWFkeSBleGlzdHM6ICR7ZmlsZW5hbWV9XFxuXFxuVGhlIGVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiBpbnN0YWxsZWQuYFxuICAgICAgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZpbGUgZG9lc24ndCBleGlzdCwgcHJvY2VlZCB3aXRoIGluc3RhbGxhdGlvblxuICAgIH1cbiAgICBcbiAgICAvLyBXcml0ZSB0aGUgc2FuaXRpemVkIGZpbGVcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUobG9jYWxQYXRoLCBzYW5pdGl6ZWRDb250ZW50LCAndXRmLTgnKTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgIG1lc3NhZ2U6IGBBSSBjdXN0b21pemF0aW9uIGVsZW1lbnQgaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseSFgLFxuICAgICAgbWV0YWRhdGEsXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIGVsZW1lbnRUeXBlXG4gICAgfTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBFbGVtZW50VHlwZSBmcm9tIHN0cmluZ1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRFbGVtZW50VHlwZUZyb21TdHJpbmcodHlwZVN0cjogc3RyaW5nKTogRWxlbWVudFR5cGUge1xuICAgIGNvbnN0IHR5cGVNYXA6IFJlY29yZDxzdHJpbmcsIEVsZW1lbnRUeXBlPiA9IHtcbiAgICAgICdwZXJzb25hcyc6IEVsZW1lbnRUeXBlLlBFUlNPTkEsXG4gICAgICAnc2tpbGxzJzogRWxlbWVudFR5cGUuU0tJTEwsXG4gICAgICAndGVtcGxhdGVzJzogRWxlbWVudFR5cGUuVEVNUExBVEUsXG4gICAgICAnYWdlbnRzJzogRWxlbWVudFR5cGUuQUdFTlQsXG4gICAgICAnbWVtb3JpZXMnOiBFbGVtZW50VHlwZS5NRU1PUlksXG4gICAgICAnZW5zZW1ibGVzJzogRWxlbWVudFR5cGUuRU5TRU1CTEVcbiAgICB9O1xuICAgIFxuICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gdHlwZU1hcFt0eXBlU3RyXTtcbiAgICBpZiAoIWVsZW1lbnRUeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZWxlbWVudCB0eXBlOiAke3R5cGVTdHJ9LiBWYWxpZCB0eXBlczogJHtPYmplY3Qua2V5cyh0eXBlTWFwKS5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZWxlbWVudFR5cGU7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGb3JtYXQgaW5zdGFsbGF0aW9uIHN1Y2Nlc3MgbWVzc2FnZVxuICAgKi9cbiAgZm9ybWF0SW5zdGFsbFN1Y2Nlc3MobWV0YWRhdGE6IElFbGVtZW50TWV0YWRhdGEsIGZpbGVuYW1lOiBzdHJpbmcsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZSk6IHN0cmluZyB7XG4gICAgY29uc3QgdHlwZUVtb2ppczogUmVjb3JkPEVsZW1lbnRUeXBlLCBzdHJpbmc+ID0ge1xuICAgICAgW0VsZW1lbnRUeXBlLlBFUlNPTkFdOiAn8J+OrScsXG4gICAgICBbRWxlbWVudFR5cGUuU0tJTExdOiAn8J+OrycsXG4gICAgICBbRWxlbWVudFR5cGUuVEVNUExBVEVdOiAn8J+ThCcsXG4gICAgICBbRWxlbWVudFR5cGUuQUdFTlRdOiAn8J+klicsXG4gICAgICBbRWxlbWVudFR5cGUuTUVNT1JZXTogJ/Cfp6AnLFxuICAgICAgW0VsZW1lbnRUeXBlLkVOU0VNQkxFXTogJ/CfjrwnXG4gICAgfTtcbiAgICBcbiAgICBjb25zdCBlbW9qaSA9IHR5cGVFbW9qaXNbZWxlbWVudFR5cGVdIHx8ICfwn5OmJztcbiAgICBjb25zdCB0eXBlTmFtZSA9IGVsZW1lbnRUeXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgZWxlbWVudFR5cGUuc2xpY2UoMSk7XG4gICAgXG4gICAgcmV0dXJuIGDinIUgKipBSSBDdXN0b21pemF0aW9uIEVsZW1lbnQgSW5zdGFsbGVkIFN1Y2Nlc3NmdWxseSEqKlxcblxcbmAgK1xuICAgICAgYCR7ZW1vaml9ICoqJHttZXRhZGF0YS5uYW1lfSoqICR7bWV0YWRhdGEuYXV0aG9yID8gYGJ5ICR7bWV0YWRhdGEuYXV0aG9yfWAgOiAnJ31cXG5gICtcbiAgICAgIGDwn5OBIFR5cGU6ICR7dHlwZU5hbWV9XFxuYCArXG4gICAgICBg8J+ThCBTYXZlZCBhczogJHtmaWxlbmFtZX1cXG5cXG5gICtcbiAgICAgIGDwn5qAICoqUmVhZHkgdG8gdXNlISoqYDtcbiAgfVxufSJdfQ==
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWxlbWVudEluc3RhbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL0VsZW1lbnRJbnN0YWxsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFHN0IsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRWpGLE1BQU0sT0FBTyxnQkFBZ0I7SUFDbkIsWUFBWSxDQUFlO0lBQzNCLGdCQUFnQixDQUFtQjtJQUNuQyxPQUFPLEdBQUcsK0RBQStELENBQUM7SUFFbEYsWUFBWSxZQUEwQjtRQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBaUI7UUFPcEMsdUNBQXVDO1FBQ3ZDLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU5QywwQ0FBMEM7UUFDMUMsa0VBQWtFO1FBQ2xFLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFD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QyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZHLENBQUM7UUFFRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxvQkFBb0IsQ0FBQyxRQUEwQixFQUFFLFFBQWdCLEVBQUUsV0FBd0I7UUFDekYsTUFBTSxVQUFVLEdBQWdDO1lBQzlDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUk7WUFDM0IsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSTtZQUN6QixDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJO1lBQzVCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUk7U0FDMUIsQ0FBQztRQUVGLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDOUMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTVFLE9BQU8sNERBQTREO1lBQ2pFLEdBQUcsS0FBSyxNQUFNLFFBQVEsQ0FBQyxJQUFJLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSTtZQUNuRixZQUFZLFFBQVEsSUFBSTtZQUN4QixnQkFBZ0IsUUFBUSxNQUFNO1lBQzlCLHNCQUFzQixDQUFDO0lBQzNCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW5zdGFsbCBBSSBjdXN0b21pemF0aW9uIGVsZW1lbnRzIGZyb20gY29sbGVjdGlvblxuICogU3VwcG9ydHMgYWxsIGVsZW1lbnQgdHlwZXM6IHBlcnNvbmFzLCBza2lsbHMsIHRlbXBsYXRlcywgYWdlbnRzLCBtZW1vcmllcywgZW5zZW1ibGVzXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEdpdEh1YkNsaWVudCB9IGZyb20gJy4vR2l0SHViQ2xpZW50LmpzJztcbmltcG9ydCB7IElFbGVtZW50TWV0YWRhdGEgfSBmcm9tICcuLi90eXBlcy9lbGVtZW50cy9JRWxlbWVudC5qcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZVBhdGgsIHZhbGlkYXRlRmlsZW5hbWUsIHZhbGlkYXRlQ29udGVudFNpemUgfSBmcm9tICcuLi9zZWN1cml0eS9JbnB1dFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9MSU1JVFMgfSBmcm9tICcuLi9zZWN1cml0eS9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgQ29udGVudFZhbGlkYXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L2NvbnRlbnRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlFcnJvciB9IGZyb20gJy4uL2Vycm9ycy9TZWN1cml0eUVycm9yLmpzJztcbmltcG9ydCB7IFBvcnRmb2xpb01hbmFnZXIsIEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vcG9ydGZvbGlvL1BvcnRmb2xpb01hbmFnZXIuanMnO1xuXG5leHBvcnQgY2xhc3MgRWxlbWVudEluc3RhbGxlciB7XG4gIHByaXZhdGUgZ2l0aHViQ2xpZW50OiBHaXRIdWJDbGllbnQ7XG4gIHByaXZhdGUgcG9ydGZvbGlvTWFuYWdlcjogUG9ydGZvbGlvTWFuYWdlcjtcbiAgcHJpdmF0ZSBiYXNlVXJsID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvRG9sbGhvdXNlTUNQL2NvbGxlY3Rpb24vY29udGVudHMnO1xuICBcbiAgY29uc3RydWN0b3IoZ2l0aHViQ2xpZW50OiBHaXRIdWJDbGllbnQpIHtcbiAgICB0aGlzLmdpdGh1YkNsaWVudCA9IGdpdGh1YkNsaWVudDtcbiAgICB0aGlzLnBvcnRmb2xpb01hbmFnZXIgPSBQb3J0Zm9saW9NYW5hZ2VyLmdldEluc3RhbmNlKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBJbnN0YWxsIEFJIGN1c3RvbWl6YXRpb24gZWxlbWVudCBmcm9tIHRoZSBjb2xsZWN0aW9uXG4gICAqIEF1dG9tYXRpY2FsbHkgZGV0ZWN0cyBlbGVtZW50IHR5cGUgZnJvbSBwYXRoIHN0cnVjdHVyZVxuICAgKi9cbiAgYXN5bmMgaW5zdGFsbENvbnRlbnQoaW5wdXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHsgXG4gICAgc3VjY2VzczogYm9vbGVhbjsgXG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIG1ldGFkYXRhPzogSUVsZW1lbnRNZXRhZGF0YTtcbiAgICBlbGVtZW50VHlwZT86IEVsZW1lbnRUeXBlO1xuICAgIGZpbGVuYW1lPzogc3RyaW5nO1xuICB9PiB7XG4gICAgLy8gVmFsaWRhdGUgYW5kIHNhbml0aXplIHRoZSBpbnB1dCBwYXRoXG4gICAgY29uc3Qgc2FuaXRpemVkUGF0aCA9IHZhbGlkYXRlUGF0aChpbnB1dFBhdGgpO1xuICAgIFxuICAgIC8vIERldGVjdCBlbGVtZW50IHR5cGUgZnJvbSBwYXRoIHN0cnVjdHVyZVxuICAgIC8vIEV4cGVjdGVkIGZvcm1hdDogbGlicmFyeS9bZWxlbWVudC10eXBlXS9bY2F0ZWdvcnldL1tlbGVtZW50XS5tZFxuICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHNhbml0aXplZFBhdGguc3BsaXQoJy8nKTtcbiAgICBpZiAocGF0aFBhcnRzLmxlbmd0aCA8IDMgfHwgcGF0aFBhcnRzWzBdICE9PSAnbGlicmFyeScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2xsZWN0aW9uIHBhdGggZm9ybWF0LiBFeHBlY3RlZDogbGlicmFyeS9bZWxlbWVudC10eXBlXS9bY2F0ZWdvcnldL1tlbGVtZW50XS5tZCcpO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBlbGVtZW50VHlwZVN0ciA9IHBhdGhQYXJ0c1sxXTtcbiAgICBjb25zdCBlbGVtZW50VHlwZSA9IHRoaXMuZ2V0RWxlbWVudFR5cGVGcm9tU3RyaW5nKGVsZW1lbnRUeXBlU3RyKTtcbiAgICBcbiAgICAvLyBFbnN1cmUgdGhlIHBhdGggZW5kcyB3aXRoIC5tZFxuICAgIGlmICghc2FuaXRpemVkUGF0aC5lbmRzV2l0aCgnLm1kJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmaWxlIHR5cGUuIE9ubHkgLm1kIGZpbGVzIGFyZSBhbGxvd2VkLicpO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9LyR7c2FuaXRpemVkUGF0aH1gO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdpdGh1YkNsaWVudC5mZXRjaEZyb21HaXRIdWIodXJsKTtcbiAgICBcbiAgICBpZiAoZGF0YS50eXBlICE9PSAnZmlsZScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGF0aCBkb2VzIG5vdCBwb2ludCB0byBhIGZpbGUnKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgZmlsZSBzaXplIGJlZm9yZSBkb3dubG9hZGluZ1xuICAgIGlmIChkYXRhLnNpemUgPiBTRUNVUklUWV9MSU1JVFMuTUFYX1BFUlNPTkFfU0laRV9CWVRFUykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIHRvbyBsYXJnZSAoJHtkYXRhLnNpemV9IGJ5dGVzLCBtYXggJHtTRUNVUklUWV9MSU1JVFMuTUFYX1BFUlNPTkFfU0laRV9CWVRFU30gYnl0ZXMpYCk7XG4gICAgfVxuICAgIFxuICAgIC8vIERlY29kZSBCYXNlNjQgY29udGVudFxuICAgIGNvbnN0IGNvbnRlbnQgPSBCdWZmZXIuZnJvbShkYXRhLmNvbnRlbnQsICdiYXNlNjQnKS50b1N0cmluZygndXRmLTgnKTtcbiAgICBcbiAgICAvLyBWYWxpZGF0ZSBjb250ZW50IHNpemUgYWZ0ZXIgZGVjb2RpbmdcbiAgICB2YWxpZGF0ZUNvbnRlbnRTaXplKGNvbnRlbnQsIFNFQ1VSSVRZX0xJTUlUUy5NQVhfUEVSU09OQV9TSVpFX0JZVEVTKTtcbiAgICBcbiAgICAvLyBTYW5pdGl6ZSBjb250ZW50IGZvciBzZWN1cml0eSB0aHJlYXRzXG4gICAgY29uc3Qgc2FuaXRpemVkQ29udGVudCA9IENvbnRlbnRWYWxpZGF0b3Iuc2FuaXRpemVQZXJzb25hQ29udGVudChjb250ZW50KTtcbiAgICBcbiAgICAvLyBVc2Ugc2VjdXJlIFlBTUwgcGFyc2VyXG4gICAgbGV0IHBhcnNlZDtcbiAgICB0cnkge1xuICAgICAgcGFyc2VkID0gU2VjdXJlWWFtbFBhcnNlci5zYWZlTWF0dGVyKHNhbml0aXplZENvbnRlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTZWN1cml0eUVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU2VjdXJpdHkgdGhyZWF0IGluIGNvbnRlbnQ6ICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBtZXRhZGF0YSA9IHBhcnNlZC5kYXRhIGFzIElFbGVtZW50TWV0YWRhdGE7XG4gICAgXG4gICAgLy8gQWRkaXRpb25hbCBtZXRhZGF0YSB2YWxpZGF0aW9uIGZvciBpbmplY3Rpb24gYXR0YWNrc1xuICAgIGNvbnN0IG1ldGFkYXRhVmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgaWYgKCFtZXRhZGF0YVZhbGlkYXRpb24uaXNWYWxpZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZWN1cml0eSB2YWxpZGF0aW9uIGZhaWxlZDogJHttZXRhZGF0YVZhbGlkYXRpb24uZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgbWV0YWRhdGFcbiAgICBpZiAoIW1ldGFkYXRhLm5hbWUgfHwgIW1ldGFkYXRhLmRlc2NyaXB0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29udGVudDogbWlzc2luZyByZXF1aXJlZCBuYW1lIG9yIGRlc2NyaXB0aW9uJyk7XG4gICAgfVxuICAgIFxuICAgIC8vIEdlbmVyYXRlIGFuZCB2YWxpZGF0ZSBsb2NhbCBmaWxlbmFtZVxuICAgIGNvbnN0IG9yaWdpbmFsRmlsZW5hbWUgPSBzYW5pdGl6ZWRQYXRoLnNwbGl0KCcvJykucG9wKCkgfHwgJ2Rvd25sb2FkZWQtZWxlbWVudC5tZCc7XG4gICAgY29uc3QgZmlsZW5hbWUgPSB2YWxpZGF0ZUZpbGVuYW1lKG9yaWdpbmFsRmlsZW5hbWUpO1xuICAgIFxuICAgIC8vIEdldCBhcHByb3ByaWF0ZSBkaXJlY3RvcnkgZm9yIGVsZW1lbnQgdHlwZVxuICAgIGNvbnN0IGVsZW1lbnREaXIgPSB0aGlzLnBvcnRmb2xpb01hbmFnZXIuZ2V0RWxlbWVudERpcihlbGVtZW50VHlwZSk7XG4gICAgY29uc3QgbG9jYWxQYXRoID0gcGF0aC5qb2luKGVsZW1lbnREaXIsIGZpbGVuYW1lKTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiBmaWxlIGFscmVhZHkgZXhpc3RzXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLmFjY2Vzcyhsb2NhbFBhdGgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IGBBSSBjdXN0b21pemF0aW9uIGVsZW1lbnQgYWxyZWFkeSBleGlzdHM6ICR7ZmlsZW5hbWV9XFxuXFxuVGhlIGVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiBpbnN0YWxsZWQuYFxuICAgICAgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZpbGUgZG9lc24ndCBleGlzdCwgcHJvY2VlZCB3aXRoIGluc3RhbGxhdGlvblxuICAgIH1cbiAgICBcbiAgICAvLyBXcml0ZSB0aGUgc2FuaXRpemVkIGZpbGVcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUobG9jYWxQYXRoLCBzYW5pdGl6ZWRDb250ZW50LCAndXRmLTgnKTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgIG1lc3NhZ2U6IGBBSSBjdXN0b21pemF0aW9uIGVsZW1lbnQgaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseSFgLFxuICAgICAgbWV0YWRhdGEsXG4gICAgICBmaWxlbmFtZSxcbiAgICAgIGVsZW1lbnRUeXBlXG4gICAgfTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBFbGVtZW50VHlwZSBmcm9tIHN0cmluZ1xuICAgKi9cbiAgcHJpdmF0ZSBnZXRFbGVtZW50VHlwZUZyb21TdHJpbmcodHlwZVN0cjogc3RyaW5nKTogRWxlbWVudFR5cGUge1xuICAgIGNvbnN0IHR5cGVNYXA6IFJlY29yZDxzdHJpbmcsIEVsZW1lbnRUeXBlPiA9IHtcbiAgICAgICdwZXJzb25hcyc6IEVsZW1lbnRUeXBlLlBFUlNPTkEsXG4gICAgICAnc2tpbGxzJzogRWxlbWVudFR5cGUuU0tJTEwsXG4gICAgICAndGVtcGxhdGVzJzogRWxlbWVudFR5cGUuVEVNUExBVEUsXG4gICAgICAnYWdlbnRzJzogRWxlbWVudFR5cGUuQUdFTlRcbiAgICB9O1xuICAgIFxuICAgIGNvbnN0IGVsZW1lbnRUeXBlID0gdHlwZU1hcFt0eXBlU3RyXTtcbiAgICBpZiAoIWVsZW1lbnRUeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZWxlbWVudCB0eXBlOiAke3R5cGVTdHJ9LiBWYWxpZCB0eXBlczogJHtPYmplY3Qua2V5cyh0eXBlTWFwKS5qb2luKCcsICcpfWApO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZWxlbWVudFR5cGU7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGb3JtYXQgaW5zdGFsbGF0aW9uIHN1Y2Nlc3MgbWVzc2FnZVxuICAgKi9cbiAgZm9ybWF0SW5zdGFsbFN1Y2Nlc3MobWV0YWRhdGE6IElFbGVtZW50TWV0YWRhdGEsIGZpbGVuYW1lOiBzdHJpbmcsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZSk6IHN0cmluZyB7XG4gICAgY29uc3QgdHlwZUVtb2ppczogUmVjb3JkPEVsZW1lbnRUeXBlLCBzdHJpbmc+ID0ge1xuICAgICAgW0VsZW1lbnRUeXBlLlBFUlNPTkFdOiAn8J+OrScsXG4gICAgICBbRWxlbWVudFR5cGUuU0tJTExdOiAn8J+OrycsXG4gICAgICBbRWxlbWVudFR5cGUuVEVNUExBVEVdOiAn8J+ThCcsXG4gICAgICBbRWxlbWVudFR5cGUuQUdFTlRdOiAn8J+klidcbiAgICB9O1xuICAgIFxuICAgIGNvbnN0IGVtb2ppID0gdHlwZUVtb2ppc1tlbGVtZW50VHlwZV0gfHwgJ/Cfk6YnO1xuICAgIGNvbnN0IHR5cGVOYW1lID0gZWxlbWVudFR5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBlbGVtZW50VHlwZS5zbGljZSgxKTtcbiAgICBcbiAgICByZXR1cm4gYOKchSAqKkFJIEN1c3RvbWl6YXRpb24gRWxlbWVudCBJbnN0YWxsZWQgU3VjY2Vzc2Z1bGx5ISoqXFxuXFxuYCArXG4gICAgICBgJHtlbW9qaX0gKioke21ldGFkYXRhLm5hbWV9KiogJHttZXRhZGF0YS5hdXRob3IgPyBgYnkgJHttZXRhZGF0YS5hdXRob3J9YCA6ICcnfVxcbmAgK1xuICAgICAgYPCfk4EgVHlwZTogJHt0eXBlTmFtZX1cXG5gICtcbiAgICAgIGDwn5OEIFNhdmVkIGFzOiAke2ZpbGVuYW1lfVxcblxcbmAgK1xuICAgICAgYPCfmoAgKipSZWFkeSB0byB1c2UhKipgO1xuICB9XG59Il19
@@ -6,6 +6,4 @@ export * from './FeedbackProcessor.js';
6
6
  export * from './agents/index.js';
7
7
  export * from './templates/index.js';
8
8
  export * from './skills/index.js';
9
- export * from './memories/index.js';
10
- export * from './ensembles/index.js';
11
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/elements/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/elements/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC"}
@@ -7,6 +7,4 @@ export * from './FeedbackProcessor.js';
7
7
  export * from './agents/index.js';
8
8
  export * from './templates/index.js';
9
9
  export * from './skills/index.js';
10
- export * from './memories/index.js';
11
- export * from './ensembles/index.js';
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZWxlbWVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsd0JBQXdCLENBQUM7QUFFdkMsdUJBQXVCO0FBQ3ZCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2VudHJhbCBleHBvcnQgZm9yIGVsZW1lbnQgaW1wbGVtZW50YXRpb25zLlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vQmFzZUVsZW1lbnQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9GZWVkYmFja1Byb2Nlc3Nvci5qcyc7XG5cbi8vIEVsZW1lbnQgdHlwZSBleHBvcnRzXG5leHBvcnQgKiBmcm9tICcuL2FnZW50cy9pbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3RlbXBsYXRlcy9pbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NraWxscy9pbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL21lbW9yaWVzL2luZGV4LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZW5zZW1ibGVzL2luZGV4LmpzJzsiXX0=
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZWxlbWVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsd0JBQXdCLENBQUM7QUFFdkMsdUJBQXVCO0FBQ3ZCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDZW50cmFsIGV4cG9ydCBmb3IgZWxlbWVudCBpbXBsZW1lbnRhdGlvbnMuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9CYXNlRWxlbWVudC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0ZlZWRiYWNrUHJvY2Vzc29yLmpzJztcblxuLy8gRWxlbWVudCB0eXBlIGV4cG9ydHNcbmV4cG9ydCAqIGZyb20gJy4vYWdlbnRzL2luZGV4LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdGVtcGxhdGVzL2luZGV4LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2tpbGxzL2luZGV4LmpzJzsiXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"Skill.d.ts","sourceRoot":"","sources":["../../../src/elements/skills/Skill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAQpG,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACrD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,QAAQ,CAAC;IACjE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,KAAM,SAAQ,WAAY,YAAW,QAAQ;IACzC,QAAQ,EAAE,aAAa,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAa;IAKhD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAO;IAC3C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;gBAEhC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,YAAY,GAAE,MAAW;IA0CvE;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;;;;OAKG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IA0E5C;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IAI/B;;OAEG;IACH,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAIvC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAmB9B;;OAEG;IACG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAwBxC;;OAEG;IACa,QAAQ,IAAI,uBAAuB;IAiFnD;;OAEG;IACa,SAAS,IAAI,MAAM;IAgBnC;;OAEG;IACa,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAkC/C;;OAEG;IACmB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAY/C;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK;IAkBjD;;;;OAIG;IACmB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjD;;;;;OAKG;IACH,eAAe,IAAI,IAAI;CAIxB"}
1
+ {"version":3,"file":"Skill.d.ts","sourceRoot":"","sources":["../../../src/elements/skills/Skill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAQpG,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACrD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,GAAG,QAAQ,CAAC;IACjE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,KAAM,SAAQ,WAAY,YAAW,QAAQ;IACzC,QAAQ,EAAE,aAAa,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAa;IAKhD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAO;IAC3C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;gBAEhC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,YAAY,GAAE,MAAW;IA2CvE;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;;;;OAKG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IA0E5C;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IAI/B;;OAEG;IACH,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAIvC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAmB9B;;OAEG;IACG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAwBxC;;OAEG;IACa,QAAQ,IAAI,uBAAuB;IAiFnD;;OAEG;IACa,SAAS,IAAI,MAAM;IAgBnC;;OAEG;IACa,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAkC/C;;OAEG;IACmB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAY/C;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK;IAkBjD;;;;OAIG;IACmB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjD;;;;;OAKG;IACH,eAAe,IAAI,IAAI;CAIxB"}
@@ -36,7 +36,8 @@ export class Skill extends BaseElement {
36
36
  description: metadata.description ? sanitizeInput(UnicodeValidator.normalize(metadata.description).normalizedContent, 500) : undefined
37
37
  };
38
38
  super(ElementType.SKILL, sanitizedMetadata);
39
- this.instructions = instructions ? sanitizeInput(UnicodeValidator.normalize(instructions).normalizedContent, 10000) : '';
39
+ // Ensure instructions is always a string, even if empty
40
+ this.instructions = instructions && instructions.trim() ? sanitizeInput(UnicodeValidator.normalize(instructions).normalizedContent, 10000) : '';
40
41
  // Ensure skill-specific metadata
41
42
  this.metadata = {
42
43
  ...this.metadata,
@@ -378,4 +379,4 @@ export class Skill extends BaseElement {
378
379
  logger.debug(`Cleared all parameters for skill: ${this.metadata.name}`);
379
380
  }
380
381
  }
381
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tpbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvc2tpbGxzL1NraWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFnQixNQUFNLGtDQUFrQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQWlDcEUsTUFBTSxPQUFPLEtBQU0sU0FBUSxXQUFXO0lBRTdCLFlBQVksQ0FBUztJQUNyQixVQUFVLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFaEQsMkVBQTJFO0lBQzNFLDhFQUE4RTtJQUM5RSw4Q0FBOEM7SUFDN0IsbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0lBQzFCLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxDQUFDLCtCQUErQjtJQUU1RSxZQUFZLFFBQWdDLEVBQUUsZUFBdUIsRUFBRTtRQUNyRSw2REFBNkQ7UUFDN0QsNERBQTREO1FBQzVELDBFQUEwRTtRQUMxRSwyQ0FBMkM7UUFDM0MsOEJBQThCO1FBQzlCLDZCQUE2QjtRQUM3QixNQUFNLGlCQUFpQixHQUFHO1lBQ3hCLEdBQUcsUUFBUTtZQUNYLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNqSCxXQUFXLEVB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QUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNyQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFFSCwyQ0FBMkM7UUFDM0MsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQixNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JELE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ2EsS0FBSyxDQUFDLFVBQVU7UUFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFdEUscUVBQXFFO1FBQ3JFLDJEQUEyRDtRQUMzRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkIsTUFBTSxLQUFLLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixNQUFNLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTa2lsbCBlbGVtZW50IGNsYXNzIGltcGxlbWVudGluZyBJRWxlbWVudCBpbnRlcmZhY2UuXG4gKiBSZXByZXNlbnRzIGEgZGlzY3JldGUgY2FwYWJpbGl0eSBmb3Igc3BlY2lmaWMgdGFza3MuXG4gKiBcbiAqIFNFQ1VSSVRZIEZJWEVTIElNUExFTUVOVEVEIChQUiAjMzE5KTpcbiAqIDEuIENSSVRJQ0FMOiBBZGRlZCBjb21wcmVoZW5zaXZlIGlucHV0IHZhbGlkYXRpb24gZm9yIGFsbCBza2lsbCBwYXJhbWV0ZXJzXG4gKiAyLiBNRURJVU06IEltcGxlbWVudGVkIFVuaWNvZGUgbm9ybWFsaXphdGlvbiB0byBwcmV2ZW50IGhvbW9ncmFwaCBhdHRhY2tzXG4gKiAzLiBNRURJVU06IEFkZGVkIGF1ZGl0IGxvZ2dpbmcgZm9yIHNlY3VyaXR5IGV2ZW50cyB2aWEgU2VjdXJpdHlNb25pdG9yXG4gKiA0LiBNRURJVU06IEltcGxlbWVudGVkIG1lbW9yeSBtYW5hZ2VtZW50IHRvIHByZXZlbnQgdW5ib3VuZGVkIGdyb3d0aFxuICogNS4gTUVESVVNOiBBZGRlZCBYU1MgcHJvdGVjdGlvbiB0aHJvdWdoIGlucHV0IHNhbml0aXphdGlvblxuICovXG5cbmltcG9ydCB7IEJhc2VFbGVtZW50IH0gZnJvbSAnLi4vQmFzZUVsZW1lbnQuanMnO1xuaW1wb3J0IHsgSUVsZW1lbnQsIElFbGVtZW50TWV0YWRhdGEsIEVsZW1lbnRWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi4vLi4vdHlwZXMvZWxlbWVudHMvaW5kZXguanMnO1xuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9wb3J0Zm9saW8vdHlwZXMuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IHNhbml0aXplSW5wdXQsIHZhbGlkYXRlUGF0aCB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L0lucHV0VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcblxuLy8gRXh0ZW5kIElFbGVtZW50TWV0YWRhdGEgd2l0aCBza2lsbC1zcGVjaWZpYyBmaWVsZHNcbmV4cG9ydCBpbnRlcmZhY2UgU2tpbGxNZXRhZGF0YSBleHRlbmRzIElFbGVtZW50TWV0YWRhdGEge1xuICBsYW5ndWFnZXM/OiBzdHJpbmdbXTsgICAgICAgICAgIC8vIFByb2dyYW1taW5nL3Nwb2tlbiBsYW5ndWFnZXMgdGhpcyBza2lsbCB3b3JrcyB3aXRoXG4gIGNvbXBsZXhpdHk/OiAnYmVnaW5uZXInIHwgJ2ludGVybWVkaWF0ZScgfCAnYWR2YW5jZWQnIHwgJ2V4cGVydCc7XG4gIGRvbWFpbnM/OiBzdHJpbmdbXTsgICAgICAgICAgICAgLy8gRG9tYWluIGNhdGVnb3JpZXMgKGUuZy4sIHdlYi1kZXYsIGRhdGEtc2NpZW5jZSwgd3JpdGluZylcbiAgcHJlcmVxdWlzaXRlcz86IHN0cmluZ1tdOyAgICAgICAvLyBSZXF1aXJlZCBrbm93bGVkZ2Ugb3Igb3RoZXIgc2tpbGxzXG4gIHBhcmFtZXRlcnM/OiBTa2lsbFBhcmFtZXRlcltdOyAgLy8gQ29uZmlndXJhYmxlIHBhcmFtZXRlcnNcbiAgZXhhbXBsZXM/OiBTa2lsbEV4YW1wbGVbXTsgICAgICAvLyBVc2FnZSBleGFtcGxlc1xuICBjZXJ0aWZpY2F0aW9uPzogc3RyaW5nOyAgICAgICAgIC8vIEV4dGVybmFsIGNlcnRpZmljYXRpb24gb3IgdmFsaWRhdGlvblxuICBwcm9maWNpZW5jeV9sZXZlbD86IG51bWJlcjsgICAgIC8vIDEtMTAwIHByb2ZpY2llbmN5IGxldmVsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2tpbGxQYXJhbWV0ZXIge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnYm9vbGVhbicgfCAnZW51bSc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgZGVmYXVsdD86IGFueTtcbiAgb3B0aW9ucz86IHN0cmluZ1tdOyAgLy8gRm9yIGVudW0gdHlwZVxuICBtaW4/OiBudW1iZXI7ICAgICAgICAvLyBGb3IgbnVtYmVyIHR5cGVcbiAgbWF4PzogbnVtYmVyOyAgICAgICAgLy8gRm9yIG51bWJlciB0eXBlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2tpbGxFeGFtcGxlIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgaW5wdXQ/OiBhbnk7XG4gIG91dHB1dD86IGFueTtcbiAgY29kZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFNraWxsIGV4dGVuZHMgQmFzZUVsZW1lbnQgaW1wbGVtZW50cyBJRWxlbWVudCB7XG4gIHB1YmxpYyBkZWNsYXJlIG1ldGFkYXRhOiBTa2lsbE1ldGFkYXRhO1xuICBwdWJsaWMgaW5zdHJ1Y3Rpb25zOiBzdHJpbmc7XG4gIHB1YmxpYyBwYXJhbWV0ZXJzOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xuICBcbiAgLy8gU0VDVVJJVFkgRklYICM0OiBNZW1vcnkgbWFuYWdlbWVudCBjb25zdGFudHMgdG8gcHJldmVudCB1bmJvdW5kZWQgZ3Jvd3RoXG4gIC8vIFByZXZpb3VzbHk6IE5vIGxpbWl0cyBvbiBwYXJhbWV0ZXIgc3RvcmFnZSwgY291bGQgbGVhZCB0byBtZW1vcnkgZXhoYXVzdGlvblxuICAvLyBOb3c6IEVuZm9yY2VkIGxpbWl0cyBvbiBib3RoIGNvdW50IGFuZCBzaXplXG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX1BBUkFNRVRFUl9DT1VOVCA9IDEwMDtcbiAgcHJpdmF0ZSByZWFkb25seSBNQVhfUEFSQU1FVEVSX1NJWkUgPSAxMDAwMDsgLy8gTWF4IHNpemUgcGVyIHBhcmFtZXRlciB2YWx1ZVxuXG4gIGNvbnN0cnVjdG9yKG1ldGFkYXRhOiBQYXJ0aWFsPFNraWxsTWV0YWRhdGE+LCBpbnN0cnVjdGlvbnM6IHN0cmluZyA9ICcnKSB7XG4gICAgLy8gU0VDVVJJVFkgRklYICMyOiBWYWxpZGF0ZSBhbmQgc2FuaXRpemUgQUxMIG1ldGFkYXRhIGZpZWxkc1xuICAgIC8vIFByZXZpb3VzbHk6IG1ldGFkYXRhIHdhcyB1c2VkIGRpcmVjdGx5IHdpdGhvdXQgdmFsaWRhdGlvblxuICAgIC8vIE5vdzogQWxsIHN0cmluZyBpbnB1dHMgYXJlIFVuaWNvZGUgbm9ybWFsaXplZCBhbmQgc2FuaXRpemVkIHRvIHByZXZlbnQ6XG4gICAgLy8gLSBYU1MgYXR0YWNrcyB0aHJvdWdoIG1hbGljaW91cyBtZXRhZGF0YVxuICAgIC8vIC0gVW5pY29kZSBob21vZ3JhcGggYXR0YWNrc1xuICAgIC8vIC0gQnVmZmVyIG92ZXJmbG93IGF0dGVtcHRzXG4gICAgY29uc3Qgc2FuaXRpemVkTWV0YWRhdGEgPSB7XG4gICAgICAuLi5tZXRhZGF0YSxcbiAgICAgIG5hbWU6IG1ldGFkYXRhLm5hbWUgPyBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKG1ldGFkYXRhLm5hbWUpLm5vcm1hbGl6ZWRDb250ZW50LCAxMDApIDogdW5kZWZpbmVkLFxuICAgICAgZGVzY3JpcHRpb246IG1ldGFkYXRhLmRlc2NyaXB0aW9uID8gc2FuaXRpemVJbnB1dChVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShtZXRhZGF0YS5kZXNjcmlwdGlvbikubm9ybWFsaXplZENvbnRlbnQsIDUwMCkgOiB1bmRlZmluZWRcbiAgICB9O1xuICAgIFxuICAgIHN1cGVyKEVsZW1lbnRUeXBlLlNLSUxMLCBzYW5pdGl6ZWRNZXRhZGF0YSk7XG4gICAgdGhpcy5pbnN0cnVjdGlvbnMgPSBpbnN0cnVjdGlvbnMgPyBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGluc3RydWN0aW9ucykubm9ybWFsaXplZENvbnRlbnQsIDEwMDAwKSA6ICcnO1xuICAgIFxuICAgIC8vIEVuc3VyZSBza2lsbC1zcGVjaWZpYyBtZXRhZGF0YVxuICAgIHRoaXMubWV0YWRhdGEgPSB7XG4gICAgICAuLi50aGlzLm1ldGFkYXRhLFxuICAgICAgbGFuZ3VhZ2VzOiBtZXRhZGF0YS5sYW5ndWFnZXMgfHwgW10sXG4gICAgICBjb21wbGV4aXR5OiBtZXRhZGF0YS5jb21wbGV4aXR5IHx8ICdiZWdpbm5lcicsXG4gICAgICBkb21haW5zOiBtZXRhZGF0YS5kb21haW5zIHx8IFtdLFxuICAgICAgcHJlcmVxdWlzaXRlczogbWV0YWRhdGEucHJlcmVxdWlzaXRlcyB8fCBbXSxcbiAgICAgIHBhcmFtZXRlcnM6IG1ldGFkYXRhLnBhcmFtZXRlcnMgfHwgW10sXG4gICAgICBleGFtcGxlczogbWV0YWRhdGEuZXhhbXBsZXMgfHwgW10sXG4gICAgICBwcm9maWNpZW5jeV9sZXZlbDogbWV0YWRhdGEucHJvZmljaWVuY3lfbGV2ZWwgfHwgMFxuICAgIH07XG5cbiAgICAvLyBWYWxpZGF0ZSBwYXJhbWV0ZXIgZGVmaW5pdGlvbnNcbiAgICBpZiAodGhpcy5tZXRhZGF0YS5wYXJhbWV0ZXJzKSB7XG4gICAgICB0aGlzLm1ldGFkYXRhLnBhcmFtZXRlcnMgPSB0aGlzLm1ldGFkYXRhLnBhcmFtZXRlcnMubWFwKHBhcmFtID0+ICh7XG4gICAgICAgIC4uLnBhcmFtLFxuICAgICAgICBuYW1lOiBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHBhcmFtLm5hbWUpLm5vcm1hbGl6ZWRDb250ZW50LCA1MCksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHBhcmFtLmRlc2NyaXB0aW9uKS5ub3JtYWxpemVkQ29udGVudCwgMjAwKSxcbiAgICAgICAgb3B0aW9uczogcGFyYW0ub3B0aW9ucz8ubWFwKG9wdCA9PiBzYW5pdGl6ZUlucHV0KG9wdCwgMTAwKSlcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHBhcmFtZXRlciB2YWx1ZXMgd2l0aCBkZWZhdWx0c1xuICAgIHRoaXMuaW5pdGlhbGl6ZVBhcmFtZXRlcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHBhcmFtZXRlcnMgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplUGFyYW1ldGVycygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tZXRhZGF0YS5wYXJhbWV0ZXJzKSB7XG4gICAgICB0aGlzLm1ldGFkYXRhLnBhcmFtZXRlcnMuZm9yRWFjaChwYXJhbSA9PiB7XG4gICAgICAgIGlmIChwYXJhbS5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnBhcmFtZXRlcnMuc2V0KHBhcmFtLm5hbWUsIHBhcmFtLmRlZmF1bHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgcGFyYW1ldGVyIHZhbHVlXG4gICAqIFNFQ1VSSVRZIEZJWCAjMTogQ29tcHJlaGVuc2l2ZSBpbnB1dCB2YWxpZGF0aW9uIGZvciBhbGwgc2tpbGwgcGFyYW1ldGVyc1xuICAgKiBQcmV2aW91c2x5OiBQYXJhbWV0ZXJzIHdlcmUgc2V0IHdpdGhvdXQgdmFsaWRhdGlvbiwgY3JlYXRpbmcgc2VjdXJpdHkgcmlza3NcbiAgICogTm93OiBGdWxsIHZhbGlkYXRpb24gcGlwZWxpbmUgaW5jbHVkaW5nIHNhbml0aXphdGlvbiwgdHlwZSBjaGVja2luZywgYW5kIHNpemUgbGltaXRzXG4gICAqL1xuICBzZXRQYXJhbWV0ZXIobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgLy8gQ1JJVElDQUwgRklYOiBTYW5pdGl6ZSBwYXJhbWV0ZXIgbmFtZSB0byBwcmV2ZW50IGluamVjdGlvbiBhdHRhY2tzXG4gICAgY29uc3Qgc2FuaXRpemVkTmFtZSA9IHNhbml0aXplSW5wdXQobmFtZSwgNTApO1xuICAgIFxuICAgIGNvbnN0IHBhcmFtID0gdGhpcy5tZXRhZGF0YS5wYXJhbWV0ZXJzPy5maW5kKHAgPT4gcC5uYW1lID09PSBzYW5pdGl6ZWROYW1lKTtcbiAgICBpZiAoIXBhcmFtKSB7XG4gICAgICAvLyBTRUNVUklUWSBGSVggIzM6IExvZyBhdWRpdCBldmVudHMgZm9yIHNlY3VyaXR5IG1vbml0b3JpbmdcbiAgICAgIC8vIFRoaXMgaGVscHMgZGV0ZWN0IHBvdGVudGlhbCBhdHRhY2sgcGF0dGVybnMgb3IgbWlzY29uZmlndXJhdGlvbnNcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1lBTUxfUEFSU0lOR19XQVJOSU5HJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdTa2lsbC5zZXRQYXJhbWV0ZXInLFxuICAgICAgICBkZXRhaWxzOiBgQXR0ZW1wdCB0byBzZXQgdW5rbm93biBwYXJhbWV0ZXI6ICR7c2FuaXRpemVkTmFtZX0gZm9yIHNraWxsOiAke3RoaXMubWV0YWRhdGEubmFtZX1gXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGFyYW1ldGVyICcke3Nhbml0aXplZE5hbWV9JyBub3QgZm91bmQgaW4gc2tpbGwgZGVmaW5pdGlvbmApO1xuICAgIH1cblxuICAgIC8vIENSSVRJQ0FMIEZJWDogU2FuaXRpemUgYW5kIHZhbGlkYXRlIHRoZSB2YWx1ZSBiYXNlZCBvbiB0eXBlXG4gICAgbGV0IHNhbml0aXplZFZhbHVlID0gdmFsdWU7XG4gICAgXG4gICAgaWYgKHBhcmFtLnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBTRUNVUklUWSBGSVggIzIgJiAjNTogTm9ybWFsaXplIFVuaWNvZGUgYW5kIHNhbml0aXplIHN0cmluZyB2YWx1ZXNcbiAgICAgIC8vIFByZXZpb3VzbHk6IFN0cmluZyB2YWx1ZXMgd2VyZSB1c2VkIGRpcmVjdGx5IHdpdGhvdXQgdmFsaWRhdGlvblxuICAgICAgLy8gTm93OiBGdWxsIHZhbGlkYXRpb24gcGlwZWxpbmU6XG4gICAgICAvLyAxLiBVbmljb2RlIG5vcm1hbGl6YXRpb24gcHJldmVudHMgaG9tb2dyYXBoIGF0dGFja3NcbiAgICAgIC8vIDIuIHNhbml0aXplSW5wdXQoKSBzdHJpcHMgZGFuZ2Vyb3VzIEhUTUwvSlMgY29udGVudFxuICAgICAgLy8gMy4gTGVuZ3RoIGxpbWl0cyBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvdyBhdHRhY2tzXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoU3RyaW5nKHZhbHVlKSk7XG4gICAgICBzYW5pdGl6ZWRWYWx1ZSA9IHNhbml0aXplSW5wdXQobm9ybWFsaXplZC5ub3JtYWxpemVkQ29udGVudCwgcGFyYW0ubWF4IHx8IDEwMDApO1xuICAgICAgXG4gICAgICAvLyBTRUNVUklUWSBGSVggIzU6IEFkZGl0aW9uYWwgWFNTIHByb3RlY3Rpb25cbiAgICAgIC8vIENoZWNrIGZvciBjb21tb24gWFNTIHBhdHRlcm5zIGV2ZW4gYWZ0ZXIgc2FuaXRpemF0aW9uXG4gICAgICAvLyBUaGlzIHByb3ZpZGVzIGRlZmVuc2UtaW4tZGVwdGggYWdhaW5zdCBzb3BoaXN0aWNhdGVkIGF0dGFja3NcbiAgICAgIGlmIChzYW5pdGl6ZWRWYWx1ZS5pbmNsdWRlcygnPHNjcmlwdCcpIHx8IHNhbml0aXplZFZhbHVlLmluY2x1ZGVzKCdqYXZhc2NyaXB0OicpKSB7XG4gICAgICAgIC8vIFNFQ1VSSVRZIEZJWCAjMzogTG9nIGhpZ2gtc2V2ZXJpdHkgc2VjdXJpdHkgZXZlbnRzXG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnQ09OVEVOVF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgICBzb3VyY2U6ICdTa2lsbC5zZXRQYXJhbWV0ZXInLFxuICAgICAgICAgIGRldGFpbHM6IGBQb3RlbnRpYWwgWFNTIGF0dGVtcHQgaW4gc2tpbGwgcGFyYW1ldGVyOiAke3Nhbml0aXplZE5hbWV9IGZvciBza2lsbDogJHt0aGlzLm1ldGFkYXRhLm5hbWV9YFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNoYXJhY3RlcnMgaW4gcGFyYW1ldGVyIHZhbHVlJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHlwZSB2YWxpZGF0aW9uXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWUocGFyYW0sIHNhbml0aXplZFZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgJyR7c2FuaXRpemVkTmFtZX0nOiBleHBlY3RlZCAke3BhcmFtLnR5cGV9YCk7XG4gICAgfVxuXG4gICAgLy8gU0VDVVJJVFkgRklYICM0OiBNZW1vcnkgbWFuYWdlbWVudCAtIGNoZWNrIHBhcmFtZXRlciBjb3VudFxuICAgIC8vIFByZXZpb3VzbHk6IE5vIGxpbWl0cyBvbiBwYXJhbWV0ZXIgc3RvcmFnZSwgY291bGQgbGVhZCB0byBtZW1vcnkgZXhoYXVzdGlvbiBhdHRhY2tzXG4gICAgLy8gTm93OiBFbmZvcmNlZCBsaW1pdHMgcHJldmVudCBhdHRhY2tlcnMgZnJvbSBjb25zdW1pbmcgdW5saW1pdGVkIG1lbW9yeVxuICAgIGlmICh0aGlzLnBhcmFtZXRlcnMuc2l6ZSA+PSB0aGlzLk1BWF9QQVJBTUVURVJfQ09VTlQgJiYgIXRoaXMucGFyYW1ldGVycy5oYXMoc2FuaXRpemVkTmFtZSkpIHtcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWCAjMzogTG9nIHJhdGUgbGltaXQgdmlvbGF0aW9ucyBmb3Igc2VjdXJpdHkgbW9uaXRvcmluZ1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnUkFURV9MSU1JVF9FWENFRURFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgc291cmNlOiAnU2tpbGwuc2V0UGFyYW1ldGVyJyxcbiAgICAgICAgZGV0YWlsczogYFBhcmFtZXRlciBsaW1pdCBleGNlZWRlZCBmb3Igc2tpbGw6ICR7dGhpcy5tZXRhZGF0YS5uYW1lfS4gTWF4OiAke3RoaXMuTUFYX1BBUkFNRVRFUl9DT1VOVH1gXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGFyYW1ldGVyIGxpbWl0IGV4Y2VlZGVkLiBNYXhpbXVtICR7dGhpcy5NQVhfUEFSQU1FVEVSX0NPVU5UfSBwYXJhbWV0ZXJzIGFsbG93ZWRgKTtcbiAgICB9XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYICM0OiBDaGVjayBwYXJhbWV0ZXIgdmFsdWUgc2l6ZSBmb3Igc3RyaW5nc1xuICAgIC8vIFRoaXMgcHJldmVudHMgYXR0YWNrZXJzIGZyb20gc3RvcmluZyBtYXNzaXZlIHN0cmluZ3MgdGhhdCBjb3VsZCBleGhhdXN0IG1lbW9yeVxuICAgIGlmIChwYXJhbS50eXBlID09PSAnc3RyaW5nJyAmJiBzYW5pdGl6ZWRWYWx1ZS5sZW5ndGggPiB0aGlzLk1BWF9QQVJBTUVURVJfU0laRSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXJhbWV0ZXIgdmFsdWUgdG9vIGxhcmdlLiBNYXhpbXVtICR7dGhpcy5NQVhfUEFSQU1FVEVSX1NJWkV9IGNoYXJhY3RlcnMgYWxsb3dlZGApO1xuICAgIH1cblxuICAgIHRoaXMucGFyYW1ldGVycy5zZXQoc2FuaXRpemVkTmFtZSwgc2FuaXRpemVkVmFsdWUpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgU2V0IHBhcmFtZXRlciAke3Nhbml0aXplZE5hbWV9ID0gJHtzYW5pdGl6ZWRWYWx1ZX0gZm9yIHNraWxsICR7dGhpcy5tZXRhZGF0YS5uYW1lfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHBhcmFtZXRlciB2YWx1ZVxuICAgKi9cbiAgZ2V0UGFyYW1ldGVyKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1ldGVycy5nZXQobmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBwYXJhbWV0ZXJzIGFzIG9iamVjdFxuICAgKi9cbiAgZ2V0QWxsUGFyYW1ldGVycygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMucGFyYW1ldGVycyk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgcGFyYW1ldGVyIHZhbHVlIGFnYWluc3QgaXRzIGRlZmluaXRpb25cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShwYXJhbTogU2tpbGxQYXJhbWV0ZXIsIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKHBhcmFtLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgaWYgKGlzTmFOKG51bSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHBhcmFtLm1pbiAhPT0gdW5kZWZpbmVkICYmIG51bSA8IHBhcmFtLm1pbikgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAocGFyYW0ubWF4ICE9PSB1bmRlZmluZWQgJiYgbnVtID4gcGFyYW0ubWF4KSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJztcbiAgICAgIGNhc2UgJ2VudW0nOlxuICAgICAgICByZXR1cm4gcGFyYW0ub3B0aW9ucz8uaW5jbHVkZXMoU3RyaW5nKHZhbHVlKSkgfHwgZmFsc2U7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSB0aGUgc2tpbGwgd2l0aCBjdXJyZW50IHBhcmFtZXRlcnNcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGUoaW5wdXQ/OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGxvZ2dlci5pbmZvKGBFeGVjdXRpbmcgc2tpbGw6ICR7dGhpcy5tZXRhZGF0YS5uYW1lfWApO1xuICAgIFxuICAgIC8vIFZhbGlkYXRlIHJlcXVpcmVkIHBhcmFtZXRlcnNcbiAgICBjb25zdCBtaXNzaW5nUmVxdWlyZWQgPSB0aGlzLm1ldGFkYXRhLnBhcmFtZXRlcnNcbiAgICAgID8uZmlsdGVyKHAgPT4gcC5yZXF1aXJlZCAmJiAhdGhpcy5wYXJhbWV0ZXJzLmhhcyhwLm5hbWUpKVxuICAgICAgLm1hcChwID0+IHAubmFtZSkgfHwgW107XG4gICAgXG4gICAgaWYgKG1pc3NpbmdSZXF1aXJlZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVyczogJHttaXNzaW5nUmVxdWlyZWQuam9pbignLCAnKX1gKTtcbiAgICB9XG5cbiAgICAvLyBTa2lsbHMgZG9uJ3QgaGF2ZSBidWlsdC1pbiBleGVjdXRpb24gbG9naWMgLSB0aGlzIHdvdWxkIGJlIGltcGxlbWVudGVkXG4gICAgLy8gYnkgc3BlY2lmaWMgc2tpbGwgdHlwZXMgb3IgdGhyb3VnaCBhIHBsdWdpbiBzeXN0ZW1cbiAgICBsb2dnZXIuZGVidWcoYFNraWxsICR7dGhpcy5tZXRhZGF0YS5uYW1lfSBleGVjdXRlZCB3aXRoIHBhcmFtZXRlcnM6YCwgdGhpcy5nZXRBbGxQYXJhbWV0ZXJzKCkpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBza2lsbDogdGhpcy5tZXRhZGF0YS5uYW1lLFxuICAgICAgcGFyYW1ldGVyczogdGhpcy5nZXRBbGxQYXJhbWV0ZXJzKCksXG4gICAgICBpbnB1dCxcbiAgICAgIGV4ZWN1dGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNraWxsLXNwZWNpZmljIHZhbGlkYXRpb25cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSB2YWxpZGF0ZSgpOiBFbGVtZW50VmFsaWRhdGlvblJlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0ID0gc3VwZXIudmFsaWRhdGUoKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGFycmF5cyBpZiBub3QgcHJlc2VudFxuICAgIGlmICghcmVzdWx0LmVycm9ycykgcmVzdWx0LmVycm9ycyA9IFtdO1xuICAgIGlmICghcmVzdWx0Lndhcm5pbmdzKSByZXN1bHQud2FybmluZ3MgPSBbXTtcbiAgICBcbiAgICAvLyBJbnN0cnVjdGlvbnMgc2hvdWxkIG5vdCBiZSBlbXB0eVxuICAgIGlmICghdGhpcy5pbnN0cnVjdGlvbnMgfHwgdGhpcy5pbnN0cnVjdGlvbnMudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzdWx0LmVycm9ycy5wdXNoKHtcbiAgICAgICAgZmllbGQ6ICdpbnN0cnVjdGlvbnMnLFxuICAgICAgICBtZXNzYWdlOiAnU2tpbGwgaW5zdHJ1Y3Rpb25zIGNhbm5vdCBiZSBlbXB0eScsXG4gICAgICAgIGNvZGU6ICdFTVBUWV9JTlNUUlVDVElPTlMnXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBjb21wbGV4aXR5IGxldmVsXG4gICAgY29uc3QgdmFsaWRDb21wbGV4aXR5ID0gWydiZWdpbm5lcicsICdpbnRlcm1lZGlhdGUnLCAnYWR2YW5jZWQnLCAnZXhwZXJ0J107XG4gICAgaWYgKHRoaXMubWV0YWRhdGEuY29tcGxleGl0eSAmJiAhdmFsaWRDb21wbGV4aXR5LmluY2x1ZGVzKHRoaXMubWV0YWRhdGEuY29tcGxleGl0eSkpIHtcbiAgICAgIHJlc3VsdC5lcnJvcnMucHVzaCh7XG4gICAgICAgIGZpZWxkOiAnY29tcGxleGl0eScsXG4gICAgICAgIG1lc3NhZ2U6IGBDb21wbGV4aXR5IG11c3QgYmUgb25lIG9mOiAke3ZhbGlkQ29tcGxleGl0eS5qb2luKCcsICcpfWAsXG4gICAgICAgIGNvZGU6ICdJTlZBTElEX0NPTVBMRVhJVFknXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBwcm9maWNpZW5jeSBsZXZlbFxuICAgIGlmICh0aGlzLm1ldGFkYXRhLnByb2ZpY2llbmN5X2xldmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLm1ldGFkYXRhLnByb2ZpY2llbmN5X2xldmVsIDwgMCB8fCB0aGlzLm1ldGFkYXRhLnByb2ZpY2llbmN5X2xldmVsID4gMTAwKSB7XG4gICAgICAgIHJlc3VsdC5lcnJvcnMucHVzaCh7XG4gICAgICAgICAgZmllbGQ6ICdwcm9maWNpZW5jeV9sZXZlbCcsXG4gICAgICAgICAgbWVzc2FnZTogJ1Byb2ZpY2llbmN5IGxldmVsIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMDAnLFxuICAgICAgICAgIGNvZGU6ICdJTlZBTElEX1BST0ZJQ0lFTkNZJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBwYXJhbWV0ZXJzXG4gICAgaWYgKHRoaXMubWV0YWRhdGEucGFyYW1ldGVycykge1xuICAgICAgdGhpcy5tZXRhZGF0YS5wYXJhbWV0ZXJzLmZvckVhY2goKHBhcmFtLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoIXBhcmFtLm5hbWUgfHwgcGFyYW0ubmFtZS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgcmVzdWx0LmVycm9ycyEucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogYHBhcmFtZXRlcnNbJHtpbmRleH1dLm5hbWVgLFxuICAgICAgICAgICAgbWVzc2FnZTogJ1BhcmFtZXRlciBuYW1lIGlzIHJlcXVpcmVkJyxcbiAgICAgICAgICAgIGNvZGU6ICdNSVNTSU5HX1BBUkFNRVRFUl9OQU1FJ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocGFyYW0udHlwZSA9PT0gJ2VudW0nICYmICghcGFyYW0ub3B0aW9ucyB8fCBwYXJhbS5vcHRpb25zLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICByZXN1bHQuZXJyb3JzIS5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiBgcGFyYW1ldGVyc1ske2luZGV4fV0ub3B0aW9uc2AsXG4gICAgICAgICAgICBtZXNzYWdlOiAnRW51bSBwYXJhbWV0ZXIgbXVzdCBoYXZlIG9wdGlvbnMgZGVmaW5lZCcsXG4gICAgICAgICAgICBjb2RlOiAnTUlTU0lOR19FTlVNX09QVElPTlMnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFdhcm5pbmdzIGZvciBiZXN0IHByYWN0aWNlc1xuICAgIGlmICghdGhpcy5tZXRhZGF0YS5kb21haW5zIHx8IHRoaXMubWV0YWRhdGEuZG9tYWlucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJlc3VsdC53YXJuaW5ncy5wdXNoKHtcbiAgICAgICAgZmllbGQ6ICdkb21haW5zJyxcbiAgICAgICAgbWVzc2FnZTogJ0NvbnNpZGVyIGFkZGluZyBkb21haW4gY2F0ZWdvcmllcyBmb3IgYmV0dGVyIG9yZ2FuaXphdGlvbicsXG4gICAgICAgIHNldmVyaXR5OiAnbG93J1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm1ldGFkYXRhLmV4YW1wbGVzIHx8IHRoaXMubWV0YWRhdGEuZXhhbXBsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXN1bHQud2FybmluZ3MucHVzaCh7XG4gICAgICAgIGZpZWxkOiAnZXhhbXBsZXMnLFxuICAgICAgICBtZXNzYWdlOiAnQWRkaW5nIHVzYWdlIGV4YW1wbGVzIGltcHJvdmVzIHNraWxsIHVzYWJpbGl0eScsXG4gICAgICAgIHNldmVyaXR5OiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSB2YWxpZCBmbGFnIGJhc2VkIG9uIGZpbmFsIGVycm9yc1xuICAgIHJlc3VsdC52YWxpZCA9IChyZXN1bHQuZXJyb3JzPy5sZW5ndGggfHwgMCkgPT09IDA7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBza2lsbCB0byBKU09OIGZvcm1hdFxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIHNlcmlhbGl6ZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgIG1ldGFkYXRhOiB0aGlzLm1ldGFkYXRhLFxuICAgICAgaW5zdHJ1Y3Rpb25zOiB0aGlzLmluc3RydWN0aW9ucyxcbiAgICAgIHBhcmFtZXRlcnM6IHRoaXMuZ2V0QWxsUGFyYW1ldGVycygpLFxuICAgICAgcmVmZXJlbmNlczogdGhpcy5yZWZlcmVuY2VzLFxuICAgICAgZXh0ZW5zaW9uczogdGhpcy5leHRlbnNpb25zLFxuICAgICAgcmF0aW5nczogdGhpcy5yYXRpbmdzXG4gICAgfTtcblxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBza2lsbCBmcm9tIEpTT04gZm9ybWF0XG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZGVzZXJpYWxpemUoZGF0YTogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBtZXRhZGF0YVxuICAgICAgdGhpcy5tZXRhZGF0YSA9IHsgLi4udGhpcy5tZXRhZGF0YSwgLi4ucGFyc2VkLm1ldGFkYXRhIH07XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBvdGhlciBwcm9wZXJ0aWVzXG4gICAgICB0aGlzLmluc3RydWN0aW9ucyA9IHBhcnNlZC5pbnN0cnVjdGlvbnMgfHwgJyc7XG4gICAgICB0aGlzLnJlZmVyZW5jZXMgPSBwYXJzZWQucmVmZXJlbmNlcyB8fCBbXTtcbiAgICAgIHRoaXMuZXh0ZW5zaW9ucyA9IHBhcnNlZC5leHRlbnNpb25zIHx8IHt9O1xuICAgICAgdGhpcy5yYXRpbmdzID0gcGFyc2VkLnJhdGluZ3MgfHwgdGhpcy5yYXRpbmdzO1xuICAgICAgXG4gICAgICAvLyBVcGRhdGUgSUQgYW5kIHZlcnNpb24gaWYgcHJvdmlkZWRcbiAgICAgIGlmIChwYXJzZWQuaWQpIHRoaXMuaWQgPSBwYXJzZWQuaWQ7XG4gICAgICBpZiAocGFyc2VkLnZlcnNpb24pIHRoaXMudmVyc2lvbiA9IHBhcnNlZC52ZXJzaW9uO1xuICAgICAgXG4gICAgICAvLyBSZXN0b3JlIHBhcmFtZXRlcnNcbiAgICAgIGlmIChwYXJzZWQucGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLnBhcmFtZXRlcnMuY2xlYXIoKTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocGFyc2VkLnBhcmFtZXRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIHRoaXMucGFyYW1ldGVycy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLl9pc0RpcnR5ID0gdHJ1ZTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgRGVzZXJpYWxpemVkIHNraWxsOiAke3RoaXMubWV0YWRhdGEubmFtZX1gKTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBkZXNlcmlhbGl6ZSBza2lsbDogJHtlcnJvcn1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGVzZXJpYWxpemF0aW9uIGZhaWxlZDogJHtlcnJvcn1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2tpbGwgYWN0aXZhdGlvbiBsaWZlY3ljbGVcbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBhY3RpdmF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIuaW5mbyhgQWN0aXZhdGluZyBza2lsbDogJHt0aGlzLm1ldGFkYXRhLm5hbWV9ICgke3RoaXMuaWR9KWApO1xuICAgIFxuICAgIC8vIFZhbGlkYXRlIHRoYXQgYWxsIHJlcXVpcmVkIHBhcmFtZXRlcnMgYXJlIHNldFxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzLnZhbGlkYXRlKCk7XG4gICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBhY3RpdmF0ZSBza2lsbCB3aXRoIHZhbGlkYXRpb24gZXJyb3JzOiAke3ZhbGlkYXRpb24uZXJyb3JzPy5tYXAoZSA9PiBlLm1lc3NhZ2UpLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIFxuICAgIGF3YWl0IHN1cGVyLmFjdGl2YXRlPy4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9uZSB0aGUgc2tpbGwgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVyc1xuICAgKi9cbiAgY2xvbmUobmV3UGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIGFueT4pOiBTa2lsbCB7XG4gICAgY29uc3QgY2xvbmVkID0gbmV3IFNraWxsKHRoaXMubWV0YWRhdGEsIHRoaXMuaW5zdHJ1Y3Rpb25zKTtcbiAgICBcbiAgICAvLyBDb3B5IGN1cnJlbnQgcGFyYW1ldGVyc1xuICAgIHRoaXMucGFyYW1ldGVycy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBjbG9uZWQucGFyYW1ldGVycy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfSk7XG4gICAgXG4gICAgLy8gT3ZlcnJpZGUgd2l0aCBuZXcgcGFyYW1ldGVycyBpZiBwcm92aWRlZFxuICAgIGlmIChuZXdQYXJhbWV0ZXJzKSB7XG4gICAgICBPYmplY3QuZW50cmllcyhuZXdQYXJhbWV0ZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgY2xvbmVkLnNldFBhcmFtZXRlcihrZXksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gY2xvbmVkO1xuICB9XG4gIFxuICAvKipcbiAgICogU2tpbGwgZGVhY3RpdmF0aW9uIGxpZmVjeWNsZVxuICAgKiBTRUNVUklUWSBGSVggIzQ6IEF1dG9tYXRpY2FsbHkgY2xlYXJzIHBhcmFtZXRlcnMgb24gZGVhY3RpdmF0aW9uXG4gICAqIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIGluIGxvbmctcnVubmluZyBwcm9jZXNzZXNcbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBkZWFjdGl2YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5pbmZvKGBEZWFjdGl2YXRpbmcgc2tpbGw6ICR7dGhpcy5tZXRhZGF0YS5uYW1lfSAoJHt0aGlzLmlkfSlgKTtcbiAgICBcbiAgICAvLyBTRUNVUklUWSBGSVggIzQ6IENsZWFyIHBhcmFtZXRlcnMgdG8gZnJlZSBtZW1vcnkgYW5kIHByZXZlbnQgbGVha3NcbiAgICAvLyBUaGlzIGVuc3VyZXMgc2tpbGxzIGRvbid0IHJldGFpbiBkYXRhIGFmdGVyIGRlYWN0aXZhdGlvblxuICAgIHRoaXMuY2xlYXJQYXJhbWV0ZXJzKCk7XG4gICAgXG4gICAgYXdhaXQgc3VwZXIuZGVhY3RpdmF0ZT8uKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgcGFyYW1ldGVycyAoZm9yIG1lbW9yeSBtYW5hZ2VtZW50KVxuICAgKiBTRUNVUklUWSBGSVggIzQ6IEFkZGVkIG1ldGhvZCB0byBjbGVhciBwYXJhbWV0ZXJzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuICAgKiBQcmV2aW91c2x5OiBQYXJhbWV0ZXJzIGFjY3VtdWxhdGVkIGluZGVmaW5pdGVseSBpbiBsb25nLXJ1bm5pbmcgcHJvY2Vzc2VzXG4gICAqIE5vdzogUHJvdmlkZXMgZXhwbGljaXQgY2xlYW51cCBtZWNoYW5pc20gY2FsbGVkIGR1cmluZyBkZWFjdGl2YXRpb25cbiAgICovXG4gIGNsZWFyUGFyYW1ldGVycygpOiB2b2lkIHtcbiAgICB0aGlzLnBhcmFtZXRlcnMuY2xlYXIoKTtcbiAgICBsb2dnZXIuZGVidWcoYENsZWFyZWQgYWxsIHBhcmFtZXRlcnMgZm9yIHNraWxsOiAke3RoaXMubWV0YWRhdGEubmFtZX1gKTtcbiAgfVxufSJdfQ==
382
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2tpbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvc2tpbGxzL1NraWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7O0dBVUc7QUFFSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFnQixNQUFNLGtDQUFrQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQWlDcEUsTUFBTSxPQUFPLEtBQU0sU0FBUSxXQUFXO0lBRTdCLFlBQVksQ0FBUztJQUNyQixVQUFVLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFaEQsMkVBQTJFO0lBQzNFLDhFQUE4RTtJQUM5RSw4Q0FBOEM7SUFDN0IsbUJBQW1CLEdBQUcsR0FBRyxDQUFDO0lBQzFCLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxDQUFDLCtCQUErQjtJQUU1RSxZQUFZLFFBQWdDLEVBQUUsZUFBdUIsRUFBRTtRQUNyRSw2REFBNkQ7UUFDN0QsNERBQTREO1FBQzVELDBFQUEwRTtRQUMxRSwyQ0FBMkM7UUFDM0MsOEJBQThCO1FBQzlCLDZCQUE2QjtRQUM3QixNQUFNLGlCQUFpQixHQUFHO1lBQ3hCLEdBQUcsUUFBUTtZQUNYLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNqSCxXQUFXLEVB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QUMsWUFBWSxDQUFDLENBQUM7UUFFM0QsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3JDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUVILDJDQUEyQztRQUMzQyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtnQkFDckQsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDYSxLQUFLLENBQUMsVUFBVTtRQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV0RSxxRUFBcUU7UUFDckUsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV2QixNQUFNLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGVBQWU7UUFDYixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxLQUFLLENBQUMscUNBQXFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNraWxsIGVsZW1lbnQgY2xhc3MgaW1wbGVtZW50aW5nIElFbGVtZW50IGludGVyZmFjZS5cbiAqIFJlcHJlc2VudHMgYSBkaXNjcmV0ZSBjYXBhYmlsaXR5IGZvciBzcGVjaWZpYyB0YXNrcy5cbiAqIFxuICogU0VDVVJJVFkgRklYRVMgSU1QTEVNRU5URUQgKFBSICMzMTkpOlxuICogMS4gQ1JJVElDQUw6IEFkZGVkIGNvbXByZWhlbnNpdmUgaW5wdXQgdmFsaWRhdGlvbiBmb3IgYWxsIHNraWxsIHBhcmFtZXRlcnNcbiAqIDIuIE1FRElVTTogSW1wbGVtZW50ZWQgVW5pY29kZSBub3JtYWxpemF0aW9uIHRvIHByZXZlbnQgaG9tb2dyYXBoIGF0dGFja3NcbiAqIDMuIE1FRElVTTogQWRkZWQgYXVkaXQgbG9nZ2luZyBmb3Igc2VjdXJpdHkgZXZlbnRzIHZpYSBTZWN1cml0eU1vbml0b3JcbiAqIDQuIE1FRElVTTogSW1wbGVtZW50ZWQgbWVtb3J5IG1hbmFnZW1lbnQgdG8gcHJldmVudCB1bmJvdW5kZWQgZ3Jvd3RoXG4gKiA1LiBNRURJVU06IEFkZGVkIFhTUyBwcm90ZWN0aW9uIHRocm91Z2ggaW5wdXQgc2FuaXRpemF0aW9uXG4gKi9cblxuaW1wb3J0IHsgQmFzZUVsZW1lbnQgfSBmcm9tICcuLi9CYXNlRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBJRWxlbWVudCwgSUVsZW1lbnRNZXRhZGF0YSwgRWxlbWVudFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuLi8uLi90eXBlcy9lbGVtZW50cy9pbmRleC5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4uLy4uL3BvcnRmb2xpby90eXBlcy5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgc2FuaXRpemVJbnB1dCwgdmFsaWRhdGVQYXRoIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvSW5wdXRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuXG4vLyBFeHRlbmQgSUVsZW1lbnRNZXRhZGF0YSB3aXRoIHNraWxsLXNwZWNpZmljIGZpZWxkc1xuZXhwb3J0IGludGVyZmFjZSBTa2lsbE1ldGFkYXRhIGV4dGVuZHMgSUVsZW1lbnRNZXRhZGF0YSB7XG4gIGxhbmd1YWdlcz86IHN0cmluZ1tdOyAgICAgICAgICAgLy8gUHJvZ3JhbW1pbmcvc3Bva2VuIGxhbmd1YWdlcyB0aGlzIHNraWxsIHdvcmtzIHdpdGhcbiAgY29tcGxleGl0eT86ICdiZWdpbm5lcicgfCAnaW50ZXJtZWRpYXRlJyB8ICdhZHZhbmNlZCcgfCAnZXhwZXJ0JztcbiAgZG9tYWlucz86IHN0cmluZ1tdOyAgICAgICAgICAgICAvLyBEb21haW4gY2F0ZWdvcmllcyAoZS5nLiwgd2ViLWRldiwgZGF0YS1zY2llbmNlLCB3cml0aW5nKVxuICBwcmVyZXF1aXNpdGVzPzogc3RyaW5nW107ICAgICAgIC8vIFJlcXVpcmVkIGtub3dsZWRnZSBvciBvdGhlciBza2lsbHNcbiAgcGFyYW1ldGVycz86IFNraWxsUGFyYW1ldGVyW107ICAvLyBDb25maWd1cmFibGUgcGFyYW1ldGVyc1xuICBleGFtcGxlcz86IFNraWxsRXhhbXBsZVtdOyAgICAgIC8vIFVzYWdlIGV4YW1wbGVzXG4gIGNlcnRpZmljYXRpb24/OiBzdHJpbmc7ICAgICAgICAgLy8gRXh0ZXJuYWwgY2VydGlmaWNhdGlvbiBvciB2YWxpZGF0aW9uXG4gIHByb2ZpY2llbmN5X2xldmVsPzogbnVtYmVyOyAgICAgLy8gMS0xMDAgcHJvZmljaWVuY3kgbGV2ZWxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTa2lsbFBhcmFtZXRlciB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdib29sZWFuJyB8ICdlbnVtJztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBkZWZhdWx0PzogYW55O1xuICBvcHRpb25zPzogc3RyaW5nW107ICAvLyBGb3IgZW51bSB0eXBlXG4gIG1pbj86IG51bWJlcjsgICAgICAgIC8vIEZvciBudW1iZXIgdHlwZVxuICBtYXg/OiBudW1iZXI7ICAgICAgICAvLyBGb3IgbnVtYmVyIHR5cGVcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTa2lsbEV4YW1wbGUge1xuICB0aXRsZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBpbnB1dD86IGFueTtcbiAgb3V0cHV0PzogYW55O1xuICBjb2RlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgU2tpbGwgZXh0ZW5kcyBCYXNlRWxlbWVudCBpbXBsZW1lbnRzIElFbGVtZW50IHtcbiAgcHVibGljIGRlY2xhcmUgbWV0YWRhdGE6IFNraWxsTWV0YWRhdGE7XG4gIHB1YmxpYyBpbnN0cnVjdGlvbnM6IHN0cmluZztcbiAgcHVibGljIHBhcmFtZXRlcnM6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XG4gIFxuICAvLyBTRUNVUklUWSBGSVggIzQ6IE1lbW9yeSBtYW5hZ2VtZW50IGNvbnN0YW50cyB0byBwcmV2ZW50IHVuYm91bmRlZCBncm93dGhcbiAgLy8gUHJldmlvdXNseTogTm8gbGltaXRzIG9uIHBhcmFtZXRlciBzdG9yYWdlLCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBleGhhdXN0aW9uXG4gIC8vIE5vdzogRW5mb3JjZWQgbGltaXRzIG9uIGJvdGggY291bnQgYW5kIHNpemVcbiAgcHJpdmF0ZSByZWFkb25seSBNQVhfUEFSQU1FVEVSX0NPVU5UID0gMTAwO1xuICBwcml2YXRlIHJlYWRvbmx5IE1BWF9QQVJBTUVURVJfU0laRSA9IDEwMDAwOyAvLyBNYXggc2l6ZSBwZXIgcGFyYW1ldGVyIHZhbHVlXG5cbiAgY29uc3RydWN0b3IobWV0YWRhdGE6IFBhcnRpYWw8U2tpbGxNZXRhZGF0YT4sIGluc3RydWN0aW9uczogc3RyaW5nID0gJycpIHtcbiAgICAvLyBTRUNVUklUWSBGSVggIzI6IFZhbGlkYXRlIGFuZCBzYW5pdGl6ZSBBTEwgbWV0YWRhdGEgZmllbGRzXG4gICAgLy8gUHJldmlvdXNseTogbWV0YWRhdGEgd2FzIHVzZWQgZGlyZWN0bHkgd2l0aG91dCB2YWxpZGF0aW9uXG4gICAgLy8gTm93OiBBbGwgc3RyaW5nIGlucHV0cyBhcmUgVW5pY29kZSBub3JtYWxpemVkIGFuZCBzYW5pdGl6ZWQgdG8gcHJldmVudDpcbiAgICAvLyAtIFhTUyBhdHRhY2tzIHRocm91Z2ggbWFsaWNpb3VzIG1ldGFkYXRhXG4gICAgLy8gLSBVbmljb2RlIGhvbW9ncmFwaCBhdHRhY2tzXG4gICAgLy8gLSBCdWZmZXIgb3ZlcmZsb3cgYXR0ZW1wdHNcbiAgICBjb25zdCBzYW5pdGl6ZWRNZXRhZGF0YSA9IHtcbiAgICAgIC4uLm1ldGFkYXRhLFxuICAgICAgbmFtZTogbWV0YWRhdGEubmFtZSA/IHNhbml0aXplSW5wdXQoVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUobWV0YWRhdGEubmFtZSkubm9ybWFsaXplZENvbnRlbnQsIDEwMCkgOiB1bmRlZmluZWQsXG4gICAgICBkZXNjcmlwdGlvbjogbWV0YWRhdGEuZGVzY3JpcHRpb24gPyBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKG1ldGFkYXRhLmRlc2NyaXB0aW9uKS5ub3JtYWxpemVkQ29udGVudCwgNTAwKSA6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgXG4gICAgc3VwZXIoRWxlbWVudFR5cGUuU0tJTEwsIHNhbml0aXplZE1ldGFkYXRhKTtcbiAgICAvLyBFbnN1cmUgaW5zdHJ1Y3Rpb25zIGlzIGFsd2F5cyBhIHN0cmluZywgZXZlbiBpZiBlbXB0eVxuICAgIHRoaXMuaW5zdHJ1Y3Rpb25zID0gaW5zdHJ1Y3Rpb25zICYmIGluc3RydWN0aW9ucy50cmltKCkgPyBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGluc3RydWN0aW9ucykubm9ybWFsaXplZENvbnRlbnQsIDEwMDAwKSA6ICcnO1xuICAgIFxuICAgIC8vIEVuc3VyZSBza2lsbC1zcGVjaWZpYyBtZXRhZGF0YVxuICAgIHRoaXMubWV0YWRhdGEgPSB7XG4gICAgICAuLi50aGlzLm1ldGFkYXRhLFxuICAgICAgbGFuZ3VhZ2VzOiBtZXRhZGF0YS5sYW5ndWFnZXMgfHwgW10sXG4gICAgICBjb21wbGV4aXR5OiBtZXRhZGF0YS5jb21wbGV4aXR5IHx8ICdiZWdpbm5lcicsXG4gICAgICBkb21haW5zOiBtZXRhZGF0YS5kb21haW5zIHx8IFtdLFxuICAgICAgcHJlcmVxdWlzaXRlczogbWV0YWRhdGEucHJlcmVxdWlzaXRlcyB8fCBbXSxcbiAgICAgIHBhcmFtZXRlcnM6IG1ldGFkYXRhLnBhcmFtZXRlcnMgfHwgW10sXG4gICAgICBleGFtcGxlczogbWV0YWRhdGEuZXhhbXBsZXMgfHwgW10sXG4gICAgICBwcm9maWNpZW5jeV9sZXZlbDogbWV0YWRhdGEucHJvZmljaWVuY3lfbGV2ZWwgfHwgMFxuICAgIH07XG5cbiAgICAvLyBWYWxpZGF0ZSBwYXJhbWV0ZXIgZGVmaW5pdGlvbnNcbiAgICBpZiAodGhpcy5tZXRhZGF0YS5wYXJhbWV0ZXJzKSB7XG4gICAgICB0aGlzLm1ldGFkYXRhLnBhcmFtZXRlcnMgPSB0aGlzLm1ldGFkYXRhLnBhcmFtZXRlcnMubWFwKHBhcmFtID0+ICh7XG4gICAgICAgIC4uLnBhcmFtLFxuICAgICAgICBuYW1lOiBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHBhcmFtLm5hbWUpLm5vcm1hbGl6ZWRDb250ZW50LCA1MCksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBzYW5pdGl6ZUlucHV0KFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHBhcmFtLmRlc2NyaXB0aW9uKS5ub3JtYWxpemVkQ29udGVudCwgMjAwKSxcbiAgICAgICAgb3B0aW9uczogcGFyYW0ub3B0aW9ucz8ubWFwKG9wdCA9PiBzYW5pdGl6ZUlucHV0KG9wdCwgMTAwKSlcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHBhcmFtZXRlciB2YWx1ZXMgd2l0aCBkZWZhdWx0c1xuICAgIHRoaXMuaW5pdGlhbGl6ZVBhcmFtZXRlcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHBhcmFtZXRlcnMgd2l0aCBkZWZhdWx0IHZhbHVlc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplUGFyYW1ldGVycygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tZXRhZGF0YS5wYXJhbWV0ZXJzKSB7XG4gICAgICB0aGlzLm1ldGFkYXRhLnBhcmFtZXRlcnMuZm9yRWFjaChwYXJhbSA9PiB7XG4gICAgICAgIGlmIChwYXJhbS5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnBhcmFtZXRlcnMuc2V0KHBhcmFtLm5hbWUsIHBhcmFtLmRlZmF1bHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgcGFyYW1ldGVyIHZhbHVlXG4gICAqIFNFQ1VSSVRZIEZJWCAjMTogQ29tcHJlaGVuc2l2ZSBpbnB1dCB2YWxpZGF0aW9uIGZvciBhbGwgc2tpbGwgcGFyYW1ldGVyc1xuICAgKiBQcmV2aW91c2x5OiBQYXJhbWV0ZXJzIHdlcmUgc2V0IHdpdGhvdXQgdmFsaWRhdGlvbiwgY3JlYXRpbmcgc2VjdXJpdHkgcmlza3NcbiAgICogTm93OiBGdWxsIHZhbGlkYXRpb24gcGlwZWxpbmUgaW5jbHVkaW5nIHNhbml0aXphdGlvbiwgdHlwZSBjaGVja2luZywgYW5kIHNpemUgbGltaXRzXG4gICAqL1xuICBzZXRQYXJhbWV0ZXIobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgLy8gQ1JJVElDQUwgRklYOiBTYW5pdGl6ZSBwYXJhbWV0ZXIgbmFtZSB0byBwcmV2ZW50IGluamVjdGlvbiBhdHRhY2tzXG4gICAgY29uc3Qgc2FuaXRpemVkTmFtZSA9IHNhbml0aXplSW5wdXQobmFtZSwgNTApO1xuICAgIFxuICAgIGNvbnN0IHBhcmFtID0gdGhpcy5tZXRhZGF0YS5wYXJhbWV0ZXJzPy5maW5kKHAgPT4gcC5uYW1lID09PSBzYW5pdGl6ZWROYW1lKTtcbiAgICBpZiAoIXBhcmFtKSB7XG4gICAgICAvLyBTRUNVUklUWSBGSVggIzM6IExvZyBhdWRpdCBldmVudHMgZm9yIHNlY3VyaXR5IG1vbml0b3JpbmdcbiAgICAgIC8vIFRoaXMgaGVscHMgZGV0ZWN0IHBvdGVudGlhbCBhdHRhY2sgcGF0dGVybnMgb3IgbWlzY29uZmlndXJhdGlvbnNcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1lBTUxfUEFSU0lOR19XQVJOSU5HJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdTa2lsbC5zZXRQYXJhbWV0ZXInLFxuICAgICAgICBkZXRhaWxzOiBgQXR0ZW1wdCB0byBzZXQgdW5rbm93biBwYXJhbWV0ZXI6ICR7c2FuaXRpemVkTmFtZX0gZm9yIHNraWxsOiAke3RoaXMubWV0YWRhdGEubmFtZX1gXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGFyYW1ldGVyICcke3Nhbml0aXplZE5hbWV9JyBub3QgZm91bmQgaW4gc2tpbGwgZGVmaW5pdGlvbmApO1xuICAgIH1cblxuICAgIC8vIENSSVRJQ0FMIEZJWDogU2FuaXRpemUgYW5kIHZhbGlkYXRlIHRoZSB2YWx1ZSBiYXNlZCBvbiB0eXBlXG4gICAgbGV0IHNhbml0aXplZFZhbHVlID0gdmFsdWU7XG4gICAgXG4gICAgaWYgKHBhcmFtLnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBTRUNVUklUWSBGSVggIzIgJiAjNTogTm9ybWFsaXplIFVuaWNvZGUgYW5kIHNhbml0aXplIHN0cmluZyB2YWx1ZXNcbiAgICAgIC8vIFByZXZpb3VzbHk6IFN0cmluZyB2YWx1ZXMgd2VyZSB1c2VkIGRpcmVjdGx5IHdpdGhvdXQgdmFsaWRhdGlvblxuICAgICAgLy8gTm93OiBGdWxsIHZhbGlkYXRpb24gcGlwZWxpbmU6XG4gICAgICAvLyAxLiBVbmljb2RlIG5vcm1hbGl6YXRpb24gcHJldmVudHMgaG9tb2dyYXBoIGF0dGFja3NcbiAgICAgIC8vIDIuIHNhbml0aXplSW5wdXQoKSBzdHJpcHMgZGFuZ2Vyb3VzIEhUTUwvSlMgY29udGVudFxuICAgICAgLy8gMy4gTGVuZ3RoIGxpbWl0cyBwcmV2ZW50IGJ1ZmZlciBvdmVyZmxvdyBhdHRhY2tzXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoU3RyaW5nKHZhbHVlKSk7XG4gICAgICBzYW5pdGl6ZWRWYWx1ZSA9IHNhbml0aXplSW5wdXQobm9ybWFsaXplZC5ub3JtYWxpemVkQ29udGVudCwgcGFyYW0ubWF4IHx8IDEwMDApO1xuICAgICAgXG4gICAgICAvLyBTRUNVUklUWSBGSVggIzU6IEFkZGl0aW9uYWwgWFNTIHByb3RlY3Rpb25cbiAgICAgIC8vIENoZWNrIGZvciBjb21tb24gWFNTIHBhdHRlcm5zIGV2ZW4gYWZ0ZXIgc2FuaXRpemF0aW9uXG4gICAgICAvLyBUaGlzIHByb3ZpZGVzIGRlZmVuc2UtaW4tZGVwdGggYWdhaW5zdCBzb3BoaXN0aWNhdGVkIGF0dGFja3NcbiAgICAgIGlmIChzYW5pdGl6ZWRWYWx1ZS5pbmNsdWRlcygnPHNjcmlwdCcpIHx8IHNhbml0aXplZFZhbHVlLmluY2x1ZGVzKCdqYXZhc2NyaXB0OicpKSB7XG4gICAgICAgIC8vIFNFQ1VSSVRZIEZJWCAjMzogTG9nIGhpZ2gtc2V2ZXJpdHkgc2VjdXJpdHkgZXZlbnRzXG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnQ09OVEVOVF9JTkpFQ1RJT05fQVRURU1QVCcsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgICBzb3VyY2U6ICdTa2lsbC5zZXRQYXJhbWV0ZXInLFxuICAgICAgICAgIGRldGFpbHM6IGBQb3RlbnRpYWwgWFNTIGF0dGVtcHQgaW4gc2tpbGwgcGFyYW1ldGVyOiAke3Nhbml0aXplZE5hbWV9IGZvciBza2lsbDogJHt0aGlzLm1ldGFkYXRhLm5hbWV9YFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNoYXJhY3RlcnMgaW4gcGFyYW1ldGVyIHZhbHVlJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVHlwZSB2YWxpZGF0aW9uXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlUGFyYW1ldGVyVmFsdWUocGFyYW0sIHNhbml0aXplZFZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgJyR7c2FuaXRpemVkTmFtZX0nOiBleHBlY3RlZCAke3BhcmFtLnR5cGV9YCk7XG4gICAgfVxuXG4gICAgLy8gU0VDVVJJVFkgRklYICM0OiBNZW1vcnkgbWFuYWdlbWVudCAtIGNoZWNrIHBhcmFtZXRlciBjb3VudFxuICAgIC8vIFByZXZpb3VzbHk6IE5vIGxpbWl0cyBvbiBwYXJhbWV0ZXIgc3RvcmFnZSwgY291bGQgbGVhZCB0byBtZW1vcnkgZXhoYXVzdGlvbiBhdHRhY2tzXG4gICAgLy8gTm93OiBFbmZvcmNlZCBsaW1pdHMgcHJldmVudCBhdHRhY2tlcnMgZnJvbSBjb25zdW1pbmcgdW5saW1pdGVkIG1lbW9yeVxuICAgIGlmICh0aGlzLnBhcmFtZXRlcnMuc2l6ZSA+PSB0aGlzLk1BWF9QQVJBTUVURVJfQ09VTlQgJiYgIXRoaXMucGFyYW1ldGVycy5oYXMoc2FuaXRpemVkTmFtZSkpIHtcbiAgICAgIC8vIFNFQ1VSSVRZIEZJWCAjMzogTG9nIHJhdGUgbGltaXQgdmlvbGF0aW9ucyBmb3Igc2VjdXJpdHkgbW9uaXRvcmluZ1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnUkFURV9MSU1JVF9FWENFRURFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgc291cmNlOiAnU2tpbGwuc2V0UGFyYW1ldGVyJyxcbiAgICAgICAgZGV0YWlsczogYFBhcmFtZXRlciBsaW1pdCBleGNlZWRlZCBmb3Igc2tpbGw6ICR7dGhpcy5tZXRhZGF0YS5uYW1lfS4gTWF4OiAke3RoaXMuTUFYX1BBUkFNRVRFUl9DT1VOVH1gXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGFyYW1ldGVyIGxpbWl0IGV4Y2VlZGVkLiBNYXhpbXVtICR7dGhpcy5NQVhfUEFSQU1FVEVSX0NPVU5UfSBwYXJhbWV0ZXJzIGFsbG93ZWRgKTtcbiAgICB9XG4gICAgXG4gICAgLy8gU0VDVVJJVFkgRklYICM0OiBDaGVjayBwYXJhbWV0ZXIgdmFsdWUgc2l6ZSBmb3Igc3RyaW5nc1xuICAgIC8vIFRoaXMgcHJldmVudHMgYXR0YWNrZXJzIGZyb20gc3RvcmluZyBtYXNzaXZlIHN0cmluZ3MgdGhhdCBjb3VsZCBleGhhdXN0IG1lbW9yeVxuICAgIGlmIChwYXJhbS50eXBlID09PSAnc3RyaW5nJyAmJiBzYW5pdGl6ZWRWYWx1ZS5sZW5ndGggPiB0aGlzLk1BWF9QQVJBTUVURVJfU0laRSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYXJhbWV0ZXIgdmFsdWUgdG9vIGxhcmdlLiBNYXhpbXVtICR7dGhpcy5NQVhfUEFSQU1FVEVSX1NJWkV9IGNoYXJhY3RlcnMgYWxsb3dlZGApO1xuICAgIH1cblxuICAgIHRoaXMucGFyYW1ldGVycy5zZXQoc2FuaXRpemVkTmFtZSwgc2FuaXRpemVkVmFsdWUpO1xuICAgIGxvZ2dlci5kZWJ1ZyhgU2V0IHBhcmFtZXRlciAke3Nhbml0aXplZE5hbWV9ID0gJHtzYW5pdGl6ZWRWYWx1ZX0gZm9yIHNraWxsICR7dGhpcy5tZXRhZGF0YS5uYW1lfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHBhcmFtZXRlciB2YWx1ZVxuICAgKi9cbiAgZ2V0UGFyYW1ldGVyKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMucGFyYW1ldGVycy5nZXQobmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBwYXJhbWV0ZXJzIGFzIG9iamVjdFxuICAgKi9cbiAgZ2V0QWxsUGFyYW1ldGVycygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKHRoaXMucGFyYW1ldGVycyk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgcGFyYW1ldGVyIHZhbHVlIGFnYWluc3QgaXRzIGRlZmluaXRpb25cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVQYXJhbWV0ZXJWYWx1ZShwYXJhbTogU2tpbGxQYXJhbWV0ZXIsIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKHBhcmFtLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgaWYgKGlzTmFOKG51bSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHBhcmFtLm1pbiAhPT0gdW5kZWZpbmVkICYmIG51bSA8IHBhcmFtLm1pbikgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAocGFyYW0ubWF4ICE9PSB1bmRlZmluZWQgJiYgbnVtID4gcGFyYW0ubWF4KSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJztcbiAgICAgIGNhc2UgJ2VudW0nOlxuICAgICAgICByZXR1cm4gcGFyYW0ub3B0aW9ucz8uaW5jbHVkZXMoU3RyaW5nKHZhbHVlKSkgfHwgZmFsc2U7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSB0aGUgc2tpbGwgd2l0aCBjdXJyZW50IHBhcmFtZXRlcnNcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGUoaW5wdXQ/OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgIGxvZ2dlci5pbmZvKGBFeGVjdXRpbmcgc2tpbGw6ICR7dGhpcy5tZXRhZGF0YS5uYW1lfWApO1xuICAgIFxuICAgIC8vIFZhbGlkYXRlIHJlcXVpcmVkIHBhcmFtZXRlcnNcbiAgICBjb25zdCBtaXNzaW5nUmVxdWlyZWQgPSB0aGlzLm1ldGFkYXRhLnBhcmFtZXRlcnNcbiAgICAgID8uZmlsdGVyKHAgPT4gcC5yZXF1aXJlZCAmJiAhdGhpcy5wYXJhbWV0ZXJzLmhhcyhwLm5hbWUpKVxuICAgICAgLm1hcChwID0+IHAubmFtZSkgfHwgW107XG4gICAgXG4gICAgaWYgKG1pc3NpbmdSZXF1aXJlZC5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVyczogJHttaXNzaW5nUmVxdWlyZWQuam9pbignLCAnKX1gKTtcbiAgICB9XG5cbiAgICAvLyBTa2lsbHMgZG9uJ3QgaGF2ZSBidWlsdC1pbiBleGVjdXRpb24gbG9naWMgLSB0aGlzIHdvdWxkIGJlIGltcGxlbWVudGVkXG4gICAgLy8gYnkgc3BlY2lmaWMgc2tpbGwgdHlwZXMgb3IgdGhyb3VnaCBhIHBsdWdpbiBzeXN0ZW1cbiAgICBsb2dnZXIuZGVidWcoYFNraWxsICR7dGhpcy5tZXRhZGF0YS5uYW1lfSBleGVjdXRlZCB3aXRoIHBhcmFtZXRlcnM6YCwgdGhpcy5nZXRBbGxQYXJhbWV0ZXJzKCkpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBza2lsbDogdGhpcy5tZXRhZGF0YS5uYW1lLFxuICAgICAgcGFyYW1ldGVyczogdGhpcy5nZXRBbGxQYXJhbWV0ZXJzKCksXG4gICAgICBpbnB1dCxcbiAgICAgIGV4ZWN1dGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNraWxsLXNwZWNpZmljIHZhbGlkYXRpb25cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSB2YWxpZGF0ZSgpOiBFbGVtZW50VmFsaWRhdGlvblJlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0ID0gc3VwZXIudmFsaWRhdGUoKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGFycmF5cyBpZiBub3QgcHJlc2VudFxuICAgIGlmICghcmVzdWx0LmVycm9ycykgcmVzdWx0LmVycm9ycyA9IFtdO1xuICAgIGlmICghcmVzdWx0Lndhcm5pbmdzKSByZXN1bHQud2FybmluZ3MgPSBbXTtcbiAgICBcbiAgICAvLyBJbnN0cnVjdGlvbnMgc2hvdWxkIG5vdCBiZSBlbXB0eVxuICAgIGlmICghdGhpcy5pbnN0cnVjdGlvbnMgfHwgdGhpcy5pbnN0cnVjdGlvbnMudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzdWx0LmVycm9ycy5wdXNoKHtcbiAgICAgICAgZmllbGQ6ICdpbnN0cnVjdGlvbnMnLFxuICAgICAgICBtZXNzYWdlOiAnU2tpbGwgaW5zdHJ1Y3Rpb25zIGNhbm5vdCBiZSBlbXB0eScsXG4gICAgICAgIGNvZGU6ICdFTVBUWV9JTlNUUlVDVElPTlMnXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBjb21wbGV4aXR5IGxldmVsXG4gICAgY29uc3QgdmFsaWRDb21wbGV4aXR5ID0gWydiZWdpbm5lcicsICdpbnRlcm1lZGlhdGUnLCAnYWR2YW5jZWQnLCAnZXhwZXJ0J107XG4gICAgaWYgKHRoaXMubWV0YWRhdGEuY29tcGxleGl0eSAmJiAhdmFsaWRDb21wbGV4aXR5LmluY2x1ZGVzKHRoaXMubWV0YWRhdGEuY29tcGxleGl0eSkpIHtcbiAgICAgIHJlc3VsdC5lcnJvcnMucHVzaCh7XG4gICAgICAgIGZpZWxkOiAnY29tcGxleGl0eScsXG4gICAgICAgIG1lc3NhZ2U6IGBDb21wbGV4aXR5IG11c3QgYmUgb25lIG9mOiAke3ZhbGlkQ29tcGxleGl0eS5qb2luKCcsICcpfWAsXG4gICAgICAgIGNvZGU6ICdJTlZBTElEX0NPTVBMRVhJVFknXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBwcm9maWNpZW5jeSBsZXZlbFxuICAgIGlmICh0aGlzLm1ldGFkYXRhLnByb2ZpY2llbmN5X2xldmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLm1ldGFkYXRhLnByb2ZpY2llbmN5X2xldmVsIDwgMCB8fCB0aGlzLm1ldGFkYXRhLnByb2ZpY2llbmN5X2xldmVsID4gMTAwKSB7XG4gICAgICAgIHJlc3VsdC5lcnJvcnMucHVzaCh7XG4gICAgICAgICAgZmllbGQ6ICdwcm9maWNpZW5jeV9sZXZlbCcsXG4gICAgICAgICAgbWVzc2FnZTogJ1Byb2ZpY2llbmN5IGxldmVsIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxMDAnLFxuICAgICAgICAgIGNvZGU6ICdJTlZBTElEX1BST0ZJQ0lFTkNZJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBwYXJhbWV0ZXJzXG4gICAgaWYgKHRoaXMubWV0YWRhdGEucGFyYW1ldGVycykge1xuICAgICAgdGhpcy5tZXRhZGF0YS5wYXJhbWV0ZXJzLmZvckVhY2goKHBhcmFtLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoIXBhcmFtLm5hbWUgfHwgcGFyYW0ubmFtZS50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgcmVzdWx0LmVycm9ycyEucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogYHBhcmFtZXRlcnNbJHtpbmRleH1dLm5hbWVgLFxuICAgICAgICAgICAgbWVzc2FnZTogJ1BhcmFtZXRlciBuYW1lIGlzIHJlcXVpcmVkJyxcbiAgICAgICAgICAgIGNvZGU6ICdNSVNTSU5HX1BBUkFNRVRFUl9OQU1FJ1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAocGFyYW0udHlwZSA9PT0gJ2VudW0nICYmICghcGFyYW0ub3B0aW9ucyB8fCBwYXJhbS5vcHRpb25zLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICByZXN1bHQuZXJyb3JzIS5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiBgcGFyYW1ldGVyc1ske2luZGV4fV0ub3B0aW9uc2AsXG4gICAgICAgICAgICBtZXNzYWdlOiAnRW51bSBwYXJhbWV0ZXIgbXVzdCBoYXZlIG9wdGlvbnMgZGVmaW5lZCcsXG4gICAgICAgICAgICBjb2RlOiAnTUlTU0lOR19FTlVNX09QVElPTlMnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFdhcm5pbmdzIGZvciBiZXN0IHByYWN0aWNlc1xuICAgIGlmICghdGhpcy5tZXRhZGF0YS5kb21haW5zIHx8IHRoaXMubWV0YWRhdGEuZG9tYWlucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJlc3VsdC53YXJuaW5ncy5wdXNoKHtcbiAgICAgICAgZmllbGQ6ICdkb21haW5zJyxcbiAgICAgICAgbWVzc2FnZTogJ0NvbnNpZGVyIGFkZGluZyBkb21haW4gY2F0ZWdvcmllcyBmb3IgYmV0dGVyIG9yZ2FuaXphdGlvbicsXG4gICAgICAgIHNldmVyaXR5OiAnbG93J1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm1ldGFkYXRhLmV4YW1wbGVzIHx8IHRoaXMubWV0YWRhdGEuZXhhbXBsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXN1bHQud2FybmluZ3MucHVzaCh7XG4gICAgICAgIGZpZWxkOiAnZXhhbXBsZXMnLFxuICAgICAgICBtZXNzYWdlOiAnQWRkaW5nIHVzYWdlIGV4YW1wbGVzIGltcHJvdmVzIHNraWxsIHVzYWJpbGl0eScsXG4gICAgICAgIHNldmVyaXR5OiAnbWVkaXVtJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSB2YWxpZCBmbGFnIGJhc2VkIG9uIGZpbmFsIGVycm9yc1xuICAgIHJlc3VsdC52YWxpZCA9IChyZXN1bHQuZXJyb3JzPy5sZW5ndGggfHwgMCkgPT09IDA7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBza2lsbCB0byBKU09OIGZvcm1hdFxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIHNlcmlhbGl6ZSgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgIG1ldGFkYXRhOiB0aGlzLm1ldGFkYXRhLFxuICAgICAgaW5zdHJ1Y3Rpb25zOiB0aGlzLmluc3RydWN0aW9ucyxcbiAgICAgIHBhcmFtZXRlcnM6IHRoaXMuZ2V0QWxsUGFyYW1ldGVycygpLFxuICAgICAgcmVmZXJlbmNlczogdGhpcy5yZWZlcmVuY2VzLFxuICAgICAgZXh0ZW5zaW9uczogdGhpcy5leHRlbnNpb25zLFxuICAgICAgcmF0aW5nczogdGhpcy5yYXRpbmdzXG4gICAgfTtcblxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBza2lsbCBmcm9tIEpTT04gZm9ybWF0XG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZGVzZXJpYWxpemUoZGF0YTogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBtZXRhZGF0YVxuICAgICAgdGhpcy5tZXRhZGF0YSA9IHsgLi4udGhpcy5tZXRhZGF0YSwgLi4ucGFyc2VkLm1ldGFkYXRhIH07XG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBvdGhlciBwcm9wZXJ0aWVzXG4gICAgICB0aGlzLmluc3RydWN0aW9ucyA9IHBhcnNlZC5pbnN0cnVjdGlvbnMgfHwgJyc7XG4gICAgICB0aGlzLnJlZmVyZW5jZXMgPSBwYXJzZWQucmVmZXJlbmNlcyB8fCBbXTtcbiAgICAgIHRoaXMuZXh0ZW5zaW9ucyA9IHBhcnNlZC5leHRlbnNpb25zIHx8IHt9O1xuICAgICAgdGhpcy5yYXRpbmdzID0gcGFyc2VkLnJhdGluZ3MgfHwgdGhpcy5yYXRpbmdzO1xuICAgICAgXG4gICAgICAvLyBVcGRhdGUgSUQgYW5kIHZlcnNpb24gaWYgcHJvdmlkZWRcbiAgICAgIGlmIChwYXJzZWQuaWQpIHRoaXMuaWQgPSBwYXJzZWQuaWQ7XG4gICAgICBpZiAocGFyc2VkLnZlcnNpb24pIHRoaXMudmVyc2lvbiA9IHBhcnNlZC52ZXJzaW9uO1xuICAgICAgXG4gICAgICAvLyBSZXN0b3JlIHBhcmFtZXRlcnNcbiAgICAgIGlmIChwYXJzZWQucGFyYW1ldGVycykge1xuICAgICAgICB0aGlzLnBhcmFtZXRlcnMuY2xlYXIoKTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocGFyc2VkLnBhcmFtZXRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIHRoaXMucGFyYW1ldGVycy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLl9pc0RpcnR5ID0gdHJ1ZTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhgRGVzZXJpYWxpemVkIHNraWxsOiAke3RoaXMubWV0YWRhdGEubmFtZX1gKTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBkZXNlcmlhbGl6ZSBza2lsbDogJHtlcnJvcn1gKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGVzZXJpYWxpemF0aW9uIGZhaWxlZDogJHtlcnJvcn1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2tpbGwgYWN0aXZhdGlvbiBsaWZlY3ljbGVcbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBhY3RpdmF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsb2dnZXIuaW5mbyhgQWN0aXZhdGluZyBza2lsbDogJHt0aGlzLm1ldGFkYXRhLm5hbWV9ICgke3RoaXMuaWR9KWApO1xuICAgIFxuICAgIC8vIFZhbGlkYXRlIHRoYXQgYWxsIHJlcXVpcmVkIHBhcmFtZXRlcnMgYXJlIHNldFxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzLnZhbGlkYXRlKCk7XG4gICAgaWYgKCF2YWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBhY3RpdmF0ZSBza2lsbCB3aXRoIHZhbGlkYXRpb24gZXJyb3JzOiAke3ZhbGlkYXRpb24uZXJyb3JzPy5tYXAoZSA9PiBlLm1lc3NhZ2UpLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIFxuICAgIGF3YWl0IHN1cGVyLmFjdGl2YXRlPy4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9uZSB0aGUgc2tpbGwgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVyc1xuICAgKi9cbiAgY2xvbmUobmV3UGFyYW1ldGVycz86IFJlY29yZDxzdHJpbmcsIGFueT4pOiBTa2lsbCB7XG4gICAgY29uc3QgY2xvbmVkID0gbmV3IFNraWxsKHRoaXMubWV0YWRhdGEsIHRoaXMuaW5zdHJ1Y3Rpb25zKTtcbiAgICBcbiAgICAvLyBDb3B5IGN1cnJlbnQgcGFyYW1ldGVyc1xuICAgIHRoaXMucGFyYW1ldGVycy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBjbG9uZWQucGFyYW1ldGVycy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfSk7XG4gICAgXG4gICAgLy8gT3ZlcnJpZGUgd2l0aCBuZXcgcGFyYW1ldGVycyBpZiBwcm92aWRlZFxuICAgIGlmIChuZXdQYXJhbWV0ZXJzKSB7XG4gICAgICBPYmplY3QuZW50cmllcyhuZXdQYXJhbWV0ZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgY2xvbmVkLnNldFBhcmFtZXRlcihrZXksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gY2xvbmVkO1xuICB9XG4gIFxuICAvKipcbiAgICogU2tpbGwgZGVhY3RpdmF0aW9uIGxpZmVjeWNsZVxuICAgKiBTRUNVUklUWSBGSVggIzQ6IEF1dG9tYXRpY2FsbHkgY2xlYXJzIHBhcmFtZXRlcnMgb24gZGVhY3RpdmF0aW9uXG4gICAqIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzIGluIGxvbmctcnVubmluZyBwcm9jZXNzZXNcbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhc3luYyBkZWFjdGl2YXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxvZ2dlci5pbmZvKGBEZWFjdGl2YXRpbmcgc2tpbGw6ICR7dGhpcy5tZXRhZGF0YS5uYW1lfSAoJHt0aGlzLmlkfSlgKTtcbiAgICBcbiAgICAvLyBTRUNVUklUWSBGSVggIzQ6IENsZWFyIHBhcmFtZXRlcnMgdG8gZnJlZSBtZW1vcnkgYW5kIHByZXZlbnQgbGVha3NcbiAgICAvLyBUaGlzIGVuc3VyZXMgc2tpbGxzIGRvbid0IHJldGFpbiBkYXRhIGFmdGVyIGRlYWN0aXZhdGlvblxuICAgIHRoaXMuY2xlYXJQYXJhbWV0ZXJzKCk7XG4gICAgXG4gICAgYXdhaXQgc3VwZXIuZGVhY3RpdmF0ZT8uKCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgcGFyYW1ldGVycyAoZm9yIG1lbW9yeSBtYW5hZ2VtZW50KVxuICAgKiBTRUNVUklUWSBGSVggIzQ6IEFkZGVkIG1ldGhvZCB0byBjbGVhciBwYXJhbWV0ZXJzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuICAgKiBQcmV2aW91c2x5OiBQYXJhbWV0ZXJzIGFjY3VtdWxhdGVkIGluZGVmaW5pdGVseSBpbiBsb25nLXJ1bm5pbmcgcHJvY2Vzc2VzXG4gICAqIE5vdzogUHJvdmlkZXMgZXhwbGljaXQgY2xlYW51cCBtZWNoYW5pc20gY2FsbGVkIGR1cmluZyBkZWFjdGl2YXRpb25cbiAgICovXG4gIGNsZWFyUGFyYW1ldGVycygpOiB2b2lkIHtcbiAgICB0aGlzLnBhcmFtZXRlcnMuY2xlYXIoKTtcbiAgICBsb2dnZXIuZGVidWcoYENsZWFyZWQgYWxsIHBhcmFtZXRlcnMgZm9yIHNraWxsOiAke3RoaXMubWV0YWRhdGEubmFtZX1gKTtcbiAgfVxufSJdfQ==
@@ -0,0 +1,83 @@
1
+ /**
2
+ * SkillManager - Implementation of IElementManager for Skill elements
3
+ * Handles CRUD operations and lifecycle management for skills implementing IElement
4
+ *
5
+ * SECURITY FIXES IMPLEMENTED (Following PR #319 patterns):
6
+ * 1. CRITICAL: Fixed race conditions in file operations by using FileLockManager for atomic reads/writes
7
+ * 2. CRITICAL: Fixed dynamic require() statements by using static imports
8
+ * 3. HIGH: Fixed unvalidated YAML parsing vulnerability by using SecureYamlParser
9
+ * 4. MEDIUM: All user inputs are now validated and sanitized
10
+ * 5. MEDIUM: Audit logging added for security operations
11
+ * 6. MEDIUM: Path traversal prevention for all file operations
12
+ */
13
+ import { IElementManager } from '../../types/elements/IElementManager.js';
14
+ import { ElementValidationResult } from '../../types/elements/IElement.js';
15
+ import { Skill } from './Skill.js';
16
+ import { ElementType } from '../../portfolio/types.js';
17
+ export declare class SkillManager implements IElementManager<Skill> {
18
+ private portfolioManager;
19
+ private skillsDir;
20
+ private skills;
21
+ constructor();
22
+ /**
23
+ * Load a skill from file
24
+ * SECURITY FIX #1: Uses FileLockManager.atomicReadFile() instead of fs.readFile()
25
+ * to prevent race conditions and ensure atomic file operations
26
+ */
27
+ load(filePath: string): Promise<Skill>;
28
+ /**
29
+ * Save a skill to file
30
+ * SECURITY FIX #1: Uses FileLockManager.atomicWriteFile() for atomic operations
31
+ */
32
+ save(element: Skill, filePath: string): Promise<void>;
33
+ /**
34
+ * List all available skills
35
+ */
36
+ list(): Promise<Skill[]>;
37
+ /**
38
+ * Find a skill by predicate
39
+ */
40
+ find(predicate: (element: Skill) => boolean): Promise<Skill | undefined>;
41
+ /**
42
+ * Validate a skill
43
+ */
44
+ validate(element: Skill): ElementValidationResult;
45
+ /**
46
+ * Delete a skill
47
+ */
48
+ delete(filePath: string): Promise<void>;
49
+ /**
50
+ * Import a skill from YAML/JSON
51
+ * SECURITY FIX #3: Uses SecureYamlParser to prevent YAML injection
52
+ */
53
+ importElement(data: string, format: 'yaml' | 'json'): Promise<Skill>;
54
+ /**
55
+ * Export a skill to YAML/JSON
56
+ */
57
+ exportElement(element: Skill, format: 'yaml' | 'json'): Promise<string>;
58
+ /**
59
+ * Clear all cached skills
60
+ */
61
+ clearCache(): void;
62
+ /**
63
+ * Check if a skill exists
64
+ */
65
+ exists(filePath: string): Promise<boolean>;
66
+ /**
67
+ * Find multiple skills by predicate
68
+ */
69
+ findMany(predicate: (element: Skill) => boolean): Promise<Skill[]>;
70
+ /**
71
+ * Validate a file path
72
+ */
73
+ validatePath(filePath: string): boolean;
74
+ /**
75
+ * Get the element type
76
+ */
77
+ getElementType(): ElementType;
78
+ /**
79
+ * Get the file extension for skills
80
+ */
81
+ getFileExtension(): string;
82
+ }
83
+ //# sourceMappingURL=SkillManager.d.ts.map