@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
@@ -1,30 +0,0 @@
1
- /**
2
- * Type definitions for persona-related structures
3
- */
4
- export interface PersonaMetadata {
5
- name: string;
6
- description: string;
7
- unique_id?: string;
8
- author?: string;
9
- triggers?: string[];
10
- version?: string;
11
- category?: string;
12
- age_rating?: 'all' | '13+' | '18+';
13
- content_flags?: string[];
14
- ai_generated?: boolean;
15
- generation_method?: 'human' | 'ChatGPT' | 'Claude' | 'hybrid';
16
- price?: string;
17
- revenue_split?: string;
18
- license?: string;
19
- created_date?: string;
20
- }
21
- export interface Persona {
22
- metadata: PersonaMetadata;
23
- content: string;
24
- filename: string;
25
- unique_id: string;
26
- }
27
- export type AgeRating = 'all' | '13+' | '18+';
28
- export type GenerationMethod = 'human' | 'ChatGPT' | 'Claude' | 'hybrid';
29
- export type PersonaCategory = 'creative' | 'professional' | 'educational' | 'gaming' | 'personal';
30
- //# sourceMappingURL=persona.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"persona.d.ts","sourceRoot":"","sources":["../../../src/types/persona.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAC9C,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACzE,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,cAAc,GAAG,aAAa,GAAG,QAAQ,GAAG,UAAU,CAAC"}
@@ -1,5 +0,0 @@
1
- /**
2
- * Type definitions for persona-related structures
3
- */
4
- export {};
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc29uYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90eXBlcy9wZXJzb25hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUeXBlIGRlZmluaXRpb25zIGZvciBwZXJzb25hLXJlbGF0ZWQgc3RydWN0dXJlc1xuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVyc29uYU1ldGFkYXRhIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICB1bmlxdWVfaWQ/OiBzdHJpbmc7XG4gIGF1dGhvcj86IHN0cmluZztcbiAgdHJpZ2dlcnM/OiBzdHJpbmdbXTtcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gIGFnZV9yYXRpbmc/OiAnYWxsJyB8ICcxMysnIHwgJzE4Kyc7XG4gIGNvbnRlbnRfZmxhZ3M/OiBzdHJpbmdbXTtcbiAgYWlfZ2VuZXJhdGVkPzogYm9vbGVhbjtcbiAgZ2VuZXJhdGlvbl9tZXRob2Q/OiAnaHVtYW4nIHwgJ0NoYXRHUFQnIHwgJ0NsYXVkZScgfCAnaHlicmlkJztcbiAgcHJpY2U/OiBzdHJpbmc7XG4gIHJldmVudWVfc3BsaXQ/OiBzdHJpbmc7XG4gIGxpY2Vuc2U/OiBzdHJpbmc7XG4gIGNyZWF0ZWRfZGF0ZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQZXJzb25hIHtcbiAgbWV0YWRhdGE6IFBlcnNvbmFNZXRhZGF0YTtcbiAgY29udGVudDogc3RyaW5nO1xuICBmaWxlbmFtZTogc3RyaW5nO1xuICB1bmlxdWVfaWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQWdlUmF0aW5nID0gJ2FsbCcgfCAnMTMrJyB8ICcxOCsnO1xuZXhwb3J0IHR5cGUgR2VuZXJhdGlvbk1ldGhvZCA9ICdodW1hbicgfCAnQ2hhdEdQVCcgfCAnQ2xhdWRlJyB8ICdoeWJyaWQnO1xuZXhwb3J0IHR5cGUgUGVyc29uYUNhdGVnb3J5ID0gJ2NyZWF0aXZlJyB8ICdwcm9mZXNzaW9uYWwnIHwgJ2VkdWNhdGlvbmFsJyB8ICdnYW1pbmcnIHwgJ3BlcnNvbmFsJzsiXX0=
@@ -1,46 +0,0 @@
1
- /**
2
- * Manage backups during updates
3
- */
4
- export interface BackupInfo {
5
- path: string;
6
- timestamp: string;
7
- version?: string;
8
- }
9
- export declare class BackupManager {
10
- private rootDir;
11
- private backupsDir;
12
- constructor(rootDir?: string);
13
- /**
14
- * Check if the directory contains production files
15
- */
16
- private hasProductionFiles;
17
- /**
18
- * Check if this appears to be a safe test directory
19
- */
20
- private isSafeTestDirectory;
21
- /**
22
- * Check if running in a Docker container
23
- */
24
- private isDockerEnvironment;
25
- /**
26
- * Create a backup of the current installation
27
- */
28
- createBackup(version?: string): Promise<BackupInfo>;
29
- /**
30
- * List available backups
31
- */
32
- listBackups(): Promise<BackupInfo[]>;
33
- /**
34
- * Get the most recent backup
35
- */
36
- getLatestBackup(): Promise<BackupInfo | null>;
37
- /**
38
- * Restore from a backup
39
- */
40
- restoreBackup(backupPath: string): Promise<void>;
41
- /**
42
- * Clean up old backups (keep the 5 most recent)
43
- */
44
- cleanupOldBackups(keepCount?: number): Promise<number>;
45
- }
46
- //# sourceMappingURL=BackupManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BackupManager.d.ts","sourceRoot":"","sources":["../../../src/update/BackupManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,CAAC,EAAE,MAAM;IAyB5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8B1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;OAEG;IACG,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA4EzD;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAmC1C;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAKnD;;OAEG;IACG,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCtD;;OAEG;IACG,iBAAiB,CAAC,SAAS,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,CAAC;CAmBhE"}
@@ -1,261 +0,0 @@
1
- /**
2
- * Manage backups during updates
3
- */
4
- import * as fs from 'fs/promises';
5
- import * as fsSync from 'fs';
6
- import * as path from 'path';
7
- import { safeExec } from '../utils/git.js';
8
- import { logger } from '../utils/logger.js';
9
- export class BackupManager {
10
- rootDir;
11
- backupsDir;
12
- constructor(rootDir) {
13
- // Validate rootDir parameter if provided
14
- if (rootDir) {
15
- // Prevent path traversal attacks first
16
- if (rootDir.includes('../') || rootDir.includes('..\\')) {
17
- throw new Error('rootDir cannot contain path traversal sequences');
18
- }
19
- // Then check if it's absolute
20
- if (!path.isAbsolute(rootDir)) {
21
- throw new Error('rootDir must be an absolute path');
22
- }
23
- }
24
- // Allow override for testing, default to process.cwd()
25
- this.rootDir = rootDir || process.cwd();
26
- // Safety check: Don't allow operations on directories containing critical files
27
- // This prevents accidental deletion of the actual project directory
28
- if (this.hasProductionFiles() && !this.isSafeTestDirectory()) {
29
- throw new Error('BackupManager cannot operate on production directory. Pass a safe test directory to the constructor.');
30
- }
31
- this.backupsDir = path.join(this.rootDir, "..", "dollhousemcp-backups");
32
- }
33
- /**
34
- * Check if the directory contains production files
35
- */
36
- hasProductionFiles() {
37
- try {
38
- const productionIndicators = [
39
- 'package.json',
40
- 'tsconfig.json',
41
- '.git',
42
- 'src',
43
- 'LICENSE'
44
- ];
45
- const files = fsSync.readdirSync(this.rootDir);
46
- const hasProductionFile = productionIndicators.some(indicator => files.includes(indicator));
47
- // Additional check: if package.json exists, check if it's a real project
48
- if (hasProductionFile && files.includes('package.json')) {
49
- const packageJsonPath = path.join(this.rootDir, 'package.json');
50
- const packageJson = JSON.parse(fsSync.readFileSync(packageJsonPath, 'utf-8'));
51
- // If it has a name and dependencies, it's likely a real project
52
- return !!(packageJson.name && packageJson.dependencies);
53
- }
54
- return hasProductionFile;
55
- }
56
- catch {
57
- // If we can't read the directory, assume it's safe
58
- return false;
59
- }
60
- }
61
- /**
62
- * Check if this appears to be a safe test directory
63
- */
64
- isSafeTestDirectory() {
65
- const safePaths = ['test', 'tmp', 'temp', '.test', '__test__'];
66
- const dirPath = this.rootDir.toLowerCase();
67
- // Check if running in Docker container
68
- if (this.isDockerEnvironment()) {
69
- return true; // Docker containers are immutable, updates don't apply
70
- }
71
- return safePaths.some(safe => dirPath.includes(safe));
72
- }
73
- /**
74
- * Check if running in a Docker container
75
- */
76
- isDockerEnvironment() {
77
- // Check common Docker indicators
78
- if (process.env.DOLLHOUSE_DISABLE_UPDATES === 'true') {
79
- return true;
80
- }
81
- // Check if running from /app directory (common Docker practice)
82
- if (this.rootDir === '/app') {
83
- return true;
84
- }
85
- // Check for Docker-specific files
86
- try {
87
- const hasDockerEnv = fsSync.existsSync('/.dockerenv');
88
- if (hasDockerEnv) {
89
- return true;
90
- }
91
- }
92
- catch {
93
- // Ignore errors
94
- }
95
- return false;
96
- }
97
- /**
98
- * Create a backup of the current installation
99
- */
100
- async createBackup(version) {
101
- const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
102
- const backupName = `backup-${timestamp}`;
103
- const backupPath = path.join(this.backupsDir, backupName);
104
- // Ensure backups directory exists
105
- await fs.mkdir(this.backupsDir, { recursive: true });
106
- // Use git to create a clean copy (respecting .gitignore)
107
- await safeExec('git', [
108
- 'archive',
109
- '--format=tar',
110
- 'HEAD'
111
- ], { cwd: this.rootDir }).then(async ({ stdout }) => {
112
- // Create backup directory
113
- await fs.mkdir(backupPath, { recursive: true });
114
- // Extract tar to backup directory
115
- const tarPath = path.join(backupPath, 'archive.tar');
116
- await fs.writeFile(tarPath, stdout);
117
- // Extract using tar command
118
- await safeExec('tar', ['-xf', 'archive.tar'], { cwd: backupPath });
119
- await fs.unlink(tarPath);
120
- });
121
- // Also backup node_modules if it exists
122
- const nodeModulesPath = path.join(this.rootDir, 'node_modules');
123
- try {
124
- await fs.access(nodeModulesPath);
125
- await safeExec('cp', ['-r', 'node_modules', backupPath], { cwd: this.rootDir });
126
- }
127
- catch {
128
- // node_modules doesn't exist or copy failed, that's okay
129
- }
130
- // Backup all persona files (including user-created ones not in git)
131
- const personasDir = path.join(this.rootDir, 'personas');
132
- const backupPersonasDir = path.join(backupPath, 'personas');
133
- try {
134
- await fs.access(personasDir);
135
- await fs.mkdir(backupPersonasDir, { recursive: true });
136
- const personaFiles = await fs.readdir(personasDir);
137
- for (const file of personaFiles) {
138
- if (file.endsWith('.md')) {
139
- const sourcePath = path.join(personasDir, file);
140
- const destPath = path.join(backupPersonasDir, file);
141
- // Copy the file, overwriting if it already exists from git archive
142
- await fs.copyFile(sourcePath, destPath);
143
- }
144
- }
145
- }
146
- catch (error) {
147
- // Log warning but don't fail the backup
148
- logger.warn('Could not backup all personas:', error);
149
- }
150
- // Save backup metadata
151
- const metadata = {
152
- timestamp,
153
- version,
154
- createdAt: new Date().toISOString()
155
- };
156
- await fs.writeFile(path.join(backupPath, 'backup-metadata.json'), JSON.stringify(metadata, null, 2));
157
- return {
158
- path: backupPath,
159
- timestamp,
160
- version
161
- };
162
- }
163
- /**
164
- * List available backups
165
- */
166
- async listBackups() {
167
- try {
168
- const entries = await fs.readdir(this.backupsDir, { withFileTypes: true });
169
- const backups = [];
170
- for (const entry of entries) {
171
- if (entry.isDirectory() && entry.name.startsWith('backup-')) {
172
- const backupPath = path.join(this.backupsDir, entry.name);
173
- const timestamp = entry.name.replace('backup-', '');
174
- // Try to read metadata
175
- let version;
176
- try {
177
- const metadataPath = path.join(backupPath, 'backup-metadata.json');
178
- const metadata = JSON.parse(await fs.readFile(metadataPath, 'utf-8'));
179
- version = metadata.version;
180
- }
181
- catch {
182
- // No metadata file, that's okay
183
- }
184
- backups.push({
185
- path: backupPath,
186
- timestamp,
187
- version
188
- });
189
- }
190
- }
191
- // Sort by timestamp descending (newest first)
192
- return backups.sort((a, b) => b.timestamp.localeCompare(a.timestamp));
193
- }
194
- catch {
195
- return [];
196
- }
197
- }
198
- /**
199
- * Get the most recent backup
200
- */
201
- async getLatestBackup() {
202
- const backups = await this.listBackups();
203
- return backups.length > 0 ? backups[0] : null;
204
- }
205
- /**
206
- * Restore from a backup
207
- */
208
- async restoreBackup(backupPath) {
209
- // Verify backup exists
210
- try {
211
- await fs.access(backupPath);
212
- }
213
- catch {
214
- throw new Error(`Backup not found: ${backupPath}`);
215
- }
216
- // Create a temporary directory for the current state
217
- const tempDir = path.join(this.backupsDir, 'temp-current');
218
- await fs.mkdir(tempDir, { recursive: true });
219
- // Move current files to temp (except .git and node_modules)
220
- const entries = await fs.readdir(this.rootDir);
221
- for (const entry of entries) {
222
- if (entry !== '.git' && entry !== 'node_modules' && entry !== 'dist') {
223
- const sourcePath = path.join(this.rootDir, entry);
224
- const destPath = path.join(tempDir, entry);
225
- await fs.rename(sourcePath, destPath);
226
- }
227
- }
228
- // Copy backup files to root
229
- const backupEntries = await fs.readdir(backupPath);
230
- for (const entry of backupEntries) {
231
- if (entry !== 'backup-metadata.json' && entry !== '.git') {
232
- const sourcePath = path.join(backupPath, entry);
233
- const destPath = path.join(this.rootDir, entry);
234
- await safeExec('cp', ['-r', sourcePath, destPath]);
235
- }
236
- }
237
- // Clean up temp directory
238
- await fs.rm(tempDir, { recursive: true, force: true });
239
- }
240
- /**
241
- * Clean up old backups (keep the 5 most recent)
242
- */
243
- async cleanupOldBackups(keepCount = 5) {
244
- const backups = await this.listBackups();
245
- let deletedCount = 0;
246
- if (backups.length > keepCount) {
247
- const backupsToDelete = backups.slice(keepCount);
248
- for (const backup of backupsToDelete) {
249
- try {
250
- await fs.rm(backup.path, { recursive: true, force: true });
251
- deletedCount++;
252
- }
253
- catch (error) {
254
- logger.error(`Failed to delete backup ${backup.path}:`, error);
255
- }
256
- }
257
- }
258
- return deletedCount;
259
- }
260
- }
261
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQmFja3VwTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91cGRhdGUvQmFja3VwTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxNQUFNLE1BQU0sSUFBSSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFRNUMsTUFBTSxPQUFPLGFBQWE7SUFDaEIsT0FBTyxDQUFTO0lBQ2hCLFVBQVUsQ0FBUztJQUUzQixZQUFZLE9BQWdCO1FBQzFCLHlDQUF5QztRQUN6QyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osdUNBQXVDO1lBQ3ZDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3hELE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztZQUNyRSxDQUFDO1lBQ0QsOEJBQThCO1lBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztZQUN0RCxDQUFDO1FBQ0gsQ0FBQztRQUVELHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFeEMsZ0ZBQWdGO1FBQ2hGLG9FQUFvRTtRQUNwRSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FB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SCxDQUFDO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNYW5hZ2UgYmFja3VwcyBkdXJpbmcgdXBkYXRlc1xuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIGZzU3luYyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgc2FmZUV4ZWMgfSBmcm9tICcuLi91dGlscy9naXQuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBCYWNrdXBJbmZvIHtcbiAgcGF0aDogc3RyaW5nO1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdmVyc2lvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEJhY2t1cE1hbmFnZXIge1xuICBwcml2YXRlIHJvb3REaXI6IHN0cmluZztcbiAgcHJpdmF0ZSBiYWNrdXBzRGlyOiBzdHJpbmc7XG4gIFxuICBjb25zdHJ1Y3Rvcihyb290RGlyPzogc3RyaW5nKSB7XG4gICAgLy8gVmFsaWRhdGUgcm9vdERpciBwYXJhbWV0ZXIgaWYgcHJvdmlkZWRcbiAgICBpZiAocm9vdERpcikge1xuICAgICAgLy8gUHJldmVudCBwYXRoIHRyYXZlcnNhbCBhdHRhY2tzIGZpcnN0XG4gICAgICBpZiAocm9vdERpci5pbmNsdWRlcygnLi4vJykgfHwgcm9vdERpci5pbmNsdWRlcygnLi5cXFxcJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb290RGlyIGNhbm5vdCBjb250YWluIHBhdGggdHJhdmVyc2FsIHNlcXVlbmNlcycpO1xuICAgICAgfVxuICAgICAgLy8gVGhlbiBjaGVjayBpZiBpdCdzIGFic29sdXRlXG4gICAgICBpZiAoIXBhdGguaXNBYnNvbHV0ZShyb290RGlyKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jvb3REaXIgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoJyk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIEFsbG93IG92ZXJyaWRlIGZvciB0ZXN0aW5nLCBkZWZhdWx0IHRvIHByb2Nlc3MuY3dkKClcbiAgICB0aGlzLnJvb3REaXIgPSByb290RGlyIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgXG4gICAgLy8gU2FmZXR5IGNoZWNrOiBEb24ndCBhbGxvdyBvcGVyYXRpb25zIG9uIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgY3JpdGljYWwgZmlsZXNcbiAgICAvLyBUaGlzIHByZXZlbnRzIGFjY2lkZW50YWwgZGVsZXRpb24gb2YgdGhlIGFjdHVhbCBwcm9qZWN0IGRpcmVjdG9yeVxuICAgIGlmICh0aGlzLmhhc1Byb2R1Y3Rpb25GaWxlcygpICYmICF0aGlzLmlzU2FmZVRlc3REaXJlY3RvcnkoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdCYWNrdXBNYW5hZ2VyIGNhbm5vdCBvcGVyYXRlIG9uIHByb2R1Y3Rpb24gZGlyZWN0b3J5LiBQYXNzIGEgc2FmZSB0ZXN0IGRpcmVjdG9yeSB0byB0aGUgY29uc3RydWN0b3IuJyk7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuYmFja3Vwc0RpciA9IHBhdGguam9pbih0aGlzLnJvb3REaXIsIFwiLi5cIiwgXCJkb2xsaG91c2VtY3AtYmFja3Vwc1wiKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBkaXJlY3RvcnkgY29udGFpbnMgcHJvZHVjdGlvbiBmaWxlc1xuICAgKi9cbiAgcHJpdmF0ZSBoYXNQcm9kdWN0aW9uRmlsZXMoKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHByb2R1Y3Rpb25JbmRpY2F0b3JzID0gW1xuICAgICAgICAncGFja2FnZS5qc29uJyxcbiAgICAgICAgJ3RzY29uZmlnLmpzb24nLFxuICAgICAgICAnLmdpdCcsXG4gICAgICAgICdzcmMnLFxuICAgICAgICAnTElDRU5TRSdcbiAgICAgIF07XG4gICAgICBcbiAgICAgIGNvbnN0IGZpbGVzID0gZnNTeW5jLnJlYWRkaXJTeW5jKHRoaXMucm9vdERpcik7XG4gICAgICBjb25zdCBoYXNQcm9kdWN0aW9uRmlsZSA9IHByb2R1Y3Rpb25JbmRpY2F0b3JzLnNvbWUoaW5kaWNhdG9yID0+IFxuICAgICAgICBmaWxlcy5pbmNsdWRlcyhpbmRpY2F0b3IpXG4gICAgICApO1xuICAgICAgXG4gICAgICAvLyBBZGRpdGlvbmFsIGNoZWNrOiBpZiBwYWNrYWdlLmpzb24gZXhpc3RzLCBjaGVjayBpZiBpdCdzIGEgcmVhbCBwcm9qZWN0XG4gICAgICBpZiAoaGFzUHJvZHVjdGlvbkZpbGUgJiYgZmlsZXMuaW5jbHVkZXMoJ3BhY2thZ2UuanNvbicpKSB7XG4gICAgICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHBhdGguam9pbih0aGlzLnJvb3REaXIsICdwYWNrYWdlLmpzb24nKTtcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKGZzU3luYy5yZWFkRmlsZVN5bmMocGFja2FnZUpzb25QYXRoLCAndXRmLTgnKSk7XG4gICAgICAgIC8vIElmIGl0IGhhcyBhIG5hbWUgYW5kIGRlcGVuZGVuY2llcywgaXQncyBsaWtlbHkgYSByZWFsIHByb2plY3RcbiAgICAgICAgcmV0dXJuICEhKHBhY2thZ2VKc29uLm5hbWUgJiYgcGFja2FnZUpzb24uZGVwZW5kZW5jaWVzKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgcmV0dXJuIGhhc1Byb2R1Y3Rpb25GaWxlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gSWYgd2UgY2FuJ3QgcmVhZCB0aGUgZGlyZWN0b3J5LCBhc3N1bWUgaXQncyBzYWZlXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhpcyBhcHBlYXJzIHRvIGJlIGEgc2FmZSB0ZXN0IGRpcmVjdG9yeVxuICAgKi9cbiAgcHJpdmF0ZSBpc1NhZmVUZXN0RGlyZWN0b3J5KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNhZmVQYXRocyA9IFsndGVzdCcsICd0bXAnLCAndGVtcCcsICcudGVzdCcsICdfX3Rlc3RfXyddO1xuICAgIGNvbnN0IGRpclBhdGggPSB0aGlzLnJvb3REaXIudG9Mb3dlckNhc2UoKTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiBydW5uaW5nIGluIERvY2tlciBjb250YWluZXJcbiAgICBpZiAodGhpcy5pc0RvY2tlckVudmlyb25tZW50KCkpIHtcbiAgICAgIHJldHVybiB0cnVlOyAvLyBEb2NrZXIgY29udGFpbmVycyBhcmUgaW1tdXRhYmxlLCB1cGRhdGVzIGRvbid0IGFwcGx5XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBzYWZlUGF0aHMuc29tZShzYWZlID0+IGRpclBhdGguaW5jbHVkZXMoc2FmZSkpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgcnVubmluZyBpbiBhIERvY2tlciBjb250YWluZXJcbiAgICovXG4gIHByaXZhdGUgaXNEb2NrZXJFbnZpcm9ubWVudCgpOiBib29sZWFuIHtcbiAgICAvLyBDaGVjayBjb21tb24gRG9ja2VyIGluZGljYXRvcnNcbiAgICBpZiAocHJvY2Vzcy5lbnYuRE9MTEhPVVNFX0RJU0FCTEVfVVBEQVRFUyA9PT0gJ3RydWUnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgcnVubmluZyBmcm9tIC9hcHAgZGlyZWN0b3J5IChjb21tb24gRG9ja2VyIHByYWN0aWNlKVxuICAgIGlmICh0aGlzLnJvb3REaXIgPT09ICcvYXBwJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIFxuICAgIC8vIENoZWNrIGZvciBEb2NrZXItc3BlY2lmaWMgZmlsZXNcbiAgICB0cnkge1xuICAgICAgY29uc3QgaGFzRG9ja2VyRW52ID0gZnNTeW5jLmV4aXN0c1N5bmMoJy8uZG9ja2VyZW52Jyk7XG4gICAgICBpZiAoaGFzRG9ja2VyRW52KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gSWdub3JlIGVycm9yc1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBiYWNrdXAgb2YgdGhlIGN1cnJlbnQgaW5zdGFsbGF0aW9uXG4gICAqL1xuICBhc3luYyBjcmVhdGVCYWNrdXAodmVyc2lvbj86IHN0cmluZyk6IFByb21pc2U8QmFja3VwSW5mbz4ge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9bOi5dL2csICctJyk7XG4gICAgY29uc3QgYmFja3VwTmFtZSA9IGBiYWNrdXAtJHt0aW1lc3RhbXB9YDtcbiAgICBjb25zdCBiYWNrdXBQYXRoID0gcGF0aC5qb2luKHRoaXMuYmFja3Vwc0RpciwgYmFja3VwTmFtZSk7XG4gICAgXG4gICAgLy8gRW5zdXJlIGJhY2t1cHMgZGlyZWN0b3J5IGV4aXN0c1xuICAgIGF3YWl0IGZzLm1rZGlyKHRoaXMuYmFja3Vwc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgXG4gICAgLy8gVXNlIGdpdCB0byBjcmVhdGUgYSBjbGVhbiBjb3B5IChyZXNwZWN0aW5nIC5naXRpZ25vcmUpXG4gICAgYXdhaXQgc2FmZUV4ZWMoJ2dpdCcsIFtcbiAgICAgICdhcmNoaXZlJyxcbiAgICAgICctLWZvcm1hdD10YXInLFxuICAgICAgJ0hFQUQnXG4gICAgXSwgeyBjd2Q6IHRoaXMucm9vdERpciB9KS50aGVuKGFzeW5jICh7IHN0ZG91dCB9KSA9PiB7XG4gICAgICAvLyBDcmVhdGUgYmFja3VwIGRpcmVjdG9yeVxuICAgICAgYXdhaXQgZnMubWtkaXIoYmFja3VwUGF0aCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBcbiAgICAgIC8vIEV4dHJhY3QgdGFyIHRvIGJhY2t1cCBkaXJlY3RvcnlcbiAgICAgIGNvbnN0IHRhclBhdGggPSBwYXRoLmpvaW4oYmFja3VwUGF0aCwgJ2FyY2hpdmUudGFyJyk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUodGFyUGF0aCwgc3Rkb3V0KTtcbiAgICAgIFxuICAgICAgLy8gRXh0cmFjdCB1c2luZyB0YXIgY29tbWFuZFxuICAgICAgYXdhaXQgc2FmZUV4ZWMoJ3RhcicsIFsnLXhmJywgJ2FyY2hpdmUudGFyJ10sIHsgY3dkOiBiYWNrdXBQYXRoIH0pO1xuICAgICAgYXdhaXQgZnMudW5saW5rKHRhclBhdGgpO1xuICAgIH0pO1xuICAgIFxuICAgIC8vIEFsc28gYmFja3VwIG5vZGVfbW9kdWxlcyBpZiBpdCBleGlzdHNcbiAgICBjb25zdCBub2RlTW9kdWxlc1BhdGggPSBwYXRoLmpvaW4odGhpcy5yb290RGlyLCAnbm9kZV9tb2R1bGVzJyk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLmFjY2Vzcyhub2RlTW9kdWxlc1BhdGgpO1xuICAgICAgYXdhaXQgc2FmZUV4ZWMoJ2NwJywgWyctcicsICdub2RlX21vZHVsZXMnLCBiYWNrdXBQYXRoXSwgeyBjd2Q6IHRoaXMucm9vdERpciB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIG5vZGVfbW9kdWxlcyBkb2Vzbid0IGV4aXN0IG9yIGNvcHkgZmFpbGVkLCB0aGF0J3Mgb2theVxuICAgIH1cbiAgICBcbiAgICAvLyBCYWNrdXAgYWxsIHBlcnNvbmEgZmlsZXMgKGluY2x1ZGluZyB1c2VyLWNyZWF0ZWQgb25lcyBub3QgaW4gZ2l0KVxuICAgIGNvbnN0IHBlcnNvbmFzRGlyID0gcGF0aC5qb2luKHRoaXMucm9vdERpciwgJ3BlcnNvbmFzJyk7XG4gICAgY29uc3QgYmFja3VwUGVyc29uYXNEaXIgPSBwYXRoLmpvaW4oYmFja3VwUGF0aCwgJ3BlcnNvbmFzJyk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLmFjY2VzcyhwZXJzb25hc0Rpcik7XG4gICAgICBhd2FpdCBmcy5ta2RpcihiYWNrdXBQZXJzb25hc0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHBlcnNvbmFGaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIocGVyc29uYXNEaXIpO1xuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHBlcnNvbmFGaWxlcykge1xuICAgICAgICBpZiAoZmlsZS5lbmRzV2l0aCgnLm1kJykpIHtcbiAgICAgICAgICBjb25zdCBzb3VyY2VQYXRoID0gcGF0aC5qb2luKHBlcnNvbmFzRGlyLCBmaWxlKTtcbiAgICAgICAgICBjb25zdCBkZXN0UGF0aCA9IHBhdGguam9pbihiYWNrdXBQZXJzb25hc0RpciwgZmlsZSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ29weSB0aGUgZmlsZSwgb3ZlcndyaXRpbmcgaWYgaXQgYWxyZWFkeSBleGlzdHMgZnJvbSBnaXQgYXJjaGl2ZVxuICAgICAgICAgIGF3YWl0IGZzLmNvcHlGaWxlKHNvdXJjZVBhdGgsIGRlc3RQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBMb2cgd2FybmluZyBidXQgZG9uJ3QgZmFpbCB0aGUgYmFja3VwXG4gICAgICBsb2dnZXIud2FybignQ291bGQgbm90IGJhY2t1cCBhbGwgcGVyc29uYXM6JywgZXJyb3IpO1xuICAgIH1cbiAgICBcbiAgICAvLyBTYXZlIGJhY2t1cCBtZXRhZGF0YVxuICAgIGNvbnN0IG1ldGFkYXRhID0ge1xuICAgICAgdGltZXN0YW1wLFxuICAgICAgdmVyc2lvbixcbiAgICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgfTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICBwYXRoLmpvaW4oYmFja3VwUGF0aCwgJ2JhY2t1cC1tZXRhZGF0YS5qc29uJyksXG4gICAgICBKU09OLnN0cmluZ2lmeShtZXRhZGF0YSwgbnVsbCwgMilcbiAgICApO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBwYXRoOiBiYWNrdXBQYXRoLFxuICAgICAgdGltZXN0YW1wLFxuICAgICAgdmVyc2lvblxuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBMaXN0IGF2YWlsYWJsZSBiYWNrdXBzXG4gICAqL1xuICBhc3luYyBsaXN0QmFja3VwcygpOiBQcm9taXNlPEJhY2t1cEluZm9bXT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgZnMucmVhZGRpcih0aGlzLmJhY2t1cHNEaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IGJhY2t1cHM6IEJhY2t1cEluZm9bXSA9IFtdO1xuICAgICAgXG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkgJiYgZW50cnkubmFtZS5zdGFydHNXaXRoKCdiYWNrdXAtJykpIHtcbiAgICAgICAgICBjb25zdCBiYWNrdXBQYXRoID0gcGF0aC5qb2luKHRoaXMuYmFja3Vwc0RpciwgZW50cnkubmFtZSk7XG4gICAgICAgICAgY29uc3QgdGltZXN0YW1wID0gZW50cnkubmFtZS5yZXBsYWNlKCdiYWNrdXAtJywgJycpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIFRyeSB0byByZWFkIG1ldGFkYXRhXG4gICAgICAgICAgbGV0IHZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGFQYXRoID0gcGF0aC5qb2luKGJhY2t1cFBhdGgsICdiYWNrdXAtbWV0YWRhdGEuanNvbicpO1xuICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKG1ldGFkYXRhUGF0aCwgJ3V0Zi04JykpO1xuICAgICAgICAgICAgdmVyc2lvbiA9IG1ldGFkYXRhLnZlcnNpb247XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBObyBtZXRhZGF0YSBmaWxlLCB0aGF0J3Mgb2theVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBiYWNrdXBzLnB1c2goe1xuICAgICAgICAgICAgcGF0aDogYmFja3VwUGF0aCxcbiAgICAgICAgICAgIHRpbWVzdGFtcCxcbiAgICAgICAgICAgIHZlcnNpb25cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBTb3J0IGJ5IHRpbWVzdGFtcCBkZXNjZW5kaW5nIChuZXdlc3QgZmlyc3QpXG4gICAgICByZXR1cm4gYmFja3Vwcy5zb3J0KChhLCBiKSA9PiBiLnRpbWVzdGFtcC5sb2NhbGVDb21wYXJlKGEudGltZXN0YW1wKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHRoZSBtb3N0IHJlY2VudCBiYWNrdXBcbiAgICovXG4gIGFzeW5jIGdldExhdGVzdEJhY2t1cCgpOiBQcm9taXNlPEJhY2t1cEluZm8gfCBudWxsPiB7XG4gICAgY29uc3QgYmFja3VwcyA9IGF3YWl0IHRoaXMubGlzdEJhY2t1cHMoKTtcbiAgICByZXR1cm4gYmFja3Vwcy5sZW5ndGggPiAwID8gYmFja3Vwc1swXSA6IG51bGw7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBSZXN0b3JlIGZyb20gYSBiYWNrdXBcbiAgICovXG4gIGFzeW5jIHJlc3RvcmVCYWNrdXAoYmFja3VwUGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gVmVyaWZ5IGJhY2t1cCBleGlzdHNcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKGJhY2t1cFBhdGgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWNrdXAgbm90IGZvdW5kOiAke2JhY2t1cFBhdGh9YCk7XG4gICAgfVxuICAgIFxuICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIHRoZSBjdXJyZW50IHN0YXRlXG4gICAgY29uc3QgdGVtcERpciA9IHBhdGguam9pbih0aGlzLmJhY2t1cHNEaXIsICd0ZW1wLWN1cnJlbnQnKTtcbiAgICBhd2FpdCBmcy5ta2Rpcih0ZW1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBcbiAgICAvLyBNb3ZlIGN1cnJlbnQgZmlsZXMgdG8gdGVtcCAoZXhjZXB0IC5naXQgYW5kIG5vZGVfbW9kdWxlcylcbiAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgZnMucmVhZGRpcih0aGlzLnJvb3REaXIpO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgaWYgKGVudHJ5ICE9PSAnLmdpdCcgJiYgZW50cnkgIT09ICdub2RlX21vZHVsZXMnICYmIGVudHJ5ICE9PSAnZGlzdCcpIHtcbiAgICAgICAgY29uc3Qgc291cmNlUGF0aCA9IHBhdGguam9pbih0aGlzLnJvb3REaXIsIGVudHJ5KTtcbiAgICAgICAgY29uc3QgZGVzdFBhdGggPSBwYXRoLmpvaW4odGVtcERpciwgZW50cnkpO1xuICAgICAgICBhd2FpdCBmcy5yZW5hbWUoc291cmNlUGF0aCwgZGVzdFBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBDb3B5IGJhY2t1cCBmaWxlcyB0byByb290XG4gICAgY29uc3QgYmFja3VwRW50cmllcyA9IGF3YWl0IGZzLnJlYWRkaXIoYmFja3VwUGF0aCk7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBiYWNrdXBFbnRyaWVzKSB7XG4gICAgICBpZiAoZW50cnkgIT09ICdiYWNrdXAtbWV0YWRhdGEuanNvbicgJiYgZW50cnkgIT09ICcuZ2l0Jykge1xuICAgICAgICBjb25zdCBzb3VyY2VQYXRoID0gcGF0aC5qb2luKGJhY2t1cFBhdGgsIGVudHJ5KTtcbiAgICAgICAgY29uc3QgZGVzdFBhdGggPSBwYXRoLmpvaW4odGhpcy5yb290RGlyLCBlbnRyeSk7XG4gICAgICAgIGF3YWl0IHNhZmVFeGVjKCdjcCcsIFsnLXInLCBzb3VyY2VQYXRoLCBkZXN0UGF0aF0pO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBDbGVhbiB1cCB0ZW1wIGRpcmVjdG9yeVxuICAgIGF3YWl0IGZzLnJtKHRlbXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIENsZWFuIHVwIG9sZCBiYWNrdXBzIChrZWVwIHRoZSA1IG1vc3QgcmVjZW50KVxuICAgKi9cbiAgYXN5bmMgY2xlYW51cE9sZEJhY2t1cHMoa2VlcENvdW50OiBudW1iZXIgPSA1KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBiYWNrdXBzID0gYXdhaXQgdGhpcy5saXN0QmFja3VwcygpO1xuICAgIGxldCBkZWxldGVkQ291bnQgPSAwO1xuICAgIFxuICAgIGlmIChiYWNrdXBzLmxlbmd0aCA+IGtlZXBDb3VudCkge1xuICAgICAgY29uc3QgYmFja3Vwc1RvRGVsZXRlID0gYmFja3Vwcy5zbGljZShrZWVwQ291bnQpO1xuICAgICAgXG4gICAgICBmb3IgKGNvbnN0IGJhY2t1cCBvZiBiYWNrdXBzVG9EZWxldGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBmcy5ybShiYWNrdXAucGF0aCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAgIGRlbGV0ZWRDb3VudCsrO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGRlbGV0ZSBiYWNrdXAgJHtiYWNrdXAucGF0aH06YCwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBkZWxldGVkQ291bnQ7XG4gIH1cbn0iXX0=
@@ -1,41 +0,0 @@
1
- /**
2
- * Check and validate system dependencies
3
- */
4
- import { VersionManager } from './VersionManager.js';
5
- export interface DependencyStatus {
6
- git: {
7
- installed: boolean;
8
- version?: string;
9
- valid?: boolean;
10
- error?: string;
11
- warning?: string;
12
- };
13
- npm: {
14
- installed: boolean;
15
- version?: string;
16
- valid?: boolean;
17
- error?: string;
18
- warning?: string;
19
- };
20
- }
21
- export declare class DependencyChecker {
22
- private versionManager;
23
- constructor(versionManager: VersionManager);
24
- /**
25
- * Check all system dependencies
26
- */
27
- checkDependencies(): Promise<DependencyStatus>;
28
- /**
29
- * Check Git installation and version
30
- */
31
- private checkGit;
32
- /**
33
- * Check npm installation and version
34
- */
35
- private checkNpm;
36
- /**
37
- * Format dependency status for display
38
- */
39
- formatDependencyStatus(status: DependencyStatus): string;
40
- }
41
- //# sourceMappingURL=DependencyChecker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DependencyChecker.d.ts","sourceRoot":"","sources":["../../../src/update/DependencyChecker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE;QACH,SAAS,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,GAAG,EAAE;QACH,SAAS,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,cAAc,CAAiB;gBAE3B,cAAc,EAAE,cAAc;IAI1C;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAYpD;;OAEG;YACW,QAAQ;IAiCtB;;OAEG;YACW,QAAQ;IAiCtB;;OAEG;IACH,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM;CA4CzD"}
@@ -1,132 +0,0 @@
1
- /**
2
- * Check and validate system dependencies
3
- */
4
- import { safeExec } from '../utils/git.js';
5
- import { DEPENDENCY_REQUIREMENTS } from '../config/constants.js';
6
- export class DependencyChecker {
7
- versionManager;
8
- constructor(versionManager) {
9
- this.versionManager = versionManager;
10
- }
11
- /**
12
- * Check all system dependencies
13
- */
14
- async checkDependencies() {
15
- const [gitStatus, npmStatus] = await Promise.all([
16
- this.checkGit(),
17
- this.checkNpm()
18
- ]);
19
- return {
20
- git: gitStatus,
21
- npm: npmStatus
22
- };
23
- }
24
- /**
25
- * Check Git installation and version
26
- */
27
- async checkGit() {
28
- try {
29
- const { stdout: gitOutput } = await safeExec('git', ['--version']);
30
- const gitVersion = this.versionManager.parseVersionFromOutput(gitOutput, 'git');
31
- if (!gitVersion) {
32
- return {
33
- installed: true,
34
- error: 'Could not parse Git version from output'
35
- };
36
- }
37
- const validation = this.versionManager.validateDependencyVersion(gitVersion, DEPENDENCY_REQUIREMENTS.git, 'Git');
38
- return {
39
- installed: true,
40
- version: gitVersion,
41
- valid: validation.valid,
42
- error: validation.error,
43
- warning: validation.warning
44
- };
45
- }
46
- catch (error) {
47
- return {
48
- installed: false,
49
- error: 'Git is not installed or not accessible in PATH'
50
- };
51
- }
52
- }
53
- /**
54
- * Check npm installation and version
55
- */
56
- async checkNpm() {
57
- try {
58
- const { stdout: npmOutput } = await safeExec('npm', ['--version']);
59
- const npmVersion = this.versionManager.parseVersionFromOutput(npmOutput, 'npm');
60
- if (!npmVersion) {
61
- return {
62
- installed: true,
63
- error: 'Could not parse npm version from output'
64
- };
65
- }
66
- const validation = this.versionManager.validateDependencyVersion(npmVersion, DEPENDENCY_REQUIREMENTS.npm, 'npm');
67
- return {
68
- installed: true,
69
- version: npmVersion,
70
- valid: validation.valid,
71
- error: validation.error,
72
- warning: validation.warning
73
- };
74
- }
75
- catch (error) {
76
- return {
77
- installed: false,
78
- error: 'npm is not installed or not accessible in PATH'
79
- };
80
- }
81
- }
82
- /**
83
- * Format dependency status for display
84
- */
85
- formatDependencyStatus(status) {
86
- const lines = ['**Dependency Check Results:**\n'];
87
- // Git status
88
- lines.push('**Git:**');
89
- if (!status.git.installed) {
90
- lines.push(`❌ ${status.git.error}`);
91
- }
92
- else if (status.git.error) {
93
- lines.push(`❌ Version ${status.git.version || 'unknown'} - ${status.git.error}`);
94
- }
95
- else if (status.git.warning) {
96
- lines.push(`⚠️ Version ${status.git.version} - ${status.git.warning}`);
97
- }
98
- else {
99
- lines.push(`✅ Version ${status.git.version} - OK`);
100
- }
101
- lines.push('');
102
- // npm status
103
- lines.push('**npm:**');
104
- if (!status.npm.installed) {
105
- lines.push(`❌ ${status.npm.error}`);
106
- }
107
- else if (status.npm.error) {
108
- lines.push(`❌ Version ${status.npm.version || 'unknown'} - ${status.npm.error}`);
109
- }
110
- else if (status.npm.warning) {
111
- lines.push(`⚠️ Version ${status.npm.version} - ${status.npm.warning}`);
112
- }
113
- else {
114
- lines.push(`✅ Version ${status.npm.version} - OK`);
115
- }
116
- // Overall status
117
- const hasErrors = status.git.error || status.npm.error;
118
- const hasWarnings = status.git.warning || status.npm.warning;
119
- lines.push('\n**Overall Status:**');
120
- if (hasErrors) {
121
- lines.push('❌ Some dependencies do not meet requirements. Update may fail.');
122
- }
123
- else if (hasWarnings) {
124
- lines.push('⚠️ All dependencies work but some are not at recommended versions.');
125
- }
126
- else {
127
- lines.push('✅ All dependencies meet requirements!');
128
- }
129
- return lines.join('\n');
130
- }
131
- }
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwZW5kZW5jeUNoZWNrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXBkYXRlL0RlcGVuZGVuY3lDaGVja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBbUJqRSxNQUFNLE9BQU8saUJBQWlCO0lBQ3BCLGNBQWMsQ0FBaUI7SUFFdkMsWUFBWSxjQUE4QjtRQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsaUJBQWlCO1FBQ3JCLE1BQU0sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQy9DLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLENBQUMsUUFBUSxFQUFFO1NBQ2hCLENBQUMsQ0FBQztRQUVILE9BQU87WUFDTCxHQUFHLEVBQUUsU0FBUztZQUNkLEdBQUcsRUFBRSxTQUFTO1NBQ2YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxRQUFRO1FBQ3BCLElBQUksQ0FBQztZQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNuRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVoRixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU87b0JBQ0wsU0FBUyxFQUFFLElBQUk7b0JBQ2YsS0FBSyxFQUFFLHlDQUF5QztpQkFDakQsQ0FBQztZQUNKLENBQUM7WUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLHlCQUF5QixDQUM5RCxVQUFVLEVBQ1YsdUJBQXVCLENBQUMsR0FBRyxFQUMzQixLQUFLLENBQ04sQ0FBQztZQUVGLE9BQU87Z0JBQ0wsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsT0FBTyxFQUFFLFVBQVU7Z0JBQ25CLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSztnQkFDdkIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO2dCQUN2QixPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU87YUFDNUIsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTztnQkFDTCxTQUFTLEVBQUUsS0FBSztnQkFDaEIsS0FBSyxFQUFFLGdEQUFnRDthQUN4RCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxRQUFRO1FBQ3BCLElBQUksQ0FBQztZQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNuRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVoRixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU87b0JBQ0wsU0FBUyxFQUFFLElBQUk7b0JBQ2YsS0FBSyxFQUFFLHlDQUF5QztpQkFDakQsQ0FBQztZQUNKLENBQUM7WUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLHlCQUF5QixDQUM5RCxVQUFVLEVBQ1YsdUJBQXVCLENBQUMsR0FBRyxFQUMzQixLQUFLLENBQ04sQ0FBQztZQUVGLE9BQU87Z0JBQ0wsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsT0FBTyxFQUFFLFVBQVU7Z0JBQ25CLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSztnQkFDdkIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO2dCQUN2QixPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU87YUFDNUIsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTztnQkFDTCxTQUFTLEVBQUUsS0FBSztnQkFDaEIsS0FBSyxFQUFFLGdEQUFnRDthQUN4RCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILHNCQUFzQixDQUFDLE1BQXdCO1FBQzdDLE1BQU0sS0FBSyxHQUFhLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUU1RCxhQUFhO1FBQ2IsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMxQixLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7YUFBTSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDNUIsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLFNBQVMsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbkYsQ0FBQzthQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM5QixLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxPQUFPLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBRUQsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVmLGFBQWE7UUFDYixLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFCLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdEMsQ0FBQzthQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM1QixLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksU0FBUyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNuRixDQUFDO2FBQU0sSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzlCLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDekUsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFFRCxpQkFBaUI7UUFDakIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDdkQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFFN0QsS0FBSyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3BDLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxLQUFLLENBQUMsSUFBSSxDQUFDLGdFQUFnRSxDQUFDLENBQUM7UUFDL0UsQ0FBQzthQUFNLElBQUksV0FBVyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLElBQUksQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO1FBQ25GLENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGVjayBhbmQgdmFsaWRhdGUgc3lzdGVtIGRlcGVuZGVuY2llc1xuICovXG5cbmltcG9ydCB7IHNhZmVFeGVjIH0gZnJvbSAnLi4vdXRpbHMvZ2l0LmpzJztcbmltcG9ydCB7IFZlcnNpb25NYW5hZ2VyIH0gZnJvbSAnLi9WZXJzaW9uTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBERVBFTkRFTkNZX1JFUVVJUkVNRU5UUyB9IGZyb20gJy4uL2NvbmZpZy9jb25zdGFudHMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlcGVuZGVuY3lTdGF0dXMge1xuICBnaXQ6IHtcbiAgICBpbnN0YWxsZWQ6IGJvb2xlYW47XG4gICAgdmVyc2lvbj86IHN0cmluZztcbiAgICB2YWxpZD86IGJvb2xlYW47XG4gICAgZXJyb3I/OiBzdHJpbmc7XG4gICAgd2FybmluZz86IHN0cmluZztcbiAgfTtcbiAgbnBtOiB7XG4gICAgaW5zdGFsbGVkOiBib29sZWFuO1xuICAgIHZlcnNpb24/OiBzdHJpbmc7XG4gICAgdmFsaWQ/OiBib29sZWFuO1xuICAgIGVycm9yPzogc3RyaW5nO1xuICAgIHdhcm5pbmc/OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBEZXBlbmRlbmN5Q2hlY2tlciB7XG4gIHByaXZhdGUgdmVyc2lvbk1hbmFnZXI6IFZlcnNpb25NYW5hZ2VyO1xuICBcbiAgY29uc3RydWN0b3IodmVyc2lvbk1hbmFnZXI6IFZlcnNpb25NYW5hZ2VyKSB7XG4gICAgdGhpcy52ZXJzaW9uTWFuYWdlciA9IHZlcnNpb25NYW5hZ2VyO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgYWxsIHN5c3RlbSBkZXBlbmRlbmNpZXNcbiAgICovXG4gIGFzeW5jIGNoZWNrRGVwZW5kZW5jaWVzKCk6IFByb21pc2U8RGVwZW5kZW5jeVN0YXR1cz4ge1xuICAgIGNvbnN0IFtnaXRTdGF0dXMsIG5wbVN0YXR1c10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLmNoZWNrR2l0KCksXG4gICAgICB0aGlzLmNoZWNrTnBtKClcbiAgICBdKTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgZ2l0OiBnaXRTdGF0dXMsXG4gICAgICBucG06IG5wbVN0YXR1c1xuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBHaXQgaW5zdGFsbGF0aW9uIGFuZCB2ZXJzaW9uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNoZWNrR2l0KCk6IFByb21pc2U8RGVwZW5kZW5jeVN0YXR1c1snZ2l0J10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBzdGRvdXQ6IGdpdE91dHB1dCB9ID0gYXdhaXQgc2FmZUV4ZWMoJ2dpdCcsIFsnLS12ZXJzaW9uJ10pO1xuICAgICAgY29uc3QgZ2l0VmVyc2lvbiA9IHRoaXMudmVyc2lvbk1hbmFnZXIucGFyc2VWZXJzaW9uRnJvbU91dHB1dChnaXRPdXRwdXQsICdnaXQnKTtcbiAgICAgIFxuICAgICAgaWYgKCFnaXRWZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW5zdGFsbGVkOiB0cnVlLFxuICAgICAgICAgIGVycm9yOiAnQ291bGQgbm90IHBhcnNlIEdpdCB2ZXJzaW9uIGZyb20gb3V0cHV0J1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCB2YWxpZGF0aW9uID0gdGhpcy52ZXJzaW9uTWFuYWdlci52YWxpZGF0ZURlcGVuZGVuY3lWZXJzaW9uKFxuICAgICAgICBnaXRWZXJzaW9uLCBcbiAgICAgICAgREVQRU5ERU5DWV9SRVFVSVJFTUVOVFMuZ2l0LFxuICAgICAgICAnR2l0J1xuICAgICAgKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5zdGFsbGVkOiB0cnVlLFxuICAgICAgICB2ZXJzaW9uOiBnaXRWZXJzaW9uLFxuICAgICAgICB2YWxpZDogdmFsaWRhdGlvbi52YWxpZCxcbiAgICAgICAgZXJyb3I6IHZhbGlkYXRpb24uZXJyb3IsXG4gICAgICAgIHdhcm5pbmc6IHZhbGlkYXRpb24ud2FybmluZ1xuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5zdGFsbGVkOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6ICdHaXQgaXMgbm90IGluc3RhbGxlZCBvciBub3QgYWNjZXNzaWJsZSBpbiBQQVRIJ1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBucG0gaW5zdGFsbGF0aW9uIGFuZCB2ZXJzaW9uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNoZWNrTnBtKCk6IFByb21pc2U8RGVwZW5kZW5jeVN0YXR1c1snbnBtJ10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBzdGRvdXQ6IG5wbU91dHB1dCB9ID0gYXdhaXQgc2FmZUV4ZWMoJ25wbScsIFsnLS12ZXJzaW9uJ10pO1xuICAgICAgY29uc3QgbnBtVmVyc2lvbiA9IHRoaXMudmVyc2lvbk1hbmFnZXIucGFyc2VWZXJzaW9uRnJvbU91dHB1dChucG1PdXRwdXQsICducG0nKTtcbiAgICAgIFxuICAgICAgaWYgKCFucG1WZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaW5zdGFsbGVkOiB0cnVlLFxuICAgICAgICAgIGVycm9yOiAnQ291bGQgbm90IHBhcnNlIG5wbSB2ZXJzaW9uIGZyb20gb3V0cHV0J1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCB2YWxpZGF0aW9uID0gdGhpcy52ZXJzaW9uTWFuYWdlci52YWxpZGF0ZURlcGVuZGVuY3lWZXJzaW9uKFxuICAgICAgICBucG1WZXJzaW9uLCBcbiAgICAgICAgREVQRU5ERU5DWV9SRVFVSVJFTUVOVFMubnBtLFxuICAgICAgICAnbnBtJ1xuICAgICAgKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5zdGFsbGVkOiB0cnVlLFxuICAgICAgICB2ZXJzaW9uOiBucG1WZXJzaW9uLFxuICAgICAgICB2YWxpZDogdmFsaWRhdGlvbi52YWxpZCxcbiAgICAgICAgZXJyb3I6IHZhbGlkYXRpb24uZXJyb3IsXG4gICAgICAgIHdhcm5pbmc6IHZhbGlkYXRpb24ud2FybmluZ1xuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaW5zdGFsbGVkOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6ICducG0gaXMgbm90IGluc3RhbGxlZCBvciBub3QgYWNjZXNzaWJsZSBpbiBQQVRIJ1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGb3JtYXQgZGVwZW5kZW5jeSBzdGF0dXMgZm9yIGRpc3BsYXlcbiAgICovXG4gIGZvcm1hdERlcGVuZGVuY3lTdGF0dXMoc3RhdHVzOiBEZXBlbmRlbmN5U3RhdHVzKTogc3RyaW5nIHtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbJyoqRGVwZW5kZW5jeSBDaGVjayBSZXN1bHRzOioqXFxuJ107XG4gICAgXG4gICAgLy8gR2l0IHN0YXR1c1xuICAgIGxpbmVzLnB1c2goJyoqR2l0OioqJyk7XG4gICAgaWYgKCFzdGF0dXMuZ2l0Lmluc3RhbGxlZCkge1xuICAgICAgbGluZXMucHVzaChg4p2MICR7c3RhdHVzLmdpdC5lcnJvcn1gKTtcbiAgICB9IGVsc2UgaWYgKHN0YXR1cy5naXQuZXJyb3IpIHtcbiAgICAgIGxpbmVzLnB1c2goYOKdjCBWZXJzaW9uICR7c3RhdHVzLmdpdC52ZXJzaW9uIHx8ICd1bmtub3duJ30gLSAke3N0YXR1cy5naXQuZXJyb3J9YCk7XG4gICAgfSBlbHNlIGlmIChzdGF0dXMuZ2l0Lndhcm5pbmcpIHtcbiAgICAgIGxpbmVzLnB1c2goYOKaoO+4jyBWZXJzaW9uICR7c3RhdHVzLmdpdC52ZXJzaW9ufSAtICR7c3RhdHVzLmdpdC53YXJuaW5nfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaW5lcy5wdXNoKGDinIUgVmVyc2lvbiAke3N0YXR1cy5naXQudmVyc2lvbn0gLSBPS2ApO1xuICAgIH1cbiAgICBcbiAgICBsaW5lcy5wdXNoKCcnKTtcbiAgICBcbiAgICAvLyBucG0gc3RhdHVzXG4gICAgbGluZXMucHVzaCgnKipucG06KionKTtcbiAgICBpZiAoIXN0YXR1cy5ucG0uaW5zdGFsbGVkKSB7XG4gICAgICBsaW5lcy5wdXNoKGDinYwgJHtzdGF0dXMubnBtLmVycm9yfWApO1xuICAgIH0gZWxzZSBpZiAoc3RhdHVzLm5wbS5lcnJvcikge1xuICAgICAgbGluZXMucHVzaChg4p2MIFZlcnNpb24gJHtzdGF0dXMubnBtLnZlcnNpb24gfHwgJ3Vua25vd24nfSAtICR7c3RhdHVzLm5wbS5lcnJvcn1gKTtcbiAgICB9IGVsc2UgaWYgKHN0YXR1cy5ucG0ud2FybmluZykge1xuICAgICAgbGluZXMucHVzaChg4pqg77iPIFZlcnNpb24gJHtzdGF0dXMubnBtLnZlcnNpb259IC0gJHtzdGF0dXMubnBtLndhcm5pbmd9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmVzLnB1c2goYOKchSBWZXJzaW9uICR7c3RhdHVzLm5wbS52ZXJzaW9ufSAtIE9LYCk7XG4gICAgfVxuICAgIFxuICAgIC8vIE92ZXJhbGwgc3RhdHVzXG4gICAgY29uc3QgaGFzRXJyb3JzID0gc3RhdHVzLmdpdC5lcnJvciB8fCBzdGF0dXMubnBtLmVycm9yO1xuICAgIGNvbnN0IGhhc1dhcm5pbmdzID0gc3RhdHVzLmdpdC53YXJuaW5nIHx8IHN0YXR1cy5ucG0ud2FybmluZztcbiAgICBcbiAgICBsaW5lcy5wdXNoKCdcXG4qKk92ZXJhbGwgU3RhdHVzOioqJyk7XG4gICAgaWYgKGhhc0Vycm9ycykge1xuICAgICAgbGluZXMucHVzaCgn4p2MIFNvbWUgZGVwZW5kZW5jaWVzIGRvIG5vdCBtZWV0IHJlcXVpcmVtZW50cy4gVXBkYXRlIG1heSBmYWlsLicpO1xuICAgIH0gZWxzZSBpZiAoaGFzV2FybmluZ3MpIHtcbiAgICAgIGxpbmVzLnB1c2goJ+KaoO+4jyBBbGwgZGVwZW5kZW5jaWVzIHdvcmsgYnV0IHNvbWUgYXJlIG5vdCBhdCByZWNvbW1lbmRlZCB2ZXJzaW9ucy4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGluZXMucHVzaCgn4pyFIEFsbCBkZXBlbmRlbmNpZXMgbWVldCByZXF1aXJlbWVudHMhJyk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxufSJdfQ==