@dollhousemcp/mcp-server 1.3.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 (1004) hide show
  1. package/CHANGELOG.md +132 -0
  2. package/LICENSE +51 -0
  3. package/README.md +1124 -0
  4. package/data/agents/code-reviewer.md +296 -0
  5. package/data/agents/research-assistant.md +259 -0
  6. package/data/agents/task-manager.md +206 -0
  7. package/data/ensembles/business-advisor.md +354 -0
  8. package/data/ensembles/creative-studio.md +288 -0
  9. package/data/ensembles/development-team.md +292 -0
  10. package/data/ensembles/security-analysis-team.md +438 -0
  11. package/data/memories/conversation-history.md +146 -0
  12. package/data/memories/learning-progress.md +376 -0
  13. package/data/memories/project-context.md +268 -0
  14. package/data/personas/business-consultant.md +50 -0
  15. package/data/personas/creative-writer.md +44 -0
  16. package/data/personas/debug-detective.md +59 -0
  17. package/data/personas/eli5-explainer.md +49 -0
  18. package/data/personas/security-analyst.md +161 -0
  19. package/data/personas/technical-analyst.md +43 -0
  20. package/data/skills/code-review.md +112 -0
  21. package/data/skills/creative-writing.md +174 -0
  22. package/data/skills/data-analysis.md +160 -0
  23. package/data/skills/penetration-testing.md +374 -0
  24. package/data/skills/research.md +181 -0
  25. package/data/skills/threat-modeling.md +469 -0
  26. package/data/skills/translation.md +148 -0
  27. package/data/templates/code-documentation.md +409 -0
  28. package/data/templates/email-professional.md +158 -0
  29. package/data/templates/meeting-notes.md +141 -0
  30. package/data/templates/penetration-test-report.md +608 -0
  31. package/data/templates/project-brief.md +234 -0
  32. package/data/templates/report-executive.md +258 -0
  33. package/data/templates/security-vulnerability-report.md +457 -0
  34. package/data/templates/threat-assessment-report.md +774 -0
  35. package/dist/cache/APICache.d.ts +23 -0
  36. package/dist/cache/APICache.d.ts.map +1 -0
  37. package/dist/cache/APICache.js +42 -0
  38. package/dist/cache/index.d.ts +5 -0
  39. package/dist/cache/index.d.ts.map +1 -0
  40. package/dist/cache/index.js +5 -0
  41. package/dist/collection/CollectionBrowser.d.ts +24 -0
  42. package/dist/collection/CollectionBrowser.d.ts.map +1 -0
  43. package/dist/collection/CollectionBrowser.js +120 -0
  44. package/dist/collection/CollectionSearch.d.ts +18 -0
  45. package/dist/collection/CollectionSearch.d.ts.map +1 -0
  46. package/dist/collection/CollectionSearch.js +48 -0
  47. package/dist/collection/ElementInstaller.d.ts +33 -0
  48. package/dist/collection/ElementInstaller.d.ts.map +1 -0
  49. package/dist/collection/ElementInstaller.js +142 -0
  50. package/dist/collection/GitHubClient.d.ts +22 -0
  51. package/dist/collection/GitHubClient.d.ts.map +1 -0
  52. package/dist/collection/GitHubClient.js +114 -0
  53. package/dist/collection/MarketplaceBrowser.d.ts +24 -0
  54. package/dist/collection/MarketplaceBrowser.d.ts.map +1 -0
  55. package/dist/collection/MarketplaceBrowser.js +115 -0
  56. package/dist/collection/MarketplaceSearch.d.ts +18 -0
  57. package/dist/collection/MarketplaceSearch.d.ts.map +1 -0
  58. package/dist/collection/MarketplaceSearch.js +48 -0
  59. package/dist/collection/PersonaDetails.d.ts +22 -0
  60. package/dist/collection/PersonaDetails.d.ts.map +1 -0
  61. package/dist/collection/PersonaDetails.js +71 -0
  62. package/dist/collection/PersonaInstaller.d.ts +26 -0
  63. package/dist/collection/PersonaInstaller.d.ts.map +1 -0
  64. package/dist/collection/PersonaInstaller.js +103 -0
  65. package/dist/collection/PersonaSubmitter.d.ts +19 -0
  66. package/dist/collection/PersonaSubmitter.d.ts.map +1 -0
  67. package/dist/collection/PersonaSubmitter.js +57 -0
  68. package/dist/collection/index.d.ts +10 -0
  69. package/dist/collection/index.d.ts.map +1 -0
  70. package/dist/collection/index.js +10 -0
  71. package/dist/config/constants.d.ts +25 -0
  72. package/dist/config/constants.d.ts.map +1 -0
  73. package/dist/config/constants.js +34 -0
  74. package/dist/config/index.d.ts +6 -0
  75. package/dist/config/index.d.ts.map +1 -0
  76. package/dist/config/index.js +6 -0
  77. package/dist/config/indicator-config.d.ts +107 -0
  78. package/dist/config/indicator-config.d.ts.map +1 -0
  79. package/dist/config/indicator-config.js +158 -0
  80. package/dist/constants/defaultPersonas.d.ts +10 -0
  81. package/dist/constants/defaultPersonas.d.ts.map +1 -0
  82. package/dist/constants/defaultPersonas.js +18 -0
  83. package/dist/constants/limits.d.ts +10 -0
  84. package/dist/constants/limits.d.ts.map +1 -0
  85. package/dist/constants/limits.js +13 -0
  86. package/dist/elements/BaseElement.d.ts +81 -0
  87. package/dist/elements/BaseElement.d.ts.map +1 -0
  88. package/dist/elements/BaseElement.js +381 -0
  89. package/dist/elements/FeedbackProcessor.d.ts +57 -0
  90. package/dist/elements/FeedbackProcessor.d.ts.map +1 -0
  91. package/dist/elements/FeedbackProcessor.js +418 -0
  92. package/dist/elements/agents/Agent.d.ts +145 -0
  93. package/dist/elements/agents/Agent.d.ts.map +1 -0
  94. package/dist/elements/agents/Agent.js +848 -0
  95. package/dist/elements/agents/AgentManager.d.ts +125 -0
  96. package/dist/elements/agents/AgentManager.d.ts.map +1 -0
  97. package/dist/elements/agents/AgentManager.js +615 -0
  98. package/dist/elements/agents/constants.d.ts +42 -0
  99. package/dist/elements/agents/constants.d.ts.map +1 -0
  100. package/dist/elements/agents/constants.js +45 -0
  101. package/dist/elements/agents/goalTemplates.d.ts +44 -0
  102. package/dist/elements/agents/goalTemplates.d.ts.map +1 -0
  103. package/dist/elements/agents/goalTemplates.js +297 -0
  104. package/dist/elements/agents/index.d.ts +8 -0
  105. package/dist/elements/agents/index.d.ts.map +1 -0
  106. package/dist/elements/agents/index.js +8 -0
  107. package/dist/elements/agents/ruleEngineConfig.d.ts +76 -0
  108. package/dist/elements/agents/ruleEngineConfig.d.ts.map +1 -0
  109. package/dist/elements/agents/ruleEngineConfig.js +143 -0
  110. package/dist/elements/agents/types.d.ts +97 -0
  111. package/dist/elements/agents/types.d.ts.map +1 -0
  112. package/dist/elements/agents/types.js +5 -0
  113. package/dist/elements/ensembles/Ensemble.d.ts +144 -0
  114. package/dist/elements/ensembles/Ensemble.d.ts.map +1 -0
  115. package/dist/elements/ensembles/Ensemble.js +860 -0
  116. package/dist/elements/ensembles/EnsembleManager.d.ts +85 -0
  117. package/dist/elements/ensembles/EnsembleManager.d.ts.map +1 -0
  118. package/dist/elements/ensembles/EnsembleManager.js +378 -0
  119. package/dist/elements/ensembles/constants.d.ts +73 -0
  120. package/dist/elements/ensembles/constants.d.ts.map +1 -0
  121. package/dist/elements/ensembles/constants.js +92 -0
  122. package/dist/elements/ensembles/index.d.ts +8 -0
  123. package/dist/elements/ensembles/index.d.ts.map +1 -0
  124. package/dist/elements/ensembles/index.js +8 -0
  125. package/dist/elements/ensembles/types.d.ts +92 -0
  126. package/dist/elements/ensembles/types.d.ts.map +1 -0
  127. package/dist/elements/ensembles/types.js +8 -0
  128. package/dist/elements/index.d.ts +11 -0
  129. package/dist/elements/index.d.ts.map +1 -0
  130. package/dist/elements/index.js +12 -0
  131. package/dist/elements/memories/Memory.d.ts +110 -0
  132. package/dist/elements/memories/Memory.d.ts.map +1 -0
  133. package/dist/elements/memories/Memory.js +470 -0
  134. package/dist/elements/memories/MemoryManager.d.ts +86 -0
  135. package/dist/elements/memories/MemoryManager.d.ts.map +1 -0
  136. package/dist/elements/memories/MemoryManager.js +435 -0
  137. package/dist/elements/memories/constants.d.ts +42 -0
  138. package/dist/elements/memories/constants.d.ts.map +1 -0
  139. package/dist/elements/memories/constants.js +49 -0
  140. package/dist/elements/memories/index.d.ts +6 -0
  141. package/dist/elements/memories/index.d.ts.map +1 -0
  142. package/dist/elements/memories/index.js +6 -0
  143. package/dist/elements/skills/Skill.d.ts +109 -0
  144. package/dist/elements/skills/Skill.d.ts.map +1 -0
  145. package/dist/elements/skills/Skill.js +381 -0
  146. package/dist/elements/skills/index.d.ts +5 -0
  147. package/dist/elements/skills/index.d.ts.map +1 -0
  148. package/dist/elements/skills/index.js +5 -0
  149. package/dist/elements/templates/Template.d.ts +138 -0
  150. package/dist/elements/templates/Template.d.ts.map +1 -0
  151. package/dist/elements/templates/Template.js +673 -0
  152. package/dist/elements/templates/TemplateManager.d.ts +104 -0
  153. package/dist/elements/templates/TemplateManager.d.ts.map +1 -0
  154. package/dist/elements/templates/TemplateManager.js +501 -0
  155. package/dist/elements/templates/index.d.ts +6 -0
  156. package/dist/elements/templates/index.d.ts.map +1 -0
  157. package/dist/elements/templates/index.js +6 -0
  158. package/dist/errors/SecurityError.d.ts +29 -0
  159. package/dist/errors/SecurityError.d.ts.map +1 -0
  160. package/dist/errors/SecurityError.js +47 -0
  161. package/dist/errors/index.d.ts +2 -0
  162. package/dist/errors/index.d.ts.map +1 -0
  163. package/dist/errors/index.js +2 -0
  164. package/dist/index.barrel.d.ts +21 -0
  165. package/dist/index.barrel.d.ts.map +1 -0
  166. package/dist/index.barrel.js +31 -0
  167. package/dist/index.d.ts +223 -0
  168. package/dist/index.d.ts.map +1 -0
  169. package/dist/index.js +1606 -0
  170. package/dist/marketplace/GitHubClient.d.ts +22 -0
  171. package/dist/marketplace/GitHubClient.d.ts.map +1 -0
  172. package/dist/marketplace/GitHubClient.js +112 -0
  173. package/dist/marketplace/MarketplaceBrowser.d.ts +24 -0
  174. package/dist/marketplace/MarketplaceBrowser.d.ts.map +1 -0
  175. package/dist/marketplace/MarketplaceBrowser.js +115 -0
  176. package/dist/marketplace/MarketplaceSearch.d.ts +18 -0
  177. package/dist/marketplace/MarketplaceSearch.d.ts.map +1 -0
  178. package/dist/marketplace/MarketplaceSearch.js +48 -0
  179. package/dist/marketplace/PersonaDetails.d.ts +22 -0
  180. package/dist/marketplace/PersonaDetails.d.ts.map +1 -0
  181. package/dist/marketplace/PersonaDetails.js +71 -0
  182. package/dist/marketplace/PersonaInstaller.d.ts +25 -0
  183. package/dist/marketplace/PersonaInstaller.d.ts.map +1 -0
  184. package/dist/marketplace/PersonaInstaller.js +100 -0
  185. package/dist/marketplace/PersonaSubmitter.d.ts +19 -0
  186. package/dist/marketplace/PersonaSubmitter.d.ts.map +1 -0
  187. package/dist/marketplace/PersonaSubmitter.js +57 -0
  188. package/dist/marketplace/index.d.ts +10 -0
  189. package/dist/marketplace/index.d.ts.map +1 -0
  190. package/dist/marketplace/index.js +10 -0
  191. package/dist/persona/PersonaElement.d.ts +64 -0
  192. package/dist/persona/PersonaElement.d.ts.map +1 -0
  193. package/dist/persona/PersonaElement.js +223 -0
  194. package/dist/persona/PersonaElementManager.d.ts +97 -0
  195. package/dist/persona/PersonaElementManager.d.ts.map +1 -0
  196. package/dist/persona/PersonaElementManager.js +348 -0
  197. package/dist/persona/PersonaLoader.d.ts +34 -0
  198. package/dist/persona/PersonaLoader.d.ts.map +1 -0
  199. package/dist/persona/PersonaLoader.js +145 -0
  200. package/dist/persona/PersonaManager.d.ts +112 -0
  201. package/dist/persona/PersonaManager.d.ts.map +1 -0
  202. package/dist/persona/PersonaManager.js +341 -0
  203. package/dist/persona/PersonaValidator.d.ts +39 -0
  204. package/dist/persona/PersonaValidator.d.ts.map +1 -0
  205. package/dist/persona/PersonaValidator.js +161 -0
  206. package/dist/persona/export-import/PersonaExporter.d.ts +43 -0
  207. package/dist/persona/export-import/PersonaExporter.d.ts.map +1 -0
  208. package/dist/persona/export-import/PersonaExporter.js +99 -0
  209. package/dist/persona/export-import/PersonaImporter.d.ts +65 -0
  210. package/dist/persona/export-import/PersonaImporter.d.ts.map +1 -0
  211. package/dist/persona/export-import/PersonaImporter.js +315 -0
  212. package/dist/persona/export-import/PersonaSharer.d.ts +60 -0
  213. package/dist/persona/export-import/PersonaSharer.d.ts.map +1 -0
  214. package/dist/persona/export-import/PersonaSharer.js +502 -0
  215. package/dist/persona/export-import/index.d.ts +10 -0
  216. package/dist/persona/export-import/index.d.ts.map +1 -0
  217. package/dist/persona/export-import/index.js +7 -0
  218. package/dist/persona/index.d.ts +7 -0
  219. package/dist/persona/index.d.ts.map +1 -0
  220. package/dist/persona/index.js +7 -0
  221. package/dist/portfolio/MigrationManager.d.ts +44 -0
  222. package/dist/portfolio/MigrationManager.d.ts.map +1 -0
  223. package/dist/portfolio/MigrationManager.js +163 -0
  224. package/dist/portfolio/PortfolioManager.d.ts +54 -0
  225. package/dist/portfolio/PortfolioManager.d.ts.map +1 -0
  226. package/dist/portfolio/PortfolioManager.js +224 -0
  227. package/dist/portfolio/types.d.ts +18 -0
  228. package/dist/portfolio/types.d.ts.map +1 -0
  229. package/dist/portfolio/types.js +13 -0
  230. package/dist/security/InputValidator.d.ts +80 -0
  231. package/dist/security/InputValidator.d.ts.map +1 -0
  232. package/dist/security/InputValidator.js +448 -0
  233. package/dist/security/audit/SecurityAuditor.d.ts +44 -0
  234. package/dist/security/audit/SecurityAuditor.d.ts.map +1 -0
  235. package/dist/security/audit/SecurityAuditor.js +274 -0
  236. package/dist/security/audit/config/suppressions.d.ts +34 -0
  237. package/dist/security/audit/config/suppressions.d.ts.map +1 -0
  238. package/dist/security/audit/config/suppressions.js +575 -0
  239. package/dist/security/audit/index.d.ts +14 -0
  240. package/dist/security/audit/index.d.ts.map +1 -0
  241. package/dist/security/audit/index.js +15 -0
  242. package/dist/security/audit/reporters/ConsoleReporter.d.ts +46 -0
  243. package/dist/security/audit/reporters/ConsoleReporter.d.ts.map +1 -0
  244. package/dist/security/audit/reporters/ConsoleReporter.js +174 -0
  245. package/dist/security/audit/reporters/JsonReporter.d.ts +13 -0
  246. package/dist/security/audit/reporters/JsonReporter.d.ts.map +1 -0
  247. package/dist/security/audit/reporters/JsonReporter.js +25 -0
  248. package/dist/security/audit/reporters/MarkdownReporter.d.ts +13 -0
  249. package/dist/security/audit/reporters/MarkdownReporter.d.ts.map +1 -0
  250. package/dist/security/audit/reporters/MarkdownReporter.js +79 -0
  251. package/dist/security/audit/rules/SecurityRules.d.ts +20 -0
  252. package/dist/security/audit/rules/SecurityRules.d.ts.map +1 -0
  253. package/dist/security/audit/rules/SecurityRules.js +244 -0
  254. package/dist/security/audit/scanners/CodeScanner.d.ts +47 -0
  255. package/dist/security/audit/scanners/CodeScanner.d.ts.map +1 -0
  256. package/dist/security/audit/scanners/CodeScanner.js +174 -0
  257. package/dist/security/audit/scanners/ConfigurationScanner.d.ts +13 -0
  258. package/dist/security/audit/scanners/ConfigurationScanner.d.ts.map +1 -0
  259. package/dist/security/audit/scanners/ConfigurationScanner.js +22 -0
  260. package/dist/security/audit/scanners/DependencyScanner.d.ts +13 -0
  261. package/dist/security/audit/scanners/DependencyScanner.d.ts.map +1 -0
  262. package/dist/security/audit/scanners/DependencyScanner.js +22 -0
  263. package/dist/security/audit/types.d.ts +94 -0
  264. package/dist/security/audit/types.d.ts.map +1 -0
  265. package/dist/security/audit/types.js +6 -0
  266. package/dist/security/commandValidator.d.ts +7 -0
  267. package/dist/security/commandValidator.d.ts.map +1 -0
  268. package/dist/security/commandValidator.js +78 -0
  269. package/dist/security/constants.d.ts +24 -0
  270. package/dist/security/constants.d.ts.map +1 -0
  271. package/dist/security/constants.js +26 -0
  272. package/dist/security/contentValidator.d.ts +47 -0
  273. package/dist/security/contentValidator.d.ts.map +1 -0
  274. package/dist/security/contentValidator.js +301 -0
  275. package/dist/security/errorHandler.d.ts +42 -0
  276. package/dist/security/errorHandler.d.ts.map +1 -0
  277. package/dist/security/errorHandler.js +166 -0
  278. package/dist/security/errors.d.ts +14 -0
  279. package/dist/security/errors.d.ts.map +1 -0
  280. package/dist/security/errors.js +28 -0
  281. package/dist/security/fileLockManager.d.ts +70 -0
  282. package/dist/security/fileLockManager.d.ts.map +1 -0
  283. package/dist/security/fileLockManager.js +187 -0
  284. package/dist/security/index.d.ts +12 -0
  285. package/dist/security/index.d.ts.map +1 -0
  286. package/dist/security/index.js +14 -0
  287. package/dist/security/pathValidator.d.ts +9 -0
  288. package/dist/security/pathValidator.d.ts.map +1 -0
  289. package/dist/security/pathValidator.js +102 -0
  290. package/dist/security/regexValidator.d.ts +59 -0
  291. package/dist/security/regexValidator.d.ts.map +1 -0
  292. package/dist/security/regexValidator.js +214 -0
  293. package/dist/security/secureYamlParser.d.ts +46 -0
  294. package/dist/security/secureYamlParser.d.ts.map +1 -0
  295. package/dist/security/secureYamlParser.js +203 -0
  296. package/dist/security/securityMonitor.d.ts +58 -0
  297. package/dist/security/securityMonitor.d.ts.map +1 -0
  298. package/dist/security/securityMonitor.js +108 -0
  299. package/dist/security/tokenManager.d.ts +85 -0
  300. package/dist/security/tokenManager.d.ts.map +1 -0
  301. package/dist/security/tokenManager.js +286 -0
  302. package/dist/security/validators/unicodeValidator.d.ts +97 -0
  303. package/dist/security/validators/unicodeValidator.d.ts.map +1 -0
  304. package/dist/security/validators/unicodeValidator.js +312 -0
  305. package/dist/security/yamlValidator.d.ts +21 -0
  306. package/dist/security/yamlValidator.d.ts.map +1 -0
  307. package/dist/security/yamlValidator.js +164 -0
  308. package/dist/server/ServerSetup.d.ts +35 -0
  309. package/dist/server/ServerSetup.d.ts.map +1 -0
  310. package/dist/server/ServerSetup.js +116 -0
  311. package/dist/server/index.d.ts +7 -0
  312. package/dist/server/index.d.ts.map +1 -0
  313. package/dist/server/index.js +7 -0
  314. package/dist/server/startup.d.ts +31 -0
  315. package/dist/server/startup.d.ts.map +1 -0
  316. package/dist/server/startup.js +67 -0
  317. package/dist/server/tools/CollectionTools.d.ts +10 -0
  318. package/dist/server/tools/CollectionTools.d.ts.map +1 -0
  319. package/dist/server/tools/CollectionTools.js +96 -0
  320. package/dist/server/tools/ConfigTools.d.ts +10 -0
  321. package/dist/server/tools/ConfigTools.d.ts.map +1 -0
  322. package/dist/server/tools/ConfigTools.js +63 -0
  323. package/dist/server/tools/MarketplaceTools.d.ts +10 -0
  324. package/dist/server/tools/MarketplaceTools.d.ts.map +1 -0
  325. package/dist/server/tools/MarketplaceTools.js +96 -0
  326. package/dist/server/tools/PersonaTools.d.ts +10 -0
  327. package/dist/server/tools/PersonaTools.d.ts.map +1 -0
  328. package/dist/server/tools/PersonaTools.js +257 -0
  329. package/dist/server/tools/ToolRegistry.d.ts +37 -0
  330. package/dist/server/tools/ToolRegistry.d.ts.map +1 -0
  331. package/dist/server/tools/ToolRegistry.js +40 -0
  332. package/dist/server/tools/UpdateTools.d.ts +10 -0
  333. package/dist/server/tools/UpdateTools.d.ts.map +1 -0
  334. package/dist/server/tools/UpdateTools.js +64 -0
  335. package/dist/server/tools/UserTools.d.ts +10 -0
  336. package/dist/server/tools/UserTools.d.ts.map +1 -0
  337. package/dist/server/tools/UserTools.js +51 -0
  338. package/dist/server/tools/index.d.ts +10 -0
  339. package/dist/server/tools/index.d.ts.map +1 -0
  340. package/dist/server/tools/index.js +10 -0
  341. package/dist/server/types.d.ts +34 -0
  342. package/dist/server/types.d.ts.map +1 -0
  343. package/dist/server/types.js +5 -0
  344. package/dist/src/cache/APICache.d.ts +23 -0
  345. package/dist/src/cache/APICache.d.ts.map +1 -0
  346. package/dist/src/cache/APICache.js +42 -0
  347. package/dist/src/cache/index.d.ts +5 -0
  348. package/dist/src/cache/index.d.ts.map +1 -0
  349. package/dist/src/cache/index.js +5 -0
  350. package/dist/src/config/constants.d.ts +25 -0
  351. package/dist/src/config/constants.d.ts.map +1 -0
  352. package/dist/src/config/constants.js +30 -0
  353. package/dist/src/config/index.d.ts +6 -0
  354. package/dist/src/config/index.d.ts.map +1 -0
  355. package/dist/src/config/index.js +6 -0
  356. package/dist/src/config/indicator-config.d.ts +107 -0
  357. package/dist/src/config/indicator-config.d.ts.map +1 -0
  358. package/dist/src/config/indicator-config.js +158 -0
  359. package/dist/src/constants/defaultPersonas.d.ts +10 -0
  360. package/dist/src/constants/defaultPersonas.d.ts.map +1 -0
  361. package/dist/src/constants/defaultPersonas.js +18 -0
  362. package/dist/src/constants/limits.d.ts +10 -0
  363. package/dist/src/constants/limits.d.ts.map +1 -0
  364. package/dist/src/constants/limits.js +13 -0
  365. package/dist/src/errors/SecurityError.d.ts +29 -0
  366. package/dist/src/errors/SecurityError.d.ts.map +1 -0
  367. package/dist/src/errors/SecurityError.js +47 -0
  368. package/dist/src/errors/index.d.ts +2 -0
  369. package/dist/src/errors/index.d.ts.map +1 -0
  370. package/dist/src/errors/index.js +2 -0
  371. package/dist/src/index.barrel.d.ts +21 -0
  372. package/dist/src/index.barrel.d.ts.map +1 -0
  373. package/dist/src/index.barrel.js +31 -0
  374. package/dist/src/index.d.ts +220 -0
  375. package/dist/src/index.d.ts.map +1 -0
  376. package/dist/src/index.js +1559 -0
  377. package/dist/src/marketplace/GitHubClient.d.ts +22 -0
  378. package/dist/src/marketplace/GitHubClient.d.ts.map +1 -0
  379. package/dist/src/marketplace/GitHubClient.js +112 -0
  380. package/dist/src/marketplace/MarketplaceBrowser.d.ts +21 -0
  381. package/dist/src/marketplace/MarketplaceBrowser.d.ts.map +1 -0
  382. package/dist/src/marketplace/MarketplaceBrowser.js +45 -0
  383. package/dist/src/marketplace/MarketplaceSearch.d.ts +18 -0
  384. package/dist/src/marketplace/MarketplaceSearch.d.ts.map +1 -0
  385. package/dist/src/marketplace/MarketplaceSearch.js +36 -0
  386. package/dist/src/marketplace/PersonaDetails.d.ts +22 -0
  387. package/dist/src/marketplace/PersonaDetails.d.ts.map +1 -0
  388. package/dist/src/marketplace/PersonaDetails.js +71 -0
  389. package/dist/src/marketplace/PersonaInstaller.d.ts +25 -0
  390. package/dist/src/marketplace/PersonaInstaller.d.ts.map +1 -0
  391. package/dist/src/marketplace/PersonaInstaller.js +100 -0
  392. package/dist/src/marketplace/PersonaSubmitter.d.ts +19 -0
  393. package/dist/src/marketplace/PersonaSubmitter.d.ts.map +1 -0
  394. package/dist/src/marketplace/PersonaSubmitter.js +57 -0
  395. package/dist/src/marketplace/index.d.ts +10 -0
  396. package/dist/src/marketplace/index.d.ts.map +1 -0
  397. package/dist/src/marketplace/index.js +10 -0
  398. package/dist/src/persona/PersonaLoader.d.ts +33 -0
  399. package/dist/src/persona/PersonaLoader.d.ts.map +1 -0
  400. package/dist/src/persona/PersonaLoader.js +139 -0
  401. package/dist/src/persona/PersonaManager.d.ts +112 -0
  402. package/dist/src/persona/PersonaManager.d.ts.map +1 -0
  403. package/dist/src/persona/PersonaManager.js +341 -0
  404. package/dist/src/persona/PersonaValidator.d.ts +33 -0
  405. package/dist/src/persona/PersonaValidator.d.ts.map +1 -0
  406. package/dist/src/persona/PersonaValidator.js +157 -0
  407. package/dist/src/persona/export-import/PersonaExporter.d.ts +43 -0
  408. package/dist/src/persona/export-import/PersonaExporter.d.ts.map +1 -0
  409. package/dist/src/persona/export-import/PersonaExporter.js +99 -0
  410. package/dist/src/persona/export-import/PersonaImporter.d.ts +65 -0
  411. package/dist/src/persona/export-import/PersonaImporter.d.ts.map +1 -0
  412. package/dist/src/persona/export-import/PersonaImporter.js +313 -0
  413. package/dist/src/persona/export-import/PersonaSharer.d.ts +60 -0
  414. package/dist/src/persona/export-import/PersonaSharer.d.ts.map +1 -0
  415. package/dist/src/persona/export-import/PersonaSharer.js +363 -0
  416. package/dist/src/persona/export-import/index.d.ts +10 -0
  417. package/dist/src/persona/export-import/index.d.ts.map +1 -0
  418. package/dist/src/persona/export-import/index.js +7 -0
  419. package/dist/src/persona/index.d.ts +7 -0
  420. package/dist/src/persona/index.d.ts.map +1 -0
  421. package/dist/src/persona/index.js +7 -0
  422. package/dist/src/security/InputValidator.d.ts +69 -0
  423. package/dist/src/security/InputValidator.d.ts.map +1 -0
  424. package/dist/src/security/InputValidator.js +381 -0
  425. package/dist/src/security/commandValidator.d.ts +7 -0
  426. package/dist/src/security/commandValidator.d.ts.map +1 -0
  427. package/dist/src/security/commandValidator.js +77 -0
  428. package/dist/src/security/constants.d.ts +21 -0
  429. package/dist/src/security/constants.d.ts.map +1 -0
  430. package/dist/src/security/constants.js +23 -0
  431. package/dist/src/security/contentValidator.d.ts +47 -0
  432. package/dist/src/security/contentValidator.d.ts.map +1 -0
  433. package/dist/src/security/contentValidator.js +188 -0
  434. package/dist/src/security/fileLockManager.d.ts +70 -0
  435. package/dist/src/security/fileLockManager.d.ts.map +1 -0
  436. package/dist/src/security/fileLockManager.js +187 -0
  437. package/dist/src/security/index.d.ts +12 -0
  438. package/dist/src/security/index.d.ts.map +1 -0
  439. package/dist/src/security/index.js +14 -0
  440. package/dist/src/security/pathValidator.d.ts +9 -0
  441. package/dist/src/security/pathValidator.d.ts.map +1 -0
  442. package/dist/src/security/pathValidator.js +97 -0
  443. package/dist/src/security/secureYamlParser.d.ts +46 -0
  444. package/dist/src/security/secureYamlParser.d.ts.map +1 -0
  445. package/dist/src/security/secureYamlParser.js +203 -0
  446. package/dist/src/security/securityMonitor.d.ts +58 -0
  447. package/dist/src/security/securityMonitor.d.ts.map +1 -0
  448. package/dist/src/security/securityMonitor.js +108 -0
  449. package/dist/src/security/tokenManager.d.ts +59 -0
  450. package/dist/src/security/tokenManager.d.ts.map +1 -0
  451. package/dist/src/security/tokenManager.js +216 -0
  452. package/dist/src/security/yamlValidator.d.ts +20 -0
  453. package/dist/src/security/yamlValidator.d.ts.map +1 -0
  454. package/dist/src/security/yamlValidator.js +138 -0
  455. package/dist/src/server/ServerSetup.d.ts +31 -0
  456. package/dist/src/server/ServerSetup.d.ts.map +1 -0
  457. package/dist/src/server/ServerSetup.js +79 -0
  458. package/dist/src/server/index.d.ts +7 -0
  459. package/dist/src/server/index.d.ts.map +1 -0
  460. package/dist/src/server/index.js +7 -0
  461. package/dist/src/server/tools/ConfigTools.d.ts +10 -0
  462. package/dist/src/server/tools/ConfigTools.d.ts.map +1 -0
  463. package/dist/src/server/tools/ConfigTools.js +63 -0
  464. package/dist/src/server/tools/MarketplaceTools.d.ts +10 -0
  465. package/dist/src/server/tools/MarketplaceTools.d.ts.map +1 -0
  466. package/dist/src/server/tools/MarketplaceTools.js +92 -0
  467. package/dist/src/server/tools/PersonaTools.d.ts +10 -0
  468. package/dist/src/server/tools/PersonaTools.d.ts.map +1 -0
  469. package/dist/src/server/tools/PersonaTools.js +257 -0
  470. package/dist/src/server/tools/ToolRegistry.d.ts +37 -0
  471. package/dist/src/server/tools/ToolRegistry.d.ts.map +1 -0
  472. package/dist/src/server/tools/ToolRegistry.js +40 -0
  473. package/dist/src/server/tools/UpdateTools.d.ts +10 -0
  474. package/dist/src/server/tools/UpdateTools.d.ts.map +1 -0
  475. package/dist/src/server/tools/UpdateTools.js +64 -0
  476. package/dist/src/server/tools/UserTools.d.ts +10 -0
  477. package/dist/src/server/tools/UserTools.d.ts.map +1 -0
  478. package/dist/src/server/tools/UserTools.js +51 -0
  479. package/dist/src/server/tools/index.d.ts +10 -0
  480. package/dist/src/server/tools/index.d.ts.map +1 -0
  481. package/dist/src/server/tools/index.js +10 -0
  482. package/dist/src/server/types.d.ts +34 -0
  483. package/dist/src/server/types.d.ts.map +1 -0
  484. package/dist/src/server/types.js +5 -0
  485. package/dist/src/tools/debug.d.ts +20 -0
  486. package/dist/src/tools/debug.d.ts.map +1 -0
  487. package/dist/src/tools/debug.js +37 -0
  488. package/dist/src/types/cache.d.ts +8 -0
  489. package/dist/src/types/cache.d.ts.map +1 -0
  490. package/dist/src/types/cache.js +5 -0
  491. package/dist/src/types/index.d.ts +8 -0
  492. package/dist/src/types/index.d.ts.map +1 -0
  493. package/dist/src/types/index.js +8 -0
  494. package/dist/src/types/marketplace.d.ts +23 -0
  495. package/dist/src/types/marketplace.d.ts.map +1 -0
  496. package/dist/src/types/marketplace.js +5 -0
  497. package/dist/src/types/mcp.d.ts +161 -0
  498. package/dist/src/types/mcp.d.ts.map +1 -0
  499. package/dist/src/types/mcp.js +75 -0
  500. package/dist/src/types/persona.d.ts +30 -0
  501. package/dist/src/types/persona.d.ts.map +1 -0
  502. package/dist/src/types/persona.js +5 -0
  503. package/dist/src/update/BackupManager.d.ts +46 -0
  504. package/dist/src/update/BackupManager.d.ts.map +1 -0
  505. package/dist/src/update/BackupManager.js +261 -0
  506. package/dist/src/update/DependencyChecker.d.ts +41 -0
  507. package/dist/src/update/DependencyChecker.d.ts.map +1 -0
  508. package/dist/src/update/DependencyChecker.js +132 -0
  509. package/dist/src/update/RateLimiter.d.ts +80 -0
  510. package/dist/src/update/RateLimiter.d.ts.map +1 -0
  511. package/dist/src/update/RateLimiter.js +172 -0
  512. package/dist/src/update/SignatureVerifier.d.ts +71 -0
  513. package/dist/src/update/SignatureVerifier.d.ts.map +1 -0
  514. package/dist/src/update/SignatureVerifier.js +214 -0
  515. package/dist/src/update/UpdateChecker.d.ts +127 -0
  516. package/dist/src/update/UpdateChecker.d.ts.map +1 -0
  517. package/dist/src/update/UpdateChecker.js +460 -0
  518. package/dist/src/update/UpdateManager.d.ts +41 -0
  519. package/dist/src/update/UpdateManager.d.ts.map +1 -0
  520. package/dist/src/update/UpdateManager.js +260 -0
  521. package/dist/src/update/VersionManager.d.ts +31 -0
  522. package/dist/src/update/VersionManager.d.ts.map +1 -0
  523. package/dist/src/update/VersionManager.js +134 -0
  524. package/dist/src/update/index.d.ts +9 -0
  525. package/dist/src/update/index.d.ts.map +1 -0
  526. package/dist/src/update/index.js +9 -0
  527. package/dist/src/utils/filesystem.d.ts +32 -0
  528. package/dist/src/utils/filesystem.d.ts.map +1 -0
  529. package/dist/src/utils/filesystem.js +73 -0
  530. package/dist/src/utils/git.d.ts +32 -0
  531. package/dist/src/utils/git.d.ts.map +1 -0
  532. package/dist/src/utils/git.js +65 -0
  533. package/dist/src/utils/index.d.ts +7 -0
  534. package/dist/src/utils/index.d.ts.map +1 -0
  535. package/dist/src/utils/index.js +7 -0
  536. package/dist/src/utils/logger.d.ts +45 -0
  537. package/dist/src/utils/logger.d.ts.map +1 -0
  538. package/dist/src/utils/logger.js +91 -0
  539. package/dist/src/utils/version.d.ts +25 -0
  540. package/dist/src/utils/version.d.ts.map +1 -0
  541. package/dist/src/utils/version.js +97 -0
  542. package/dist/test/src/cache/APICache.d.ts +23 -0
  543. package/dist/test/src/cache/APICache.d.ts.map +1 -0
  544. package/dist/test/src/cache/APICache.js +42 -0
  545. package/dist/test/src/cache/index.d.ts +5 -0
  546. package/dist/test/src/cache/index.d.ts.map +1 -0
  547. package/dist/test/src/cache/index.js +5 -0
  548. package/dist/test/src/collection/CollectionBrowser.d.ts +24 -0
  549. package/dist/test/src/collection/CollectionBrowser.d.ts.map +1 -0
  550. package/dist/test/src/collection/CollectionBrowser.js +115 -0
  551. package/dist/test/src/collection/CollectionSearch.d.ts +18 -0
  552. package/dist/test/src/collection/CollectionSearch.d.ts.map +1 -0
  553. package/dist/test/src/collection/CollectionSearch.js +48 -0
  554. package/dist/test/src/collection/GitHubClient.d.ts +22 -0
  555. package/dist/test/src/collection/GitHubClient.d.ts.map +1 -0
  556. package/dist/test/src/collection/GitHubClient.js +114 -0
  557. package/dist/test/src/collection/PersonaDetails.d.ts +22 -0
  558. package/dist/test/src/collection/PersonaDetails.d.ts.map +1 -0
  559. package/dist/test/src/collection/PersonaDetails.js +71 -0
  560. package/dist/test/src/collection/PersonaInstaller.d.ts +26 -0
  561. package/dist/test/src/collection/PersonaInstaller.d.ts.map +1 -0
  562. package/dist/test/src/collection/PersonaInstaller.js +103 -0
  563. package/dist/test/src/collection/PersonaSubmitter.d.ts +19 -0
  564. package/dist/test/src/collection/PersonaSubmitter.d.ts.map +1 -0
  565. package/dist/test/src/collection/PersonaSubmitter.js +57 -0
  566. package/dist/test/src/collection/index.d.ts +10 -0
  567. package/dist/test/src/collection/index.d.ts.map +1 -0
  568. package/dist/test/src/collection/index.js +10 -0
  569. package/dist/test/src/config/constants.d.ts +25 -0
  570. package/dist/test/src/config/constants.d.ts.map +1 -0
  571. package/dist/test/src/config/constants.js +30 -0
  572. package/dist/test/src/config/index.d.ts +6 -0
  573. package/dist/test/src/config/index.d.ts.map +1 -0
  574. package/dist/test/src/config/index.js +6 -0
  575. package/dist/test/src/config/indicator-config.d.ts +107 -0
  576. package/dist/test/src/config/indicator-config.d.ts.map +1 -0
  577. package/dist/test/src/config/indicator-config.js +158 -0
  578. package/dist/test/src/constants/defaultPersonas.d.ts +10 -0
  579. package/dist/test/src/constants/defaultPersonas.d.ts.map +1 -0
  580. package/dist/test/src/constants/defaultPersonas.js +18 -0
  581. package/dist/test/src/constants/limits.d.ts +10 -0
  582. package/dist/test/src/constants/limits.d.ts.map +1 -0
  583. package/dist/test/src/constants/limits.js +13 -0
  584. package/dist/test/src/elements/BaseElement.d.ts +81 -0
  585. package/dist/test/src/elements/BaseElement.d.ts.map +1 -0
  586. package/dist/test/src/elements/BaseElement.js +381 -0
  587. package/dist/test/src/elements/FeedbackProcessor.d.ts +57 -0
  588. package/dist/test/src/elements/FeedbackProcessor.d.ts.map +1 -0
  589. package/dist/test/src/elements/FeedbackProcessor.js +418 -0
  590. package/dist/test/src/elements/agents/Agent.d.ts +145 -0
  591. package/dist/test/src/elements/agents/Agent.d.ts.map +1 -0
  592. package/dist/test/src/elements/agents/Agent.js +848 -0
  593. package/dist/test/src/elements/agents/AgentManager.d.ts +125 -0
  594. package/dist/test/src/elements/agents/AgentManager.d.ts.map +1 -0
  595. package/dist/test/src/elements/agents/AgentManager.js +608 -0
  596. package/dist/test/src/elements/agents/constants.d.ts +42 -0
  597. package/dist/test/src/elements/agents/constants.d.ts.map +1 -0
  598. package/dist/test/src/elements/agents/constants.js +45 -0
  599. package/dist/test/src/elements/agents/goalTemplates.d.ts +44 -0
  600. package/dist/test/src/elements/agents/goalTemplates.d.ts.map +1 -0
  601. package/dist/test/src/elements/agents/goalTemplates.js +297 -0
  602. package/dist/test/src/elements/agents/index.d.ts +8 -0
  603. package/dist/test/src/elements/agents/index.d.ts.map +1 -0
  604. package/dist/test/src/elements/agents/index.js +8 -0
  605. package/dist/test/src/elements/agents/ruleEngineConfig.d.ts +76 -0
  606. package/dist/test/src/elements/agents/ruleEngineConfig.d.ts.map +1 -0
  607. package/dist/test/src/elements/agents/ruleEngineConfig.js +143 -0
  608. package/dist/test/src/elements/agents/types.d.ts +97 -0
  609. package/dist/test/src/elements/agents/types.d.ts.map +1 -0
  610. package/dist/test/src/elements/agents/types.js +5 -0
  611. package/dist/test/src/elements/index.d.ts +6 -0
  612. package/dist/test/src/elements/index.d.ts.map +1 -0
  613. package/dist/test/src/elements/index.js +6 -0
  614. package/dist/test/src/elements/memories/Memory.d.ts +110 -0
  615. package/dist/test/src/elements/memories/Memory.d.ts.map +1 -0
  616. package/dist/test/src/elements/memories/Memory.js +470 -0
  617. package/dist/test/src/elements/memories/MemoryManager.d.ts +86 -0
  618. package/dist/test/src/elements/memories/MemoryManager.d.ts.map +1 -0
  619. package/dist/test/src/elements/memories/MemoryManager.js +435 -0
  620. package/dist/test/src/elements/memories/constants.d.ts +42 -0
  621. package/dist/test/src/elements/memories/constants.d.ts.map +1 -0
  622. package/dist/test/src/elements/memories/constants.js +49 -0
  623. package/dist/test/src/elements/memories/index.d.ts +6 -0
  624. package/dist/test/src/elements/memories/index.d.ts.map +1 -0
  625. package/dist/test/src/elements/memories/index.js +6 -0
  626. package/dist/test/src/elements/skills/Skill.d.ts +109 -0
  627. package/dist/test/src/elements/skills/Skill.d.ts.map +1 -0
  628. package/dist/test/src/elements/skills/Skill.js +381 -0
  629. package/dist/test/src/elements/templates/Template.d.ts +138 -0
  630. package/dist/test/src/elements/templates/Template.d.ts.map +1 -0
  631. package/dist/test/src/elements/templates/Template.js +673 -0
  632. package/dist/test/src/elements/templates/TemplateManager.d.ts +104 -0
  633. package/dist/test/src/elements/templates/TemplateManager.d.ts.map +1 -0
  634. package/dist/test/src/elements/templates/TemplateManager.js +496 -0
  635. package/dist/test/src/elements/templates/index.d.ts +6 -0
  636. package/dist/test/src/elements/templates/index.d.ts.map +1 -0
  637. package/dist/test/src/elements/templates/index.js +6 -0
  638. package/dist/test/src/errors/SecurityError.d.ts +29 -0
  639. package/dist/test/src/errors/SecurityError.d.ts.map +1 -0
  640. package/dist/test/src/errors/SecurityError.js +47 -0
  641. package/dist/test/src/errors/index.d.ts +2 -0
  642. package/dist/test/src/errors/index.d.ts.map +1 -0
  643. package/dist/test/src/errors/index.js +2 -0
  644. package/dist/test/src/index.barrel.d.ts +21 -0
  645. package/dist/test/src/index.barrel.d.ts.map +1 -0
  646. package/dist/test/src/index.barrel.js +31 -0
  647. package/dist/test/src/index.d.ts +223 -0
  648. package/dist/test/src/index.d.ts.map +1 -0
  649. package/dist/test/src/index.js +1594 -0
  650. package/dist/test/src/marketplace/GitHubClient.d.ts +22 -0
  651. package/dist/test/src/marketplace/GitHubClient.d.ts.map +1 -0
  652. package/dist/test/src/marketplace/GitHubClient.js +112 -0
  653. package/dist/test/src/marketplace/MarketplaceBrowser.d.ts +21 -0
  654. package/dist/test/src/marketplace/MarketplaceBrowser.d.ts.map +1 -0
  655. package/dist/test/src/marketplace/MarketplaceBrowser.js +45 -0
  656. package/dist/test/src/marketplace/MarketplaceSearch.d.ts +18 -0
  657. package/dist/test/src/marketplace/MarketplaceSearch.d.ts.map +1 -0
  658. package/dist/test/src/marketplace/MarketplaceSearch.js +36 -0
  659. package/dist/test/src/marketplace/PersonaDetails.d.ts +22 -0
  660. package/dist/test/src/marketplace/PersonaDetails.d.ts.map +1 -0
  661. package/dist/test/src/marketplace/PersonaDetails.js +71 -0
  662. package/dist/test/src/marketplace/PersonaInstaller.d.ts +25 -0
  663. package/dist/test/src/marketplace/PersonaInstaller.d.ts.map +1 -0
  664. package/dist/test/src/marketplace/PersonaInstaller.js +100 -0
  665. package/dist/test/src/marketplace/PersonaSubmitter.d.ts +19 -0
  666. package/dist/test/src/marketplace/PersonaSubmitter.d.ts.map +1 -0
  667. package/dist/test/src/marketplace/PersonaSubmitter.js +57 -0
  668. package/dist/test/src/marketplace/index.d.ts +10 -0
  669. package/dist/test/src/marketplace/index.d.ts.map +1 -0
  670. package/dist/test/src/marketplace/index.js +10 -0
  671. package/dist/test/src/persona/PersonaElement.d.ts +64 -0
  672. package/dist/test/src/persona/PersonaElement.d.ts.map +1 -0
  673. package/dist/test/src/persona/PersonaElement.js +223 -0
  674. package/dist/test/src/persona/PersonaElementManager.d.ts +97 -0
  675. package/dist/test/src/persona/PersonaElementManager.d.ts.map +1 -0
  676. package/dist/test/src/persona/PersonaElementManager.js +342 -0
  677. package/dist/test/src/persona/PersonaLoader.d.ts +34 -0
  678. package/dist/test/src/persona/PersonaLoader.d.ts.map +1 -0
  679. package/dist/test/src/persona/PersonaLoader.js +145 -0
  680. package/dist/test/src/persona/PersonaManager.d.ts +112 -0
  681. package/dist/test/src/persona/PersonaManager.d.ts.map +1 -0
  682. package/dist/test/src/persona/PersonaManager.js +341 -0
  683. package/dist/test/src/persona/PersonaValidator.d.ts +33 -0
  684. package/dist/test/src/persona/PersonaValidator.d.ts.map +1 -0
  685. package/dist/test/src/persona/PersonaValidator.js +157 -0
  686. package/dist/test/src/persona/export-import/PersonaExporter.d.ts +43 -0
  687. package/dist/test/src/persona/export-import/PersonaExporter.d.ts.map +1 -0
  688. package/dist/test/src/persona/export-import/PersonaExporter.js +99 -0
  689. package/dist/test/src/persona/export-import/PersonaImporter.d.ts +65 -0
  690. package/dist/test/src/persona/export-import/PersonaImporter.d.ts.map +1 -0
  691. package/dist/test/src/persona/export-import/PersonaImporter.js +315 -0
  692. package/dist/test/src/persona/export-import/PersonaSharer.d.ts +60 -0
  693. package/dist/test/src/persona/export-import/PersonaSharer.d.ts.map +1 -0
  694. package/dist/test/src/persona/export-import/PersonaSharer.js +502 -0
  695. package/dist/test/src/persona/export-import/index.d.ts +10 -0
  696. package/dist/test/src/persona/export-import/index.d.ts.map +1 -0
  697. package/dist/test/src/persona/export-import/index.js +7 -0
  698. package/dist/test/src/persona/index.d.ts +7 -0
  699. package/dist/test/src/persona/index.d.ts.map +1 -0
  700. package/dist/test/src/persona/index.js +7 -0
  701. package/dist/test/src/portfolio/MigrationManager.d.ts +44 -0
  702. package/dist/test/src/portfolio/MigrationManager.d.ts.map +1 -0
  703. package/dist/test/src/portfolio/MigrationManager.js +163 -0
  704. package/dist/test/src/portfolio/PortfolioManager.d.ts +54 -0
  705. package/dist/test/src/portfolio/PortfolioManager.d.ts.map +1 -0
  706. package/dist/test/src/portfolio/PortfolioManager.js +224 -0
  707. package/dist/test/src/portfolio/types.d.ts +18 -0
  708. package/dist/test/src/portfolio/types.d.ts.map +1 -0
  709. package/dist/test/src/portfolio/types.js +13 -0
  710. package/dist/test/src/security/InputValidator.d.ts +80 -0
  711. package/dist/test/src/security/InputValidator.d.ts.map +1 -0
  712. package/dist/test/src/security/InputValidator.js +436 -0
  713. package/dist/test/src/security/audit/SecurityAuditor.d.ts +44 -0
  714. package/dist/test/src/security/audit/SecurityAuditor.d.ts.map +1 -0
  715. package/dist/test/src/security/audit/SecurityAuditor.js +274 -0
  716. package/dist/test/src/security/audit/config/suppressions.d.ts +34 -0
  717. package/dist/test/src/security/audit/config/suppressions.d.ts.map +1 -0
  718. package/dist/test/src/security/audit/config/suppressions.js +575 -0
  719. package/dist/test/src/security/audit/index.d.ts +14 -0
  720. package/dist/test/src/security/audit/index.d.ts.map +1 -0
  721. package/dist/test/src/security/audit/index.js +15 -0
  722. package/dist/test/src/security/audit/reporters/ConsoleReporter.d.ts +46 -0
  723. package/dist/test/src/security/audit/reporters/ConsoleReporter.d.ts.map +1 -0
  724. package/dist/test/src/security/audit/reporters/ConsoleReporter.js +174 -0
  725. package/dist/test/src/security/audit/reporters/JsonReporter.d.ts +13 -0
  726. package/dist/test/src/security/audit/reporters/JsonReporter.d.ts.map +1 -0
  727. package/dist/test/src/security/audit/reporters/JsonReporter.js +25 -0
  728. package/dist/test/src/security/audit/reporters/MarkdownReporter.d.ts +13 -0
  729. package/dist/test/src/security/audit/reporters/MarkdownReporter.d.ts.map +1 -0
  730. package/dist/test/src/security/audit/reporters/MarkdownReporter.js +79 -0
  731. package/dist/test/src/security/audit/rules/SecurityRules.d.ts +20 -0
  732. package/dist/test/src/security/audit/rules/SecurityRules.d.ts.map +1 -0
  733. package/dist/test/src/security/audit/rules/SecurityRules.js +244 -0
  734. package/dist/test/src/security/audit/scanners/CodeScanner.d.ts +47 -0
  735. package/dist/test/src/security/audit/scanners/CodeScanner.d.ts.map +1 -0
  736. package/dist/test/src/security/audit/scanners/CodeScanner.js +174 -0
  737. package/dist/test/src/security/audit/scanners/ConfigurationScanner.d.ts +13 -0
  738. package/dist/test/src/security/audit/scanners/ConfigurationScanner.d.ts.map +1 -0
  739. package/dist/test/src/security/audit/scanners/ConfigurationScanner.js +22 -0
  740. package/dist/test/src/security/audit/scanners/DependencyScanner.d.ts +13 -0
  741. package/dist/test/src/security/audit/scanners/DependencyScanner.d.ts.map +1 -0
  742. package/dist/test/src/security/audit/scanners/DependencyScanner.js +22 -0
  743. package/dist/test/src/security/audit/types.d.ts +94 -0
  744. package/dist/test/src/security/audit/types.d.ts.map +1 -0
  745. package/dist/test/src/security/audit/types.js +6 -0
  746. package/dist/test/src/security/commandValidator.d.ts +7 -0
  747. package/dist/test/src/security/commandValidator.d.ts.map +1 -0
  748. package/dist/test/src/security/commandValidator.js +78 -0
  749. package/dist/test/src/security/constants.d.ts +24 -0
  750. package/dist/test/src/security/constants.d.ts.map +1 -0
  751. package/dist/test/src/security/constants.js +26 -0
  752. package/dist/test/src/security/contentValidator.d.ts +47 -0
  753. package/dist/test/src/security/contentValidator.d.ts.map +1 -0
  754. package/dist/test/src/security/contentValidator.js +301 -0
  755. package/dist/test/src/security/errors.d.ts +14 -0
  756. package/dist/test/src/security/errors.d.ts.map +1 -0
  757. package/dist/test/src/security/errors.js +28 -0
  758. package/dist/test/src/security/fileLockManager.d.ts +70 -0
  759. package/dist/test/src/security/fileLockManager.d.ts.map +1 -0
  760. package/dist/test/src/security/fileLockManager.js +187 -0
  761. package/dist/test/src/security/index.d.ts +12 -0
  762. package/dist/test/src/security/index.d.ts.map +1 -0
  763. package/dist/test/src/security/index.js +14 -0
  764. package/dist/test/src/security/pathValidator.d.ts +9 -0
  765. package/dist/test/src/security/pathValidator.d.ts.map +1 -0
  766. package/dist/test/src/security/pathValidator.js +98 -0
  767. package/dist/test/src/security/regexValidator.d.ts +59 -0
  768. package/dist/test/src/security/regexValidator.d.ts.map +1 -0
  769. package/dist/test/src/security/regexValidator.js +214 -0
  770. package/dist/test/src/security/secureYamlParser.d.ts +46 -0
  771. package/dist/test/src/security/secureYamlParser.d.ts.map +1 -0
  772. package/dist/test/src/security/secureYamlParser.js +203 -0
  773. package/dist/test/src/security/securityMonitor.d.ts +58 -0
  774. package/dist/test/src/security/securityMonitor.d.ts.map +1 -0
  775. package/dist/test/src/security/securityMonitor.js +108 -0
  776. package/dist/test/src/security/tokenManager.d.ts +85 -0
  777. package/dist/test/src/security/tokenManager.d.ts.map +1 -0
  778. package/dist/test/src/security/tokenManager.js +286 -0
  779. package/dist/test/src/security/validators/unicodeValidator.d.ts +97 -0
  780. package/dist/test/src/security/validators/unicodeValidator.d.ts.map +1 -0
  781. package/dist/test/src/security/validators/unicodeValidator.js +312 -0
  782. package/dist/test/src/security/yamlValidator.d.ts +21 -0
  783. package/dist/test/src/security/yamlValidator.d.ts.map +1 -0
  784. package/dist/test/src/security/yamlValidator.js +164 -0
  785. package/dist/test/src/server/ServerSetup.d.ts +35 -0
  786. package/dist/test/src/server/ServerSetup.d.ts.map +1 -0
  787. package/dist/test/src/server/ServerSetup.js +116 -0
  788. package/dist/test/src/server/index.d.ts +7 -0
  789. package/dist/test/src/server/index.d.ts.map +1 -0
  790. package/dist/test/src/server/index.js +7 -0
  791. package/dist/test/src/server/startup.d.ts +31 -0
  792. package/dist/test/src/server/startup.d.ts.map +1 -0
  793. package/dist/test/src/server/startup.js +67 -0
  794. package/dist/test/src/server/tools/CollectionTools.d.ts +10 -0
  795. package/dist/test/src/server/tools/CollectionTools.d.ts.map +1 -0
  796. package/dist/test/src/server/tools/CollectionTools.js +96 -0
  797. package/dist/test/src/server/tools/ConfigTools.d.ts +10 -0
  798. package/dist/test/src/server/tools/ConfigTools.d.ts.map +1 -0
  799. package/dist/test/src/server/tools/ConfigTools.js +63 -0
  800. package/dist/test/src/server/tools/MarketplaceTools.d.ts +10 -0
  801. package/dist/test/src/server/tools/MarketplaceTools.d.ts.map +1 -0
  802. package/dist/test/src/server/tools/MarketplaceTools.js +92 -0
  803. package/dist/test/src/server/tools/PersonaTools.d.ts +10 -0
  804. package/dist/test/src/server/tools/PersonaTools.d.ts.map +1 -0
  805. package/dist/test/src/server/tools/PersonaTools.js +257 -0
  806. package/dist/test/src/server/tools/ToolRegistry.d.ts +37 -0
  807. package/dist/test/src/server/tools/ToolRegistry.d.ts.map +1 -0
  808. package/dist/test/src/server/tools/ToolRegistry.js +40 -0
  809. package/dist/test/src/server/tools/UpdateTools.d.ts +10 -0
  810. package/dist/test/src/server/tools/UpdateTools.d.ts.map +1 -0
  811. package/dist/test/src/server/tools/UpdateTools.js +64 -0
  812. package/dist/test/src/server/tools/UserTools.d.ts +10 -0
  813. package/dist/test/src/server/tools/UserTools.d.ts.map +1 -0
  814. package/dist/test/src/server/tools/UserTools.js +51 -0
  815. package/dist/test/src/server/tools/index.d.ts +10 -0
  816. package/dist/test/src/server/tools/index.d.ts.map +1 -0
  817. package/dist/test/src/server/tools/index.js +10 -0
  818. package/dist/test/src/server/types.d.ts +34 -0
  819. package/dist/test/src/server/types.d.ts.map +1 -0
  820. package/dist/test/src/server/types.js +5 -0
  821. package/dist/test/src/tools/debug.d.ts +20 -0
  822. package/dist/test/src/tools/debug.d.ts.map +1 -0
  823. package/dist/test/src/tools/debug.js +37 -0
  824. package/dist/test/src/types/cache.d.ts +8 -0
  825. package/dist/test/src/types/cache.d.ts.map +1 -0
  826. package/dist/test/src/types/cache.js +5 -0
  827. package/dist/test/src/types/collection.d.ts +23 -0
  828. package/dist/test/src/types/collection.d.ts.map +1 -0
  829. package/dist/test/src/types/collection.js +5 -0
  830. package/dist/test/src/types/elements/IElement.d.ts +123 -0
  831. package/dist/test/src/types/elements/IElement.d.ts.map +1 -0
  832. package/dist/test/src/types/elements/IElement.js +30 -0
  833. package/dist/test/src/types/elements/IElementManager.d.ts +65 -0
  834. package/dist/test/src/types/elements/IElementManager.d.ts.map +1 -0
  835. package/dist/test/src/types/elements/IElementManager.js +6 -0
  836. package/dist/test/src/types/elements/IRatingManager.d.ts +109 -0
  837. package/dist/test/src/types/elements/IRatingManager.d.ts.map +1 -0
  838. package/dist/test/src/types/elements/IRatingManager.js +6 -0
  839. package/dist/test/src/types/elements/IReferenceResolver.d.ts +52 -0
  840. package/dist/test/src/types/elements/IReferenceResolver.d.ts.map +1 -0
  841. package/dist/test/src/types/elements/IReferenceResolver.js +6 -0
  842. package/dist/test/src/types/elements/RatingBreakdowns.d.ts +49 -0
  843. package/dist/test/src/types/elements/RatingBreakdowns.d.ts.map +1 -0
  844. package/dist/test/src/types/elements/RatingBreakdowns.js +6 -0
  845. package/dist/test/src/types/elements/index.d.ts +9 -0
  846. package/dist/test/src/types/elements/index.d.ts.map +1 -0
  847. package/dist/test/src/types/elements/index.js +11 -0
  848. package/dist/test/src/types/index.d.ts +9 -0
  849. package/dist/test/src/types/index.d.ts.map +1 -0
  850. package/dist/test/src/types/index.js +9 -0
  851. package/dist/test/src/types/marketplace.d.ts +23 -0
  852. package/dist/test/src/types/marketplace.d.ts.map +1 -0
  853. package/dist/test/src/types/marketplace.js +5 -0
  854. package/dist/test/src/types/mcp.d.ts +84 -0
  855. package/dist/test/src/types/mcp.d.ts.map +1 -0
  856. package/dist/test/src/types/mcp.js +80 -0
  857. package/dist/test/src/types/persona.d.ts +30 -0
  858. package/dist/test/src/types/persona.d.ts.map +1 -0
  859. package/dist/test/src/types/persona.js +5 -0
  860. package/dist/test/src/update/BackupManager.d.ts +46 -0
  861. package/dist/test/src/update/BackupManager.d.ts.map +1 -0
  862. package/dist/test/src/update/BackupManager.js +261 -0
  863. package/dist/test/src/update/DependencyChecker.d.ts +41 -0
  864. package/dist/test/src/update/DependencyChecker.d.ts.map +1 -0
  865. package/dist/test/src/update/DependencyChecker.js +132 -0
  866. package/dist/test/src/update/RateLimiter.d.ts +80 -0
  867. package/dist/test/src/update/RateLimiter.d.ts.map +1 -0
  868. package/dist/test/src/update/RateLimiter.js +172 -0
  869. package/dist/test/src/update/SignatureVerifier.d.ts +71 -0
  870. package/dist/test/src/update/SignatureVerifier.d.ts.map +1 -0
  871. package/dist/test/src/update/SignatureVerifier.js +214 -0
  872. package/dist/test/src/update/UpdateChecker.d.ts +127 -0
  873. package/dist/test/src/update/UpdateChecker.d.ts.map +1 -0
  874. package/dist/test/src/update/UpdateChecker.js +469 -0
  875. package/dist/test/src/update/UpdateManager.d.ts +41 -0
  876. package/dist/test/src/update/UpdateManager.d.ts.map +1 -0
  877. package/dist/test/src/update/UpdateManager.js +260 -0
  878. package/dist/test/src/update/VersionManager.d.ts +31 -0
  879. package/dist/test/src/update/VersionManager.d.ts.map +1 -0
  880. package/dist/test/src/update/VersionManager.js +134 -0
  881. package/dist/test/src/update/index.d.ts +9 -0
  882. package/dist/test/src/update/index.d.ts.map +1 -0
  883. package/dist/test/src/update/index.js +9 -0
  884. package/dist/test/src/utils/filesystem.d.ts +29 -0
  885. package/dist/test/src/utils/filesystem.d.ts.map +1 -0
  886. package/dist/test/src/utils/filesystem.js +94 -0
  887. package/dist/test/src/utils/git.d.ts +32 -0
  888. package/dist/test/src/utils/git.d.ts.map +1 -0
  889. package/dist/test/src/utils/git.js +65 -0
  890. package/dist/test/src/utils/index.d.ts +7 -0
  891. package/dist/test/src/utils/index.d.ts.map +1 -0
  892. package/dist/test/src/utils/index.js +7 -0
  893. package/dist/test/src/utils/logger.d.ts +45 -0
  894. package/dist/test/src/utils/logger.d.ts.map +1 -0
  895. package/dist/test/src/utils/logger.js +91 -0
  896. package/dist/test/src/utils/version.d.ts +25 -0
  897. package/dist/test/src/utils/version.d.ts.map +1 -0
  898. package/dist/test/src/utils/version.js +97 -0
  899. package/dist/test/test/__tests__/integration/helpers/file-utils.d.ts +33 -0
  900. package/dist/test/test/__tests__/integration/helpers/file-utils.d.ts.map +1 -0
  901. package/dist/test/test/__tests__/integration/helpers/file-utils.js +83 -0
  902. package/dist/test/test/__tests__/integration/helpers/test-fixtures.d.ts +26 -0
  903. package/dist/test/test/__tests__/integration/helpers/test-fixtures.d.ts.map +1 -0
  904. package/dist/test/test/__tests__/integration/helpers/test-fixtures.js +95 -0
  905. package/dist/test/test/__tests__/integration/helpers/test-server.d.ts +26 -0
  906. package/dist/test/test/__tests__/integration/helpers/test-server.d.ts.map +1 -0
  907. package/dist/test/test/__tests__/integration/helpers/test-server.js +41 -0
  908. package/dist/test/test/__tests__/integration/setup.d.ts +8 -0
  909. package/dist/test/test/__tests__/integration/setup.d.ts.map +1 -0
  910. package/dist/test/test/__tests__/integration/setup.js +31 -0
  911. package/dist/test/test/__tests__/integration/teardown.d.ts +5 -0
  912. package/dist/test/test/__tests__/integration/teardown.d.ts.map +1 -0
  913. package/dist/test/test/__tests__/integration/teardown.js +23 -0
  914. package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.d.ts +34 -0
  915. package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.d.ts.map +1 -0
  916. package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.js +224 -0
  917. package/dist/test/test/__tests__/security/framework/SecurityTestFramework.d.ts +89 -0
  918. package/dist/test/test/__tests__/security/framework/SecurityTestFramework.d.ts.map +1 -0
  919. package/dist/test/test/__tests__/security/framework/SecurityTestFramework.js +543 -0
  920. package/dist/test/test/__tests__/security/index.d.ts +46 -0
  921. package/dist/test/test/__tests__/security/index.d.ts.map +1 -0
  922. package/dist/test/test/__tests__/security/index.js +98 -0
  923. package/dist/test/test/__tests__/security/setup.d.ts +3 -0
  924. package/dist/test/test/__tests__/security/setup.d.ts.map +1 -0
  925. package/dist/test/test/__tests__/security/setup.js +23 -0
  926. package/dist/tools/debug.d.ts +20 -0
  927. package/dist/tools/debug.d.ts.map +1 -0
  928. package/dist/tools/debug.js +37 -0
  929. package/dist/types/cache.d.ts +8 -0
  930. package/dist/types/cache.d.ts.map +1 -0
  931. package/dist/types/cache.js +5 -0
  932. package/dist/types/collection.d.ts +23 -0
  933. package/dist/types/collection.d.ts.map +1 -0
  934. package/dist/types/collection.js +5 -0
  935. package/dist/types/elements/IElement.d.ts +123 -0
  936. package/dist/types/elements/IElement.d.ts.map +1 -0
  937. package/dist/types/elements/IElement.js +30 -0
  938. package/dist/types/elements/IElementManager.d.ts +65 -0
  939. package/dist/types/elements/IElementManager.d.ts.map +1 -0
  940. package/dist/types/elements/IElementManager.js +6 -0
  941. package/dist/types/elements/IRatingManager.d.ts +109 -0
  942. package/dist/types/elements/IRatingManager.d.ts.map +1 -0
  943. package/dist/types/elements/IRatingManager.js +6 -0
  944. package/dist/types/elements/IReferenceResolver.d.ts +52 -0
  945. package/dist/types/elements/IReferenceResolver.d.ts.map +1 -0
  946. package/dist/types/elements/IReferenceResolver.js +6 -0
  947. package/dist/types/elements/RatingBreakdowns.d.ts +49 -0
  948. package/dist/types/elements/RatingBreakdowns.d.ts.map +1 -0
  949. package/dist/types/elements/RatingBreakdowns.js +6 -0
  950. package/dist/types/elements/index.d.ts +9 -0
  951. package/dist/types/elements/index.d.ts.map +1 -0
  952. package/dist/types/elements/index.js +11 -0
  953. package/dist/types/index.d.ts +9 -0
  954. package/dist/types/index.d.ts.map +1 -0
  955. package/dist/types/index.js +9 -0
  956. package/dist/types/marketplace.d.ts +23 -0
  957. package/dist/types/marketplace.d.ts.map +1 -0
  958. package/dist/types/marketplace.js +5 -0
  959. package/dist/types/mcp.d.ts +84 -0
  960. package/dist/types/mcp.d.ts.map +1 -0
  961. package/dist/types/mcp.js +80 -0
  962. package/dist/types/persona.d.ts +30 -0
  963. package/dist/types/persona.d.ts.map +1 -0
  964. package/dist/types/persona.js +5 -0
  965. package/dist/update/BackupManager.d.ts +46 -0
  966. package/dist/update/BackupManager.d.ts.map +1 -0
  967. package/dist/update/BackupManager.js +261 -0
  968. package/dist/update/DependencyChecker.d.ts +41 -0
  969. package/dist/update/DependencyChecker.d.ts.map +1 -0
  970. package/dist/update/DependencyChecker.js +132 -0
  971. package/dist/update/RateLimiter.d.ts +80 -0
  972. package/dist/update/RateLimiter.d.ts.map +1 -0
  973. package/dist/update/RateLimiter.js +172 -0
  974. package/dist/update/SignatureVerifier.d.ts +71 -0
  975. package/dist/update/SignatureVerifier.d.ts.map +1 -0
  976. package/dist/update/SignatureVerifier.js +214 -0
  977. package/dist/update/UpdateChecker.d.ts +127 -0
  978. package/dist/update/UpdateChecker.d.ts.map +1 -0
  979. package/dist/update/UpdateChecker.js +469 -0
  980. package/dist/update/UpdateManager.d.ts +41 -0
  981. package/dist/update/UpdateManager.d.ts.map +1 -0
  982. package/dist/update/UpdateManager.js +260 -0
  983. package/dist/update/VersionManager.d.ts +31 -0
  984. package/dist/update/VersionManager.d.ts.map +1 -0
  985. package/dist/update/VersionManager.js +134 -0
  986. package/dist/update/index.d.ts +9 -0
  987. package/dist/update/index.d.ts.map +1 -0
  988. package/dist/update/index.js +9 -0
  989. package/dist/utils/filesystem.d.ts +29 -0
  990. package/dist/utils/filesystem.d.ts.map +1 -0
  991. package/dist/utils/filesystem.js +94 -0
  992. package/dist/utils/git.d.ts +32 -0
  993. package/dist/utils/git.d.ts.map +1 -0
  994. package/dist/utils/git.js +65 -0
  995. package/dist/utils/index.d.ts +7 -0
  996. package/dist/utils/index.d.ts.map +1 -0
  997. package/dist/utils/index.js +7 -0
  998. package/dist/utils/logger.d.ts +45 -0
  999. package/dist/utils/logger.d.ts.map +1 -0
  1000. package/dist/utils/logger.js +91 -0
  1001. package/dist/utils/version.d.ts +25 -0
  1002. package/dist/utils/version.d.ts.map +1 -0
  1003. package/dist/utils/version.js +97 -0
  1004. package/package.json +128 -0
@@ -0,0 +1,260 @@
1
+ /**
2
+ * Manage server updates and rollbacks
3
+ */
4
+ import { safeExec } from '../utils/git.js';
5
+ import { VersionManager } from './VersionManager.js';
6
+ import { UpdateChecker } from './UpdateChecker.js';
7
+ import { DependencyChecker } from './DependencyChecker.js';
8
+ import { BackupManager } from './BackupManager.js';
9
+ export class UpdateManager {
10
+ versionManager;
11
+ updateChecker;
12
+ dependencyChecker;
13
+ backupManager;
14
+ rootDir;
15
+ constructor(rootDir) {
16
+ this.rootDir = rootDir || process.cwd();
17
+ this.versionManager = new VersionManager();
18
+ this.updateChecker = new UpdateChecker(this.versionManager);
19
+ this.dependencyChecker = new DependencyChecker(this.versionManager);
20
+ this.backupManager = new BackupManager(this.rootDir);
21
+ }
22
+ /**
23
+ * Check for available updates
24
+ */
25
+ async checkForUpdates() {
26
+ try {
27
+ const result = await this.updateChecker.checkForUpdates();
28
+ const text = this.updateChecker.formatUpdateCheckResult(result);
29
+ return { text };
30
+ }
31
+ catch (error) {
32
+ const text = this.updateChecker.formatUpdateCheckResult(null, error);
33
+ return { text };
34
+ }
35
+ }
36
+ /**
37
+ * Perform server update
38
+ */
39
+ async updateServer(createBackup = true, personaIndicator = '') {
40
+ const progress = [];
41
+ try {
42
+ // Step 1: Check dependencies
43
+ progress.push({ step: 'dependencies', message: 'Checking system dependencies...', isComplete: false });
44
+ const dependencies = await this.dependencyChecker.checkDependencies();
45
+ if (!dependencies.git.installed || dependencies.git.error) {
46
+ return {
47
+ text: personaIndicator + '❌ **Update Failed**\n\n' +
48
+ 'Git is required for updates but is not available.\n' +
49
+ dependencies.git.error || 'Git is not installed.'
50
+ };
51
+ }
52
+ if (!dependencies.npm.installed || dependencies.npm.error) {
53
+ return {
54
+ text: personaIndicator + '❌ **Update Failed**\n\n' +
55
+ 'npm is required for updates but is not available.\n' +
56
+ dependencies.npm.error || 'npm is not installed.'
57
+ };
58
+ }
59
+ progress[0].isComplete = true;
60
+ // Step 2: Create backup if requested
61
+ if (createBackup) {
62
+ progress.push({ step: 'backup', message: 'Creating backup...', isComplete: false });
63
+ const currentVersion = await this.versionManager.getCurrentVersion();
64
+ const backup = await this.backupManager.createBackup(currentVersion);
65
+ progress[1].isComplete = true;
66
+ progress[1].message = `Backup created at: ${backup.timestamp}`;
67
+ }
68
+ // Step 3: Git fetch
69
+ progress.push({ step: 'fetch', message: 'Fetching latest changes...', isComplete: false });
70
+ await safeExec('git', ['fetch', 'origin'], { cwd: this.rootDir });
71
+ progress[progress.length - 1].isComplete = true;
72
+ // Step 4: Check for uncommitted changes
73
+ progress.push({ step: 'check', message: 'Checking for uncommitted changes...', isComplete: false });
74
+ const { stdout: statusOutput } = await safeExec('git', ['status', '--porcelain'], { cwd: this.rootDir });
75
+ if (statusOutput.trim()) {
76
+ return {
77
+ text: personaIndicator + '❌ **Update Failed**\n\n' +
78
+ 'You have uncommitted changes. Please commit or stash them before updating.\n\n' +
79
+ 'Modified files:\n' + statusOutput
80
+ };
81
+ }
82
+ progress[progress.length - 1].isComplete = true;
83
+ // Step 5: Git pull
84
+ progress.push({ step: 'pull', message: 'Pulling latest changes...', isComplete: false });
85
+ const { stdout: pullOutput } = await safeExec('git', ['pull', 'origin', 'main'], { cwd: this.rootDir });
86
+ progress[progress.length - 1].isComplete = true;
87
+ // Check if already up to date
88
+ if (pullOutput.includes('Already up to date')) {
89
+ return {
90
+ text: personaIndicator + '✅ **Already Up to Date**\n\n' +
91
+ 'Your DollhouseMCP installation is already at the latest version.\n\n' +
92
+ 'No changes were pulled from the repository.'
93
+ };
94
+ }
95
+ // Step 6: npm install
96
+ progress.push({ step: 'install', message: 'Installing dependencies...', isComplete: false });
97
+ await safeExec('npm', ['install'], { cwd: this.rootDir });
98
+ progress[progress.length - 1].isComplete = true;
99
+ // Step 7: Build
100
+ progress.push({ step: 'build', message: 'Building TypeScript...', isComplete: false });
101
+ await safeExec('npm', ['run', 'build'], { cwd: this.rootDir });
102
+ progress[progress.length - 1].isComplete = true;
103
+ // Step 8: Cleanup old backups
104
+ if (createBackup) {
105
+ progress.push({ step: 'cleanup', message: 'Cleaning up old backups...', isComplete: false });
106
+ const deletedCount = await this.backupManager.cleanupOldBackups();
107
+ progress[progress.length - 1].isComplete = true;
108
+ progress[progress.length - 1].message = `Cleaned up ${deletedCount} old backup(s)`;
109
+ }
110
+ // Format success message
111
+ const successParts = [
112
+ personaIndicator + '✅ **Update Complete!**\n\n',
113
+ '**Update Summary:**\n'
114
+ ];
115
+ progress.forEach(p => {
116
+ successParts.push(`${p.isComplete ? '✅' : '❌'} ${p.message}\n`);
117
+ });
118
+ successParts.push('\n**Next Steps:**\n', '1. The server will restart automatically\n', '2. All personas will be reloaded\n', '3. Check `get_server_status` to verify the new version\n\n', '💡 **Tip:** If you encounter issues, use `rollback_update true` to restore the previous version.');
119
+ return { text: successParts.join('') };
120
+ }
121
+ catch (error) {
122
+ const errorMessage = error instanceof Error ? error.message : String(error);
123
+ return {
124
+ text: personaIndicator + '❌ **Update Failed**\n\n' +
125
+ 'Error: ' + errorMessage + '\n\n' +
126
+ '**Progress:**\n' +
127
+ progress.map(p => `${p.isComplete ? '✅' : '❌'} ${p.message}`).join('\n') + '\n\n' +
128
+ '**Recovery Options:**\n' +
129
+ '• Try running the update again\n' +
130
+ '• Check your internet connection\n' +
131
+ '• Ensure you have proper permissions\n' +
132
+ '• If a backup was created, use `rollback_update true` to restore'
133
+ };
134
+ }
135
+ }
136
+ /**
137
+ * Rollback to previous version
138
+ */
139
+ async rollbackUpdate(force = false, personaIndicator = '') {
140
+ try {
141
+ // Get latest backup
142
+ const latestBackup = await this.backupManager.getLatestBackup();
143
+ if (!latestBackup) {
144
+ return {
145
+ text: personaIndicator + '❌ **No Backups Found**\n\n' +
146
+ 'There are no backups available to restore.\n\n' +
147
+ 'Backups are created automatically when you run `update_server true`.'
148
+ };
149
+ }
150
+ // Check if rollback is needed
151
+ if (!force) {
152
+ try {
153
+ // Test if the server is working by checking version
154
+ await this.versionManager.getCurrentVersion();
155
+ return {
156
+ text: personaIndicator + '⚠️ **Rollback Confirmation Required**\n\n' +
157
+ 'The server appears to be working normally.\n\n' +
158
+ `**Latest Backup:** ${latestBackup.timestamp}\n` +
159
+ `**Backup Version:** ${latestBackup.version || 'Unknown'}\n\n` +
160
+ 'To force rollback anyway, use: `rollback_update true`\n\n' +
161
+ '⚠️ **Warning:** This will restore all files to the backup state.'
162
+ };
163
+ }
164
+ catch {
165
+ // Server is broken, proceed with rollback
166
+ }
167
+ }
168
+ // Perform rollback
169
+ await this.backupManager.restoreBackup(latestBackup.path);
170
+ // Reinstall dependencies
171
+ await safeExec('npm', ['install'], { cwd: this.rootDir });
172
+ // Rebuild
173
+ await safeExec('npm', ['run', 'build'], { cwd: this.rootDir });
174
+ return {
175
+ text: personaIndicator + '✅ **Rollback Complete!**\n\n' +
176
+ `Restored from backup: ${latestBackup.timestamp}\n` +
177
+ `Backup version: ${latestBackup.version || 'Unknown'}\n\n` +
178
+ '**What was restored:**\n' +
179
+ '• All source files\n' +
180
+ '• Configuration files\n' +
181
+ '• Dependencies reinstalled\n' +
182
+ '• TypeScript rebuilt\n\n' +
183
+ '**Next Steps:**\n' +
184
+ '1. The server will restart automatically\n' +
185
+ '2. Check `get_server_status` to verify the version\n' +
186
+ '3. Test your personas to ensure everything works'
187
+ };
188
+ }
189
+ catch (error) {
190
+ const errorMessage = error instanceof Error ? error.message : String(error);
191
+ return {
192
+ text: personaIndicator + '❌ **Rollback Failed**\n\n' +
193
+ 'Error: ' + errorMessage + '\n\n' +
194
+ '**Manual Recovery:**\n' +
195
+ '1. Check the backups directory: ../dollhousemcp-backups/\n' +
196
+ '2. Manually restore files if needed\n' +
197
+ '3. Run `npm install` and `npm run build`\n' +
198
+ '4. Contact support if issues persist'
199
+ };
200
+ }
201
+ }
202
+ /**
203
+ * Get current server status
204
+ */
205
+ async getServerStatus(personaIndicator = '') {
206
+ try {
207
+ const currentVersion = await this.versionManager.getCurrentVersion();
208
+ const dependencies = await this.dependencyChecker.checkDependencies();
209
+ const backups = await this.backupManager.listBackups();
210
+ const rateLimitStatus = this.updateChecker.getRateLimitStatus();
211
+ // Get git status
212
+ let gitStatus = 'Unknown';
213
+ let gitBranch = 'Unknown';
214
+ let lastCommit = 'Unknown';
215
+ try {
216
+ const { stdout: branchOutput } = await safeExec('git', ['branch', '--show-current'], { cwd: this.rootDir });
217
+ gitBranch = branchOutput.trim() || 'detached';
218
+ const { stdout: statusOutput } = await safeExec('git', ['status', '--porcelain'], { cwd: this.rootDir });
219
+ gitStatus = statusOutput.trim() ? 'Modified' : 'Clean';
220
+ const { stdout: logOutput } = await safeExec('git', ['log', '-1', '--oneline'], { cwd: this.rootDir });
221
+ lastCommit = logOutput.trim();
222
+ }
223
+ catch {
224
+ // Git commands failed, use defaults
225
+ }
226
+ const statusParts = [
227
+ personaIndicator + '📊 **DollhouseMCP Server Status**\n\n',
228
+ '**Version Information:**\n',
229
+ `• Current Version: ${currentVersion}\n`,
230
+ `• Git Branch: ${gitBranch}\n`,
231
+ `• Git Status: ${gitStatus}\n`,
232
+ `• Last Commit: ${lastCommit}\n\n`,
233
+ '**Dependencies:**\n',
234
+ this.dependencyChecker.formatDependencyStatus(dependencies),
235
+ '\n\n**Backups:**\n',
236
+ `• Total Backups: ${backups.length}\n`
237
+ ];
238
+ if (backups.length > 0) {
239
+ statusParts.push(`• Latest Backup: ${backups[0].timestamp} (v${backups[0].version || 'unknown'})\n`);
240
+ statusParts.push(`• Oldest Backup: ${backups[backups.length - 1].timestamp}\n`);
241
+ }
242
+ statusParts.push('\n**Rate Limit Status:**\n', `• Update Checks Remaining: ${rateLimitStatus.remainingRequests}/10 per hour\n`, `• Rate Limit Resets: ${rateLimitStatus.resetTime.toLocaleTimeString()}\n`);
243
+ if (!rateLimitStatus.allowed && rateLimitStatus.waitTimeSeconds) {
244
+ statusParts.push(`• ⏳ Wait ${rateLimitStatus.waitTimeSeconds} seconds before next check\n`);
245
+ }
246
+ statusParts.push('\n**Available Commands:**\n', '• `check_for_updates` - Check for new versions\n', '• `update_server true` - Update to latest version\n', '• `rollback_update true` - Restore from backup\n');
247
+ return { text: statusParts.join('') };
248
+ }
249
+ catch (error) {
250
+ const errorMessage = error instanceof Error ? error.message : String(error);
251
+ return {
252
+ text: personaIndicator + '❌ **Status Check Failed**\n\n' +
253
+ 'Error: ' + errorMessage + '\n\n' +
254
+ 'The server may be in an inconsistent state.\n' +
255
+ 'Try running `update_server true` to fix issues.'
256
+ };
257
+ }
258
+ }
259
+ }
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXBkYXRlTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91cGRhdGUvVXBkYXRlTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUdILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQVFuRCxNQUFNLE9BQU8sYUFBYTtJQUNoQixjQUFjLENBQWlCO0lBQy9CLGFBQWEsQ0FBZ0I7SUFDN0IsaUJBQWlCLENBQW9CO0lBQ3JDLGFBQWEsQ0FBZ0I7SUFDN0IsT0FBTyxDQUFTO0lBRXhCLFlBQVksT0FBZ0I7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGVBQWU7UUFDbkIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUs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RUFDckQsa0RBQWtELENBQ25ELENBQUM7WUFFRixPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUV4QyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sWUFBWSxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU1RSxPQUFPO2dCQUNMLElBQUksRUFBRSxnQkFBZ0IsR0FBRywrQkFBK0I7b0JBQ3RELFNBQVMsR0FBRyxZQUFZLEdBQUcsTUFBTTtvQkFDakMsK0NBQStDO29CQUMvQyxpREFBaUQ7YUFDcEQsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1hbmFnZSBzZXJ2ZXIgdXBkYXRlcyBhbmQgcm9sbGJhY2tzXG4gKi9cblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IHNhZmVFeGVjIH0gZnJvbSAnLi4vdXRpbHMvZ2l0LmpzJztcbmltcG9ydCB7IFZlcnNpb25NYW5hZ2VyIH0gZnJvbSAnLi9WZXJzaW9uTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBVcGRhdGVDaGVja2VyIH0gZnJvbSAnLi9VcGRhdGVDaGVja2VyLmpzJztcbmltcG9ydCB7IERlcGVuZGVuY3lDaGVja2VyIH0gZnJvbSAnLi9EZXBlbmRlbmN5Q2hlY2tlci5qcyc7XG5pbXBvcnQgeyBCYWNrdXBNYW5hZ2VyIH0gZnJvbSAnLi9CYWNrdXBNYW5hZ2VyLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVQcm9ncmVzcyB7XG4gIHN0ZXA6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBpc0NvbXBsZXRlOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlTWFuYWdlciB7XG4gIHByaXZhdGUgdmVyc2lvbk1hbmFnZXI6IFZlcnNpb25NYW5hZ2VyO1xuICBwcml2YXRlIHVwZGF0ZUNoZWNrZXI6IFVwZGF0ZUNoZWNrZXI7XG4gIHByaXZhdGUgZGVwZW5kZW5jeUNoZWNrZXI6IERlcGVuZGVuY3lDaGVja2VyO1xuICBwcml2YXRlIGJhY2t1cE1hbmFnZXI6IEJhY2t1cE1hbmFnZXI7XG4gIHByaXZhdGUgcm9vdERpcjogc3RyaW5nO1xuICBcbiAgY29uc3RydWN0b3Iocm9vdERpcj86IHN0cmluZykge1xuICAgIHRoaXMucm9vdERpciA9IHJvb3REaXIgfHwgcHJvY2Vzcy5jd2QoKTtcbiAgICB0aGlzLnZlcnNpb25NYW5hZ2VyID0gbmV3IFZlcnNpb25NYW5hZ2VyKCk7XG4gICAgdGhpcy51cGRhdGVDaGVja2VyID0gbmV3IFVwZGF0ZUNoZWNrZXIodGhpcy52ZXJzaW9uTWFuYWdlcik7XG4gICAgdGhpcy5kZXBlbmRlbmN5Q2hlY2tlciA9IG5ldyBEZXBlbmRlbmN5Q2hlY2tlcih0aGlzLnZlcnNpb25NYW5hZ2VyKTtcbiAgICB0aGlzLmJhY2t1cE1hbmFnZXIgPSBuZXcgQmFja3VwTWFuYWdlcih0aGlzLnJvb3REaXIpO1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgZm9yIGF2YWlsYWJsZSB1cGRhdGVzXG4gICAqL1xuICBhc3luYyBjaGVja0ZvclVwZGF0ZXMoKTogUHJvbWlzZTx7IHRleHQ6IHN0cmluZyB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMudXBkYXRlQ2hlY2tlci5jaGVja0ZvclVwZGF0ZXMoKTtcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnVwZGF0ZUNoZWNrZXIuZm9ybWF0VXBkYXRlQ2hlY2tSZXN1bHQocmVzdWx0KTtcbiAgICAgIHJldHVybiB7IHRleHQgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgdGV4dCA9IHRoaXMudXBkYXRlQ2hlY2tlci5mb3JtYXRVcGRhdGVDaGVja1Jlc3VsdChudWxsLCBlcnJvciBhcyBFcnJvcik7XG4gICAgICByZXR1cm4geyB0ZXh0IH07XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogUGVyZm9ybSBzZXJ2ZXIgdXBkYXRlXG4gICAqL1xuICBhc3luYyB1cGRhdGVTZXJ2ZXIoY3JlYXRlQmFja3VwOiBib29sZWFuID0gdHJ1ZSwgcGVyc29uYUluZGljYXRvcjogc3RyaW5nID0gJycpOiBQcm9taXNlPHsgdGV4dDogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBwcm9ncmVzczogVXBkYXRlUHJvZ3Jlc3NbXSA9IFtdO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBTdGVwIDE6IENoZWNrIGRlcGVuZGVuY2llc1xuICAgICAgcHJvZ3Jlc3MucHVzaCh7IHN0ZXA6ICdkZXBlbmRlbmNpZXMnLCBtZXNzYWdlOiAnQ2hlY2tpbmcgc3lzdGVtIGRlcGVuZGVuY2llcy4uLicsIGlzQ29tcGxldGU6IGZhbHNlIH0pO1xuICAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gYXdhaXQgdGhpcy5kZXBlbmRlbmN5Q2hlY2tlci5jaGVja0RlcGVuZGVuY2llcygpO1xuICAgICAgXG4gICAgICBpZiAoIWRlcGVuZGVuY2llcy5naXQuaW5zdGFsbGVkIHx8IGRlcGVuZGVuY2llcy5naXQuZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0ZXh0OiBwZXJzb25hSW5kaWNhdG9yICsgJ+KdjCAqKlVwZGF0ZSBGYWlsZWQqKlxcblxcbicgK1xuICAgICAgICAgICAgJ0dpdCBpcyByZXF1aXJlZCBmb3IgdXBkYXRlcyBidXQgaXMgbm90IGF2YWlsYWJsZS5cXG4nICtcbiAgICAgICAgICAgIGRlcGVuZGVuY2llcy5naXQuZXJyb3IgfHwgJ0dpdCBpcyBub3QgaW5zdGFsbGVkLidcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKCFkZXBlbmRlbmNpZXMubnBtLmluc3RhbGxlZCB8fCBkZXBlbmRlbmNpZXMubnBtLmVycm9yKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGV4dDogcGVyc29uYUluZGljYXRvciArICfinYwgKipVcGRhdGUgRmFpbGVkKipcXG5cXG4nICtcbiAgICAgICAgICAgICducG0gaXMgcmVxdWlyZWQgZm9yIHVwZGF0ZXMgYnV0IGlzIG5vdCBhdmFpbGFibGUuXFxuJyArXG4gICAgICAgICAgICBkZXBlbmRlbmNpZXMubnBtLmVycm9yIHx8ICducG0gaXMgbm90IGluc3RhbGxlZC4nXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBcbiAgICAgIHByb2dyZXNzWzBdLmlzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgXG4gICAgICAvLyBTdGVwIDI6IENyZWF0ZSBiYWNrdXAgaWYgcmVxdWVzdGVkXG4gICAgICBpZiAoY3JlYXRlQmFja3VwKSB7XG4gICAgICAgIHByb2dyZXNzLnB1c2goeyBzdGVwOiAnYmFja3VwJywgbWVzc2FnZTogJ0NyZWF0aW5nIGJhY2t1cC4uLicsIGlzQ29tcGxldGU6IGZhbHNlIH0pO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgY3VycmVudFZlcnNpb24gPSBhd2FpdCB0aGlzLnZlcnNpb25NYW5hZ2VyLmdldEN1cnJlbnRWZXJzaW9uKCk7XG4gICAgICAgIGNvbnN0IGJhY2t1cCA9IGF3YWl0IHRoaXMuYmFja3VwTWFuYWdlci5jcmVhdGVCYWNrdXAoY3VycmVudFZlcnNpb24pO1xuICAgICAgICBcbiAgICAgICAgcHJvZ3Jlc3NbMV0uaXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgIHByb2dyZXNzWzFdLm1lc3NhZ2UgPSBgQmFja3VwIGNyZWF0ZWQgYXQ6ICR7YmFja3VwLnRpbWVzdGFtcH1gO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBTdGVwIDM6IEdpdCBmZXRjaFxuICAgICAgcHJvZ3Jlc3MucHVzaCh7IHN0ZXA6ICdmZXRjaCcsIG1lc3NhZ2U6ICdGZXRjaGluZyBsYXRlc3QgY2hhbmdlcy4uLicsIGlzQ29tcGxldGU6IGZhbHNlIH0pO1xuICAgICAgYXdhaXQgc2FmZUV4ZWMoJ2dpdCcsIFsnZmV0Y2gnLCAnb3JpZ2luJ10sIHsgY3dkOiB0aGlzLnJvb3REaXIgfSk7XG4gICAgICBwcm9ncmVzc1twcm9ncmVzcy5sZW5ndGggLSAxXS5pc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgIFxuICAgICAgLy8gU3RlcCA0OiBDaGVjayBmb3IgdW5jb21taXR0ZWQgY2hhbmdlc1xuICAgICAgcHJvZ3Jlc3MucHVzaCh7IHN0ZXA6ICdjaGVjaycsIG1lc3NhZ2U6ICdDaGVja2luZyBmb3IgdW5jb21taXR0ZWQgY2hhbmdlcy4uLicsIGlzQ29tcGxldGU6IGZhbHNlIH0pO1xuICAgICAgY29uc3QgeyBzdGRvdXQ6IHN0YXR1c091dHB1dCB9ID0gYXdhaXQgc2FmZUV4ZWMoJ2dpdCcsIFsnc3RhdHVzJywgJy0tcG9yY2VsYWluJ10sIHsgY3dkOiB0aGlzLnJvb3REaXIgfSk7XG4gICAgICBcbiAgICAgIGlmIChzdGF0dXNPdXRwdXQudHJpbSgpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGV4dDogcGVyc29uYUluZGljYXRvciArICfinYwgKipVcGRhdGUgRmFpbGVkKipcXG5cXG4nICtcbiAgICAgICAgICAgICdZb3UgaGF2ZSB1bmNvbW1pdHRlZCBjaGFuZ2VzLiBQbGVhc2UgY29tbWl0IG9yIHN0YXNoIHRoZW0gYmVmb3JlIHVwZGF0aW5nLlxcblxcbicgK1xuICAgICAgICAgICAgJ01vZGlmaWVkIGZpbGVzOlxcbicgKyBzdGF0dXNPdXRwdXRcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHByb2dyZXNzW3Byb2dyZXNzLmxlbmd0aCAtIDFdLmlzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgXG4gICAgICAvLyBTdGVwIDU6IEdpdCBwdWxsXG4gICAgICBwcm9ncmVzcy5wdXNoKHsgc3RlcDogJ3B1bGwnLCBtZXNzYWdlOiAnUHVsbGluZyBsYXRlc3QgY2hhbmdlcy4uLicsIGlzQ29tcGxldGU6IGZhbHNlIH0pO1xuICAgICAgY29uc3QgeyBzdGRvdXQ6IHB1bGxPdXRwdXQgfSA9IGF3YWl0IHNhZmVFeGVjKCdnaXQnLCBbJ3B1bGwnLCAnb3JpZ2luJywgJ21haW4nXSwgeyBjd2Q6IHRoaXMucm9vdERpciB9KTtcbiAgICAgIHByb2dyZXNzW3Byb2dyZXNzLmxlbmd0aCAtIDFdLmlzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBhbHJlYWR5IHVwIHRvIGRhdGVcbiAgICAgIGlmIChwdWxsT3V0cHV0LmluY2x1ZGVzKCdBbHJlYWR5IHVwIHRvIGRhdGUnKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRleHQ6IHBlcnNvbmFJbmRpY2F0b3IgKyAn4pyFICoqQWxyZWFkeSBVcCB0byBEYXRlKipcXG5cXG4nICtcbiAgICAgICAgICAgICdZb3VyIERvbGxob3VzZU1DUCBpbnN0YWxsYXRpb24gaXMgYWxyZWFkeSBhdCB0aGUgbGF0ZXN0IHZlcnNpb24uXFxuXFxuJyArXG4gICAgICAgICAgICAnTm8gY2hhbmdlcyB3ZXJlIHB1bGxlZCBmcm9tIHRoZSByZXBvc2l0b3J5LidcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gU3RlcCA2OiBucG0gaW5zdGFsbFxuICAgICAgcHJvZ3Jlc3MucHVzaCh7IHN0ZXA6ICdpbnN0YWxsJywgbWVzc2FnZTogJ0luc3RhbGxpbmcgZGVwZW5kZW5jaWVzLi4uJywgaXNDb21wbGV0ZTogZmFsc2UgfSk7XG4gICAgICBhd2FpdCBzYWZlRXhlYygnbnBtJywgWydpbnN0YWxsJ10sIHsgY3dkOiB0aGlzLnJvb3REaXIgfSk7XG4gICAgICBwcm9ncmVzc1twcm9ncmVzcy5sZW5ndGggLSAxXS5pc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgIFxuICAgICAgLy8gU3RlcCA3OiBCdWlsZFxuICAgICAgcHJvZ3Jlc3MucHVzaCh7IHN0ZXA6ICdidWlsZCcsIG1lc3NhZ2U6ICdCdWlsZGluZyBUeXBlU2NyaXB0Li4uJywgaXNDb21wbGV0ZTogZmFsc2UgfSk7XG4gICAgICBhd2FpdCBzYWZlRXhlYygnbnBtJywgWydydW4nLCAnYnVpbGQnXSwgeyBjd2Q6IHRoaXMucm9vdERpciB9KTtcbiAgICAgIHByb2dyZXNzW3Byb2dyZXNzLmxlbmd0aCAtIDFdLmlzQ29tcGxldGUgPSB0cnVlO1xuICAgICAgXG4gICAgICAvLyBTdGVwIDg6IENsZWFudXAgb2xkIGJhY2t1cHNcbiAgICAgIGlmIChjcmVhdGVCYWNrdXApIHtcbiAgICAgICAgcHJvZ3Jlc3MucHVzaCh7IHN0ZXA6ICdjbGVhbnVwJywgbWVzc2FnZTogJ0NsZWFuaW5nIHVwIG9sZCBiYWNrdXBzLi4uJywgaXNDb21wbGV0ZTogZmFsc2UgfSk7XG4gICAgICAgIGNvbnN0IGRlbGV0ZWRDb3VudCA9IGF3YWl0IHRoaXMuYmFja3VwTWFuYWdlci5jbGVhbnVwT2xkQmFja3VwcygpO1xuICAgICAgICBwcm9ncmVzc1twcm9ncmVzcy5sZW5ndGggLSAxXS5pc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgcHJvZ3Jlc3NbcHJvZ3Jlc3MubGVuZ3RoIC0gMV0ubWVzc2FnZSA9IGBDbGVhbmVkIHVwICR7ZGVsZXRlZENvdW50fSBvbGQgYmFja3VwKHMpYDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gRm9ybWF0IHN1Y2Nlc3MgbWVzc2FnZVxuICAgICAgY29uc3Qgc3VjY2Vzc1BhcnRzID0gW1xuICAgICAgICBwZXJzb25hSW5kaWNhdG9yICsgJ+KchSAqKlVwZGF0ZSBDb21wbGV0ZSEqKlxcblxcbicsXG4gICAgICAgICcqKlVwZGF0ZSBTdW1tYXJ5OioqXFxuJ1xuICAgICAgXTtcbiAgICAgIFxuICAgICAgcHJvZ3Jlc3MuZm9yRWFjaChwID0+IHtcbiAgICAgICAgc3VjY2Vzc1BhcnRzLnB1c2goYCR7cC5pc0NvbXBsZXRlID8gJ+KchScgOiAn4p2MJ30gJHtwLm1lc3NhZ2V9XFxuYCk7XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgc3VjY2Vzc1BhcnRzLnB1c2goXG4gICAgICAgICdcXG4qKk5leHQgU3RlcHM6KipcXG4nLFxuICAgICAgICAnMS4gVGhlIHNlcnZlciB3aWxsIHJlc3RhcnQgYXV0b21hdGljYWxseVxcbicsXG4gICAgICAgICcyLiBBbGwgcGVyc29uYXMgd2lsbCBiZSByZWxvYWRlZFxcbicsXG4gICAgICAgICczLiBDaGVjayBgZ2V0X3NlcnZlcl9zdGF0dXNgIHRvIHZlcmlmeSB0aGUgbmV3IHZlcnNpb25cXG5cXG4nLFxuICAgICAgICAn8J+SoSAqKlRpcDoqKiBJZiB5b3UgZW5jb3VudGVyIGlzc3VlcywgdXNlIGByb2xsYmFja191cGRhdGUgdHJ1ZWAgdG8gcmVzdG9yZSB0aGUgcHJldmlvdXMgdmVyc2lvbi4nXG4gICAgICApO1xuICAgICAgXG4gICAgICByZXR1cm4geyB0ZXh0OiBzdWNjZXNzUGFydHMuam9pbignJykgfTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRleHQ6IHBlcnNvbmFJbmRpY2F0b3IgKyAn4p2MICoqVXBkYXRlIEZhaWxlZCoqXFxuXFxuJyArXG4gICAgICAgICAgJ0Vycm9yOiAnICsgZXJyb3JNZXNzYWdlICsgJ1xcblxcbicgK1xuICAgICAgICAgICcqKlByb2dyZXNzOioqXFxuJyArIFxuICAgICAgICAgIHByb2dyZXNzLm1hcChwID0+IGAke3AuaXNDb21wbGV0ZSA/ICfinIUnIDogJ+KdjCd9ICR7cC5tZXNzYWdlfWApLmpvaW4oJ1xcbicpICsgJ1xcblxcbicgK1xuICAgICAgICAgICcqKlJlY292ZXJ5IE9wdGlvbnM6KipcXG4nICtcbiAgICAgICAgICAn4oCiIFRyeSBydW5uaW5nIHRoZSB1cGRhdGUgYWdhaW5cXG4nICtcbiAgICAgICAgICAn4oCiIENoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvblxcbicgK1xuICAgICAgICAgICfigKIgRW5zdXJlIHlvdSBoYXZlIHByb3BlciBwZXJtaXNzaW9uc1xcbicgK1xuICAgICAgICAgICfigKIgSWYgYSBiYWNrdXAgd2FzIGNyZWF0ZWQsIHVzZSBgcm9sbGJhY2tfdXBkYXRlIHRydWVgIHRvIHJlc3RvcmUnXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIFJvbGxiYWNrIHRvIHByZXZpb3VzIHZlcnNpb25cbiAgICovXG4gIGFzeW5jIHJvbGxiYWNrVXBkYXRlKGZvcmNlOiBib29sZWFuID0gZmFsc2UsIHBlcnNvbmFJbmRpY2F0b3I6IHN0cmluZyA9ICcnKTogUHJvbWlzZTx7IHRleHQ6IHN0cmluZyB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCBsYXRlc3QgYmFja3VwXG4gICAgICBjb25zdCBsYXRlc3RCYWNrdXAgPSBhd2FpdCB0aGlzLmJhY2t1cE1hbmFnZXIuZ2V0TGF0ZXN0QmFja3VwKCk7XG4gICAgICBcbiAgICAgIGlmICghbGF0ZXN0QmFja3VwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGV4dDogcGVyc29uYUluZGljYXRvciArICfinYwgKipObyBCYWNrdXBzIEZvdW5kKipcXG5cXG4nICtcbiAgICAgICAgICAgICdUaGVyZSBhcmUgbm8gYmFja3VwcyBhdmFpbGFibGUgdG8gcmVzdG9yZS5cXG5cXG4nICtcbiAgICAgICAgICAgICdCYWNrdXBzIGFyZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB5b3UgcnVuIGB1cGRhdGVfc2VydmVyIHRydWVgLidcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgaWYgcm9sbGJhY2sgaXMgbmVlZGVkXG4gICAgICBpZiAoIWZvcmNlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGVzdCBpZiB0aGUgc2VydmVyIGlzIHdvcmtpbmcgYnkgY2hlY2tpbmcgdmVyc2lvblxuICAgICAgICAgIGF3YWl0IHRoaXMudmVyc2lvbk1hbmFnZXIuZ2V0Q3VycmVudFZlcnNpb24oKTtcbiAgICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGV4dDogcGVyc29uYUluZGljYXRvciArICfimqDvuI8gKipSb2xsYmFjayBDb25maXJtYXRpb24gUmVxdWlyZWQqKlxcblxcbicgK1xuICAgICAgICAgICAgICAnVGhlIHNlcnZlciBhcHBlYXJzIHRvIGJlIHdvcmtpbmcgbm9ybWFsbHkuXFxuXFxuJyArXG4gICAgICAgICAgICAgIGAqKkxhdGVzdCBCYWNrdXA6KiogJHtsYXRlc3RCYWNrdXAudGltZXN0YW1wfVxcbmAgK1xuICAgICAgICAgICAgICBgKipCYWNrdXAgVmVyc2lvbjoqKiAke2xhdGVzdEJhY2t1cC52ZXJzaW9uIHx8ICdVbmtub3duJ31cXG5cXG5gICtcbiAgICAgICAgICAgICAgJ1RvIGZvcmNlIHJvbGxiYWNrIGFueXdheSwgdXNlOiBgcm9sbGJhY2tfdXBkYXRlIHRydWVgXFxuXFxuJyArXG4gICAgICAgICAgICAgICfimqDvuI8gKipXYXJuaW5nOioqIFRoaXMgd2lsbCByZXN0b3JlIGFsbCBmaWxlcyB0byB0aGUgYmFja3VwIHN0YXRlLidcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBTZXJ2ZXIgaXMgYnJva2VuLCBwcm9jZWVkIHdpdGggcm9sbGJhY2tcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBQZXJmb3JtIHJvbGxiYWNrXG4gICAgICBhd2FpdCB0aGlzLmJhY2t1cE1hbmFnZXIucmVzdG9yZUJhY2t1cChsYXRlc3RCYWNrdXAucGF0aCk7XG4gICAgICBcbiAgICAgIC8vIFJlaW5zdGFsbCBkZXBlbmRlbmNpZXNcbiAgICAgIGF3YWl0IHNhZmVFeGVjKCducG0nLCBbJ2luc3RhbGwnXSwgeyBjd2Q6IHRoaXMucm9vdERpciB9KTtcbiAgICAgIFxuICAgICAgLy8gUmVidWlsZFxuICAgICAgYXdhaXQgc2FmZUV4ZWMoJ25wbScsIFsncnVuJywgJ2J1aWxkJ10sIHsgY3dkOiB0aGlzLnJvb3REaXIgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRleHQ6IHBlcnNvbmFJbmRpY2F0b3IgKyAn4pyFICoqUm9sbGJhY2sgQ29tcGxldGUhKipcXG5cXG4nICtcbiAgICAgICAgICBgUmVzdG9yZWQgZnJvbSBiYWNrdXA6ICR7bGF0ZXN0QmFja3VwLnRpbWVzdGFtcH1cXG5gICtcbiAgICAgICAgICBgQmFja3VwIHZlcnNpb246ICR7bGF0ZXN0QmFja3VwLnZlcnNpb24gfHwgJ1Vua25vd24nfVxcblxcbmAgK1xuICAgICAgICAgICcqKldoYXQgd2FzIHJlc3RvcmVkOioqXFxuJyArXG4gICAgICAgICAgJ+KAoiBBbGwgc291cmNlIGZpbGVzXFxuJyArXG4gICAgICAgICAgJ+KAoiBDb25maWd1cmF0aW9uIGZpbGVzXFxuJyArXG4gICAgICAgICAgJ+KAoiBEZXBlbmRlbmNpZXMgcmVpbnN0YWxsZWRcXG4nICtcbiAgICAgICAgICAn4oCiIFR5cGVTY3JpcHQgcmVidWlsdFxcblxcbicgK1xuICAgICAgICAgICcqKk5leHQgU3RlcHM6KipcXG4nICtcbiAgICAgICAgICAnMS4gVGhlIHNlcnZlciB3aWxsIHJlc3RhcnQgYXV0b21hdGljYWxseVxcbicgK1xuICAgICAgICAgICcyLiBDaGVjayBgZ2V0X3NlcnZlcl9zdGF0dXNgIHRvIHZlcmlmeSB0aGUgdmVyc2lvblxcbicgK1xuICAgICAgICAgICczLiBUZXN0IHlvdXIgcGVyc29uYXMgdG8gZW5zdXJlIGV2ZXJ5dGhpbmcgd29ya3MnXG4gICAgICB9O1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGV4dDogcGVyc29uYUluZGljYXRvciArICfinYwgKipSb2xsYmFjayBGYWlsZWQqKlxcblxcbicgK1xuICAgICAgICAgICdFcnJvcjogJyArIGVycm9yTWVzc2FnZSArICdcXG5cXG4nICtcbiAgICAgICAgICAnKipNYW51YWwgUmVjb3Zlcnk6KipcXG4nICtcbiAgICAgICAgICAnMS4gQ2hlY2sgdGhlIGJhY2t1cHMgZGlyZWN0b3J5OiAuLi9kb2xsaG91c2VtY3AtYmFja3Vwcy9cXG4nICtcbiAgICAgICAgICAnMi4gTWFudWFsbHkgcmVzdG9yZSBmaWxlcyBpZiBuZWVkZWRcXG4nICtcbiAgICAgICAgICAnMy4gUnVuIGBucG0gaW5zdGFsbGAgYW5kIGBucG0gcnVuIGJ1aWxkYFxcbicgK1xuICAgICAgICAgICc0LiBDb250YWN0IHN1cHBvcnQgaWYgaXNzdWVzIHBlcnNpc3QnXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IHNlcnZlciBzdGF0dXNcbiAgICovXG4gIGFzeW5jIGdldFNlcnZlclN0YXR1cyhwZXJzb25hSW5kaWNhdG9yOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8eyB0ZXh0OiBzdHJpbmcgfT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjdXJyZW50VmVyc2lvbiA9IGF3YWl0IHRoaXMudmVyc2lvbk1hbmFnZXIuZ2V0Q3VycmVudFZlcnNpb24oKTtcbiAgICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IGF3YWl0IHRoaXMuZGVwZW5kZW5jeUNoZWNrZXIuY2hlY2tEZXBlbmRlbmNpZXMoKTtcbiAgICAgIGNvbnN0IGJhY2t1cHMgPSBhd2FpdCB0aGlzLmJhY2t1cE1hbmFnZXIubGlzdEJhY2t1cHMoKTtcbiAgICAgIGNvbnN0IHJhdGVMaW1pdFN0YXR1cyA9IHRoaXMudXBkYXRlQ2hlY2tlci5nZXRSYXRlTGltaXRTdGF0dXMoKTtcbiAgICAgIFxuICAgICAgLy8gR2V0IGdpdCBzdGF0dXNcbiAgICAgIGxldCBnaXRTdGF0dXMgPSAnVW5rbm93bic7XG4gICAgICBsZXQgZ2l0QnJhbmNoID0gJ1Vua25vd24nO1xuICAgICAgbGV0IGxhc3RDb21taXQgPSAnVW5rbm93bic7XG4gICAgICBcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgc3Rkb3V0OiBicmFuY2hPdXRwdXQgfSA9IGF3YWl0IHNhZmVFeGVjKCdnaXQnLCBbJ2JyYW5jaCcsICctLXNob3ctY3VycmVudCddLCB7IGN3ZDogdGhpcy5yb290RGlyIH0pO1xuICAgICAgICBnaXRCcmFuY2ggPSBicmFuY2hPdXRwdXQudHJpbSgpIHx8ICdkZXRhY2hlZCc7XG4gICAgICAgIFxuICAgICAgICBjb25zdCB7IHN0ZG91dDogc3RhdHVzT3V0cHV0IH0gPSBhd2FpdCBzYWZlRXhlYygnZ2l0JywgWydzdGF0dXMnLCAnLS1wb3JjZWxhaW4nXSwgeyBjd2Q6IHRoaXMucm9vdERpciB9KTtcbiAgICAgICAgZ2l0U3RhdHVzID0gc3RhdHVzT3V0cHV0LnRyaW0oKSA/ICdNb2RpZmllZCcgOiAnQ2xlYW4nO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgeyBzdGRvdXQ6IGxvZ091dHB1dCB9ID0gYXdhaXQgc2FmZUV4ZWMoJ2dpdCcsIFsnbG9nJywgJy0xJywgJy0tb25lbGluZSddLCB7IGN3ZDogdGhpcy5yb290RGlyIH0pO1xuICAgICAgICBsYXN0Q29tbWl0ID0gbG9nT3V0cHV0LnRyaW0oKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBHaXQgY29tbWFuZHMgZmFpbGVkLCB1c2UgZGVmYXVsdHNcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3Qgc3RhdHVzUGFydHMgPSBbXG4gICAgICAgIHBlcnNvbmFJbmRpY2F0b3IgKyAn8J+TiiAqKkRvbGxob3VzZU1DUCBTZXJ2ZXIgU3RhdHVzKipcXG5cXG4nLFxuICAgICAgICAnKipWZXJzaW9uIEluZm9ybWF0aW9uOioqXFxuJyxcbiAgICAgICAgYOKAoiBDdXJyZW50IFZlcnNpb246ICR7Y3VycmVudFZlcnNpb259XFxuYCxcbiAgICAgICAgYOKAoiBHaXQgQnJhbmNoOiAke2dpdEJyYW5jaH1cXG5gLFxuICAgICAgICBg4oCiIEdpdCBTdGF0dXM6ICR7Z2l0U3RhdHVzfVxcbmAsXG4gICAgICAgIGDigKIgTGFzdCBDb21taXQ6ICR7bGFzdENvbW1pdH1cXG5cXG5gLFxuICAgICAgICAnKipEZXBlbmRlbmNpZXM6KipcXG4nLFxuICAgICAgICB0aGlzLmRlcGVuZGVuY3lDaGVja2VyLmZvcm1hdERlcGVuZGVuY3lTdGF0dXMoZGVwZW5kZW5jaWVzKSxcbiAgICAgICAgJ1xcblxcbioqQmFja3VwczoqKlxcbicsXG4gICAgICAgIGDigKIgVG90YWwgQmFja3VwczogJHtiYWNrdXBzLmxlbmd0aH1cXG5gXG4gICAgICBdO1xuICAgICAgXG4gICAgICBpZiAoYmFja3Vwcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHN0YXR1c1BhcnRzLnB1c2goYOKAoiBMYXRlc3QgQmFja3VwOiAke2JhY2t1cHNbMF0udGltZXN0YW1wfSAodiR7YmFja3Vwc1swXS52ZXJzaW9uIHx8ICd1bmtub3duJ30pXFxuYCk7XG4gICAgICAgIHN0YXR1c1BhcnRzLnB1c2goYOKAoiBPbGRlc3QgQmFja3VwOiAke2JhY2t1cHNbYmFja3Vwcy5sZW5ndGggLSAxXS50aW1lc3RhbXB9XFxuYCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHN0YXR1c1BhcnRzLnB1c2goXG4gICAgICAgICdcXG4qKlJhdGUgTGltaXQgU3RhdHVzOioqXFxuJyxcbiAgICAgICAgYOKAoiBVcGRhdGUgQ2hlY2tzIFJlbWFpbmluZzogJHtyYXRlTGltaXRTdGF0dXMucmVtYWluaW5nUmVxdWVzdHN9LzEwIHBlciBob3VyXFxuYCxcbiAgICAgICAgYOKAoiBSYXRlIExpbWl0IFJlc2V0czogJHtyYXRlTGltaXRTdGF0dXMucmVzZXRUaW1lLnRvTG9jYWxlVGltZVN0cmluZygpfVxcbmBcbiAgICAgICk7XG4gICAgICBcbiAgICAgIGlmICghcmF0ZUxpbWl0U3RhdHVzLmFsbG93ZWQgJiYgcmF0ZUxpbWl0U3RhdHVzLndhaXRUaW1lU2Vjb25kcykge1xuICAgICAgICBzdGF0dXNQYXJ0cy5wdXNoKGDigKIg4o+zIFdhaXQgJHtyYXRlTGltaXRTdGF0dXMud2FpdFRpbWVTZWNvbmRzfSBzZWNvbmRzIGJlZm9yZSBuZXh0IGNoZWNrXFxuYCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHN0YXR1c1BhcnRzLnB1c2goXG4gICAgICAgICdcXG4qKkF2YWlsYWJsZSBDb21tYW5kczoqKlxcbicsXG4gICAgICAgICfigKIgYGNoZWNrX2Zvcl91cGRhdGVzYCAtIENoZWNrIGZvciBuZXcgdmVyc2lvbnNcXG4nLFxuICAgICAgICAn4oCiIGB1cGRhdGVfc2VydmVyIHRydWVgIC0gVXBkYXRlIHRvIGxhdGVzdCB2ZXJzaW9uXFxuJyxcbiAgICAgICAgJ+KAoiBgcm9sbGJhY2tfdXBkYXRlIHRydWVgIC0gUmVzdG9yZSBmcm9tIGJhY2t1cFxcbidcbiAgICAgICk7XG4gICAgICBcbiAgICAgIHJldHVybiB7IHRleHQ6IHN0YXR1c1BhcnRzLmpvaW4oJycpIH07XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0ZXh0OiBwZXJzb25hSW5kaWNhdG9yICsgJ+KdjCAqKlN0YXR1cyBDaGVjayBGYWlsZWQqKlxcblxcbicgK1xuICAgICAgICAgICdFcnJvcjogJyArIGVycm9yTWVzc2FnZSArICdcXG5cXG4nICtcbiAgICAgICAgICAnVGhlIHNlcnZlciBtYXkgYmUgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLlxcbicgK1xuICAgICAgICAgICdUcnkgcnVubmluZyBgdXBkYXRlX3NlcnZlciB0cnVlYCB0byBmaXggaXNzdWVzLidcbiAgICAgIH07XG4gICAgfVxuICB9XG59Il19
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Version management and comparison utilities
3
+ */
4
+ export declare class VersionManager {
5
+ /**
6
+ * Get current version from package.json
7
+ */
8
+ getCurrentVersion(): Promise<string>;
9
+ /**
10
+ * Enhanced semantic version comparison supporting pre-release versions
11
+ * Returns: -1 if v1 < v2, 0 if v1 == v2, 1 if v1 > v2
12
+ */
13
+ compareVersions(version1: string, version2: string): number;
14
+ /**
15
+ * Parse version from dependency output
16
+ */
17
+ parseVersionFromOutput(output: string, tool: string): string | null;
18
+ /**
19
+ * Validate that a dependency version meets requirements
20
+ */
21
+ validateDependencyVersion(actualVersion: string, requirements: {
22
+ minimum: string;
23
+ maximum: string;
24
+ recommended: string;
25
+ }, toolName: string): {
26
+ valid: boolean;
27
+ warning?: string;
28
+ error?: string;
29
+ };
30
+ }
31
+ //# sourceMappingURL=VersionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VersionManager.d.ts","sourceRoot":"","sources":["../../../../src/update/VersionManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,qBAAa,cAAc;IACzB;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAgC1C;;;OAGG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAgC3D;;OAEG;IACH,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA2BnE;;OAEG;IACH,yBAAyB,CACvB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EACvE,QAAQ,EAAE,MAAM,GACf;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;CAgCxD"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Version management and comparison utilities
3
+ */
4
+ import * as fs from 'fs/promises';
5
+ import * as path from 'path';
6
+ export class VersionManager {
7
+ /**
8
+ * Get current version from package.json
9
+ */
10
+ async getCurrentVersion() {
11
+ // Use process.cwd() as a base, then search upward for package.json
12
+ let currentDir = process.cwd();
13
+ let packageJsonPath = null;
14
+ // Search up to 5 levels for package.json
15
+ for (let i = 0; i < 5; i++) {
16
+ const candidatePath = path.join(currentDir, 'package.json');
17
+ try {
18
+ await fs.access(candidatePath);
19
+ packageJsonPath = candidatePath;
20
+ break;
21
+ }
22
+ catch {
23
+ // File doesn't exist, try parent directory
24
+ const parentDir = path.dirname(currentDir);
25
+ if (parentDir === currentDir) {
26
+ // We've reached the root
27
+ break;
28
+ }
29
+ currentDir = parentDir;
30
+ }
31
+ }
32
+ if (!packageJsonPath) {
33
+ throw new Error('Could not find package.json in current directory or any parent directory');
34
+ }
35
+ const packageContent = await fs.readFile(packageJsonPath, 'utf-8');
36
+ const packageData = JSON.parse(packageContent);
37
+ return packageData.version;
38
+ }
39
+ /**
40
+ * Enhanced semantic version comparison supporting pre-release versions
41
+ * Returns: -1 if v1 < v2, 0 if v1 == v2, 1 if v1 > v2
42
+ */
43
+ compareVersions(version1, version2) {
44
+ // Normalize versions by removing 'v' prefix
45
+ const v1 = version1.replace(/^v/, '');
46
+ const v2 = version2.replace(/^v/, '');
47
+ // Split version and pre-release parts
48
+ const [v1main, v1pre] = v1.split('-');
49
+ const [v2main, v2pre] = v2.split('-');
50
+ // Compare main version parts (x.y.z)
51
+ const v1parts = v1main.split('.').map(part => parseInt(part) || 0);
52
+ const v2parts = v2main.split('.').map(part => parseInt(part) || 0);
53
+ const maxLength = Math.max(v1parts.length, v2parts.length);
54
+ for (let i = 0; i < maxLength; i++) {
55
+ const v1part = v1parts[i] || 0;
56
+ const v2part = v2parts[i] || 0;
57
+ if (v1part < v2part)
58
+ return -1;
59
+ if (v1part > v2part)
60
+ return 1;
61
+ }
62
+ // If main versions are equal, compare pre-release versions
63
+ // Version without pre-release is greater than version with pre-release
64
+ if (!v1pre && v2pre)
65
+ return 1; // 1.0.0 > 1.0.0-beta
66
+ if (v1pre && !v2pre)
67
+ return -1; // 1.0.0-beta < 1.0.0
68
+ if (!v1pre && !v2pre)
69
+ return 0; // 1.0.0 == 1.0.0
70
+ // Both have pre-release, compare lexicographically
71
+ return v1pre.localeCompare(v2pre);
72
+ }
73
+ /**
74
+ * Parse version from dependency output
75
+ */
76
+ parseVersionFromOutput(output, tool) {
77
+ // Git version output: "git version 2.39.2"
78
+ // npm version output: "8.19.2" or JSON with version info
79
+ if (tool === 'git') {
80
+ const match = output.match(/git version (\d+\.\d+\.\d+)/);
81
+ return match ? match[1] : null;
82
+ }
83
+ else if (tool === 'npm') {
84
+ // npm might return just the version number or JSON
85
+ const cleanOutput = output.trim();
86
+ if (cleanOutput.match(/^\d+\.\d+\.\d+/)) {
87
+ return cleanOutput.split('\n')[0]; // First line if multiple lines
88
+ }
89
+ // Try to parse as JSON if it looks like JSON
90
+ try {
91
+ const parsed = JSON.parse(cleanOutput);
92
+ return parsed.npm || parsed.version || null;
93
+ }
94
+ catch {
95
+ // If not JSON, try to extract version pattern
96
+ const match = cleanOutput.match(/(\d+\.\d+\.\d+)/);
97
+ return match ? match[1] : null;
98
+ }
99
+ }
100
+ return null;
101
+ }
102
+ /**
103
+ * Validate that a dependency version meets requirements
104
+ */
105
+ validateDependencyVersion(actualVersion, requirements, toolName) {
106
+ const minComparison = this.compareVersions(actualVersion, requirements.minimum);
107
+ const maxComparison = this.compareVersions(actualVersion, requirements.maximum);
108
+ // Check if version is below minimum
109
+ if (minComparison < 0) {
110
+ return {
111
+ valid: false,
112
+ error: `${toolName} version ${actualVersion} is below minimum required version ${requirements.minimum}. Please upgrade ${toolName}.`
113
+ };
114
+ }
115
+ // Check if version is above maximum tested
116
+ if (maxComparison > 0) {
117
+ return {
118
+ valid: true,
119
+ warning: `${toolName} version ${actualVersion} is above maximum tested version ${requirements.maximum}. Some features may not work as expected.`
120
+ };
121
+ }
122
+ // Check if not at recommended version
123
+ const recComparison = this.compareVersions(actualVersion, requirements.recommended);
124
+ if (recComparison !== 0) {
125
+ return {
126
+ valid: true,
127
+ warning: `${toolName} version ${actualVersion} works but ${requirements.recommended} is recommended for optimal stability.`
128
+ };
129
+ }
130
+ // Version is perfect
131
+ return { valid: true };
132
+ }
133
+ }
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVyc2lvbk1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXBkYXRlL1ZlcnNpb25NYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFFN0IsTUFBTSxPQUFPLGNBQWM7SUFDekI7O09BRUc7SUFDSCxLQUFLLENBQUMsaUJBQWlCO1FBQ3JCLG1FQUFtRTtRQUNuRSxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDL0IsSUFBSSxlQUFlLEdBQWtCLElBQUksQ0FBQztRQUUxQyx5Q0FBeUM7UUFDekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzNCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQztnQkFDSCxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQy9CLGVBQWUsR0FBRyxhQUFhLENBQUM7Z0JBQ2hDLE1BQU07WUFDUixDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLDJDQUEyQztnQkFDM0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxTQUFTLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQzdCLHlCQUF5QjtvQkFDekIsTUFBTTtnQkFDUixDQUFDO2dCQUNELFVBQVUsR0FBRyxTQUFTLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQywwRUFBMEUsQ0FB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QUFHO2FBQ3JJLENBQUM7UUFDSixDQUFDO1FBRUQsMkNBQTJDO1FBQzNDLElBQUksYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsT0FBTyxFQUFFLEdBQUcsUUFBUSxZQUFZLGFBQWEsb0NBQW9DLFlBQVksQ0FBQyxPQUFPLDJDQUEyQzthQUNqSixDQUFDO1FBQ0osQ0FBQztRQUVELHNDQUFzQztRQUN0QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEYsSUFBSSxhQUFhLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEIsT0FBTztnQkFDTCxLQUFLLEVBQUUsSUFBSTtnQkFDWCxPQUFPLEVBQUUsR0FBRyxRQUFRLFlBQVksYUFBYSxjQUFjLFlBQVksQ0FBQyxXQUFXLHdDQUF3QzthQUM1SCxDQUFDO1FBQ0osQ0FBQztRQUVELHFCQUFxQjtRQUNyQixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVmVyc2lvbiBtYW5hZ2VtZW50IGFuZCBjb21wYXJpc29uIHV0aWxpdGllc1xuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmV4cG9ydCBjbGFzcyBWZXJzaW9uTWFuYWdlciB7XG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCB2ZXJzaW9uIGZyb20gcGFja2FnZS5qc29uXG4gICAqL1xuICBhc3luYyBnZXRDdXJyZW50VmVyc2lvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIC8vIFVzZSBwcm9jZXNzLmN3ZCgpIGFzIGEgYmFzZSwgdGhlbiBzZWFyY2ggdXB3YXJkIGZvciBwYWNrYWdlLmpzb25cbiAgICBsZXQgY3VycmVudERpciA9IHByb2Nlc3MuY3dkKCk7XG4gICAgbGV0IHBhY2thZ2VKc29uUGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgXG4gICAgLy8gU2VhcmNoIHVwIHRvIDUgbGV2ZWxzIGZvciBwYWNrYWdlLmpzb25cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDU7IGkrKykge1xuICAgICAgY29uc3QgY2FuZGlkYXRlUGF0aCA9IHBhdGguam9pbihjdXJyZW50RGlyLCAncGFja2FnZS5qc29uJyk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy5hY2Nlc3MoY2FuZGlkYXRlUGF0aCk7XG4gICAgICAgIHBhY2thZ2VKc29uUGF0aCA9IGNhbmRpZGF0ZVBhdGg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEZpbGUgZG9lc24ndCBleGlzdCwgdHJ5IHBhcmVudCBkaXJlY3RvcnlcbiAgICAgICAgY29uc3QgcGFyZW50RGlyID0gcGF0aC5kaXJuYW1lKGN1cnJlbnREaXIpO1xuICAgICAgICBpZiAocGFyZW50RGlyID09PSBjdXJyZW50RGlyKSB7XG4gICAgICAgICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgcm9vdFxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnREaXIgPSBwYXJlbnREaXI7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIGlmICghcGFja2FnZUpzb25QYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIHBhY2thZ2UuanNvbiBpbiBjdXJyZW50IGRpcmVjdG9yeSBvciBhbnkgcGFyZW50IGRpcmVjdG9yeScpO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBwYWNrYWdlQ29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKHBhY2thZ2VKc29uUGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgcGFja2FnZURhdGEgPSBKU09OLnBhcnNlKHBhY2thZ2VDb250ZW50KTtcbiAgICByZXR1cm4gcGFja2FnZURhdGEudmVyc2lvbjtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEVuaGFuY2VkIHNlbWFudGljIHZlcnNpb24gY29tcGFyaXNvbiBzdXBwb3J0aW5nIHByZS1yZWxlYXNlIHZlcnNpb25zXG4gICAqIFJldHVybnM6IC0xIGlmIHYxIDwgdjIsIDAgaWYgdjEgPT0gdjIsIDEgaWYgdjEgPiB2MlxuICAgKi9cbiAgY29tcGFyZVZlcnNpb25zKHZlcnNpb24xOiBzdHJpbmcsIHZlcnNpb24yOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIC8vIE5vcm1hbGl6ZSB2ZXJzaW9ucyBieSByZW1vdmluZyAndicgcHJlZml4XG4gICAgY29uc3QgdjEgPSB2ZXJzaW9uMS5yZXBsYWNlKC9edi8sICcnKTtcbiAgICBjb25zdCB2MiA9IHZlcnNpb24yLnJlcGxhY2UoL152LywgJycpO1xuICAgIFxuICAgIC8vIFNwbGl0IHZlcnNpb24gYW5kIHByZS1yZWxlYXNlIHBhcnRzXG4gICAgY29uc3QgW3YxbWFpbiwgdjFwcmVdID0gdjEuc3BsaXQoJy0nKTtcbiAgICBjb25zdCBbdjJtYWluLCB2MnByZV0gPSB2Mi5zcGxpdCgnLScpO1xuICAgIFxuICAgIC8vIENvbXBhcmUgbWFpbiB2ZXJzaW9uIHBhcnRzICh4LnkueilcbiAgICBjb25zdCB2MXBhcnRzID0gdjFtYWluLnNwbGl0KCcuJykubWFwKHBhcnQgPT4gcGFyc2VJbnQocGFydCkgfHwgMCk7XG4gICAgY29uc3QgdjJwYXJ0cyA9IHYybWFpbi5zcGxpdCgnLicpLm1hcChwYXJ0ID0+IHBhcnNlSW50KHBhcnQpIHx8IDApO1xuICAgIFxuICAgIGNvbnN0IG1heExlbmd0aCA9IE1hdGgubWF4KHYxcGFydHMubGVuZ3RoLCB2MnBhcnRzLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhMZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdjFwYXJ0ID0gdjFwYXJ0c1tpXSB8fCAwO1xuICAgICAgY29uc3QgdjJwYXJ0ID0gdjJwYXJ0c1tpXSB8fCAwO1xuICAgICAgXG4gICAgICBpZiAodjFwYXJ0IDwgdjJwYXJ0KSByZXR1cm4gLTE7XG4gICAgICBpZiAodjFwYXJ0ID4gdjJwYXJ0KSByZXR1cm4gMTtcbiAgICB9XG4gICAgXG4gICAgLy8gSWYgbWFpbiB2ZXJzaW9ucyBhcmUgZXF1YWwsIGNvbXBhcmUgcHJlLXJlbGVhc2UgdmVyc2lvbnNcbiAgICAvLyBWZXJzaW9uIHdpdGhvdXQgcHJlLXJlbGVhc2UgaXMgZ3JlYXRlciB0aGFuIHZlcnNpb24gd2l0aCBwcmUtcmVsZWFzZVxuICAgIGlmICghdjFwcmUgJiYgdjJwcmUpIHJldHVybiAxOyAgIC8vIDEuMC4wID4gMS4wLjAtYmV0YVxuICAgIGlmICh2MXByZSAmJiAhdjJwcmUpIHJldHVybiAtMTsgIC8vIDEuMC4wLWJldGEgPCAxLjAuMFxuICAgIGlmICghdjFwcmUgJiYgIXYycHJlKSByZXR1cm4gMDsgIC8vIDEuMC4wID09IDEuMC4wXG4gICAgXG4gICAgLy8gQm90aCBoYXZlIHByZS1yZWxlYXNlLCBjb21wYXJlIGxleGljb2dyYXBoaWNhbGx5XG4gICAgcmV0dXJuIHYxcHJlLmxvY2FsZUNvbXBhcmUodjJwcmUpO1xuICB9XG4gIFxuICAvKipcbiAgICogUGFyc2UgdmVyc2lvbiBmcm9tIGRlcGVuZGVuY3kgb3V0cHV0XG4gICAqL1xuICBwYXJzZVZlcnNpb25Gcm9tT3V0cHV0KG91dHB1dDogc3RyaW5nLCB0b29sOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAvLyBHaXQgdmVyc2lvbiBvdXRwdXQ6IFwiZ2l0IHZlcnNpb24gMi4zOS4yXCJcbiAgICAvLyBucG0gdmVyc2lvbiBvdXRwdXQ6IFwiOC4xOS4yXCIgb3IgSlNPTiB3aXRoIHZlcnNpb24gaW5mb1xuICAgIFxuICAgIGlmICh0b29sID09PSAnZ2l0Jykge1xuICAgICAgY29uc3QgbWF0Y2ggPSBvdXRwdXQubWF0Y2goL2dpdCB2ZXJzaW9uIChcXGQrXFwuXFxkK1xcLlxcZCspLyk7XG4gICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6IG51bGw7XG4gICAgfSBlbHNlIGlmICh0b29sID09PSAnbnBtJykge1xuICAgICAgLy8gbnBtIG1pZ2h0IHJldHVybiBqdXN0IHRoZSB2ZXJzaW9uIG51bWJlciBvciBKU09OXG4gICAgICBjb25zdCBjbGVhbk91dHB1dCA9IG91dHB1dC50cmltKCk7XG4gICAgICBpZiAoY2xlYW5PdXRwdXQubWF0Y2goL15cXGQrXFwuXFxkK1xcLlxcZCsvKSkge1xuICAgICAgICByZXR1cm4gY2xlYW5PdXRwdXQuc3BsaXQoJ1xcbicpWzBdOyAvLyBGaXJzdCBsaW5lIGlmIG11bHRpcGxlIGxpbmVzXG4gICAgICB9XG4gICAgICAvLyBUcnkgdG8gcGFyc2UgYXMgSlNPTiBpZiBpdCBsb29rcyBsaWtlIEpTT05cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY2xlYW5PdXRwdXQpO1xuICAgICAgICByZXR1cm4gcGFyc2VkLm5wbSB8fCBwYXJzZWQudmVyc2lvbiB8fCBudWxsO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElmIG5vdCBKU09OLCB0cnkgdG8gZXh0cmFjdCB2ZXJzaW9uIHBhdHRlcm5cbiAgICAgICAgY29uc3QgbWF0Y2ggPSBjbGVhbk91dHB1dC5tYXRjaCgvKFxcZCtcXC5cXGQrXFwuXFxkKykvKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgYSBkZXBlbmRlbmN5IHZlcnNpb24gbWVldHMgcmVxdWlyZW1lbnRzXG4gICAqL1xuICB2YWxpZGF0ZURlcGVuZGVuY3lWZXJzaW9uKFxuICAgIGFjdHVhbFZlcnNpb246IHN0cmluZywgXG4gICAgcmVxdWlyZW1lbnRzOiB7IG1pbmltdW06IHN0cmluZzsgbWF4aW11bTogc3RyaW5nOyByZWNvbW1lbmRlZDogc3RyaW5nIH0sXG4gICAgdG9vbE5hbWU6IHN0cmluZ1xuICApOiB7IHZhbGlkOiBib29sZWFuOyB3YXJuaW5nPzogc3RyaW5nOyBlcnJvcj86IHN0cmluZyB9IHtcbiAgICBjb25zdCBtaW5Db21wYXJpc29uID0gdGhpcy5jb21wYXJlVmVyc2lvbnMoYWN0dWFsVmVyc2lvbiwgcmVxdWlyZW1lbnRzLm1pbmltdW0pO1xuICAgIGNvbnN0IG1heENvbXBhcmlzb24gPSB0aGlzLmNvbXBhcmVWZXJzaW9ucyhhY3R1YWxWZXJzaW9uLCByZXF1aXJlbWVudHMubWF4aW11bSk7XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgdmVyc2lvbiBpcyBiZWxvdyBtaW5pbXVtXG4gICAgaWYgKG1pbkNvbXBhcmlzb24gPCAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIGVycm9yOiBgJHt0b29sTmFtZX0gdmVyc2lvbiAke2FjdHVhbFZlcnNpb259IGlzIGJlbG93IG1pbmltdW0gcmVxdWlyZWQgdmVyc2lvbiAke3JlcXVpcmVtZW50cy5taW5pbXVtfS4gUGxlYXNlIHVwZ3JhZGUgJHt0b29sTmFtZX0uYFxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgdmVyc2lvbiBpcyBhYm92ZSBtYXhpbXVtIHRlc3RlZFxuICAgIGlmIChtYXhDb21wYXJpc29uID4gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIHdhcm5pbmc6IGAke3Rvb2xOYW1lfSB2ZXJzaW9uICR7YWN0dWFsVmVyc2lvbn0gaXMgYWJvdmUgbWF4aW11bSB0ZXN0ZWQgdmVyc2lvbiAke3JlcXVpcmVtZW50cy5tYXhpbXVtfS4gU29tZSBmZWF0dXJlcyBtYXkgbm90IHdvcmsgYXMgZXhwZWN0ZWQuYFxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgbm90IGF0IHJlY29tbWVuZGVkIHZlcnNpb25cbiAgICBjb25zdCByZWNDb21wYXJpc29uID0gdGhpcy5jb21wYXJlVmVyc2lvbnMoYWN0dWFsVmVyc2lvbiwgcmVxdWlyZW1lbnRzLnJlY29tbWVuZGVkKTtcbiAgICBpZiAocmVjQ29tcGFyaXNvbiAhPT0gMCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIHdhcm5pbmc6IGAke3Rvb2xOYW1lfSB2ZXJzaW9uICR7YWN0dWFsVmVyc2lvbn0gd29ya3MgYnV0ICR7cmVxdWlyZW1lbnRzLnJlY29tbWVuZGVkfSBpcyByZWNvbW1lbmRlZCBmb3Igb3B0aW1hbCBzdGFiaWxpdHkuYFxuICAgICAgfTtcbiAgICB9XG4gICAgXG4gICAgLy8gVmVyc2lvbiBpcyBwZXJmZWN0XG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUgfTtcbiAgfVxufSJdfQ==
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Update module exports
3
+ */
4
+ export * from './VersionManager.js';
5
+ export * from './UpdateChecker.js';
6
+ export * from './DependencyChecker.js';
7
+ export * from './BackupManager.js';
8
+ export * from './UpdateManager.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/update/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Update module exports
3
+ */
4
+ export * from './VersionManager.js';
5
+ export * from './UpdateChecker.js';
6
+ export * from './DependencyChecker.js';
7
+ export * from './BackupManager.js';
8
+ export * from './UpdateManager.js';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXBkYXRlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVcGRhdGUgbW9kdWxlIGV4cG9ydHNcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL1ZlcnNpb25NYW5hZ2VyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vVXBkYXRlQ2hlY2tlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0RlcGVuZGVuY3lDaGVja2VyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQmFja3VwTWFuYWdlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL1VwZGF0ZU1hbmFnZXIuanMnOyJdfQ==
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Filesystem and string manipulation utilities
3
+ */
4
+ /**
5
+ * Generate an anonymous ID for users without identity
6
+ */
7
+ export declare function generateAnonymousId(): string;
8
+ export declare function generateUniqueId(personaName: string, author?: string): string;
9
+ /**
10
+ * Convert text to URL-safe slug
11
+ */
12
+ export declare function slugify(text: string): string;
13
+ /**
14
+ * Ensure a directory exists, create if it doesn't
15
+ */
16
+ export declare function ensureDirectory(dirPath: string): Promise<void>;
17
+ /**
18
+ * Check if a file exists
19
+ */
20
+ export declare function fileExists(filePath: string): Promise<boolean>;
21
+ /**
22
+ * Get file size in bytes
23
+ */
24
+ export declare function getFileSize(filePath: string): Promise<number>;
25
+ /**
26
+ * Create a backup of a directory
27
+ */
28
+ export declare function createBackup(sourcePath: string, backupPath: string): Promise<void>;
29
+ //# sourceMappingURL=filesystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../../../src/utils/filesystem.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAK5C;AAQD,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAkB7E;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAW5C;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMpE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGnE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOxF"}