@dollhousemcp/mcp-server 1.4.4 → 1.5.0

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 (667) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +68 -7
  3. package/dist/auth/GitHubAuthManager.d.ts +93 -0
  4. package/dist/auth/GitHubAuthManager.d.ts.map +1 -0
  5. package/dist/auth/GitHubAuthManager.js +465 -0
  6. package/dist/generated/version.d.ts +2 -2
  7. package/dist/generated/version.js +3 -3
  8. package/dist/index.d.ts +23 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +244 -5
  11. package/dist/security/tokenManager.d.ts +34 -0
  12. package/dist/security/tokenManager.d.ts.map +1 -1
  13. package/dist/security/tokenManager.js +199 -1
  14. package/dist/server/ServerSetup.d.ts.map +1 -1
  15. package/dist/server/ServerSetup.js +4 -1
  16. package/dist/server/tools/AuthTools.d.ts +10 -0
  17. package/dist/server/tools/AuthTools.d.ts.map +1 -0
  18. package/dist/server/tools/AuthTools.js +41 -0
  19. package/dist/server/types.d.ts +3 -0
  20. package/dist/server/types.d.ts.map +1 -1
  21. package/dist/server/types.js +1 -1
  22. package/package.json +1 -1
  23. package/dist/collection/MarketplaceBrowser.d.ts +0 -24
  24. package/dist/collection/MarketplaceBrowser.d.ts.map +0 -1
  25. package/dist/collection/MarketplaceBrowser.js +0 -115
  26. package/dist/collection/MarketplaceSearch.d.ts +0 -18
  27. package/dist/collection/MarketplaceSearch.d.ts.map +0 -1
  28. package/dist/collection/MarketplaceSearch.js +0 -48
  29. package/dist/collection/PersonaInstaller.d.ts +0 -26
  30. package/dist/collection/PersonaInstaller.d.ts.map +0 -1
  31. package/dist/collection/PersonaInstaller.js +0 -103
  32. package/dist/elements/ensembles/Ensemble.d.ts +0 -144
  33. package/dist/elements/ensembles/Ensemble.d.ts.map +0 -1
  34. package/dist/elements/ensembles/Ensemble.js +0 -860
  35. package/dist/elements/ensembles/EnsembleManager.d.ts +0 -85
  36. package/dist/elements/ensembles/EnsembleManager.d.ts.map +0 -1
  37. package/dist/elements/ensembles/EnsembleManager.js +0 -378
  38. package/dist/elements/ensembles/constants.d.ts +0 -73
  39. package/dist/elements/ensembles/constants.d.ts.map +0 -1
  40. package/dist/elements/ensembles/constants.js +0 -92
  41. package/dist/elements/ensembles/index.d.ts +0 -8
  42. package/dist/elements/ensembles/index.d.ts.map +0 -1
  43. package/dist/elements/ensembles/index.js +0 -8
  44. package/dist/elements/ensembles/types.d.ts +0 -92
  45. package/dist/elements/ensembles/types.d.ts.map +0 -1
  46. package/dist/elements/ensembles/types.js +0 -8
  47. package/dist/elements/memories/Memory.d.ts +0 -110
  48. package/dist/elements/memories/Memory.d.ts.map +0 -1
  49. package/dist/elements/memories/Memory.js +0 -470
  50. package/dist/elements/memories/MemoryManager.d.ts +0 -86
  51. package/dist/elements/memories/MemoryManager.d.ts.map +0 -1
  52. package/dist/elements/memories/MemoryManager.js +0 -435
  53. package/dist/elements/memories/constants.d.ts +0 -42
  54. package/dist/elements/memories/constants.d.ts.map +0 -1
  55. package/dist/elements/memories/constants.js +0 -49
  56. package/dist/elements/memories/index.d.ts +0 -6
  57. package/dist/elements/memories/index.d.ts.map +0 -1
  58. package/dist/elements/memories/index.js +0 -6
  59. package/dist/marketplace/GitHubClient.d.ts +0 -22
  60. package/dist/marketplace/GitHubClient.d.ts.map +0 -1
  61. package/dist/marketplace/GitHubClient.js +0 -112
  62. package/dist/marketplace/MarketplaceBrowser.d.ts +0 -24
  63. package/dist/marketplace/MarketplaceBrowser.d.ts.map +0 -1
  64. package/dist/marketplace/MarketplaceBrowser.js +0 -115
  65. package/dist/marketplace/MarketplaceSearch.d.ts +0 -18
  66. package/dist/marketplace/MarketplaceSearch.d.ts.map +0 -1
  67. package/dist/marketplace/MarketplaceSearch.js +0 -48
  68. package/dist/marketplace/PersonaDetails.d.ts +0 -22
  69. package/dist/marketplace/PersonaDetails.d.ts.map +0 -1
  70. package/dist/marketplace/PersonaDetails.js +0 -71
  71. package/dist/marketplace/PersonaInstaller.d.ts +0 -25
  72. package/dist/marketplace/PersonaInstaller.d.ts.map +0 -1
  73. package/dist/marketplace/PersonaInstaller.js +0 -100
  74. package/dist/marketplace/PersonaSubmitter.d.ts +0 -19
  75. package/dist/marketplace/PersonaSubmitter.d.ts.map +0 -1
  76. package/dist/marketplace/PersonaSubmitter.js +0 -57
  77. package/dist/marketplace/index.d.ts +0 -10
  78. package/dist/marketplace/index.d.ts.map +0 -1
  79. package/dist/marketplace/index.js +0 -10
  80. package/dist/server/tools/MarketplaceTools.d.ts +0 -10
  81. package/dist/server/tools/MarketplaceTools.d.ts.map +0 -1
  82. package/dist/server/tools/MarketplaceTools.js +0 -96
  83. package/dist/src/cache/APICache.d.ts +0 -23
  84. package/dist/src/cache/APICache.d.ts.map +0 -1
  85. package/dist/src/cache/APICache.js +0 -42
  86. package/dist/src/cache/index.d.ts +0 -5
  87. package/dist/src/cache/index.d.ts.map +0 -1
  88. package/dist/src/cache/index.js +0 -5
  89. package/dist/src/config/constants.d.ts +0 -25
  90. package/dist/src/config/constants.d.ts.map +0 -1
  91. package/dist/src/config/constants.js +0 -30
  92. package/dist/src/config/index.d.ts +0 -6
  93. package/dist/src/config/index.d.ts.map +0 -1
  94. package/dist/src/config/index.js +0 -6
  95. package/dist/src/config/indicator-config.d.ts +0 -107
  96. package/dist/src/config/indicator-config.d.ts.map +0 -1
  97. package/dist/src/config/indicator-config.js +0 -158
  98. package/dist/src/constants/defaultPersonas.d.ts +0 -10
  99. package/dist/src/constants/defaultPersonas.d.ts.map +0 -1
  100. package/dist/src/constants/defaultPersonas.js +0 -18
  101. package/dist/src/constants/limits.d.ts +0 -10
  102. package/dist/src/constants/limits.d.ts.map +0 -1
  103. package/dist/src/constants/limits.js +0 -13
  104. package/dist/src/errors/SecurityError.d.ts +0 -29
  105. package/dist/src/errors/SecurityError.d.ts.map +0 -1
  106. package/dist/src/errors/SecurityError.js +0 -47
  107. package/dist/src/errors/index.d.ts +0 -2
  108. package/dist/src/errors/index.d.ts.map +0 -1
  109. package/dist/src/errors/index.js +0 -2
  110. package/dist/src/index.barrel.d.ts +0 -21
  111. package/dist/src/index.barrel.d.ts.map +0 -1
  112. package/dist/src/index.barrel.js +0 -31
  113. package/dist/src/index.d.ts +0 -220
  114. package/dist/src/index.d.ts.map +0 -1
  115. package/dist/src/index.js +0 -1559
  116. package/dist/src/marketplace/GitHubClient.d.ts +0 -22
  117. package/dist/src/marketplace/GitHubClient.d.ts.map +0 -1
  118. package/dist/src/marketplace/GitHubClient.js +0 -112
  119. package/dist/src/marketplace/MarketplaceBrowser.d.ts +0 -21
  120. package/dist/src/marketplace/MarketplaceBrowser.d.ts.map +0 -1
  121. package/dist/src/marketplace/MarketplaceBrowser.js +0 -45
  122. package/dist/src/marketplace/MarketplaceSearch.d.ts +0 -18
  123. package/dist/src/marketplace/MarketplaceSearch.d.ts.map +0 -1
  124. package/dist/src/marketplace/MarketplaceSearch.js +0 -36
  125. package/dist/src/marketplace/PersonaDetails.d.ts +0 -22
  126. package/dist/src/marketplace/PersonaDetails.d.ts.map +0 -1
  127. package/dist/src/marketplace/PersonaDetails.js +0 -71
  128. package/dist/src/marketplace/PersonaInstaller.d.ts +0 -25
  129. package/dist/src/marketplace/PersonaInstaller.d.ts.map +0 -1
  130. package/dist/src/marketplace/PersonaInstaller.js +0 -100
  131. package/dist/src/marketplace/PersonaSubmitter.d.ts +0 -19
  132. package/dist/src/marketplace/PersonaSubmitter.d.ts.map +0 -1
  133. package/dist/src/marketplace/PersonaSubmitter.js +0 -57
  134. package/dist/src/marketplace/index.d.ts +0 -10
  135. package/dist/src/marketplace/index.d.ts.map +0 -1
  136. package/dist/src/marketplace/index.js +0 -10
  137. package/dist/src/persona/PersonaLoader.d.ts +0 -33
  138. package/dist/src/persona/PersonaLoader.d.ts.map +0 -1
  139. package/dist/src/persona/PersonaLoader.js +0 -139
  140. package/dist/src/persona/PersonaManager.d.ts +0 -112
  141. package/dist/src/persona/PersonaManager.d.ts.map +0 -1
  142. package/dist/src/persona/PersonaManager.js +0 -341
  143. package/dist/src/persona/PersonaValidator.d.ts +0 -33
  144. package/dist/src/persona/PersonaValidator.d.ts.map +0 -1
  145. package/dist/src/persona/PersonaValidator.js +0 -157
  146. package/dist/src/persona/export-import/PersonaExporter.d.ts +0 -43
  147. package/dist/src/persona/export-import/PersonaExporter.d.ts.map +0 -1
  148. package/dist/src/persona/export-import/PersonaExporter.js +0 -99
  149. package/dist/src/persona/export-import/PersonaImporter.d.ts +0 -65
  150. package/dist/src/persona/export-import/PersonaImporter.d.ts.map +0 -1
  151. package/dist/src/persona/export-import/PersonaImporter.js +0 -313
  152. package/dist/src/persona/export-import/PersonaSharer.d.ts +0 -60
  153. package/dist/src/persona/export-import/PersonaSharer.d.ts.map +0 -1
  154. package/dist/src/persona/export-import/PersonaSharer.js +0 -363
  155. package/dist/src/persona/export-import/index.d.ts +0 -10
  156. package/dist/src/persona/export-import/index.d.ts.map +0 -1
  157. package/dist/src/persona/export-import/index.js +0 -7
  158. package/dist/src/persona/index.d.ts +0 -7
  159. package/dist/src/persona/index.d.ts.map +0 -1
  160. package/dist/src/persona/index.js +0 -7
  161. package/dist/src/security/InputValidator.d.ts +0 -69
  162. package/dist/src/security/InputValidator.d.ts.map +0 -1
  163. package/dist/src/security/InputValidator.js +0 -381
  164. package/dist/src/security/commandValidator.d.ts +0 -7
  165. package/dist/src/security/commandValidator.d.ts.map +0 -1
  166. package/dist/src/security/commandValidator.js +0 -77
  167. package/dist/src/security/constants.d.ts +0 -21
  168. package/dist/src/security/constants.d.ts.map +0 -1
  169. package/dist/src/security/constants.js +0 -23
  170. package/dist/src/security/contentValidator.d.ts +0 -47
  171. package/dist/src/security/contentValidator.d.ts.map +0 -1
  172. package/dist/src/security/contentValidator.js +0 -188
  173. package/dist/src/security/fileLockManager.d.ts +0 -70
  174. package/dist/src/security/fileLockManager.d.ts.map +0 -1
  175. package/dist/src/security/fileLockManager.js +0 -187
  176. package/dist/src/security/index.d.ts +0 -12
  177. package/dist/src/security/index.d.ts.map +0 -1
  178. package/dist/src/security/index.js +0 -14
  179. package/dist/src/security/pathValidator.d.ts +0 -9
  180. package/dist/src/security/pathValidator.d.ts.map +0 -1
  181. package/dist/src/security/pathValidator.js +0 -97
  182. package/dist/src/security/secureYamlParser.d.ts +0 -46
  183. package/dist/src/security/secureYamlParser.d.ts.map +0 -1
  184. package/dist/src/security/secureYamlParser.js +0 -203
  185. package/dist/src/security/securityMonitor.d.ts +0 -58
  186. package/dist/src/security/securityMonitor.d.ts.map +0 -1
  187. package/dist/src/security/securityMonitor.js +0 -108
  188. package/dist/src/security/tokenManager.d.ts +0 -59
  189. package/dist/src/security/tokenManager.d.ts.map +0 -1
  190. package/dist/src/security/tokenManager.js +0 -216
  191. package/dist/src/security/yamlValidator.d.ts +0 -20
  192. package/dist/src/security/yamlValidator.d.ts.map +0 -1
  193. package/dist/src/security/yamlValidator.js +0 -138
  194. package/dist/src/server/ServerSetup.d.ts +0 -31
  195. package/dist/src/server/ServerSetup.d.ts.map +0 -1
  196. package/dist/src/server/ServerSetup.js +0 -79
  197. package/dist/src/server/index.d.ts +0 -7
  198. package/dist/src/server/index.d.ts.map +0 -1
  199. package/dist/src/server/index.js +0 -7
  200. package/dist/src/server/tools/ConfigTools.d.ts +0 -10
  201. package/dist/src/server/tools/ConfigTools.d.ts.map +0 -1
  202. package/dist/src/server/tools/ConfigTools.js +0 -63
  203. package/dist/src/server/tools/MarketplaceTools.d.ts +0 -10
  204. package/dist/src/server/tools/MarketplaceTools.d.ts.map +0 -1
  205. package/dist/src/server/tools/MarketplaceTools.js +0 -92
  206. package/dist/src/server/tools/PersonaTools.d.ts +0 -10
  207. package/dist/src/server/tools/PersonaTools.d.ts.map +0 -1
  208. package/dist/src/server/tools/PersonaTools.js +0 -257
  209. package/dist/src/server/tools/ToolRegistry.d.ts +0 -37
  210. package/dist/src/server/tools/ToolRegistry.d.ts.map +0 -1
  211. package/dist/src/server/tools/ToolRegistry.js +0 -40
  212. package/dist/src/server/tools/UpdateTools.d.ts +0 -10
  213. package/dist/src/server/tools/UpdateTools.d.ts.map +0 -1
  214. package/dist/src/server/tools/UpdateTools.js +0 -64
  215. package/dist/src/server/tools/UserTools.d.ts +0 -10
  216. package/dist/src/server/tools/UserTools.d.ts.map +0 -1
  217. package/dist/src/server/tools/UserTools.js +0 -51
  218. package/dist/src/server/tools/index.d.ts +0 -10
  219. package/dist/src/server/tools/index.d.ts.map +0 -1
  220. package/dist/src/server/tools/index.js +0 -10
  221. package/dist/src/server/types.d.ts +0 -34
  222. package/dist/src/server/types.d.ts.map +0 -1
  223. package/dist/src/server/types.js +0 -5
  224. package/dist/src/tools/debug.d.ts +0 -20
  225. package/dist/src/tools/debug.d.ts.map +0 -1
  226. package/dist/src/tools/debug.js +0 -37
  227. package/dist/src/types/cache.d.ts +0 -8
  228. package/dist/src/types/cache.d.ts.map +0 -1
  229. package/dist/src/types/cache.js +0 -5
  230. package/dist/src/types/index.d.ts +0 -8
  231. package/dist/src/types/index.d.ts.map +0 -1
  232. package/dist/src/types/index.js +0 -8
  233. package/dist/src/types/marketplace.d.ts +0 -23
  234. package/dist/src/types/marketplace.d.ts.map +0 -1
  235. package/dist/src/types/marketplace.js +0 -5
  236. package/dist/src/types/mcp.d.ts +0 -161
  237. package/dist/src/types/mcp.d.ts.map +0 -1
  238. package/dist/src/types/mcp.js +0 -75
  239. package/dist/src/types/persona.d.ts +0 -30
  240. package/dist/src/types/persona.d.ts.map +0 -1
  241. package/dist/src/types/persona.js +0 -5
  242. package/dist/src/update/BackupManager.d.ts +0 -46
  243. package/dist/src/update/BackupManager.d.ts.map +0 -1
  244. package/dist/src/update/BackupManager.js +0 -261
  245. package/dist/src/update/DependencyChecker.d.ts +0 -41
  246. package/dist/src/update/DependencyChecker.d.ts.map +0 -1
  247. package/dist/src/update/DependencyChecker.js +0 -132
  248. package/dist/src/update/RateLimiter.d.ts +0 -80
  249. package/dist/src/update/RateLimiter.d.ts.map +0 -1
  250. package/dist/src/update/RateLimiter.js +0 -172
  251. package/dist/src/update/SignatureVerifier.d.ts +0 -71
  252. package/dist/src/update/SignatureVerifier.d.ts.map +0 -1
  253. package/dist/src/update/SignatureVerifier.js +0 -214
  254. package/dist/src/update/UpdateChecker.d.ts +0 -127
  255. package/dist/src/update/UpdateChecker.d.ts.map +0 -1
  256. package/dist/src/update/UpdateChecker.js +0 -460
  257. package/dist/src/update/UpdateManager.d.ts +0 -41
  258. package/dist/src/update/UpdateManager.d.ts.map +0 -1
  259. package/dist/src/update/UpdateManager.js +0 -260
  260. package/dist/src/update/VersionManager.d.ts +0 -31
  261. package/dist/src/update/VersionManager.d.ts.map +0 -1
  262. package/dist/src/update/VersionManager.js +0 -134
  263. package/dist/src/update/index.d.ts +0 -9
  264. package/dist/src/update/index.d.ts.map +0 -1
  265. package/dist/src/update/index.js +0 -9
  266. package/dist/src/utils/filesystem.d.ts +0 -32
  267. package/dist/src/utils/filesystem.d.ts.map +0 -1
  268. package/dist/src/utils/filesystem.js +0 -73
  269. package/dist/src/utils/git.d.ts +0 -32
  270. package/dist/src/utils/git.d.ts.map +0 -1
  271. package/dist/src/utils/git.js +0 -65
  272. package/dist/src/utils/index.d.ts +0 -7
  273. package/dist/src/utils/index.d.ts.map +0 -1
  274. package/dist/src/utils/index.js +0 -7
  275. package/dist/src/utils/logger.d.ts +0 -45
  276. package/dist/src/utils/logger.d.ts.map +0 -1
  277. package/dist/src/utils/logger.js +0 -91
  278. package/dist/src/utils/version.d.ts +0 -25
  279. package/dist/src/utils/version.d.ts.map +0 -1
  280. package/dist/src/utils/version.js +0 -97
  281. package/dist/test/src/cache/APICache.d.ts +0 -23
  282. package/dist/test/src/cache/APICache.d.ts.map +0 -1
  283. package/dist/test/src/cache/APICache.js +0 -42
  284. package/dist/test/src/cache/index.d.ts +0 -5
  285. package/dist/test/src/cache/index.d.ts.map +0 -1
  286. package/dist/test/src/cache/index.js +0 -5
  287. package/dist/test/src/collection/CollectionBrowser.d.ts +0 -24
  288. package/dist/test/src/collection/CollectionBrowser.d.ts.map +0 -1
  289. package/dist/test/src/collection/CollectionBrowser.js +0 -115
  290. package/dist/test/src/collection/CollectionSearch.d.ts +0 -18
  291. package/dist/test/src/collection/CollectionSearch.d.ts.map +0 -1
  292. package/dist/test/src/collection/CollectionSearch.js +0 -48
  293. package/dist/test/src/collection/GitHubClient.d.ts +0 -22
  294. package/dist/test/src/collection/GitHubClient.d.ts.map +0 -1
  295. package/dist/test/src/collection/GitHubClient.js +0 -114
  296. package/dist/test/src/collection/PersonaDetails.d.ts +0 -22
  297. package/dist/test/src/collection/PersonaDetails.d.ts.map +0 -1
  298. package/dist/test/src/collection/PersonaDetails.js +0 -71
  299. package/dist/test/src/collection/PersonaInstaller.d.ts +0 -26
  300. package/dist/test/src/collection/PersonaInstaller.d.ts.map +0 -1
  301. package/dist/test/src/collection/PersonaInstaller.js +0 -103
  302. package/dist/test/src/collection/PersonaSubmitter.d.ts +0 -19
  303. package/dist/test/src/collection/PersonaSubmitter.d.ts.map +0 -1
  304. package/dist/test/src/collection/PersonaSubmitter.js +0 -57
  305. package/dist/test/src/collection/index.d.ts +0 -10
  306. package/dist/test/src/collection/index.d.ts.map +0 -1
  307. package/dist/test/src/collection/index.js +0 -10
  308. package/dist/test/src/config/constants.d.ts +0 -25
  309. package/dist/test/src/config/constants.d.ts.map +0 -1
  310. package/dist/test/src/config/constants.js +0 -30
  311. package/dist/test/src/config/index.d.ts +0 -6
  312. package/dist/test/src/config/index.d.ts.map +0 -1
  313. package/dist/test/src/config/index.js +0 -6
  314. package/dist/test/src/config/indicator-config.d.ts +0 -107
  315. package/dist/test/src/config/indicator-config.d.ts.map +0 -1
  316. package/dist/test/src/config/indicator-config.js +0 -158
  317. package/dist/test/src/constants/defaultPersonas.d.ts +0 -10
  318. package/dist/test/src/constants/defaultPersonas.d.ts.map +0 -1
  319. package/dist/test/src/constants/defaultPersonas.js +0 -18
  320. package/dist/test/src/constants/limits.d.ts +0 -10
  321. package/dist/test/src/constants/limits.d.ts.map +0 -1
  322. package/dist/test/src/constants/limits.js +0 -13
  323. package/dist/test/src/elements/BaseElement.d.ts +0 -81
  324. package/dist/test/src/elements/BaseElement.d.ts.map +0 -1
  325. package/dist/test/src/elements/BaseElement.js +0 -381
  326. package/dist/test/src/elements/FeedbackProcessor.d.ts +0 -57
  327. package/dist/test/src/elements/FeedbackProcessor.d.ts.map +0 -1
  328. package/dist/test/src/elements/FeedbackProcessor.js +0 -418
  329. package/dist/test/src/elements/agents/Agent.d.ts +0 -145
  330. package/dist/test/src/elements/agents/Agent.d.ts.map +0 -1
  331. package/dist/test/src/elements/agents/Agent.js +0 -848
  332. package/dist/test/src/elements/agents/AgentManager.d.ts +0 -125
  333. package/dist/test/src/elements/agents/AgentManager.d.ts.map +0 -1
  334. package/dist/test/src/elements/agents/AgentManager.js +0 -608
  335. package/dist/test/src/elements/agents/constants.d.ts +0 -42
  336. package/dist/test/src/elements/agents/constants.d.ts.map +0 -1
  337. package/dist/test/src/elements/agents/constants.js +0 -45
  338. package/dist/test/src/elements/agents/goalTemplates.d.ts +0 -44
  339. package/dist/test/src/elements/agents/goalTemplates.d.ts.map +0 -1
  340. package/dist/test/src/elements/agents/goalTemplates.js +0 -297
  341. package/dist/test/src/elements/agents/index.d.ts +0 -8
  342. package/dist/test/src/elements/agents/index.d.ts.map +0 -1
  343. package/dist/test/src/elements/agents/index.js +0 -8
  344. package/dist/test/src/elements/agents/ruleEngineConfig.d.ts +0 -76
  345. package/dist/test/src/elements/agents/ruleEngineConfig.d.ts.map +0 -1
  346. package/dist/test/src/elements/agents/ruleEngineConfig.js +0 -143
  347. package/dist/test/src/elements/agents/types.d.ts +0 -97
  348. package/dist/test/src/elements/agents/types.d.ts.map +0 -1
  349. package/dist/test/src/elements/agents/types.js +0 -5
  350. package/dist/test/src/elements/index.d.ts +0 -6
  351. package/dist/test/src/elements/index.d.ts.map +0 -1
  352. package/dist/test/src/elements/index.js +0 -6
  353. package/dist/test/src/elements/memories/Memory.d.ts +0 -110
  354. package/dist/test/src/elements/memories/Memory.d.ts.map +0 -1
  355. package/dist/test/src/elements/memories/Memory.js +0 -470
  356. package/dist/test/src/elements/memories/MemoryManager.d.ts +0 -86
  357. package/dist/test/src/elements/memories/MemoryManager.d.ts.map +0 -1
  358. package/dist/test/src/elements/memories/MemoryManager.js +0 -435
  359. package/dist/test/src/elements/memories/constants.d.ts +0 -42
  360. package/dist/test/src/elements/memories/constants.d.ts.map +0 -1
  361. package/dist/test/src/elements/memories/constants.js +0 -49
  362. package/dist/test/src/elements/memories/index.d.ts +0 -6
  363. package/dist/test/src/elements/memories/index.d.ts.map +0 -1
  364. package/dist/test/src/elements/memories/index.js +0 -6
  365. package/dist/test/src/elements/skills/Skill.d.ts +0 -109
  366. package/dist/test/src/elements/skills/Skill.d.ts.map +0 -1
  367. package/dist/test/src/elements/skills/Skill.js +0 -381
  368. package/dist/test/src/elements/templates/Template.d.ts +0 -138
  369. package/dist/test/src/elements/templates/Template.d.ts.map +0 -1
  370. package/dist/test/src/elements/templates/Template.js +0 -673
  371. package/dist/test/src/elements/templates/TemplateManager.d.ts +0 -104
  372. package/dist/test/src/elements/templates/TemplateManager.d.ts.map +0 -1
  373. package/dist/test/src/elements/templates/TemplateManager.js +0 -496
  374. package/dist/test/src/elements/templates/index.d.ts +0 -6
  375. package/dist/test/src/elements/templates/index.d.ts.map +0 -1
  376. package/dist/test/src/elements/templates/index.js +0 -6
  377. package/dist/test/src/errors/SecurityError.d.ts +0 -29
  378. package/dist/test/src/errors/SecurityError.d.ts.map +0 -1
  379. package/dist/test/src/errors/SecurityError.js +0 -47
  380. package/dist/test/src/errors/index.d.ts +0 -2
  381. package/dist/test/src/errors/index.d.ts.map +0 -1
  382. package/dist/test/src/errors/index.js +0 -2
  383. package/dist/test/src/index.barrel.d.ts +0 -21
  384. package/dist/test/src/index.barrel.d.ts.map +0 -1
  385. package/dist/test/src/index.barrel.js +0 -31
  386. package/dist/test/src/index.d.ts +0 -223
  387. package/dist/test/src/index.d.ts.map +0 -1
  388. package/dist/test/src/index.js +0 -1594
  389. package/dist/test/src/marketplace/GitHubClient.d.ts +0 -22
  390. package/dist/test/src/marketplace/GitHubClient.d.ts.map +0 -1
  391. package/dist/test/src/marketplace/GitHubClient.js +0 -112
  392. package/dist/test/src/marketplace/MarketplaceBrowser.d.ts +0 -21
  393. package/dist/test/src/marketplace/MarketplaceBrowser.d.ts.map +0 -1
  394. package/dist/test/src/marketplace/MarketplaceBrowser.js +0 -45
  395. package/dist/test/src/marketplace/MarketplaceSearch.d.ts +0 -18
  396. package/dist/test/src/marketplace/MarketplaceSearch.d.ts.map +0 -1
  397. package/dist/test/src/marketplace/MarketplaceSearch.js +0 -36
  398. package/dist/test/src/marketplace/PersonaDetails.d.ts +0 -22
  399. package/dist/test/src/marketplace/PersonaDetails.d.ts.map +0 -1
  400. package/dist/test/src/marketplace/PersonaDetails.js +0 -71
  401. package/dist/test/src/marketplace/PersonaInstaller.d.ts +0 -25
  402. package/dist/test/src/marketplace/PersonaInstaller.d.ts.map +0 -1
  403. package/dist/test/src/marketplace/PersonaInstaller.js +0 -100
  404. package/dist/test/src/marketplace/PersonaSubmitter.d.ts +0 -19
  405. package/dist/test/src/marketplace/PersonaSubmitter.d.ts.map +0 -1
  406. package/dist/test/src/marketplace/PersonaSubmitter.js +0 -57
  407. package/dist/test/src/marketplace/index.d.ts +0 -10
  408. package/dist/test/src/marketplace/index.d.ts.map +0 -1
  409. package/dist/test/src/marketplace/index.js +0 -10
  410. package/dist/test/src/persona/PersonaElement.d.ts +0 -64
  411. package/dist/test/src/persona/PersonaElement.d.ts.map +0 -1
  412. package/dist/test/src/persona/PersonaElement.js +0 -223
  413. package/dist/test/src/persona/PersonaElementManager.d.ts +0 -97
  414. package/dist/test/src/persona/PersonaElementManager.d.ts.map +0 -1
  415. package/dist/test/src/persona/PersonaElementManager.js +0 -342
  416. package/dist/test/src/persona/PersonaLoader.d.ts +0 -34
  417. package/dist/test/src/persona/PersonaLoader.d.ts.map +0 -1
  418. package/dist/test/src/persona/PersonaLoader.js +0 -145
  419. package/dist/test/src/persona/PersonaManager.d.ts +0 -112
  420. package/dist/test/src/persona/PersonaManager.d.ts.map +0 -1
  421. package/dist/test/src/persona/PersonaManager.js +0 -341
  422. package/dist/test/src/persona/PersonaValidator.d.ts +0 -33
  423. package/dist/test/src/persona/PersonaValidator.d.ts.map +0 -1
  424. package/dist/test/src/persona/PersonaValidator.js +0 -157
  425. package/dist/test/src/persona/export-import/PersonaExporter.d.ts +0 -43
  426. package/dist/test/src/persona/export-import/PersonaExporter.d.ts.map +0 -1
  427. package/dist/test/src/persona/export-import/PersonaExporter.js +0 -99
  428. package/dist/test/src/persona/export-import/PersonaImporter.d.ts +0 -65
  429. package/dist/test/src/persona/export-import/PersonaImporter.d.ts.map +0 -1
  430. package/dist/test/src/persona/export-import/PersonaImporter.js +0 -315
  431. package/dist/test/src/persona/export-import/PersonaSharer.d.ts +0 -60
  432. package/dist/test/src/persona/export-import/PersonaSharer.d.ts.map +0 -1
  433. package/dist/test/src/persona/export-import/PersonaSharer.js +0 -502
  434. package/dist/test/src/persona/export-import/index.d.ts +0 -10
  435. package/dist/test/src/persona/export-import/index.d.ts.map +0 -1
  436. package/dist/test/src/persona/export-import/index.js +0 -7
  437. package/dist/test/src/persona/index.d.ts +0 -7
  438. package/dist/test/src/persona/index.d.ts.map +0 -1
  439. package/dist/test/src/persona/index.js +0 -7
  440. package/dist/test/src/portfolio/MigrationManager.d.ts +0 -44
  441. package/dist/test/src/portfolio/MigrationManager.d.ts.map +0 -1
  442. package/dist/test/src/portfolio/MigrationManager.js +0 -163
  443. package/dist/test/src/portfolio/PortfolioManager.d.ts +0 -54
  444. package/dist/test/src/portfolio/PortfolioManager.d.ts.map +0 -1
  445. package/dist/test/src/portfolio/PortfolioManager.js +0 -224
  446. package/dist/test/src/portfolio/types.d.ts +0 -18
  447. package/dist/test/src/portfolio/types.d.ts.map +0 -1
  448. package/dist/test/src/portfolio/types.js +0 -13
  449. package/dist/test/src/security/InputValidator.d.ts +0 -80
  450. package/dist/test/src/security/InputValidator.d.ts.map +0 -1
  451. package/dist/test/src/security/InputValidator.js +0 -436
  452. package/dist/test/src/security/audit/SecurityAuditor.d.ts +0 -44
  453. package/dist/test/src/security/audit/SecurityAuditor.d.ts.map +0 -1
  454. package/dist/test/src/security/audit/SecurityAuditor.js +0 -274
  455. package/dist/test/src/security/audit/config/suppressions.d.ts +0 -34
  456. package/dist/test/src/security/audit/config/suppressions.d.ts.map +0 -1
  457. package/dist/test/src/security/audit/config/suppressions.js +0 -575
  458. package/dist/test/src/security/audit/index.d.ts +0 -14
  459. package/dist/test/src/security/audit/index.d.ts.map +0 -1
  460. package/dist/test/src/security/audit/index.js +0 -15
  461. package/dist/test/src/security/audit/reporters/ConsoleReporter.d.ts +0 -46
  462. package/dist/test/src/security/audit/reporters/ConsoleReporter.d.ts.map +0 -1
  463. package/dist/test/src/security/audit/reporters/ConsoleReporter.js +0 -174
  464. package/dist/test/src/security/audit/reporters/JsonReporter.d.ts +0 -13
  465. package/dist/test/src/security/audit/reporters/JsonReporter.d.ts.map +0 -1
  466. package/dist/test/src/security/audit/reporters/JsonReporter.js +0 -25
  467. package/dist/test/src/security/audit/reporters/MarkdownReporter.d.ts +0 -13
  468. package/dist/test/src/security/audit/reporters/MarkdownReporter.d.ts.map +0 -1
  469. package/dist/test/src/security/audit/reporters/MarkdownReporter.js +0 -79
  470. package/dist/test/src/security/audit/rules/SecurityRules.d.ts +0 -20
  471. package/dist/test/src/security/audit/rules/SecurityRules.d.ts.map +0 -1
  472. package/dist/test/src/security/audit/rules/SecurityRules.js +0 -244
  473. package/dist/test/src/security/audit/scanners/CodeScanner.d.ts +0 -47
  474. package/dist/test/src/security/audit/scanners/CodeScanner.d.ts.map +0 -1
  475. package/dist/test/src/security/audit/scanners/CodeScanner.js +0 -174
  476. package/dist/test/src/security/audit/scanners/ConfigurationScanner.d.ts +0 -13
  477. package/dist/test/src/security/audit/scanners/ConfigurationScanner.d.ts.map +0 -1
  478. package/dist/test/src/security/audit/scanners/ConfigurationScanner.js +0 -22
  479. package/dist/test/src/security/audit/scanners/DependencyScanner.d.ts +0 -13
  480. package/dist/test/src/security/audit/scanners/DependencyScanner.d.ts.map +0 -1
  481. package/dist/test/src/security/audit/scanners/DependencyScanner.js +0 -22
  482. package/dist/test/src/security/audit/types.d.ts +0 -94
  483. package/dist/test/src/security/audit/types.d.ts.map +0 -1
  484. package/dist/test/src/security/audit/types.js +0 -6
  485. package/dist/test/src/security/commandValidator.d.ts +0 -7
  486. package/dist/test/src/security/commandValidator.d.ts.map +0 -1
  487. package/dist/test/src/security/commandValidator.js +0 -78
  488. package/dist/test/src/security/constants.d.ts +0 -24
  489. package/dist/test/src/security/constants.d.ts.map +0 -1
  490. package/dist/test/src/security/constants.js +0 -26
  491. package/dist/test/src/security/contentValidator.d.ts +0 -47
  492. package/dist/test/src/security/contentValidator.d.ts.map +0 -1
  493. package/dist/test/src/security/contentValidator.js +0 -301
  494. package/dist/test/src/security/errors.d.ts +0 -14
  495. package/dist/test/src/security/errors.d.ts.map +0 -1
  496. package/dist/test/src/security/errors.js +0 -28
  497. package/dist/test/src/security/fileLockManager.d.ts +0 -70
  498. package/dist/test/src/security/fileLockManager.d.ts.map +0 -1
  499. package/dist/test/src/security/fileLockManager.js +0 -187
  500. package/dist/test/src/security/index.d.ts +0 -12
  501. package/dist/test/src/security/index.d.ts.map +0 -1
  502. package/dist/test/src/security/index.js +0 -14
  503. package/dist/test/src/security/pathValidator.d.ts +0 -9
  504. package/dist/test/src/security/pathValidator.d.ts.map +0 -1
  505. package/dist/test/src/security/pathValidator.js +0 -98
  506. package/dist/test/src/security/regexValidator.d.ts +0 -59
  507. package/dist/test/src/security/regexValidator.d.ts.map +0 -1
  508. package/dist/test/src/security/regexValidator.js +0 -214
  509. package/dist/test/src/security/secureYamlParser.d.ts +0 -46
  510. package/dist/test/src/security/secureYamlParser.d.ts.map +0 -1
  511. package/dist/test/src/security/secureYamlParser.js +0 -203
  512. package/dist/test/src/security/securityMonitor.d.ts +0 -58
  513. package/dist/test/src/security/securityMonitor.d.ts.map +0 -1
  514. package/dist/test/src/security/securityMonitor.js +0 -108
  515. package/dist/test/src/security/tokenManager.d.ts +0 -85
  516. package/dist/test/src/security/tokenManager.d.ts.map +0 -1
  517. package/dist/test/src/security/tokenManager.js +0 -286
  518. package/dist/test/src/security/validators/unicodeValidator.d.ts +0 -97
  519. package/dist/test/src/security/validators/unicodeValidator.d.ts.map +0 -1
  520. package/dist/test/src/security/validators/unicodeValidator.js +0 -312
  521. package/dist/test/src/security/yamlValidator.d.ts +0 -21
  522. package/dist/test/src/security/yamlValidator.d.ts.map +0 -1
  523. package/dist/test/src/security/yamlValidator.js +0 -164
  524. package/dist/test/src/server/ServerSetup.d.ts +0 -35
  525. package/dist/test/src/server/ServerSetup.d.ts.map +0 -1
  526. package/dist/test/src/server/ServerSetup.js +0 -116
  527. package/dist/test/src/server/index.d.ts +0 -7
  528. package/dist/test/src/server/index.d.ts.map +0 -1
  529. package/dist/test/src/server/index.js +0 -7
  530. package/dist/test/src/server/startup.d.ts +0 -31
  531. package/dist/test/src/server/startup.d.ts.map +0 -1
  532. package/dist/test/src/server/startup.js +0 -67
  533. package/dist/test/src/server/tools/CollectionTools.d.ts +0 -10
  534. package/dist/test/src/server/tools/CollectionTools.d.ts.map +0 -1
  535. package/dist/test/src/server/tools/CollectionTools.js +0 -96
  536. package/dist/test/src/server/tools/ConfigTools.d.ts +0 -10
  537. package/dist/test/src/server/tools/ConfigTools.d.ts.map +0 -1
  538. package/dist/test/src/server/tools/ConfigTools.js +0 -63
  539. package/dist/test/src/server/tools/MarketplaceTools.d.ts +0 -10
  540. package/dist/test/src/server/tools/MarketplaceTools.d.ts.map +0 -1
  541. package/dist/test/src/server/tools/MarketplaceTools.js +0 -92
  542. package/dist/test/src/server/tools/PersonaTools.d.ts +0 -10
  543. package/dist/test/src/server/tools/PersonaTools.d.ts.map +0 -1
  544. package/dist/test/src/server/tools/PersonaTools.js +0 -257
  545. package/dist/test/src/server/tools/ToolRegistry.d.ts +0 -37
  546. package/dist/test/src/server/tools/ToolRegistry.d.ts.map +0 -1
  547. package/dist/test/src/server/tools/ToolRegistry.js +0 -40
  548. package/dist/test/src/server/tools/UpdateTools.d.ts +0 -10
  549. package/dist/test/src/server/tools/UpdateTools.d.ts.map +0 -1
  550. package/dist/test/src/server/tools/UpdateTools.js +0 -64
  551. package/dist/test/src/server/tools/UserTools.d.ts +0 -10
  552. package/dist/test/src/server/tools/UserTools.d.ts.map +0 -1
  553. package/dist/test/src/server/tools/UserTools.js +0 -51
  554. package/dist/test/src/server/tools/index.d.ts +0 -10
  555. package/dist/test/src/server/tools/index.d.ts.map +0 -1
  556. package/dist/test/src/server/tools/index.js +0 -10
  557. package/dist/test/src/server/types.d.ts +0 -34
  558. package/dist/test/src/server/types.d.ts.map +0 -1
  559. package/dist/test/src/server/types.js +0 -5
  560. package/dist/test/src/tools/debug.d.ts +0 -20
  561. package/dist/test/src/tools/debug.d.ts.map +0 -1
  562. package/dist/test/src/tools/debug.js +0 -37
  563. package/dist/test/src/types/cache.d.ts +0 -8
  564. package/dist/test/src/types/cache.d.ts.map +0 -1
  565. package/dist/test/src/types/cache.js +0 -5
  566. package/dist/test/src/types/collection.d.ts +0 -23
  567. package/dist/test/src/types/collection.d.ts.map +0 -1
  568. package/dist/test/src/types/collection.js +0 -5
  569. package/dist/test/src/types/elements/IElement.d.ts +0 -123
  570. package/dist/test/src/types/elements/IElement.d.ts.map +0 -1
  571. package/dist/test/src/types/elements/IElement.js +0 -30
  572. package/dist/test/src/types/elements/IElementManager.d.ts +0 -65
  573. package/dist/test/src/types/elements/IElementManager.d.ts.map +0 -1
  574. package/dist/test/src/types/elements/IElementManager.js +0 -6
  575. package/dist/test/src/types/elements/IRatingManager.d.ts +0 -109
  576. package/dist/test/src/types/elements/IRatingManager.d.ts.map +0 -1
  577. package/dist/test/src/types/elements/IRatingManager.js +0 -6
  578. package/dist/test/src/types/elements/IReferenceResolver.d.ts +0 -52
  579. package/dist/test/src/types/elements/IReferenceResolver.d.ts.map +0 -1
  580. package/dist/test/src/types/elements/IReferenceResolver.js +0 -6
  581. package/dist/test/src/types/elements/RatingBreakdowns.d.ts +0 -49
  582. package/dist/test/src/types/elements/RatingBreakdowns.d.ts.map +0 -1
  583. package/dist/test/src/types/elements/RatingBreakdowns.js +0 -6
  584. package/dist/test/src/types/elements/index.d.ts +0 -9
  585. package/dist/test/src/types/elements/index.d.ts.map +0 -1
  586. package/dist/test/src/types/elements/index.js +0 -11
  587. package/dist/test/src/types/index.d.ts +0 -9
  588. package/dist/test/src/types/index.d.ts.map +0 -1
  589. package/dist/test/src/types/index.js +0 -9
  590. package/dist/test/src/types/marketplace.d.ts +0 -23
  591. package/dist/test/src/types/marketplace.d.ts.map +0 -1
  592. package/dist/test/src/types/marketplace.js +0 -5
  593. package/dist/test/src/types/mcp.d.ts +0 -84
  594. package/dist/test/src/types/mcp.d.ts.map +0 -1
  595. package/dist/test/src/types/mcp.js +0 -80
  596. package/dist/test/src/types/persona.d.ts +0 -30
  597. package/dist/test/src/types/persona.d.ts.map +0 -1
  598. package/dist/test/src/types/persona.js +0 -5
  599. package/dist/test/src/update/BackupManager.d.ts +0 -46
  600. package/dist/test/src/update/BackupManager.d.ts.map +0 -1
  601. package/dist/test/src/update/BackupManager.js +0 -261
  602. package/dist/test/src/update/DependencyChecker.d.ts +0 -41
  603. package/dist/test/src/update/DependencyChecker.d.ts.map +0 -1
  604. package/dist/test/src/update/DependencyChecker.js +0 -132
  605. package/dist/test/src/update/RateLimiter.d.ts +0 -80
  606. package/dist/test/src/update/RateLimiter.d.ts.map +0 -1
  607. package/dist/test/src/update/RateLimiter.js +0 -172
  608. package/dist/test/src/update/SignatureVerifier.d.ts +0 -71
  609. package/dist/test/src/update/SignatureVerifier.d.ts.map +0 -1
  610. package/dist/test/src/update/SignatureVerifier.js +0 -214
  611. package/dist/test/src/update/UpdateChecker.d.ts +0 -127
  612. package/dist/test/src/update/UpdateChecker.d.ts.map +0 -1
  613. package/dist/test/src/update/UpdateChecker.js +0 -469
  614. package/dist/test/src/update/UpdateManager.d.ts +0 -41
  615. package/dist/test/src/update/UpdateManager.d.ts.map +0 -1
  616. package/dist/test/src/update/UpdateManager.js +0 -260
  617. package/dist/test/src/update/VersionManager.d.ts +0 -31
  618. package/dist/test/src/update/VersionManager.d.ts.map +0 -1
  619. package/dist/test/src/update/VersionManager.js +0 -134
  620. package/dist/test/src/update/index.d.ts +0 -9
  621. package/dist/test/src/update/index.d.ts.map +0 -1
  622. package/dist/test/src/update/index.js +0 -9
  623. package/dist/test/src/utils/filesystem.d.ts +0 -29
  624. package/dist/test/src/utils/filesystem.d.ts.map +0 -1
  625. package/dist/test/src/utils/filesystem.js +0 -94
  626. package/dist/test/src/utils/git.d.ts +0 -32
  627. package/dist/test/src/utils/git.d.ts.map +0 -1
  628. package/dist/test/src/utils/git.js +0 -65
  629. package/dist/test/src/utils/index.d.ts +0 -7
  630. package/dist/test/src/utils/index.d.ts.map +0 -1
  631. package/dist/test/src/utils/index.js +0 -7
  632. package/dist/test/src/utils/logger.d.ts +0 -45
  633. package/dist/test/src/utils/logger.d.ts.map +0 -1
  634. package/dist/test/src/utils/logger.js +0 -91
  635. package/dist/test/src/utils/version.d.ts +0 -25
  636. package/dist/test/src/utils/version.d.ts.map +0 -1
  637. package/dist/test/src/utils/version.js +0 -97
  638. package/dist/test/test/__tests__/integration/helpers/file-utils.d.ts +0 -33
  639. package/dist/test/test/__tests__/integration/helpers/file-utils.d.ts.map +0 -1
  640. package/dist/test/test/__tests__/integration/helpers/file-utils.js +0 -83
  641. package/dist/test/test/__tests__/integration/helpers/test-fixtures.d.ts +0 -26
  642. package/dist/test/test/__tests__/integration/helpers/test-fixtures.d.ts.map +0 -1
  643. package/dist/test/test/__tests__/integration/helpers/test-fixtures.js +0 -95
  644. package/dist/test/test/__tests__/integration/helpers/test-server.d.ts +0 -26
  645. package/dist/test/test/__tests__/integration/helpers/test-server.d.ts.map +0 -1
  646. package/dist/test/test/__tests__/integration/helpers/test-server.js +0 -41
  647. package/dist/test/test/__tests__/integration/setup.d.ts +0 -8
  648. package/dist/test/test/__tests__/integration/setup.d.ts.map +0 -1
  649. package/dist/test/test/__tests__/integration/setup.js +0 -31
  650. package/dist/test/test/__tests__/integration/teardown.d.ts +0 -5
  651. package/dist/test/test/__tests__/integration/teardown.d.ts.map +0 -1
  652. package/dist/test/test/__tests__/integration/teardown.js +0 -23
  653. package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.d.ts +0 -34
  654. package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.d.ts.map +0 -1
  655. package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.js +0 -224
  656. package/dist/test/test/__tests__/security/framework/SecurityTestFramework.d.ts +0 -89
  657. package/dist/test/test/__tests__/security/framework/SecurityTestFramework.d.ts.map +0 -1
  658. package/dist/test/test/__tests__/security/framework/SecurityTestFramework.js +0 -543
  659. package/dist/test/test/__tests__/security/index.d.ts +0 -46
  660. package/dist/test/test/__tests__/security/index.d.ts.map +0 -1
  661. package/dist/test/test/__tests__/security/index.js +0 -98
  662. package/dist/test/test/__tests__/security/setup.d.ts +0 -3
  663. package/dist/test/test/__tests__/security/setup.d.ts.map +0 -1
  664. package/dist/test/test/__tests__/security/setup.js +0 -23
  665. package/dist/types/marketplace.d.ts +0 -23
  666. package/dist/types/marketplace.d.ts.map +0 -1
  667. package/dist/types/marketplace.js +0 -5
@@ -1,85 +0,0 @@
1
- /**
2
- * EnsembleManager - Implementation of IElementManager for Ensemble elements
3
- * Handles CRUD operations and lifecycle management for ensembles
4
- *
5
- * SECURITY MEASURES (Following PersonaElementManager patterns):
6
- * 1. CRITICAL: Uses FileLockManager for atomic file operations to prevent race conditions
7
- * 2. HIGH: SecureYamlParser for YAML content validation to prevent injection attacks
8
- * 3. MEDIUM: All user inputs validated and sanitized
9
- * 4. MEDIUM: Audit logging for all security operations
10
- * 5. Path validation to prevent directory traversal
11
- */
12
- import { IElementManager } from '../../types/elements/index.js';
13
- import { ElementValidationResult } from '../../types/elements/IElement.js';
14
- import { Ensemble } from './Ensemble.js';
15
- import { ElementType } from '../../portfolio/types.js';
16
- export declare class EnsembleManager implements IElementManager<Ensemble> {
17
- private baseDir;
18
- constructor(baseDir: string);
19
- /**
20
- * Load an ensemble from file
21
- * SECURITY FIX: Uses FileLockManager.atomicReadFile() to prevent race conditions
22
- */
23
- load(filePath: string): Promise<Ensemble>;
24
- /**
25
- * Save an ensemble to file
26
- * SECURITY FIX: Uses FileLockManager.atomicWriteFile() for atomic writes
27
- */
28
- save(ensemble: Ensemble, filePath: string): Promise<void>;
29
- /**
30
- * List all ensembles in the directory
31
- */
32
- list(): Promise<Ensemble[]>;
33
- /**
34
- * Find an ensemble matching a predicate
35
- */
36
- find(predicate: (ensemble: Ensemble) => boolean): Promise<Ensemble | undefined>;
37
- /**
38
- * Validate an ensemble
39
- */
40
- validate(ensemble: Ensemble): ElementValidationResult;
41
- /**
42
- * Parse ensemble file content
43
- * SECURITY FIX: Uses SecureYamlParser to prevent YAML injection attacks
44
- */
45
- private parseEnsembleFile;
46
- /**
47
- * Convert ensemble data to YAML safely
48
- * SECURITY FIX: Uses yaml.dump with security options
49
- */
50
- private toYamlSafe;
51
- /**
52
- * Import an ensemble from JSON
53
- * SECURITY: Full validation of imported data
54
- */
55
- importElement(jsonData: string, format?: 'json' | 'yaml' | 'markdown'): Promise<Ensemble>;
56
- /**
57
- * Export an ensemble to JSON
58
- */
59
- exportElement(ensemble: Ensemble): Promise<string>;
60
- /**
61
- * Delete an ensemble file
62
- */
63
- delete(filePath: string): Promise<void>;
64
- /**
65
- * Check if an ensemble file exists
66
- */
67
- exists(filePath: string): Promise<boolean>;
68
- /**
69
- * Find multiple ensembles matching a predicate
70
- */
71
- findMany(predicate: (ensemble: Ensemble) => boolean): Promise<Ensemble[]>;
72
- /**
73
- * Validate a file path
74
- */
75
- validatePath(filePath: string): boolean;
76
- /**
77
- * Get the element type this manager handles
78
- */
79
- getElementType(): ElementType;
80
- /**
81
- * Get the file extension for ensemble files
82
- */
83
- getFileExtension(): string;
84
- }
85
- //# sourceMappingURL=EnsembleManager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EnsembleManager.d.ts","sourceRoot":"","sources":["../../../src/elements/ensembles/EnsembleManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAO3E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAKvD,qBAAa,eAAgB,YAAW,eAAe,CAAC,QAAQ,CAAC;IACnD,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IASnC;;;OAGG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAwD/C;;;OAGG;IACG,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8C/D;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAiCjC;;OAEG;IACG,IAAI,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IAKrF;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,uBAAuB;IAIrD;;;OAGG;YACW,iBAAiB;IA4E/B;;;OAGG;IACH,OAAO,CAAC,UAAU;IAelB;;;OAGG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;IAsD/F;;OAEG;IACG,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAWxD;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB7C;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBhD;;OAEG;IACG,QAAQ,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAK/E;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIvC;;OAEG;IACH,cAAc,IAAI,WAAW;IAI7B;;OAEG;IACH,gBAAgB,IAAI,MAAM;CAG3B"}
@@ -1,378 +0,0 @@
1
- /**
2
- * EnsembleManager - Implementation of IElementManager for Ensemble elements
3
- * Handles CRUD operations and lifecycle management for ensembles
4
- *
5
- * SECURITY MEASURES (Following PersonaElementManager patterns):
6
- * 1. CRITICAL: Uses FileLockManager for atomic file operations to prevent race conditions
7
- * 2. HIGH: SecureYamlParser for YAML content validation to prevent injection attacks
8
- * 3. MEDIUM: All user inputs validated and sanitized
9
- * 4. MEDIUM: Audit logging for all security operations
10
- * 5. Path validation to prevent directory traversal
11
- */
12
- import { FileLockManager } from '../../security/fileLockManager.js';
13
- import { SecureYamlParser } from '../../security/secureYamlParser.js';
14
- import { SecurityMonitor } from '../../security/securityMonitor.js';
15
- import { validatePath } from '../../security/InputValidator.js';
16
- import { logger } from '../../utils/logger.js';
17
- import { Ensemble } from './Ensemble.js';
18
- import { ElementType } from '../../portfolio/types.js';
19
- import * as path from 'path';
20
- import * as fs from 'fs/promises';
21
- import * as yaml from 'js-yaml';
22
- export class EnsembleManager {
23
- baseDir;
24
- constructor(baseDir) {
25
- this.baseDir = baseDir;
26
- // Validate base directory
27
- const validatedPath = validatePath(baseDir);
28
- if (!validatedPath) {
29
- throw new Error('Invalid base directory path');
30
- }
31
- this.baseDir = validatedPath;
32
- }
33
- /**
34
- * Load an ensemble from file
35
- * SECURITY FIX: Uses FileLockManager.atomicReadFile() to prevent race conditions
36
- */
37
- async load(filePath) {
38
- // SECURITY: Validate file path
39
- const validatedPath = validatePath(filePath);
40
- if (!validatedPath) {
41
- throw new Error('Invalid file path');
42
- }
43
- const fullPath = path.isAbsolute(validatedPath)
44
- ? validatedPath
45
- : path.join(this.baseDir, validatedPath);
46
- try {
47
- // CRITICAL FIX: Use atomic file read to prevent race conditions
48
- // Previously: const content = await fs.readFile(fullPath, 'utf-8');
49
- // Now: Uses FileLockManager with proper encoding object format
50
- const content = await FileLockManager.atomicReadFile(fullPath, { encoding: 'utf-8' });
51
- // Parse ensemble data
52
- const ensembleData = await this.parseEnsembleFile(content, fullPath);
53
- // Create ensemble instance
54
- const ensemble = new Ensemble(ensembleData.metadata);
55
- // Add elements if present
56
- if (ensembleData.elements) {
57
- for (const element of ensembleData.elements) {
58
- ensemble.addElement(element.elementId, element.elementType, element.role, {
59
- priority: element.priority,
60
- activationCondition: element.activationCondition,
61
- dependencies: element.dependencies
62
- });
63
- }
64
- }
65
- // Restore shared context if present
66
- if (ensembleData.sharedContext) {
67
- ensemble.deserialize(JSON.stringify({
68
- ...ensembleData,
69
- elements: Array.from(ensemble.getElements().entries())
70
- }));
71
- }
72
- logger.info(`Loaded ensemble from ${fullPath}`);
73
- return ensemble;
74
- }
75
- catch (error) {
76
- logger.error(`Failed to load ensemble from ${fullPath}:`, error);
77
- throw error;
78
- }
79
- }
80
- /**
81
- * Save an ensemble to file
82
- * SECURITY FIX: Uses FileLockManager.atomicWriteFile() for atomic writes
83
- */
84
- async save(ensemble, filePath) {
85
- // SECURITY: Validate file path
86
- const validatedPath = validatePath(filePath);
87
- if (!validatedPath) {
88
- throw new Error('Invalid file path');
89
- }
90
- const fullPath = path.isAbsolute(validatedPath)
91
- ? validatedPath
92
- : path.join(this.baseDir, validatedPath);
93
- try {
94
- // Ensure directory exists
95
- await fs.mkdir(path.dirname(fullPath), { recursive: true });
96
- // Prepare ensemble data
97
- const ensembleData = {
98
- metadata: ensemble.metadata,
99
- elements: Array.from(ensemble.getElements().values()),
100
- extensions: ensemble.extensions
101
- };
102
- // Convert to YAML with security measures
103
- const yamlContent = this.toYamlSafe(ensembleData);
104
- // CRITICAL FIX: Use atomic file write to prevent race conditions
105
- // Previously: await fs.writeFile(fullPath, yamlContent, 'utf-8');
106
- // Now: Uses FileLockManager for atomic operation
107
- await FileLockManager.atomicWriteFile(fullPath, yamlContent, { encoding: 'utf-8' });
108
- // Log security event
109
- SecurityMonitor.logSecurityEvent({
110
- type: 'ENSEMBLE_SAVED',
111
- severity: 'LOW',
112
- source: 'EnsembleManager.save',
113
- details: `Ensemble saved to ${fullPath}`
114
- });
115
- logger.info(`Saved ensemble to ${fullPath}`);
116
- }
117
- catch (error) {
118
- logger.error(`Failed to save ensemble to ${fullPath}:`, error);
119
- throw error;
120
- }
121
- }
122
- /**
123
- * List all ensembles in the directory
124
- */
125
- async list() {
126
- try {
127
- const files = await fs.readdir(this.baseDir);
128
- const ensembles = [];
129
- // Process files in parallel with limit
130
- const BATCH_SIZE = 10;
131
- for (let i = 0; i < files.length; i += BATCH_SIZE) {
132
- const batch = files.slice(i, i + BATCH_SIZE);
133
- const batchPromises = batch
134
- .filter(file => file.endsWith('.md') || file.endsWith('.yaml') || file.endsWith('.yml'))
135
- .map(file => this.load(file).catch(error => {
136
- logger.warn(`Failed to load ensemble ${file}:`, error);
137
- return null;
138
- }));
139
- const batchResults = await Promise.all(batchPromises);
140
- ensembles.push(...batchResults.filter((e) => e !== null));
141
- }
142
- return ensembles;
143
- }
144
- catch (error) {
145
- // Handle missing directory gracefully with type-safe check
146
- if (error && typeof error === 'object' && 'code' in error && error.code === 'ENOENT') {
147
- logger.debug('Ensembles directory does not exist yet, returning empty array');
148
- return [];
149
- }
150
- logger.error('Failed to list ensembles:', error);
151
- return [];
152
- }
153
- }
154
- /**
155
- * Find an ensemble matching a predicate
156
- */
157
- async find(predicate) {
158
- const ensembles = await this.list();
159
- return ensembles.find(predicate);
160
- }
161
- /**
162
- * Validate an ensemble
163
- */
164
- validate(ensemble) {
165
- return ensemble.validate();
166
- }
167
- /**
168
- * Parse ensemble file content
169
- * SECURITY FIX: Uses SecureYamlParser to prevent YAML injection attacks
170
- */
171
- async parseEnsembleFile(content, filePath) {
172
- try {
173
- // Try to parse as YAML frontmatter (markdown file)
174
- if (filePath.endsWith('.md')) {
175
- const match = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
176
- if (match) {
177
- // HIGH SEVERITY FIX: Use SecureYamlParser to prevent YAML injection
178
- // Previously: Used unsafe YAML parsing without validation
179
- // Now: Uses SecureYamlParser which validates content
180
- const parsed = SecureYamlParser.parse(match[1], {
181
- maxYamlSize: 64 * 1024, // 64KB limit
182
- validateContent: true
183
- });
184
- // Log security event
185
- SecurityMonitor.logSecurityEvent({
186
- type: 'YAML_PARSE_SUCCESS',
187
- severity: 'LOW',
188
- source: 'EnsembleManager.parseEnsembleFile',
189
- details: 'YAML content safely parsed'
190
- });
191
- return {
192
- metadata: parsed.data,
193
- content: match[2].trim()
194
- };
195
- }
196
- }
197
- // SECURITY FIX: For plain YAML files, check if content already has frontmatter
198
- // Previously: Used direct YAML parsing without security validation
199
- // Now: Uses SecureYamlParser for consistent security validation
200
- // Check if content already has frontmatter markers
201
- if (content.trim().startsWith('---')) {
202
- // Content already has frontmatter, parse directly
203
- const parsed = SecureYamlParser.parse(content, {
204
- maxYamlSize: 64 * 1024, // 64KB limit
205
- validateContent: true
206
- });
207
- // Log security event
208
- SecurityMonitor.logSecurityEvent({
209
- type: 'YAML_PARSE_SUCCESS',
210
- severity: 'LOW',
211
- source: 'EnsembleManager.parseEnsembleFile',
212
- details: 'YAML frontmatter content safely parsed'
213
- });
214
- return parsed.data;
215
- }
216
- else {
217
- // Plain YAML without frontmatter - create frontmatter format
218
- const frontmatterFormat = `---\n${content}\n---\n`;
219
- const parsed = SecureYamlParser.parse(frontmatterFormat, {
220
- maxYamlSize: 64 * 1024, // 64KB limit
221
- validateContent: true
222
- });
223
- // Log security event
224
- SecurityMonitor.logSecurityEvent({
225
- type: 'YAML_PARSE_SUCCESS',
226
- severity: 'LOW',
227
- source: 'EnsembleManager.parseEnsembleFile',
228
- details: 'Plain YAML content safely parsed'
229
- });
230
- return parsed.data;
231
- }
232
- }
233
- catch (error) {
234
- logger.error('Failed to parse ensemble file:', error);
235
- throw new Error(`Invalid ensemble file format: ${error instanceof Error ? error.message : 'Unknown error'}`);
236
- }
237
- }
238
- /**
239
- * Convert ensemble data to YAML safely
240
- * SECURITY FIX: Uses yaml.dump with security options
241
- */
242
- toYamlSafe(data) {
243
- // SECURITY FIX: Use yaml.dump with FAILSAFE_SCHEMA and security options
244
- // This prevents arbitrary code execution via YAML
245
- const yamlStr = yaml.dump(data, {
246
- schema: yaml.FAILSAFE_SCHEMA,
247
- noRefs: true,
248
- skipInvalid: true,
249
- quotingType: '"',
250
- forceQuotes: true
251
- });
252
- // Add frontmatter delimiters for markdown files
253
- return `---\n${yamlStr}---\n`;
254
- }
255
- /**
256
- * Import an ensemble from JSON
257
- * SECURITY: Full validation of imported data
258
- */
259
- async importElement(jsonData, format) {
260
- // Validate JSON structure
261
- let data;
262
- try {
263
- data = JSON.parse(jsonData);
264
- }
265
- catch (error) {
266
- throw new Error('Invalid JSON format');
267
- }
268
- // Validate required fields
269
- if (!data.metadata || typeof data.metadata !== 'object') {
270
- throw new Error('Missing or invalid metadata');
271
- }
272
- // Create ensemble with validated metadata
273
- const ensemble = new Ensemble(data.metadata);
274
- // Add elements with validation
275
- if (data.elements && Array.isArray(data.elements)) {
276
- for (const element of data.elements) {
277
- if (!element.elementId || !element.elementType) {
278
- logger.warn('Skipping invalid element during import');
279
- continue;
280
- }
281
- try {
282
- ensemble.addElement(element.elementId, element.elementType, element.role || 'support', {
283
- priority: element.priority,
284
- activationCondition: element.activationCondition,
285
- dependencies: element.dependencies
286
- });
287
- }
288
- catch (error) {
289
- logger.warn(`Failed to add element ${element.elementId} during import:`, error);
290
- }
291
- }
292
- }
293
- // Return without saving - caller can save if needed
294
- SecurityMonitor.logSecurityEvent({
295
- type: 'ENSEMBLE_IMPORTED',
296
- severity: 'MEDIUM',
297
- source: 'EnsembleManager.importElement',
298
- details: `Ensemble imported`
299
- });
300
- return ensemble;
301
- }
302
- /**
303
- * Export an ensemble to JSON
304
- */
305
- async exportElement(ensemble) {
306
- const data = {
307
- metadata: ensemble.metadata,
308
- elements: Array.from(ensemble.getElements().values()),
309
- extensions: ensemble.extensions
310
- };
311
- // SECURITY FIX: Ensure safe JSON serialization
312
- return JSON.stringify(data, null, 2);
313
- }
314
- /**
315
- * Delete an ensemble file
316
- */
317
- async delete(filePath) {
318
- const validatedPath = validatePath(filePath);
319
- if (!validatedPath) {
320
- throw new Error('Invalid file path');
321
- }
322
- const fullPath = path.isAbsolute(validatedPath)
323
- ? validatedPath
324
- : path.join(this.baseDir, validatedPath);
325
- await fs.unlink(fullPath);
326
- SecurityMonitor.logSecurityEvent({
327
- type: 'ENSEMBLE_DELETED',
328
- severity: 'MEDIUM',
329
- source: 'EnsembleManager.delete',
330
- details: `Ensemble deleted: ${fullPath}`
331
- });
332
- }
333
- /**
334
- * Check if an ensemble file exists
335
- */
336
- async exists(filePath) {
337
- const validatedPath = validatePath(filePath);
338
- if (!validatedPath) {
339
- return false;
340
- }
341
- const fullPath = path.isAbsolute(validatedPath)
342
- ? validatedPath
343
- : path.join(this.baseDir, validatedPath);
344
- try {
345
- await fs.access(fullPath);
346
- return true;
347
- }
348
- catch {
349
- return false;
350
- }
351
- }
352
- /**
353
- * Find multiple ensembles matching a predicate
354
- */
355
- async findMany(predicate) {
356
- const ensembles = await this.list();
357
- return ensembles.filter(predicate);
358
- }
359
- /**
360
- * Validate a file path
361
- */
362
- validatePath(filePath) {
363
- return validatePath(filePath) !== null;
364
- }
365
- /**
366
- * Get the element type this manager handles
367
- */
368
- getElementType() {
369
- return ElementType.ENSEMBLE;
370
- }
371
- /**
372
- * Get the file extension for ensemble files
373
- */
374
- getFileExtension() {
375
- return '.yaml';
376
- }
377
- }
378
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW5zZW1ibGVNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2Vuc2VtYmxlcy9FbnNlbWJsZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUlILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFpQixZQUFZLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxLQUFLLElBQUksTUFBTSxTQUFTLENBQUM7QUFFaEMsTUFBTSxPQUFPLGVBQWU7SUFDTjtJQUFwQixZQUFvQixPQUFlO1FBQWYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNqQywwQkFBMEI7UUFDMUIsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQWdCO1FBQ3pCLCtCQUErQjtRQUMvQixNQUFNLGFB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bnNlbWJsZU1hbmFnZXIgLSBJbXBsZW1lbnRhdGlvbiBvZiBJRWxlbWVudE1hbmFnZXIgZm9yIEVuc2VtYmxlIGVsZW1lbnRzXG4gKiBIYW5kbGVzIENSVUQgb3BlcmF0aW9ucyBhbmQgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgZm9yIGVuc2VtYmxlc1xuICogXG4gKiBTRUNVUklUWSBNRUFTVVJFUyAoRm9sbG93aW5nIFBlcnNvbmFFbGVtZW50TWFuYWdlciBwYXR0ZXJucyk6XG4gKiAxLiBDUklUSUNBTDogVXNlcyBGaWxlTG9ja01hbmFnZXIgZm9yIGF0b21pYyBmaWxlIG9wZXJhdGlvbnMgdG8gcHJldmVudCByYWNlIGNvbmRpdGlvbnNcbiAqIDIuIEhJR0g6IFNlY3VyZVlhbWxQYXJzZXIgZm9yIFlBTUwgY29udGVudCB2YWxpZGF0aW9uIHRvIHByZXZlbnQgaW5qZWN0aW9uIGF0dGFja3NcbiAqIDMuIE1FRElVTTogQWxsIHVzZXIgaW5wdXRzIHZhbGlkYXRlZCBhbmQgc2FuaXRpemVkXG4gKiA0LiBNRURJVU06IEF1ZGl0IGxvZ2dpbmcgZm9yIGFsbCBzZWN1cml0eSBvcGVyYXRpb25zXG4gKiA1LiBQYXRoIHZhbGlkYXRpb24gdG8gcHJldmVudCBkaXJlY3RvcnkgdHJhdmVyc2FsXG4gKi9cblxuaW1wb3J0IHsgSUVsZW1lbnRNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vdHlwZXMvZWxlbWVudHMvaW5kZXguanMnO1xuaW1wb3J0IHsgRWxlbWVudFZhbGlkYXRpb25SZXN1bHQgfSBmcm9tICcuLi8uLi90eXBlcy9lbGVtZW50cy9JRWxlbWVudC5qcyc7XG5pbXBvcnQgeyBGaWxlTG9ja01hbmFnZXIgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9maWxlTG9ja01hbmFnZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJlWWFtbFBhcnNlciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3NlY3VyZVlhbWxQYXJzZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IHNhbml0aXplSW5wdXQsIHZhbGlkYXRlUGF0aCB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L0lucHV0VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IEVuc2VtYmxlIH0gZnJvbSAnLi9FbnNlbWJsZS5qcyc7XG5pbXBvcnQgeyBFbnNlbWJsZU1ldGFkYXRhIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBFTlNFTUJMRV9MSU1JVFMgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBFbGVtZW50VHlwZSB9IGZyb20gJy4uLy4uL3BvcnRmb2xpby90eXBlcy5qcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICdqcy15YW1sJztcblxuZXhwb3J0IGNsYXNzIEVuc2VtYmxlTWFuYWdlciBpbXBsZW1lbnRzIElFbGVtZW50TWFuYWdlcjxFbnNlbWJsZT4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJhc2VEaXI6IHN0cmluZykge1xuICAgIC8vIFZhbGlkYXRlIGJhc2UgZGlyZWN0b3J5XG4gICAgY29uc3QgdmFsaWRhdGVkUGF0aCA9IHZhbGlkYXRlUGF0aChiYXNlRGlyKTtcbiAgICBpZiAoIXZhbGlkYXRlZFBhdGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBiYXNlIGRpcmVjdG9yeSBwYXRoJyk7XG4gICAgfVxuICAgIHRoaXMuYmFzZURpciA9IHZhbGlkYXRlZFBhdGg7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBhbiBlbnNlbWJsZSBmcm9tIGZpbGVcbiAgICogU0VDVVJJVFkgRklYOiBVc2VzIEZpbGVMb2NrTWFuYWdlci5hdG9taWNSZWFkRmlsZSgpIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAqL1xuICBhc3luYyBsb2FkKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPEVuc2VtYmxlPiB7XG4gICAgLy8gU0VDVVJJVFk6IFZhbGlkYXRlIGZpbGUgcGF0aFxuICAgIGNvbnN0IHZhbGlkYXRlZFBhdGggPSB2YWxpZGF0ZVBhdGgoZmlsZVBhdGgpO1xuICAgIGlmICghdmFsaWRhdGVkUGF0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZpbGUgcGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5pc0Fic29sdXRlKHZhbGlkYXRlZFBhdGgpIFxuICAgICAgPyB2YWxpZGF0ZWRQYXRoIFxuICAgICAgOiBwYXRoLmpvaW4odGhpcy5iYXNlRGlyLCB2YWxpZGF0ZWRQYXRoKTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBDUklUSUNBTCBGSVg6IFVzZSBhdG9taWMgZmlsZSByZWFkIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgICAvLyBQcmV2aW91c2x5OiBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoZnVsbFBhdGgsICd1dGYtOCcpO1xuICAgICAgLy8gTm93OiBVc2VzIEZpbGVMb2NrTWFuYWdlciB3aXRoIHByb3BlciBlbmNvZGluZyBvYmplY3QgZm9ybWF0XG4gICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1JlYWRGaWxlKGZ1bGxQYXRoLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuXG4gICAgICAvLyBQYXJzZSBlbnNlbWJsZSBkYXRhXG4gICAgICBjb25zdCBlbnNlbWJsZURhdGEgPSBhd2FpdCB0aGlzLnBhcnNlRW5zZW1ibGVGaWxlKGNvbnRlbnQsIGZ1bGxQYXRoKTtcbiAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGVuc2VtYmxlIGluc3RhbmNlXG4gICAgICBjb25zdCBlbnNlbWJsZSA9IG5ldyBFbnNlbWJsZShlbnNlbWJsZURhdGEubWV0YWRhdGEpO1xuICAgICAgXG4gICAgICAvLyBBZGQgZWxlbWVudHMgaWYgcHJlc2VudFxuICAgICAgaWYgKGVuc2VtYmxlRGF0YS5lbGVtZW50cykge1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZW5zZW1ibGVEYXRhLmVsZW1lbnRzKSB7XG4gICAgICAgICAgZW5zZW1ibGUuYWRkRWxlbWVudChcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudElkLFxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSxcbiAgICAgICAgICAgIGVsZW1lbnQucm9sZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcHJpb3JpdHk6IGVsZW1lbnQucHJpb3JpdHksXG4gICAgICAgICAgICAgIGFjdGl2YXRpb25Db25kaXRpb246IGVsZW1lbnQuYWN0aXZhdGlvbkNvbmRpdGlvbixcbiAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiBlbGVtZW50LmRlcGVuZGVuY2llc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVzdG9yZSBzaGFyZWQgY29udGV4dCBpZiBwcmVzZW50XG4gICAgICBpZiAoZW5zZW1ibGVEYXRhLnNoYXJlZENvbnRleHQpIHtcbiAgICAgICAgZW5zZW1ibGUuZGVzZXJpYWxpemUoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIC4uLmVuc2VtYmxlRGF0YSxcbiAgICAgICAgICBlbGVtZW50czogQXJyYXkuZnJvbShlbnNlbWJsZS5nZXRFbGVtZW50cygpLmVudHJpZXMoKSlcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBsb2dnZXIuaW5mbyhgTG9hZGVkIGVuc2VtYmxlIGZyb20gJHtmdWxsUGF0aH1gKTtcbiAgICAgIHJldHVybiBlbnNlbWJsZTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBsb2FkIGVuc2VtYmxlIGZyb20gJHtmdWxsUGF0aH06YCwgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgYW4gZW5zZW1ibGUgdG8gZmlsZVxuICAgKiBTRUNVUklUWSBGSVg6IFVzZXMgRmlsZUxvY2tNYW5hZ2VyLmF0b21pY1dyaXRlRmlsZSgpIGZvciBhdG9taWMgd3JpdGVzXG4gICAqL1xuICBhc3luYyBzYXZlKGVuc2VtYmxlOiBFbnNlbWJsZSwgZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFNFQ1VSSVRZOiBWYWxpZGF0ZSBmaWxlIHBhdGhcbiAgICBjb25zdCB2YWxpZGF0ZWRQYXRoID0gdmFsaWRhdGVQYXRoKGZpbGVQYXRoKTtcbiAgICBpZiAoIXZhbGlkYXRlZFBhdGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmaWxlIHBhdGgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguaXNBYnNvbHV0ZSh2YWxpZGF0ZWRQYXRoKSBcbiAgICAgID8gdmFsaWRhdGVkUGF0aCBcbiAgICAgIDogcGF0aC5qb2luKHRoaXMuYmFzZURpciwgdmFsaWRhdGVkUGF0aCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gRW5zdXJlIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGF3YWl0IGZzLm1rZGlyKHBhdGguZGlybmFtZShmdWxsUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG4gICAgICAvLyBQcmVwYXJlIGVuc2VtYmxlIGRhdGFcbiAgICAgIGNvbnN0IGVuc2VtYmxlRGF0YSA9IHtcbiAgICAgICAgbWV0YWRhdGE6IGVuc2VtYmxlLm1ldGFkYXRhLFxuICAgICAgICBlbGVtZW50czogQXJyYXkuZnJvbShlbnNlbWJsZS5nZXRFbGVtZW50cygpLnZhbHVlcygpKSxcbiAgICAgICAgZXh0ZW5zaW9uczogZW5zZW1ibGUuZXh0ZW5zaW9uc1xuICAgICAgfTtcblxuICAgICAgLy8gQ29udmVydCB0byBZQU1MIHdpdGggc2VjdXJpdHkgbWVhc3VyZXNcbiAgICAgIGNvbnN0IHlhbWxDb250ZW50ID0gdGhpcy50b1lhbWxTYWZlKGVuc2VtYmxlRGF0YSk7XG5cbiAgICAgIC8vIENSSVRJQ0FMIEZJWDogVXNlIGF0b21pYyBmaWxlIHdyaXRlIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgICAvLyBQcmV2aW91c2x5OiBhd2FpdCBmcy53cml0ZUZpbGUoZnVsbFBhdGgsIHlhbWxDb250ZW50LCAndXRmLTgnKTtcbiAgICAgIC8vIE5vdzogVXNlcyBGaWxlTG9ja01hbmFnZXIgZm9yIGF0b21pYyBvcGVyYXRpb25cbiAgICAgIGF3YWl0IEZpbGVMb2NrTWFuYWdlci5hdG9taWNXcml0ZUZpbGUoZnVsbFBhdGgsIHlhbWxDb250ZW50LCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuXG4gICAgICAvLyBMb2cgc2VjdXJpdHkgZXZlbnRcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ0VOU0VNQkxFX1NBVkVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdFbnNlbWJsZU1hbmFnZXIuc2F2ZScsXG4gICAgICAgIGRldGFpbHM6IGBFbnNlbWJsZSBzYXZlZCB0byAke2Z1bGxQYXRofWBcbiAgICAgIH0pO1xuXG4gICAgICBsb2dnZXIuaW5mbyhgU2F2ZWQgZW5zZW1ibGUgdG8gJHtmdWxsUGF0aH1gKTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBzYXZlIGVuc2VtYmxlIHRvICR7ZnVsbFBhdGh9OmAsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0IGFsbCBlbnNlbWJsZXMgaW4gdGhlIGRpcmVjdG9yeVxuICAgKi9cbiAgYXN5bmMgbGlzdCgpOiBQcm9taXNlPEVuc2VtYmxlW10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHRoaXMuYmFzZURpcik7XG4gICAgICBjb25zdCBlbnNlbWJsZXM6IEVuc2VtYmxlW10gPSBbXTtcblxuICAgICAgLy8gUHJvY2VzcyBmaWxlcyBpbiBwYXJhbGxlbCB3aXRoIGxpbWl0XG4gICAgICBjb25zdCBCQVRDSF9TSVpFID0gMTA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSArPSBCQVRDSF9TSVpFKSB7XG4gICAgICAgIGNvbnN0IGJhdGNoID0gZmlsZXMuc2xpY2UoaSwgaSArIEJBVENIX1NJWkUpO1xuICAgICAgICBjb25zdCBiYXRjaFByb21pc2VzID0gYmF0Y2hcbiAgICAgICAgICAuZmlsdGVyKGZpbGUgPT4gZmlsZS5lbmRzV2l0aCgnLm1kJykgfHwgZmlsZS5lbmRzV2l0aCgnLnlhbWwnKSB8fCBmaWxlLmVuZHNXaXRoKCcueW1sJykpXG4gICAgICAgICAgLm1hcChmaWxlID0+IHRoaXMubG9hZChmaWxlKS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIGxvYWQgZW5zZW1ibGUgJHtmaWxlfTpgLCBlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9KSk7XG5cbiAgICAgICAgY29uc3QgYmF0Y2hSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoYmF0Y2hQcm9taXNlcyk7XG4gICAgICAgIGVuc2VtYmxlcy5wdXNoKC4uLmJhdGNoUmVzdWx0cy5maWx0ZXIoKGUpOiBlIGlzIEVuc2VtYmxlID0+IGUgIT09IG51bGwpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVuc2VtYmxlcztcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgbWlzc2luZyBkaXJlY3RvcnkgZ3JhY2VmdWxseSB3aXRoIHR5cGUtc2FmZSBjaGVja1xuICAgICAgaWYgKGVycm9yICYmIHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcgJiYgJ2NvZGUnIGluIGVycm9yICYmIGVycm9yLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnRW5zZW1ibGVzIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCB5ZXQsIHJldHVybmluZyBlbXB0eSBhcnJheScpO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBsaXN0IGVuc2VtYmxlczonLCBlcnJvcik7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYW4gZW5zZW1ibGUgbWF0Y2hpbmcgYSBwcmVkaWNhdGVcbiAgICovXG4gIGFzeW5jIGZpbmQocHJlZGljYXRlOiAoZW5zZW1ibGU6IEVuc2VtYmxlKSA9PiBib29sZWFuKTogUHJvbWlzZTxFbnNlbWJsZSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGVuc2VtYmxlcyA9IGF3YWl0IHRoaXMubGlzdCgpO1xuICAgIHJldHVybiBlbnNlbWJsZXMuZmluZChwcmVkaWNhdGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGFuIGVuc2VtYmxlXG4gICAqL1xuICB2YWxpZGF0ZShlbnNlbWJsZTogRW5zZW1ibGUpOiBFbGVtZW50VmFsaWRhdGlvblJlc3VsdCB7XG4gICAgcmV0dXJuIGVuc2VtYmxlLnZhbGlkYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgZW5zZW1ibGUgZmlsZSBjb250ZW50XG4gICAqIFNFQ1VSSVRZIEZJWDogVXNlcyBTZWN1cmVZYW1sUGFyc2VyIHRvIHByZXZlbnQgWUFNTCBpbmplY3Rpb24gYXR0YWNrc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBwYXJzZUVuc2VtYmxlRmlsZShjb250ZW50OiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBUcnkgdG8gcGFyc2UgYXMgWUFNTCBmcm9udG1hdHRlciAobWFya2Rvd24gZmlsZSlcbiAgICAgIGlmIChmaWxlUGF0aC5lbmRzV2l0aCgnLm1kJykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9eLS0tXFxuKFtcXHNcXFNdKj8pXFxuLS0tXFxuKFtcXHNcXFNdKikkLyk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIC8vIEhJR0ggU0VWRVJJVFkgRklYOiBVc2UgU2VjdXJlWWFtbFBhcnNlciB0byBwcmV2ZW50IFlBTUwgaW5qZWN0aW9uXG4gICAgICAgICAgLy8gUHJldmlvdXNseTogVXNlZCB1bnNhZmUgWUFNTCBwYXJzaW5nIHdpdGhvdXQgdmFsaWRhdGlvblxuICAgICAgICAgIC8vIE5vdzogVXNlcyBTZWN1cmVZYW1sUGFyc2VyIHdoaWNoIHZhbGlkYXRlcyBjb250ZW50XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gU2VjdXJlWWFtbFBhcnNlci5wYXJzZShtYXRjaFsxXSwge1xuICAgICAgICAgICAgbWF4WWFtbFNpemU6IDY0ICogMTAyNCwgLy8gNjRLQiBsaW1pdFxuICAgICAgICAgICAgdmFsaWRhdGVDb250ZW50OiB0cnVlXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBMb2cgc2VjdXJpdHkgZXZlbnRcbiAgICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgICB0eXBlOiAnWUFNTF9QQVJTRV9TVUNDRVNTJyxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICAgIHNvdXJjZTogJ0Vuc2VtYmxlTWFuYWdlci5wYXJzZUVuc2VtYmxlRmlsZScsXG4gICAgICAgICAgICBkZXRhaWxzOiAnWUFNTCBjb250ZW50IHNhZmVseSBwYXJzZWQnXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWV0YWRhdGE6IHBhcnNlZC5kYXRhIGFzIHVua25vd24gYXMgRW5zZW1ibGVNZXRhZGF0YSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IG1hdGNoWzJdLnRyaW0oKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU0VDVVJJVFkgRklYOiBGb3IgcGxhaW4gWUFNTCBmaWxlcywgY2hlY2sgaWYgY29udGVudCBhbHJlYWR5IGhhcyBmcm9udG1hdHRlclxuICAgICAgLy8gUHJldmlvdXNseTogVXNlZCBkaXJlY3QgWUFNTCBwYXJzaW5nIHdpdGhvdXQgc2VjdXJpdHkgdmFsaWRhdGlvblxuICAgICAgLy8gTm93OiBVc2VzIFNlY3VyZVlhbWxQYXJzZXIgZm9yIGNvbnNpc3RlbnQgc2VjdXJpdHkgdmFsaWRhdGlvblxuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBjb250ZW50IGFscmVhZHkgaGFzIGZyb250bWF0dGVyIG1hcmtlcnNcbiAgICAgIGlmIChjb250ZW50LnRyaW0oKS5zdGFydHNXaXRoKCctLS0nKSkge1xuICAgICAgICAvLyBDb250ZW50IGFscmVhZHkgaGFzIGZyb250bWF0dGVyLCBwYXJzZSBkaXJlY3RseSAgXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IFNlY3VyZVlhbWxQYXJzZXIucGFyc2UoY29udGVudCwge1xuICAgICAgICAgIG1heFlhbWxTaXplOiA2NCAqIDEwMjQsIC8vIDY0S0IgbGltaXRcbiAgICAgICAgICB2YWxpZGF0ZUNvbnRlbnQ6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gTG9nIHNlY3VyaXR5IGV2ZW50XG4gICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICB0eXBlOiAnWUFNTF9QQVJTRV9TVUNDRVNTJyxcbiAgICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgICAgc291cmNlOiAnRW5zZW1ibGVNYW5hZ2VyLnBhcnNlRW5zZW1ibGVGaWxlJyxcbiAgICAgICAgICBkZXRhaWxzOiAnWUFNTCBmcm9udG1hdHRlciBjb250ZW50IHNhZmVseSBwYXJzZWQnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBwYXJzZWQuZGF0YTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFBsYWluIFlBTUwgd2l0aG91dCBmcm9udG1hdHRlciAtIGNyZWF0ZSBmcm9udG1hdHRlciBmb3JtYXRcbiAgICAgICAgY29uc3QgZnJvbnRtYXR0ZXJGb3JtYXQgPSBgLS0tXFxuJHtjb250ZW50fVxcbi0tLVxcbmA7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBwYXJzZWQgPSBTZWN1cmVZYW1sUGFyc2VyLnBhcnNlKGZyb250bWF0dGVyRm9ybWF0LCB7XG4gICAgICAgICAgbWF4WWFtbFNpemU6IDY0ICogMTAyNCwgLy8gNjRLQiBsaW1pdFxuICAgICAgICAgIHZhbGlkYXRlQ29udGVudDogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBMb2cgc2VjdXJpdHkgZXZlbnRcbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdZQU1MX1BBUlNFX1NVQ0NFU1MnLFxuICAgICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgICBzb3VyY2U6ICdFbnNlbWJsZU1hbmFnZXIucGFyc2VFbnNlbWJsZUZpbGUnLFxuICAgICAgICAgIGRldGFpbHM6ICdQbGFpbiBZQU1MIGNvbnRlbnQgc2FmZWx5IHBhcnNlZCdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZC5kYXRhO1xuICAgICAgfVxuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIGVuc2VtYmxlIGZpbGU6JywgZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVuc2VtYmxlIGZpbGUgZm9ybWF0OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGVuc2VtYmxlIGRhdGEgdG8gWUFNTCBzYWZlbHlcbiAgICogU0VDVVJJVFkgRklYOiBVc2VzIHlhbWwuZHVtcCB3aXRoIHNlY3VyaXR5IG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgdG9ZYW1sU2FmZShkYXRhOiBhbnkpOiBzdHJpbmcge1xuICAgIC8vIFNFQ1VSSVRZIEZJWDogVXNlIHlhbWwuZHVtcCB3aXRoIEZBSUxTQUZFX1NDSEVNQSBhbmQgc2VjdXJpdHkgb3B0aW9uc1xuICAgIC8vIFRoaXMgcHJldmVudHMgYXJiaXRyYXJ5IGNvZGUgZXhlY3V0aW9uIHZpYSBZQU1MXG4gICAgY29uc3QgeWFtbFN0ciA9IHlhbWwuZHVtcChkYXRhLCB7XG4gICAgICBzY2hlbWE6IHlhbWwuRkFJTFNBRkVfU0NIRU1BLFxuICAgICAgbm9SZWZzOiB0cnVlLFxuICAgICAgc2tpcEludmFsaWQ6IHRydWUsXG4gICAgICBxdW90aW5nVHlwZTogJ1wiJyxcbiAgICAgIGZvcmNlUXVvdGVzOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgZnJvbnRtYXR0ZXIgZGVsaW1pdGVycyBmb3IgbWFya2Rvd24gZmlsZXNcbiAgICByZXR1cm4gYC0tLVxcbiR7eWFtbFN0cn0tLS1cXG5gO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBlbnNlbWJsZSBmcm9tIEpTT05cbiAgICogU0VDVVJJVFk6IEZ1bGwgdmFsaWRhdGlvbiBvZiBpbXBvcnRlZCBkYXRhXG4gICAqL1xuICBhc3luYyBpbXBvcnRFbGVtZW50KGpzb25EYXRhOiBzdHJpbmcsIGZvcm1hdD86ICdqc29uJyB8ICd5YW1sJyB8ICdtYXJrZG93bicpOiBQcm9taXNlPEVuc2VtYmxlPiB7XG4gICAgLy8gVmFsaWRhdGUgSlNPTiBzdHJ1Y3R1cmVcbiAgICBsZXQgZGF0YTogYW55O1xuICAgIHRyeSB7XG4gICAgICBkYXRhID0gSlNPTi5wYXJzZShqc29uRGF0YSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBKU09OIGZvcm1hdCcpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIHJlcXVpcmVkIGZpZWxkc1xuICAgIGlmICghZGF0YS5tZXRhZGF0YSB8fCB0eXBlb2YgZGF0YS5tZXRhZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIG1ldGFkYXRhJyk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGVuc2VtYmxlIHdpdGggdmFsaWRhdGVkIG1ldGFkYXRhXG4gICAgY29uc3QgZW5zZW1ibGUgPSBuZXcgRW5zZW1ibGUoZGF0YS5tZXRhZGF0YSk7XG5cbiAgICAvLyBBZGQgZWxlbWVudHMgd2l0aCB2YWxpZGF0aW9uXG4gICAgaWYgKGRhdGEuZWxlbWVudHMgJiYgQXJyYXkuaXNBcnJheShkYXRhLmVsZW1lbnRzKSkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGRhdGEuZWxlbWVudHMpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50LmVsZW1lbnRJZCB8fCAhZWxlbWVudC5lbGVtZW50VHlwZSkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKCdTa2lwcGluZyBpbnZhbGlkIGVsZW1lbnQgZHVyaW5nIGltcG9ydCcpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBlbnNlbWJsZS5hZGRFbGVtZW50KFxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50SWQsXG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlLFxuICAgICAgICAgICAgZWxlbWVudC5yb2xlIHx8ICdzdXBwb3J0JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcHJpb3JpdHk6IGVsZW1lbnQucHJpb3JpdHksXG4gICAgICAgICAgICAgIGFjdGl2YXRpb25Db25kaXRpb246IGVsZW1lbnQuYWN0aXZhdGlvbkNvbmRpdGlvbixcbiAgICAgICAgICAgICAgZGVwZW5kZW5jaWVzOiBlbGVtZW50LmRlcGVuZGVuY2llc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBhZGQgZWxlbWVudCAke2VsZW1lbnQuZWxlbWVudElkfSBkdXJpbmcgaW1wb3J0OmAsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiB3aXRob3V0IHNhdmluZyAtIGNhbGxlciBjYW4gc2F2ZSBpZiBuZWVkZWRcblxuICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgIHR5cGU6ICdFTlNFTUJMRV9JTVBPUlRFRCcsXG4gICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICBzb3VyY2U6ICdFbnNlbWJsZU1hbmFnZXIuaW1wb3J0RWxlbWVudCcsXG4gICAgICBkZXRhaWxzOiBgRW5zZW1ibGUgaW1wb3J0ZWRgXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW5zZW1ibGU7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IGFuIGVuc2VtYmxlIHRvIEpTT05cbiAgICovXG4gIGFzeW5jIGV4cG9ydEVsZW1lbnQoZW5zZW1ibGU6IEVuc2VtYmxlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbWV0YWRhdGE6IGVuc2VtYmxlLm1ldGFkYXRhLFxuICAgICAgZWxlbWVudHM6IEFycmF5LmZyb20oZW5zZW1ibGUuZ2V0RWxlbWVudHMoKS52YWx1ZXMoKSksXG4gICAgICBleHRlbnNpb25zOiBlbnNlbWJsZS5leHRlbnNpb25zXG4gICAgfTtcblxuICAgIC8vIFNFQ1VSSVRZIEZJWDogRW5zdXJlIHNhZmUgSlNPTiBzZXJpYWxpemF0aW9uXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhbiBlbnNlbWJsZSBmaWxlXG4gICAqL1xuICBhc3luYyBkZWxldGUoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHZhbGlkYXRlZFBhdGggPSB2YWxpZGF0ZVBhdGgoZmlsZVBhdGgpO1xuICAgIGlmICghdmFsaWRhdGVkUGF0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZpbGUgcGF0aCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5pc0Fic29sdXRlKHZhbGlkYXRlZFBhdGgpIFxuICAgICAgPyB2YWxpZGF0ZWRQYXRoIFxuICAgICAgOiBwYXRoLmpvaW4odGhpcy5iYXNlRGlyLCB2YWxpZGF0ZWRQYXRoKTtcblxuICAgIGF3YWl0IGZzLnVubGluayhmdWxsUGF0aCk7XG5cbiAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICB0eXBlOiAnRU5TRU1CTEVfREVMRVRFRCcsXG4gICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICBzb3VyY2U6ICdFbnNlbWJsZU1hbmFnZXIuZGVsZXRlJyxcbiAgICAgIGRldGFpbHM6IGBFbnNlbWJsZSBkZWxldGVkOiAke2Z1bGxQYXRofWBcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBlbnNlbWJsZSBmaWxlIGV4aXN0c1xuICAgKi9cbiAgYXN5bmMgZXhpc3RzKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB2YWxpZGF0ZWRQYXRoID0gdmFsaWRhdGVQYXRoKGZpbGVQYXRoKTtcbiAgICBpZiAoIXZhbGlkYXRlZFBhdGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguaXNBYnNvbHV0ZSh2YWxpZGF0ZWRQYXRoKSBcbiAgICAgID8gdmFsaWRhdGVkUGF0aCBcbiAgICAgIDogcGF0aC5qb2luKHRoaXMuYmFzZURpciwgdmFsaWRhdGVkUGF0aCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZnMuYWNjZXNzKGZ1bGxQYXRoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIG11bHRpcGxlIGVuc2VtYmxlcyBtYXRjaGluZyBhIHByZWRpY2F0ZVxuICAgKi9cbiAgYXN5bmMgZmluZE1hbnkocHJlZGljYXRlOiAoZW5zZW1ibGU6IEVuc2VtYmxlKSA9PiBib29sZWFuKTogUHJvbWlzZTxFbnNlbWJsZVtdPiB7XG4gICAgY29uc3QgZW5zZW1ibGVzID0gYXdhaXQgdGhpcy5saXN0KCk7XG4gICAgcmV0dXJuIGVuc2VtYmxlcy5maWx0ZXIocHJlZGljYXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhIGZpbGUgcGF0aFxuICAgKi9cbiAgdmFsaWRhdGVQYXRoKGZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsaWRhdGVQYXRoKGZpbGVQYXRoKSAhPT0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGVsZW1lbnQgdHlwZSB0aGlzIG1hbmFnZXIgaGFuZGxlc1xuICAgKi9cbiAgZ2V0RWxlbWVudFR5cGUoKTogRWxlbWVudFR5cGUge1xuICAgIHJldHVybiBFbGVtZW50VHlwZS5FTlNFTUJMRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZpbGUgZXh0ZW5zaW9uIGZvciBlbnNlbWJsZSBmaWxlc1xuICAgKi9cbiAgZ2V0RmlsZUV4dGVuc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnLnlhbWwnO1xuICB9XG59Il19
@@ -1,73 +0,0 @@
1
- /**
2
- * Constants for Ensemble elements
3
- *
4
- * Defines limits, defaults, and security constants following patterns from other elements
5
- */
6
- /**
7
- * Resource limits to prevent DoS attacks
8
- */
9
- export declare const ENSEMBLE_LIMITS: {
10
- readonly MAX_ELEMENTS: 50;
11
- readonly MAX_NESTING_DEPTH: 5;
12
- readonly MAX_ACTIVATION_TIME: 30000;
13
- readonly MAX_CONTEXT_SIZE: 1000;
14
- readonly MAX_CONTEXT_VALUE_SIZE: 10000;
15
- readonly MAX_DEPENDENCIES: 10;
16
- readonly MAX_CONDITION_LENGTH: 200;
17
- readonly MIN_ACTIVATION_INTERVAL: 100;
18
- };
19
- /**
20
- * Default values for ensemble configuration
21
- */
22
- export declare const ENSEMBLE_DEFAULTS: {
23
- readonly ACTIVATION_STRATEGY: "sequential";
24
- readonly CONFLICT_RESOLUTION: "last-write";
25
- readonly ELEMENT_ROLE: "support";
26
- readonly PRIORITY: 50;
27
- readonly ALLOW_NESTED: true;
28
- readonly ACTIVATION_TIMEOUT: 5000;
29
- };
30
- /**
31
- * Supported activation strategies
32
- */
33
- export declare const ACTIVATION_STRATEGIES: readonly ["all", "sequential", "lazy", "conditional", "priority"];
34
- /**
35
- * Supported conflict resolution strategies
36
- */
37
- export declare const CONFLICT_STRATEGIES: readonly ["last-write", "first-write", "priority", "merge", "error"];
38
- /**
39
- * Element roles
40
- */
41
- export declare const ELEMENT_ROLES: readonly ["primary", "support", "override", "monitor"];
42
- /**
43
- * Security event types for ensemble operations
44
- */
45
- export declare const ENSEMBLE_SECURITY_EVENTS: {
46
- readonly CIRCULAR_DEPENDENCY: "ENSEMBLE_CIRCULAR_DEPENDENCY";
47
- readonly RESOURCE_LIMIT_EXCEEDED: "ENSEMBLE_RESOURCE_LIMIT_EXCEEDED";
48
- readonly ACTIVATION_TIMEOUT: "ENSEMBLE_ACTIVATION_TIMEOUT";
49
- readonly SUSPICIOUS_CONDITION: "ENSEMBLE_SUSPICIOUS_CONDITION";
50
- readonly NESTED_DEPTH_EXCEEDED: "ENSEMBLE_NESTED_DEPTH_EXCEEDED";
51
- readonly CONTEXT_SIZE_EXCEEDED: "ENSEMBLE_CONTEXT_SIZE_EXCEEDED";
52
- };
53
- /**
54
- * Error messages for validation
55
- */
56
- export declare const ENSEMBLE_ERRORS: {
57
- readonly TOO_MANY_ELEMENTS: "Ensemble cannot contain more than 50 elements";
58
- readonly NESTING_TOO_DEEP: "Ensemble nesting depth cannot exceed 5";
59
- readonly CIRCULAR_DEPENDENCY: "Circular dependency detected in ensemble";
60
- readonly INVALID_STRATEGY: "Invalid activation strategy";
61
- readonly INVALID_CONFLICT_RESOLUTION: "Invalid conflict resolution strategy";
62
- readonly ELEMENT_NOT_FOUND: "Element not found in ensemble";
63
- readonly ACTIVATION_TIMEOUT: "Ensemble activation timed out";
64
- readonly CONTEXT_OVERFLOW: "Shared context size exceeded limits";
65
- };
66
- /**
67
- * Regex patterns for validation
68
- */
69
- export declare const ENSEMBLE_PATTERNS: {
70
- readonly CONDITION_PATTERN: RegExp;
71
- readonly ELEMENT_ID_PATTERN: RegExp;
72
- };
73
- //# sourceMappingURL=constants.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/elements/ensembles/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;CASlB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;CAOpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,qBAAqB,mEAMxB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,mBAAmB,sEAMtB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,aAAa,wDAKhB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;CAO3B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;CASlB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;CAKpB,CAAC"}