trainbud 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/.env.example +11 -0
  2. package/CHANGELOG.md +675 -0
  3. package/LICENSE +21 -0
  4. package/QUICKSTART.md +182 -0
  5. package/README.md +322 -0
  6. package/dist/appDb.d.ts +83 -0
  7. package/dist/appDb.d.ts.map +1 -0
  8. package/dist/appDb.js +239 -0
  9. package/dist/appDb.js.map +1 -0
  10. package/dist/check.d.ts +12 -0
  11. package/dist/check.d.ts.map +1 -0
  12. package/dist/check.js +230 -0
  13. package/dist/check.js.map +1 -0
  14. package/dist/cli.d.ts +3 -0
  15. package/dist/cli.d.ts.map +1 -0
  16. package/dist/cli.js +457 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/config.d.ts +61 -0
  19. package/dist/config.d.ts.map +1 -0
  20. package/dist/config.js +241 -0
  21. package/dist/config.js.map +1 -0
  22. package/dist/dashboard.d.ts +8 -0
  23. package/dist/dashboard.d.ts.map +1 -0
  24. package/dist/dashboard.js +1004 -0
  25. package/dist/dashboard.js.map +1 -0
  26. package/dist/dashboardCharts.d.ts +99 -0
  27. package/dist/dashboardCharts.d.ts.map +1 -0
  28. package/dist/dashboardCharts.js +317 -0
  29. package/dist/dashboardCharts.js.map +1 -0
  30. package/dist/dashboardData.d.ts +89 -0
  31. package/dist/dashboardData.d.ts.map +1 -0
  32. package/dist/dashboardData.js +228 -0
  33. package/dist/dashboardData.js.map +1 -0
  34. package/dist/detect/baseline.d.ts +17 -0
  35. package/dist/detect/baseline.d.ts.map +1 -0
  36. package/dist/detect/baseline.js +62 -0
  37. package/dist/detect/baseline.js.map +1 -0
  38. package/dist/detect/countdown.d.ts +30 -0
  39. package/dist/detect/countdown.d.ts.map +1 -0
  40. package/dist/detect/countdown.js +79 -0
  41. package/dist/detect/countdown.js.map +1 -0
  42. package/dist/detect/detectors.d.ts +20 -0
  43. package/dist/detect/detectors.d.ts.map +1 -0
  44. package/dist/detect/detectors.js +291 -0
  45. package/dist/detect/detectors.js.map +1 -0
  46. package/dist/detect/findings.d.ts +29 -0
  47. package/dist/detect/findings.d.ts.map +1 -0
  48. package/dist/detect/findings.js +2 -0
  49. package/dist/detect/findings.js.map +1 -0
  50. package/dist/detect/forecast.d.ts +33 -0
  51. package/dist/detect/forecast.d.ts.map +1 -0
  52. package/dist/detect/forecast.js +122 -0
  53. package/dist/detect/forecast.js.map +1 -0
  54. package/dist/detect/index.d.ts +50 -0
  55. package/dist/detect/index.d.ts.map +1 -0
  56. package/dist/detect/index.js +114 -0
  57. package/dist/detect/index.js.map +1 -0
  58. package/dist/detect/sleepQuality.d.ts +21 -0
  59. package/dist/detect/sleepQuality.d.ts.map +1 -0
  60. package/dist/detect/sleepQuality.js +164 -0
  61. package/dist/detect/sleepQuality.js.map +1 -0
  62. package/dist/detect/trimp.d.ts +22 -0
  63. package/dist/detect/trimp.d.ts.map +1 -0
  64. package/dist/detect/trimp.js +77 -0
  65. package/dist/detect/trimp.js.map +1 -0
  66. package/dist/detect/week.d.ts +31 -0
  67. package/dist/detect/week.d.ts.map +1 -0
  68. package/dist/detect/week.js +184 -0
  69. package/dist/detect/week.js.map +1 -0
  70. package/dist/garmin/auth.d.ts +10 -0
  71. package/dist/garmin/auth.d.ts.map +1 -0
  72. package/dist/garmin/auth.js +81 -0
  73. package/dist/garmin/auth.js.map +1 -0
  74. package/dist/garmin/cache.d.ts +42 -0
  75. package/dist/garmin/cache.d.ts.map +1 -0
  76. package/dist/garmin/cache.js +141 -0
  77. package/dist/garmin/cache.js.map +1 -0
  78. package/dist/garmin/client.d.ts +22 -0
  79. package/dist/garmin/client.d.ts.map +1 -0
  80. package/dist/garmin/client.js +237 -0
  81. package/dist/garmin/client.js.map +1 -0
  82. package/dist/garmin/daily.d.ts +24 -0
  83. package/dist/garmin/daily.d.ts.map +1 -0
  84. package/dist/garmin/daily.js +96 -0
  85. package/dist/garmin/daily.js.map +1 -0
  86. package/dist/garmin/garminApiTypes.d.ts +70 -0
  87. package/dist/garmin/garminApiTypes.d.ts.map +1 -0
  88. package/dist/garmin/garminApiTypes.js +3 -0
  89. package/dist/garmin/garminApiTypes.js.map +1 -0
  90. package/dist/garmin/garminConnect.d.ts +17 -0
  91. package/dist/garmin/garminConnect.d.ts.map +1 -0
  92. package/dist/garmin/garminConnect.js +5 -0
  93. package/dist/garmin/garminConnect.js.map +1 -0
  94. package/dist/garmin/partial.d.ts +32 -0
  95. package/dist/garmin/partial.d.ts.map +1 -0
  96. package/dist/garmin/partial.js +38 -0
  97. package/dist/garmin/partial.js.map +1 -0
  98. package/dist/garmin/rawApi.d.ts +59 -0
  99. package/dist/garmin/rawApi.d.ts.map +1 -0
  100. package/dist/garmin/rawApi.js +113 -0
  101. package/dist/garmin/rawApi.js.map +1 -0
  102. package/dist/garmin/types.d.ts +85 -0
  103. package/dist/garmin/types.d.ts.map +1 -0
  104. package/dist/garmin/types.js +11 -0
  105. package/dist/garmin/types.js.map +1 -0
  106. package/dist/history/capture.d.ts +12 -0
  107. package/dist/history/capture.d.ts.map +1 -0
  108. package/dist/history/capture.js +63 -0
  109. package/dist/history/capture.js.map +1 -0
  110. package/dist/history/context.d.ts +51 -0
  111. package/dist/history/context.d.ts.map +1 -0
  112. package/dist/history/context.js +122 -0
  113. package/dist/history/context.js.map +1 -0
  114. package/dist/history/fallback.d.ts +72 -0
  115. package/dist/history/fallback.d.ts.map +1 -0
  116. package/dist/history/fallback.js +185 -0
  117. package/dist/history/fallback.js.map +1 -0
  118. package/dist/history/ingest.d.ts +44 -0
  119. package/dist/history/ingest.d.ts.map +1 -0
  120. package/dist/history/ingest.js +347 -0
  121. package/dist/history/ingest.js.map +1 -0
  122. package/dist/history/scheduler.d.ts +20 -0
  123. package/dist/history/scheduler.d.ts.map +1 -0
  124. package/dist/history/scheduler.js +54 -0
  125. package/dist/history/scheduler.js.map +1 -0
  126. package/dist/history/schema.d.ts +41 -0
  127. package/dist/history/schema.d.ts.map +1 -0
  128. package/dist/history/schema.js +91 -0
  129. package/dist/history/schema.js.map +1 -0
  130. package/dist/history/store.d.ts +112 -0
  131. package/dist/history/store.d.ts.map +1 -0
  132. package/dist/history/store.js +282 -0
  133. package/dist/history/store.js.map +1 -0
  134. package/dist/httpServer.d.ts +55 -0
  135. package/dist/httpServer.d.ts.map +1 -0
  136. package/dist/httpServer.js +1027 -0
  137. package/dist/httpServer.js.map +1 -0
  138. package/dist/index.d.ts +3 -0
  139. package/dist/index.d.ts.map +1 -0
  140. package/dist/index.js +11 -0
  141. package/dist/index.js.map +1 -0
  142. package/dist/mcpConfig.d.ts +56 -0
  143. package/dist/mcpConfig.d.ts.map +1 -0
  144. package/dist/mcpConfig.js +106 -0
  145. package/dist/mcpConfig.js.map +1 -0
  146. package/dist/pairApi.d.ts +14 -0
  147. package/dist/pairApi.d.ts.map +1 -0
  148. package/dist/pairApi.js +38 -0
  149. package/dist/pairApi.js.map +1 -0
  150. package/dist/paths.d.ts +45 -0
  151. package/dist/paths.d.ts.map +1 -0
  152. package/dist/paths.js +105 -0
  153. package/dist/paths.js.map +1 -0
  154. package/dist/profile.d.ts +123 -0
  155. package/dist/profile.d.ts.map +1 -0
  156. package/dist/profile.js +327 -0
  157. package/dist/profile.js.map +1 -0
  158. package/dist/promptApi.d.ts +43 -0
  159. package/dist/promptApi.d.ts.map +1 -0
  160. package/dist/promptApi.js +328 -0
  161. package/dist/promptApi.js.map +1 -0
  162. package/dist/promptSuggestions.d.ts +16 -0
  163. package/dist/promptSuggestions.d.ts.map +1 -0
  164. package/dist/promptSuggestions.js +141 -0
  165. package/dist/promptSuggestions.js.map +1 -0
  166. package/dist/selfTest.d.ts +53 -0
  167. package/dist/selfTest.d.ts.map +1 -0
  168. package/dist/selfTest.js +225 -0
  169. package/dist/selfTest.js.map +1 -0
  170. package/dist/server.d.ts +10 -0
  171. package/dist/server.d.ts.map +1 -0
  172. package/dist/server.js +67 -0
  173. package/dist/server.js.map +1 -0
  174. package/dist/setup.d.ts +2 -0
  175. package/dist/setup.d.ts.map +1 -0
  176. package/dist/setup.js +210 -0
  177. package/dist/setup.js.map +1 -0
  178. package/dist/toolErrors.d.ts +2 -0
  179. package/dist/toolErrors.d.ts.map +1 -0
  180. package/dist/toolErrors.js +18 -0
  181. package/dist/toolErrors.js.map +1 -0
  182. package/dist/tools/activities.d.ts +18 -0
  183. package/dist/tools/activities.d.ts.map +1 -0
  184. package/dist/tools/activities.js +182 -0
  185. package/dist/tools/activities.js.map +1 -0
  186. package/dist/tools/bodyComposition.d.ts +10 -0
  187. package/dist/tools/bodyComposition.d.ts.map +1 -0
  188. package/dist/tools/bodyComposition.js +139 -0
  189. package/dist/tools/bodyComposition.js.map +1 -0
  190. package/dist/tools/context.d.ts +8 -0
  191. package/dist/tools/context.d.ts.map +1 -0
  192. package/dist/tools/context.js +148 -0
  193. package/dist/tools/context.js.map +1 -0
  194. package/dist/tools/findings.d.ts +7 -0
  195. package/dist/tools/findings.d.ts.map +1 -0
  196. package/dist/tools/findings.js +51 -0
  197. package/dist/tools/findings.js.map +1 -0
  198. package/dist/tools/heartRate.d.ts +10 -0
  199. package/dist/tools/heartRate.d.ts.map +1 -0
  200. package/dist/tools/heartRate.js +105 -0
  201. package/dist/tools/heartRate.js.map +1 -0
  202. package/dist/tools/index.d.ts +66 -0
  203. package/dist/tools/index.d.ts.map +1 -0
  204. package/dist/tools/index.js +101 -0
  205. package/dist/tools/index.js.map +1 -0
  206. package/dist/tools/payloads.d.ts +148 -0
  207. package/dist/tools/payloads.d.ts.map +1 -0
  208. package/dist/tools/payloads.js +2 -0
  209. package/dist/tools/payloads.js.map +1 -0
  210. package/dist/tools/recovery.d.ts +31 -0
  211. package/dist/tools/recovery.d.ts.map +1 -0
  212. package/dist/tools/recovery.js +350 -0
  213. package/dist/tools/recovery.js.map +1 -0
  214. package/dist/tools/sleep.d.ts +10 -0
  215. package/dist/tools/sleep.d.ts.map +1 -0
  216. package/dist/tools/sleep.js +124 -0
  217. package/dist/tools/sleep.js.map +1 -0
  218. package/dist/tools/stress.d.ts +11 -0
  219. package/dist/tools/stress.d.ts.map +1 -0
  220. package/dist/tools/stress.js +108 -0
  221. package/dist/tools/stress.js.map +1 -0
  222. package/dist/tools/trainingInsights.d.ts +15 -0
  223. package/dist/tools/trainingInsights.d.ts.map +1 -0
  224. package/dist/tools/trainingInsights.js +79 -0
  225. package/dist/tools/trainingInsights.js.map +1 -0
  226. package/dist/tools/types.d.ts +12 -0
  227. package/dist/tools/types.d.ts.map +1 -0
  228. package/dist/tools/types.js +2 -0
  229. package/dist/tools/types.js.map +1 -0
  230. package/dist/tools/vo2Max.d.ts +11 -0
  231. package/dist/tools/vo2Max.d.ts.map +1 -0
  232. package/dist/tools/vo2Max.js +110 -0
  233. package/dist/tools/vo2Max.js.map +1 -0
  234. package/dist/tools/week.d.ts +12 -0
  235. package/dist/tools/week.d.ts.map +1 -0
  236. package/dist/tools/week.js +74 -0
  237. package/dist/tools/week.js.map +1 -0
  238. package/dist/usage.d.ts +104 -0
  239. package/dist/usage.d.ts.map +1 -0
  240. package/dist/usage.js +247 -0
  241. package/dist/usage.js.map +1 -0
  242. package/dist/utils/batch.d.ts +2 -0
  243. package/dist/utils/batch.d.ts.map +1 -0
  244. package/dist/utils/batch.js +18 -0
  245. package/dist/utils/batch.js.map +1 -0
  246. package/dist/utils/helpers.d.ts +32 -0
  247. package/dist/utils/helpers.d.ts.map +1 -0
  248. package/dist/utils/helpers.js +188 -0
  249. package/dist/utils/helpers.js.map +1 -0
  250. package/dist/utils/jsonFile.d.ts +19 -0
  251. package/dist/utils/jsonFile.d.ts.map +1 -0
  252. package/dist/utils/jsonFile.js +24 -0
  253. package/dist/utils/jsonFile.js.map +1 -0
  254. package/dist/utils/logger.d.ts +4 -0
  255. package/dist/utils/logger.d.ts.map +1 -0
  256. package/dist/utils/logger.js +97 -0
  257. package/dist/utils/logger.js.map +1 -0
  258. package/dist/utils/secretFile.d.ts +15 -0
  259. package/dist/utils/secretFile.d.ts.map +1 -0
  260. package/dist/utils/secretFile.js +47 -0
  261. package/dist/utils/secretFile.js.map +1 -0
  262. package/dist/utils/stdio.d.ts +10 -0
  263. package/dist/utils/stdio.d.ts.map +1 -0
  264. package/dist/utils/stdio.js +70 -0
  265. package/dist/utils/stdio.js.map +1 -0
  266. package/dist/version.d.ts +2 -0
  267. package/dist/version.d.ts.map +1 -0
  268. package/dist/version.js +7 -0
  269. package/dist/version.js.map +1 -0
  270. package/dist/watchApi.d.ts +264 -0
  271. package/dist/watchApi.d.ts.map +1 -0
  272. package/dist/watchApi.js +333 -0
  273. package/dist/watchApi.js.map +1 -0
  274. package/package.json +77 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpServer.js","sourceRoot":"","sources":["../src/httpServer.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AACnG,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EACL,QAAQ,EACR,eAAe,EACf,UAAU,EACV,aAAa,GACd,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,4BAA4B,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAqB,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAClG,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzG,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAoB,MAAM,qBAAqB,CAAC;AAEtE,2BAA2B;AAE3B,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC;AACnC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AACpC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACnC,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAC9E,yDAAyD;AACzD,MAAM,4BAA4B,GAAG,EAAE,CAAC;AACxC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AACvC,MAAM,sBAAsB,GAAG,CAAC,GAAG,MAAM,CAAC;AAO1C,MAAM,UAAU,GAAG,IAAI,GAAG,EAA0B,CAAC;AACrD,MAAM,cAAc,GAAG,IAAI,GAAG,EAA0B,CAAC;AACzD,IAAI,aAAa,GAAwD,IAAI,CAAC;AAE9E;;;;;;;;GAQG;AACH,IAAI,eAAe,GAAG,CAAC,CAAC;AAExB,MAAM,UAAU,mBAAmB;IACjC,OAAO,eAAe,CAAC;AACzB,CAAC;AAOD;;;;;;;;;;;;;;GAcG;AACH,SAAS,YAAY,CAAC,GAAoB;IACxC,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,SAAS,CAAC;IAC5D,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC;QACtC,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;SACrB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SACxB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEnC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,aAAa,CAAC;AAClE,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe;IACxC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC7C,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC3E,CAAC;AAED,kFAAkF;AAClF,SAAS,iBAAiB,CAAC,GAAgC,EAAE,GAAW;IACtE,IAAI,GAAG,CAAC,IAAI,GAAG,0BAA0B,EAAE,CAAC;QAC1C,OAAO;IACT,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;QAC/B,IAAI,GAAG,GAAG,KAAK,CAAC,WAAW,IAAI,oBAAoB,EAAE,CAAC;YACpD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CACpB,SAAiB,EACjB,MAAmC,UAAU,EAC7C,MAAc,uBAAuB;IAErC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEjC,IAAI,CAAC,KAAK,IAAI,GAAG,GAAG,KAAK,CAAC,WAAW,IAAI,oBAAoB,EAAE,CAAC;QAC9D,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;QACnD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;IACjB,OAAO,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;AAC3B,CAAC;AAED,uEAAuE;AACvE,SAAS,UAAU,CAAC,QAAgB;IAClC,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,QAAQ,CAAC,GAAmB,EAAE,UAAkB,EAAE,IAAa;IACtE,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAClE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,GAAoB;IACrC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB;IACzC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,6BAA6B;AAC7B,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,+EAA+E;AAC/E,6EAA6E;AAC7E,2EAA2E;AAC3E,0DAA0D;AAC1D,EAAE;AACF,8EAA8E;AAC9E,4EAA4E;AAC5E,iDAAiD;AACjD,MAAM,cAAc,GAAG,YAAY,CAAC;AACpC,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;AAC7C,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAC;AAEpD,SAAS,YAAY,CAAC,GAAoB;IACxC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;IAClC,IAAI,CAAC,MAAM;QAAE,OAAO,GAAG,CAAC;IAExB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,EAAE,GAAG,CAAC;YAAE,SAAS;QACrB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,IAAI;YAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAAC,GAAoB;IAC3C,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACjD,IAAI,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAEtB,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5C,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC5B,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,sBAAsB;IAC7B,0EAA0E;IAC1E,4EAA4E;IAC5E,yEAAyE;IACzE,IAAI,iBAAiB,CAAC,IAAI,IAAI,uBAAuB,EAAE,CAAC;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,iBAAiB,EAAE,CAAC;YAChD,IAAI,SAAS,IAAI,GAAG;gBAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,MAAM,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC3C,iBAAiB,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,CAAC;IACvD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,sBAAsB;IACpC,iBAAiB,CAAC,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,mBAAmB,CAAC,GAAoB,EAAE,EAAU;IAC3D,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IAC3F,MAAM,MAAM,GAAG,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACjD,OAAO,GAAG,cAAc,IAAI,EAAE,6CAA6C,MAAM,GAAG,MAAM,EAAE,CAAC;AAC/F,CAAC;AAED,SAAS,YAAY,CAAC,GAAoB,EAAE,UAAmB;IAC7D,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;IACzC,MAAM,WAAW,GAAG,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACjG,MAAM,KAAK,GAAG,WAAW,IAAI,UAAU,IAAI,IAAI,CAAC;IAChD,IAAI,KAAK,KAAK,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CAAC,KAAa;IAClC,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC;IACrC,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7C,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,qBAAqB;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,aAAa,IAAI,GAAG,GAAG,aAAa,CAAC,SAAS,EAAE,CAAC;QACnD,OAAO,aAAa,CAAC,OAAO,CAAC;IAC/B,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC1C,aAAa,GAAG;QACd,OAAO;QACP,SAAS,EAAE,GAAG,GAAG,sBAAsB;KACxC,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,4CAA4C;AAC5C,KAAK,UAAU,WAAW,CAAC,GAAoB;IAC7C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnE,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC;QAEvB,IAAI,KAAK,GAAG,cAAc,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,KAAa;IAC5D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;YAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,KAAa;IACzD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAE3B,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,KAAK,GAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAA6B,CAAC,KAAK,CAAC,CAAC;YACtE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC9D,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACpC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAC3D,OAAO,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,GAAoB;IAC9C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnE,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC;QAEvB,IAAI,KAAK,GAAG,cAAc,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;AACpC,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,GAAoB,EAAE,GAAmB;IACvE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,CAAC;QAC7D,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;YACjB,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,iDAAiD;SAC3D,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,uBAAuB,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC;QAClD,kBAAkB,EAAE,SAAS;KAC9B,CAAC,CAAC;IAEH;;;;;;;;;;;;OAYG;IACH,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,eAAe,IAAI,CAAC,CAAC;IAErB,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QACD,QAAQ,GAAG,IAAI,CAAC;QAChB,eAAe,IAAI,CAAC,CAAC;QACrB,KAAK,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YAC/D,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,4BAA4B,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QACH,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YAC5D,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,yBAAyB,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAE3B,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEhC,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/E,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,yBAAyB,CAAC,CAAC;QAEnD,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YACrB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;gBACjB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,CAAC,KAAK;oBACZ,OAAO,EAAE,uBAAuB;iBACjC;gBACD,EAAE,EAAE,IAAI;aACT,CAAC,CAAC;QACL,CAAC;IACH,CAAC;YAAS,CAAC;QACT,yEAAyE;QACzE,sDAAsD;QACtD,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;YACvC,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC;AAED,yEAAyE;AACzE,4EAA4E;AAC5E,4EAA4E;AAC5E,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;AAEjG,MAAM,UAAU,WAAW,CAAC,MAAiC;IAC3D,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACtF,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACtC,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAC/B,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;IACH,CAAC;IACD,IAAI,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC;IAC5B,OAAO,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;AAC3E,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,CAAC;AACrE,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAA0B;IACzD,MAAM,GAAG,GAAG,MAAM,IAAI,EAAE,CAAC;IACzB,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAE9D,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;QACzE,+BAA+B;QAC/B,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,iDAAiD;AACjD,EAAE;AACF,yEAAyE;AACzE,2EAA2E;AAC3E,8EAA8E;AAC9E,gFAAgF;AAChF,6EAA6E;AAC7E,8EAA8E;AAC9E,gFAAgF;AAChF,MAAM,UAAU,gBAAgB,CAAC,GAAyB;IACxD,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACjF,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAElC,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACxE,MAAM,IAAI,GAAG,aAAa,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;IAC/C,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,IAAI,OAAO,CAAC;QAC5E,OAAO,GAAG,KAAK,MAAM,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,SAAS,CAAC,SAAS,CAAC;AAC7B,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAoC;IAC5D,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,OAAO,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;AACjD,CAAC;AAED,2EAA2E;AAC3E,gFAAgF;AAChF,mEAAmE;AACnE,SAAS,WAAW,CAAC,IAAY;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACrD,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,IAAI,UAAU,GAAuB,IAAI,CAAC;IAE1C,OAAO;QACL,KAAK,CAAC,KAAK;YACT,uBAAuB,EAAE,CAAC;YAC1B,YAAY,EAAE,CAAC;YACf,eAAe,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAEnC,qEAAqE;YACrE,kEAAkE;YAClE,kEAAkE;YAClE,4BAA4B,EAAE,CAAC;YAE/B,0EAA0E;YAC1E,MAAM,cAAc,GAAG,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;YACpF,IAAI,cAAc,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBACxD,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,cAAc,CAAC;YACpD,CAAC;YAED,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBAC1C,oDAAoD;gBACpD,EAAE;gBACF,kEAAkE;gBAClE,qEAAqE;gBACrE,yEAAyE;gBACzE,4CAA4C;gBAC5C,EAAE;gBACF,iEAAiE;gBACjE,wEAAwE;gBACxE,qEAAqE;gBACrE,8DAA8D;gBAC9D,yEAAyE;gBACzE,6BAA6B;gBAC7B,EAAE;gBACF,qEAAqE;gBACrE,kEAAkE;gBAClE,sEAAsE;gBACtE,oEAAoE;gBACpE,WAAW;gBACX,KAAK,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;oBACpD,uEAAuE;oBACvE,oEAAoE;oBACpE,MAAM,CAAC,KAAK,CACV,EAAE,KAAK,EAAE,GAAG,EAAE,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EACzC,oCAAoC,CACrC,CAAC;oBACF,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;wBACrB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;oBACzD,CAAC;yBAAM,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;wBAC9B,GAAG,CAAC,GAAG,EAAE,CAAC;oBACZ,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,aAAa,GAAG,KAAK,EAAE,GAAoB,EAAE,GAAmB,EAAiB,EAAE;gBACvF,wEAAwE;gBACxE,wEAAwE;gBACxE,qEAAqE;gBACrE,iDAAiD;gBACjD,IAAI,GAAQ,CAAC;gBACb,IAAI,CAAC;oBACH,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;gBAC7E,CAAC;gBAAC,MAAM,CAAC;oBACP,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;gBACpD,CAAC;gBACD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAEjD,0EAA0E;gBAC1E,uEAAuE;gBACvE,oEAAoE;gBACpE,MAAM,CAAC,IAAI,CACT;oBACE,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,mEAAmE;oBACnE,oEAAoE;oBACpE,+DAA+D;oBAC/D,oEAAoE;oBACpE,yDAAyD;oBACzD,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;oBACpD,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,QAAQ;oBACzC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ;oBACzC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,QAAQ;iBACrD,EACD,SAAS,CACV,CAAC;gBAEF,sEAAsE;gBACtE,uEAAuE;gBACvE,iDAAiD;gBACjD,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;gBACpC,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC;oBACpC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,cAAc,EAAE,4BAA4B,CAAC;oBACxE,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;gBAE7B,IAAI,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBACxC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;wBACjB,KAAK,EAAE,mBAAmB;wBAC1B,OAAO,EAAE,6CAA6C;qBACvD,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBAED,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,EAAE,EAAE,CAAC;oBACxC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;wBACjB,OAAO,EAAE,UAAU;wBACnB,SAAS,EAAE;4BACT,MAAM,EAAE,SAAS;4BACjB,KAAK,EAAE,YAAY;4BACnB,IAAI,EAAE,WAAW;4BACjB,MAAM,EAAE,aAAa;4BACrB,SAAS,EAAE,YAAY;4BACvB,GAAG,EAAE,MAAM;yBACZ;wBACD,OAAO,EAAE,8CAA8C;qBACxD,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBAED,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAC3B,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;oBAC1D,OAAO;gBACT,CAAC;gBAED,kBAAkB;gBAElB,IAAI,QAAQ,KAAK,WAAW,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBACtD,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;oBAChC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;oBAC3B,OAAO;gBACT,CAAC;gBAED,IAAI,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;oBAC9F,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;oBACpE,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;oBAC5D,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC,CAAC;oBAClE,CAAC;yBAAM,CAAC;wBACN,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;oBAC7B,CAAC;oBACD,OAAO;gBACT,CAAC;gBAED,iBAAiB;gBAEjB,IAAI,QAAQ,KAAK,aAAa,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBACxD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;wBACvB,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,CAAC;wBAC7D,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;wBAC9C,OAAO;oBACT,CAAC;oBAED,kEAAkE;oBAClE,iEAAiE;oBACjE,mEAAmE;oBACnE,aAAa,CAAC,QAAQ,CAAC,CAAC;oBAExB,IAAI,IAAa,CAAC;oBAClB,IAAI,CAAC;wBACH,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;oBACjC,CAAC;oBAAC,MAAM,CAAC;wBACP,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;wBACnD,OAAO;oBACT,CAAC;oBAED,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,OAAQ,IAAgC,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE,CAAC;wBACjH,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC;wBACtD,OAAO;oBACT,CAAC;oBAED,MAAM,MAAM,GAAK,IAAgC,CAAC,QAAQ,CAAY,CAAC,IAAI,EAAE,CAAC;oBAC9E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;wBAC/C,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC,CAAC;wBACjE,OAAO;oBACT,CAAC;oBAED,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;oBACpC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;oBAC3B,OAAO;gBACT,CAAC;gBAED,IAAI,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;oBAChE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;wBACvB,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,CAAC;wBAC7D,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;wBAC9C,OAAO;oBACT,CAAC;oBAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;oBACpD,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;oBACtC,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;oBACjD,CAAC;yBAAM,CAAC;wBACN,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;oBAC7B,CAAC;oBACD,OAAO;gBACT,CAAC;gBAED,oBAAoB;gBAEpB,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;gBAE9D,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;oBAC9B,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;wBACnC,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,CAAC;wBAC7D,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;wBACpD,GAAG,CAAC,GAAG,CAAC,uJAAuJ,CAAC,CAAC;wBACjK,OAAO;oBACT,CAAC;oBAED,gEAAgE;oBAChE,mEAAmE;oBACnE,oEAAoE;oBACpE,mEAAmE;oBACnE,gEAAgE;oBAChE,IAAI,UAAU,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;wBACxC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;4BACjB,YAAY,EAAE,mBAAmB,CAAC,GAAG,EAAE,sBAAsB,EAAE,CAAC;4BAChE,QAAQ,EAAE,YAAY;yBACvB,CAAC,CAAC;wBACH,GAAG,CAAC,GAAG,EAAE,CAAC;wBACV,OAAO;oBACT,CAAC;oBAED,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAC;oBACnE,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAChD,OAAO;gBACT,CAAC;gBAED,IAAI,QAAQ,KAAK,yBAAyB,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBACpE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;wBACnC,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,CAAC;wBAC7D,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;wBACpD,GAAG,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;wBACrC,OAAO;oBACT,CAAC;oBAED,0DAA0D;oBAC1D,qEAAqE;oBACrE,iEAAiE;oBACjE,mEAAmE;oBACnE,iEAAiE;oBACjE,uCAAuC;oBACvC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;oBAErE,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;4BACnB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE,CAAC,CAAC;4BACzD,OAAO;wBACT,CAAC;wBACD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAC;wBACnE,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,yBAAyB,EAAE,UAAU,CAAC,CAAC,CAAC;wBAChE,OAAO;oBACT,CAAC;oBAED,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;oBAEpC,oEAAoE;oBACpE,sEAAsE;oBACtE,qBAAqB;oBACrB,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;wBACnB,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC,CAAC;wBAC3F,OAAO;oBACT,CAAC;oBAED,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAC;oBAC9E,GAAG,CAAC,GAAG,CACL,EAAE;wBACA,CAAC,CAAC,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC;wBACzC,CAAC,CAAC,eAAe,CAAC,4BAA4B,EAAE,UAAU,CAAC,CAC9D,CAAC;oBACF,OAAO;gBACT,CAAC;gBAED,IAAI,QAAQ,KAAK,qBAAqB,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBAChE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;wBACnC,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,CAAC;wBAC7D,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;wBACpD,GAAG,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;wBACrC,OAAO;oBACT,CAAC;oBAED,qEAAqE;oBACrE,uDAAuD;oBACvD,MAAM,GAAG,GAAG,mBAAmB,CAAC,MAAM,WAAW,CAAC,GAAG,CAAC,EAAE,mBAAmB,CAAC,EAAE,IAAI,EAAE,CAAC;oBAErF,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC1B,UAAU,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;wBACrC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,GAAG,GAAG,CAAC;wBACvC,qEAAqE;wBACrE,+DAA+D;wBAC/D,oEAAoE;wBACpE,iEAAiE;wBACjE,oCAAoC;wBACpC,aAAa,GAAG,IAAI,CAAC;oBACvB,CAAC;oBAED,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;wBACnB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC;wBAClE,OAAO;oBACT,CAAC;oBAED,gEAAgE;oBAChE,gDAAgD;oBAChD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;wBACjB,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,oBAAoB,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY;qBAC3F,CAAC,CAAC;oBACH,GAAG,CAAC,GAAG,EAAE,CAAC;oBACV,OAAO;gBACT,CAAC;gBAED,IAAI,QAAQ,KAAK,oBAAoB,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBAC/D,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;wBACnC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;wBAC9C,OAAO;oBACT,CAAC;oBAED,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;oBACpC,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;oBAC7D,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;oBAC7D,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC;oBAEtE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAmB,CAAC,EAAE,CAAC;wBACjD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;4BACjB,KAAK,EAAE,iBAAiB,IAAI,qBAAqB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;yBAC7E,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACtB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC,CAAC;wBAC3D,OAAO;oBACT,CAAC;oBAED,IAAI,CAAC;wBACH,MAAM,KAAK,GAAG,eAAe,CAAC,IAAmB,EAAE,IAAI,EAAE;4BACvD,WAAW,EAAE,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;yBAC7E,CAAC,CAAC;wBACH,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;oBACjD,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;4BACjB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB;yBACvE,CAAC,CAAC;oBACL,CAAC;oBACD,OAAO;gBACT,CAAC;gBAED,IAAI,QAAQ,KAAK,0BAA0B,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBACrE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;wBACnC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;wBAC9C,OAAO;oBACT,CAAC;oBAED,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,WAAW,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;oBAE1D,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;wBAChB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;wBAC9C,OAAO;oBACT,CAAC;oBAED,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBAClD,OAAO;gBACT,CAAC;gBAED,IAAI,QAAQ,KAAK,mBAAmB,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;oBAC7D,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;wBACnC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;wBAC9C,OAAO;oBACT,CAAC;oBACD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC9D,OAAO;gBACT,CAAC;gBAED,6DAA6D;gBAC7D,EAAE;gBACF,qEAAqE;gBACrE,sEAAsE;gBACtE,uEAAuE;gBACvE,wEAAwE;gBACxE,qEAAqE;gBACrE,2DAA2D;gBAC3D,IACE,CAAC,QAAQ,KAAK,qBAAqB,IAAI,QAAQ,KAAK,eAAe,CAAC;oBACpE,GAAG,CAAC,MAAM,KAAK,KAAK,EACpB,CAAC;oBACD,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;wBACnC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;wBAC9C,OAAO;oBACT,CAAC;oBACD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,WAAW,EAAE,CAAC,CAAC;oBACxC,OAAO;gBACT,CAAC;gBAED,IAAI,QAAQ,KAAK,+BAA+B,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBAC1E,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;wBACnC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;wBAC9C,OAAO;oBACT,CAAC;oBACD,iBAAiB,EAAE,CAAC;oBACpB,kEAAkE;oBAClE,2DAA2D;oBAC3D,aAAa,GAAG,IAAI,CAAC;oBACrB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;oBACjC,OAAO;gBACT,CAAC;gBAED,uEAAuE;gBACvE,qEAAqE;gBACrE,8DAA8D;gBAC9D,qEAAqE;gBACrE,uDAAuD;gBACvD,IAAI,QAAQ,KAAK,cAAc,EAAE,CAAC;oBAChC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;wBACnC,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,CAAC;wBAC7D,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;wBAC9C,OAAO;oBACT,CAAC;oBAED,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;wBACzB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;4BACjB,OAAO,EAAE,UAAU,EAAE;4BACrB,KAAK,EAAE,QAAQ;4BACf,QAAQ,EAAE,eAAe;yBAC1B,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBAED,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;wBAClD,IAAI,IAAa,CAAC;wBAClB,IAAI,CAAC;4BACH,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;wBACjC,CAAC;wBAAC,MAAM,CAAC;4BACP,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;4BAC5E,OAAO;wBACT,CAAC;wBACD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;4BAC9C,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,CAAC;4BACrF,OAAO;wBACT,CAAC;wBAED,IAAI,CAAC;4BACH,MAAM,OAAO,GAAG,aAAa,CAAC,IAA2C,CAAC,CAAC;4BAC3E,kEAAkE;4BAClE,kEAAkE;4BAClE,gEAAgE;4BAChE,kEAAkE;4BAClE,+BAA+B;4BAC/B,aAAa,GAAG,IAAI,CAAC;4BACrB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;wBACrD,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,8DAA8D;4BAC9D,6DAA6D;4BAC7D,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;gCACjB,KAAK,EAAE,aAAa;gCACpB,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB;6BACrE,CAAC,CAAC;wBACL,CAAC;wBACD,OAAO;oBACT,CAAC;oBAED,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;oBAChF,OAAO;gBACT,CAAC;gBAED,mEAAmE;gBACnE,oEAAoE;gBACpE,2DAA2D;gBAC3D,IAAI,QAAQ,KAAK,qBAAqB,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAClE,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;wBACnC,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,CAAC;wBAC7D,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;wBAC9C,OAAO;oBACT,CAAC;oBACD,iBAAiB,EAAE,CAAC;oBACpB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;oBACjC,OAAO;gBACT,CAAC;gBAED,iEAAiE;gBACjE,IAAI,QAAQ,KAAK,YAAY,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;oBACtD,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;wBACnC,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,CAAC;wBAC7D,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;wBAC9C,OAAO;oBACT,CAAC;oBAED,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;wBACjB,KAAK,EAAE,gBAAgB,EAAE;wBACzB,MAAM,EAAE,WAAW,EAAE;wBACrB,MAAM,EAAE,aAAa,CAAC,EAAE,CAAC;wBACzB,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC;wBACvB,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAC;qBAC5B,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBAED,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;oBAC9B,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;wBACzB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;wBACxF,OAAO;oBACT,CAAC;oBAED,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;wBACvB,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,CAAC;wBAC7D,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;4BACjB,KAAK,EAAE,cAAc;4BACrB,OAAO,EAAE,iDAAiD;yBAC3D,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBAED,oEAAoE;oBACpE,+DAA+D;oBAC/D,mEAAmE;oBACnE,qEAAqE;oBACrE,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC1C,IAAI,IAAI,IAAK,QAA8B,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC3D,aAAa,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;oBAChC,CAAC;oBACD,aAAa,CAAC,YAAY,CAAC,CAAC;oBAE5B,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,MAAM,qBAAqB,EAAE,CAAC;wBAC9C,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;oBAC9B,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,0BAA0B,CAAC,CAAC;wBACpD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;4BACjB,KAAK,EAAE,uBAAuB;4BAC9B,OAAO,EAAE,gCAAgC;yBAC1C,CAAC,CAAC;oBACL,CAAC;oBACD,OAAO;gBACT,CAAC;gBAED,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;oBACxB,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;wBAC1B,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;4BACjB,OAAO,EAAE,KAAK;4BACd,KAAK,EAAE;gCACL,IAAI,EAAE,CAAC,KAAK;gCACZ,OAAO,EAAE,gDAAgD;6BAC1D;4BACD,EAAE,EAAE,IAAI;yBACT,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;oBAED,MAAM,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBACjC,OAAO;gBACT,CAAC;gBAED,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;YAC7C,CAAC,CAAC;YAEF,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,UAAW,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,KAAa,EAAE,EAAE;oBACzE,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,CAAC,KAAK,CAAC,CAAC;wBACd,OAAO;oBACT,CAAC;oBACD,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,IAAI,CACT,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,OAAO,EAAE,EACpD,oCAAoC,CACrC,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,KAAK;YACT,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO;YACT,CAAC;YAED,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,UAAW,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;oBAC1B,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,CAAC,KAAK,CAAC,CAAC;wBACd,OAAO;oBACT,CAAC;oBACD,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,UAAU,GAAG,IAAI,CAAC;YAClB,aAAa,GAAG,IAAI,CAAC;YACrB,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,SAAiB;IAC9D,OAAO;QACL,6BAA6B;QAC7B,EAAE;QACF,qCAAqC;QACrC,uFAAuF,SAAS,CAAC,OAAO,EAAE;QAC1G,yDAAyD;QACzD,EAAE;QACF,YAAY;QACZ,gDAAgD;QAChD,UAAU,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM;QAC5C,kEAAkE;QAClE,EAAE;QACF,2BAA2B;QAC3B,gDAAgD;QAChD,iBAAiB,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM;QACnD,4CAA4C;QAC5C,0EAA0E;QAC1E,EAAE;QACF,iBAAiB,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS;KACvD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ import { createCliProgram } from "./cli.js";
3
+ async function main() {
4
+ const program = createCliProgram();
5
+ await program.parseAsync(process.argv);
6
+ }
7
+ main().catch((error) => {
8
+ console.error(error instanceof Error ? error.message : error);
9
+ process.exit(1);
10
+ });
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,56 @@
1
+ export interface McpServerEntry {
2
+ command?: string;
3
+ args?: string[];
4
+ env?: Record<string, string>;
5
+ url?: string;
6
+ headers?: Record<string, string>;
7
+ timeout?: number;
8
+ }
9
+ /**
10
+ * The user's config file, of which `mcpServers` is one key.
11
+ *
12
+ * The index signature is the point. This was typed and read as though the file
13
+ * held nothing else, so `readMcpConfig` returned `{ mcpServers }` and everything
14
+ * beside it -- `globalShortcut`, and whatever Claude Desktop adds next -- was
15
+ * dropped on the way to being written back. This is not our file; it is a file
16
+ * we add one key to.
17
+ */
18
+ export interface McpConfigFile {
19
+ mcpServers: Record<string, McpServerEntry>;
20
+ [key: string]: unknown;
21
+ }
22
+ export interface DetectedMcpClient {
23
+ id: "cursor" | "claude-desktop";
24
+ label: string;
25
+ configPath: string;
26
+ }
27
+ export declare function getClaudeDesktopConfigPath(): string;
28
+ export declare function getCursorConfigPath(): string;
29
+ export declare function detectMcpClients(): DetectedMcpClient[];
30
+ export declare function readMcpConfig(configPath: string): McpConfigFile;
31
+ export declare function buildTrainBudServerEntry(credentials: {
32
+ email: string;
33
+ password: string;
34
+ distIndexPath: string;
35
+ }): McpServerEntry;
36
+ export declare function mergeTrainBudConfig(config: McpConfigFile, credentials: {
37
+ email: string;
38
+ password: string;
39
+ distIndexPath: string;
40
+ }): McpConfigFile;
41
+ export declare function writeMcpConfig(configPath: string, config: McpConfigFile): void;
42
+ /**
43
+ * Where the pre-setup copy of a config is kept.
44
+ *
45
+ * `setup` is the command the docs tell a user to run when something is wrong,
46
+ * and it rewrites a file it does not own. `writeEnvFile` has already deleted
47
+ * someone's ANTHROPIC_API_KEY that way once. A copy costs nothing and is the
48
+ * difference between a mistake and a loss.
49
+ */
50
+ export declare function backupPathFor(configPath: string): string;
51
+ export declare function configureTrainBudForClient(client: DetectedMcpClient, credentials: {
52
+ email: string;
53
+ password: string;
54
+ distIndexPath: string;
55
+ }): void;
56
+ //# sourceMappingURL=mcpConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpConfig.d.ts","sourceRoot":"","sources":["../src/mcpConfig.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,QAAQ,GAAG,gBAAgB,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,0BAA0B,IAAI,MAAM,CAYnD;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED,wBAAgB,gBAAgB,IAAI,iBAAiB,EAAE,CAsBtD;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,CAmB/D;AAED,wBAAgB,wBAAwB,CAAC,WAAW,EAAE;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,cAAc,CAWjB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACtE,aAAa,CAQf;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAI9E;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAIxD;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,iBAAiB,EACzB,WAAW,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACtE,IAAI,CAYN"}
@@ -0,0 +1,106 @@
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { writeSecretFile } from "./utils/secretFile.js";
5
+ import { readJsonFile } from "./utils/jsonFile.js";
6
+ export function getClaudeDesktopConfigPath() {
7
+ if (process.platform === "darwin") {
8
+ return path.join(os.homedir(), "Library", "Application Support", "Claude", "claude_desktop_config.json");
9
+ }
10
+ if (process.platform === "win32") {
11
+ const appData = process.env.APPDATA ?? path.join(os.homedir(), "AppData", "Roaming");
12
+ return path.join(appData, "Claude", "claude_desktop_config.json");
13
+ }
14
+ const configHome = process.env.XDG_CONFIG_HOME ?? path.join(os.homedir(), ".config");
15
+ return path.join(configHome, "Claude", "claude_desktop_config.json");
16
+ }
17
+ export function getCursorConfigPath() {
18
+ return path.join(os.homedir(), ".cursor", "mcp.json");
19
+ }
20
+ export function detectMcpClients() {
21
+ const clients = [];
22
+ const cursorPath = getCursorConfigPath();
23
+ const claudePath = getClaudeDesktopConfigPath();
24
+ if (fs.existsSync(path.dirname(cursorPath))) {
25
+ clients.push({
26
+ id: "cursor",
27
+ label: "Cursor",
28
+ configPath: cursorPath,
29
+ });
30
+ }
31
+ if (fs.existsSync(path.dirname(claudePath))) {
32
+ clients.push({
33
+ id: "claude-desktop",
34
+ label: "Claude Desktop",
35
+ configPath: claudePath,
36
+ });
37
+ }
38
+ return clients;
39
+ }
40
+ export function readMcpConfig(configPath) {
41
+ if (!fs.existsSync(configPath)) {
42
+ return { mcpServers: {} };
43
+ }
44
+ try {
45
+ const parsed = readJsonFile(configPath);
46
+ // Everything the file holds, with `mcpServers` normalised. A config with no
47
+ // `mcpServers` key at all is perfectly valid -- and the old
48
+ // `if (!parsed.mcpServers) return { mcpServers: {} }` discarded the entire
49
+ // file to add one server to it.
50
+ const servers = parsed.mcpServers && typeof parsed.mcpServers === "object" ? parsed.mcpServers : {};
51
+ return { ...parsed, mcpServers: servers };
52
+ }
53
+ catch {
54
+ throw new Error(`Could not read MCP config at ${configPath}. Fix the file or choose another client.`);
55
+ }
56
+ }
57
+ export function buildTrainBudServerEntry(credentials) {
58
+ const normalizedIndexPath = credentials.distIndexPath.replace(/\\/g, "/");
59
+ return {
60
+ command: "node",
61
+ args: [normalizedIndexPath, "start"],
62
+ env: {
63
+ GARMIN_EMAIL: credentials.email,
64
+ GARMIN_PASSWORD: credentials.password,
65
+ },
66
+ };
67
+ }
68
+ export function mergeTrainBudConfig(config, credentials) {
69
+ return {
70
+ ...config,
71
+ mcpServers: {
72
+ ...config.mcpServers,
73
+ "trainbud": buildTrainBudServerEntry(credentials),
74
+ },
75
+ };
76
+ }
77
+ export function writeMcpConfig(configPath, config) {
78
+ // This file carries GARMIN_PASSWORD in its env block, so it is as sensitive
79
+ // as .env and gets the same permissions.
80
+ writeSecretFile(configPath, `${JSON.stringify(config, null, 2)}\n`);
81
+ }
82
+ /**
83
+ * Where the pre-setup copy of a config is kept.
84
+ *
85
+ * `setup` is the command the docs tell a user to run when something is wrong,
86
+ * and it rewrites a file it does not own. `writeEnvFile` has already deleted
87
+ * someone's ANTHROPIC_API_KEY that way once. A copy costs nothing and is the
88
+ * difference between a mistake and a loss.
89
+ */
90
+ export function backupPathFor(configPath) {
91
+ const directory = path.dirname(configPath);
92
+ const base = path.basename(configPath, path.extname(configPath));
93
+ return path.join(directory, `${base}.bak.json`);
94
+ }
95
+ export function configureTrainBudForClient(client, credentials) {
96
+ const existing = readMcpConfig(client.configPath);
97
+ // Written through writeSecretFile: once merged, this file carries
98
+ // GARMIN_PASSWORD in an env block, so the copy is exactly as sensitive as the
99
+ // original and gets the same 0600.
100
+ if (fs.existsSync(client.configPath)) {
101
+ writeSecretFile(backupPathFor(client.configPath), fs.readFileSync(client.configPath, "utf8"));
102
+ }
103
+ const merged = mergeTrainBudConfig(existing, credentials);
104
+ writeMcpConfig(client.configPath, merged);
105
+ }
106
+ //# sourceMappingURL=mcpConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpConfig.js","sourceRoot":"","sources":["../src/mcpConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAiCnD,MAAM,UAAU,0BAA0B;IACxC,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;IAC3G,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IACrF,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,4BAA4B,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,mBAAmB,EAAE,CAAC;IACzC,MAAM,UAAU,GAAG,0BAA0B,EAAE,CAAC;IAEhD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,QAAQ;YACZ,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE,UAAU;SACvB,CAAC,CAAC;IACL,CAAC;IAED,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,gBAAgB;YACpB,KAAK,EAAE,gBAAgB;YACvB,UAAU,EAAE,UAAU;SACvB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAyB,UAAU,CAAC,CAAC;QAEhE,4EAA4E;QAC5E,4DAA4D;QAC5D,2EAA2E;QAC3E,gCAAgC;QAChC,MAAM,OAAO,GACX,MAAM,CAAC,UAAU,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAEtF,OAAO,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,0CAA0C,CAAC,CAAC;IACxG,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,WAIxC;IACC,MAAM,mBAAmB,GAAG,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAE1E,OAAO;QACL,OAAO,EAAE,MAAM;QACf,IAAI,EAAE,CAAC,mBAAmB,EAAE,OAAO,CAAC;QACpC,GAAG,EAAE;YACH,YAAY,EAAE,WAAW,CAAC,KAAK;YAC/B,eAAe,EAAE,WAAW,CAAC,QAAQ;SACtC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAqB,EACrB,WAAuE;IAEvE,OAAO;QACL,GAAG,MAAM;QACT,UAAU,EAAE;YACV,GAAG,MAAM,CAAC,UAAU;YACpB,UAAU,EAAE,wBAAwB,CAAC,WAAW,CAAC;SAClD;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,UAAkB,EAAE,MAAqB;IACtE,4EAA4E;IAC5E,yCAAyC;IACzC,eAAe,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACjE,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,WAAW,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,MAAyB,EACzB,WAAuE;IAEvE,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAElD,kEAAkE;IAClE,8EAA8E;IAC9E,mCAAmC;IACnC,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QACrC,eAAe,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAChG,CAAC;IAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC1D,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,14 @@
1
+ export interface PairRequestResult {
2
+ code: string;
3
+ expires_in: number;
4
+ }
5
+ export interface PairStatusResult {
6
+ approved: boolean;
7
+ api_key?: string;
8
+ server_url?: string;
9
+ }
10
+ export declare function requestPairing(): PairRequestResult;
11
+ export declare function checkPairStatus(code: string, publicUrl?: string): PairStatusResult | null;
12
+ export declare function approvePairing(code: string): boolean;
13
+ export declare function getPendingPairings(): import("./appDb.js").PairToken[];
14
+ //# sourceMappingURL=pairApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pairApi.d.ts","sourceRoot":"","sources":["../src/pairApi.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,cAAc,IAAI,iBAAiB,CAOlD;AAMD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAiBzF;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,kBAAkB,qCAEjC"}
@@ -0,0 +1,38 @@
1
+ import { createPairToken, getPairToken, approvePairToken, deletePairToken, listPendingPairTokens } from "./appDb.js";
2
+ import { appConfig } from "./config.js";
3
+ export function requestPairing() {
4
+ const token = createPairToken();
5
+ const now = Math.floor(Date.now() / 1000);
6
+ return {
7
+ code: token.code,
8
+ expires_in: token.expires_at - now,
9
+ };
10
+ }
11
+ // publicUrl is the address the watch should use from now on. It is passed in by
12
+ // the HTTP layer, derived from the host the poll actually arrived on, because
13
+ // the configured value is a stale file on disk more often than not — see
14
+ // resolvePublicUrl in httpServer.ts.
15
+ export function checkPairStatus(code, publicUrl) {
16
+ const token = getPairToken(code);
17
+ if (!token)
18
+ return null;
19
+ const now = Math.floor(Date.now() / 1000);
20
+ if (token.expires_at < now)
21
+ return null;
22
+ if (token.approved_at !== null) {
23
+ deletePairToken(code);
24
+ return {
25
+ approved: true,
26
+ api_key: appConfig.mcpApiKey,
27
+ server_url: publicUrl || appConfig.publicUrl,
28
+ };
29
+ }
30
+ return { approved: false };
31
+ }
32
+ export function approvePairing(code) {
33
+ return approvePairToken(code);
34
+ }
35
+ export function getPendingPairings() {
36
+ return listPendingPairTokens();
37
+ }
38
+ //# sourceMappingURL=pairApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pairApi.js","sourceRoot":"","sources":["../src/pairApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACrH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAexC,MAAM,UAAU,cAAc;IAC5B,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,GAAG;KACnC,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,8EAA8E;AAC9E,yEAAyE;AACzE,qCAAqC;AACrC,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,SAAkB;IAC9D,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1C,IAAI,KAAK,CAAC,UAAU,GAAG,GAAG;QAAE,OAAO,IAAI,CAAC;IAExC,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QAC/B,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO;YACL,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,SAAS,CAAC,SAAS;YAC5B,UAAU,EAAE,SAAS,IAAI,SAAS,CAAC,SAAS;SAC7C,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,qBAAqB,EAAE,CAAC;AACjC,CAAC"}
@@ -0,0 +1,45 @@
1
+ export declare const DATA_DIR_NAME = ".trainbud";
2
+ export declare const LEGACY_DATA_DIR_NAME = ".garmin";
3
+ export declare function getProjectRoot(): string;
4
+ /** Resolve a path that may be absolute, or relative to the project root. */
5
+ export declare function resolveFromRoot(target: string): string;
6
+ /**
7
+ * Point a configured path at the new data directory when it still names the old
8
+ * one.
9
+ *
10
+ * An existing .env keeps values like `GARMIN_SESSION_PATH=.garmin/session.json`.
11
+ * Migrating the directory alone was not enough: the app read those settings and
12
+ * wrote state straight back into `.garmin/`, recreating it and leaving two
13
+ * copies drifting apart. Anything under the legacy directory is remapped to the
14
+ * same relative location under the new one.
15
+ */
16
+ export declare function remapLegacyPath(target: string): string;
17
+ export declare function getDataDir(): string;
18
+ export declare function getLegacyDataDir(): string;
19
+ export declare function dataPath(...segments: string[]): string;
20
+ export declare function ensureDataDir(): string;
21
+ export interface MigrationResult {
22
+ migrated: boolean;
23
+ from?: string;
24
+ to?: string;
25
+ movedEntries?: string[];
26
+ reason?: string;
27
+ }
28
+ /**
29
+ * Move `.garmin/` to `.trainbud/` once. Idempotent and non-destructive: if the
30
+ * new directory already exists, individual entries are only copied when they
31
+ * are not already present, and the legacy directory is left on disk.
32
+ */
33
+ export declare function migrateLegacyDataDir(options?: {
34
+ legacyDir?: string;
35
+ dataDir?: string;
36
+ }): MigrationResult;
37
+ /**
38
+ * Read an environment variable, falling back to its pre-rename name.
39
+ * Returns the value plus the name it was found under, so callers can warn.
40
+ */
41
+ export declare function readRenamedEnv(name: string, legacyName: string): {
42
+ value: string | undefined;
43
+ usedLegacy: boolean;
44
+ };
45
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,aAAa,cAAc,CAAC;AACzC,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAI9C,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAStD;AAED,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,QAAQ,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAEtD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACrD,eAAe,CAmCjB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GACjB;IAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAUpD"}
package/dist/paths.js ADDED
@@ -0,0 +1,105 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ // SECTION: Data directory resolution and legacy migration
5
+ //
6
+ // Before the rename to TrainBud, state lived in `.garmin/` and was resolved
7
+ // against `process.cwd()` in some places and the project root in others, so a
8
+ // globally installed CLI could scatter state across every directory it ran in.
9
+ // Everything now resolves against the project root, and `.garmin/` is migrated
10
+ // to `.trainbud/` once, on first run.
11
+ export const DATA_DIR_NAME = ".trainbud";
12
+ export const LEGACY_DATA_DIR_NAME = ".garmin";
13
+ const projectRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
14
+ export function getProjectRoot() {
15
+ return projectRoot;
16
+ }
17
+ /** Resolve a path that may be absolute, or relative to the project root. */
18
+ export function resolveFromRoot(target) {
19
+ return path.isAbsolute(target) ? target : path.resolve(projectRoot, target);
20
+ }
21
+ /**
22
+ * Point a configured path at the new data directory when it still names the old
23
+ * one.
24
+ *
25
+ * An existing .env keeps values like `GARMIN_SESSION_PATH=.garmin/session.json`.
26
+ * Migrating the directory alone was not enough: the app read those settings and
27
+ * wrote state straight back into `.garmin/`, recreating it and leaving two
28
+ * copies drifting apart. Anything under the legacy directory is remapped to the
29
+ * same relative location under the new one.
30
+ */
31
+ export function remapLegacyPath(target) {
32
+ const resolved = resolveFromRoot(target);
33
+ const legacyDir = getLegacyDataDir();
34
+ const relative = path.relative(legacyDir, resolved);
35
+ const insideLegacyDir = relative !== "" && !relative.startsWith("..") && !path.isAbsolute(relative);
36
+ return insideLegacyDir ? path.join(getDataDir(), relative) : resolved;
37
+ }
38
+ export function getDataDir() {
39
+ return path.join(projectRoot, DATA_DIR_NAME);
40
+ }
41
+ export function getLegacyDataDir() {
42
+ return path.join(projectRoot, LEGACY_DATA_DIR_NAME);
43
+ }
44
+ export function dataPath(...segments) {
45
+ return path.join(getDataDir(), ...segments);
46
+ }
47
+ export function ensureDataDir() {
48
+ const dir = getDataDir();
49
+ fs.mkdirSync(dir, { recursive: true });
50
+ return dir;
51
+ }
52
+ /**
53
+ * Move `.garmin/` to `.trainbud/` once. Idempotent and non-destructive: if the
54
+ * new directory already exists, individual entries are only copied when they
55
+ * are not already present, and the legacy directory is left on disk.
56
+ */
57
+ export function migrateLegacyDataDir(options = {}) {
58
+ const legacyDir = options.legacyDir ?? getLegacyDataDir();
59
+ const dir = options.dataDir ?? getDataDir();
60
+ if (!fs.existsSync(legacyDir)) {
61
+ return { migrated: false, reason: "no legacy directory" };
62
+ }
63
+ // Fast path: nothing at the new location yet, so a rename is enough.
64
+ if (!fs.existsSync(dir)) {
65
+ const entries = fs.readdirSync(legacyDir);
66
+ try {
67
+ fs.renameSync(legacyDir, dir);
68
+ return { migrated: true, from: legacyDir, to: dir, movedEntries: entries };
69
+ }
70
+ catch {
71
+ // Rename can fail across devices or when a file is locked; fall through
72
+ // to the copy path rather than leaving the user with no data directory.
73
+ fs.mkdirSync(dir, { recursive: true });
74
+ }
75
+ }
76
+ const moved = [];
77
+ for (const entry of fs.readdirSync(legacyDir)) {
78
+ const source = path.join(legacyDir, entry);
79
+ const destination = path.join(dir, entry);
80
+ if (fs.existsSync(destination)) {
81
+ continue;
82
+ }
83
+ fs.cpSync(source, destination, { recursive: true });
84
+ moved.push(entry);
85
+ }
86
+ return moved.length > 0
87
+ ? { migrated: true, from: legacyDir, to: dir, movedEntries: moved }
88
+ : { migrated: false, reason: "already migrated" };
89
+ }
90
+ /**
91
+ * Read an environment variable, falling back to its pre-rename name.
92
+ * Returns the value plus the name it was found under, so callers can warn.
93
+ */
94
+ export function readRenamedEnv(name, legacyName) {
95
+ const value = process.env[name];
96
+ if (value !== undefined && value !== "") {
97
+ return { value, usedLegacy: false };
98
+ }
99
+ const legacyValue = process.env[legacyName];
100
+ if (legacyValue !== undefined && legacyValue !== "") {
101
+ return { value: legacyValue, usedLegacy: true };
102
+ }
103
+ return { value: undefined, usedLegacy: false };
104
+ }
105
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ import { z } from "zod";
2
+ /** The cards the carousel can show, in shipping order. */
3
+ export declare const CARD_IDS: readonly ["today", "ask", "insight", "week", "overview", "recovery", "sleep", "activity", "stress"];
4
+ export type CardId = (typeof CARD_IDS)[number];
5
+ /** What a metric's value says about you right now. */
6
+ export type MetricState = "good" | "caution" | "hard" | "unknown";
7
+ /**
8
+ * Metrics that can be graded, and which direction is better.
9
+ *
10
+ * `restingHrDelta` is deliberately a delta rather than a rate. 58 bpm is
11
+ * unremarkable for one person and a warning for another; the distance from
12
+ * that person's own median is the only version of this number that means
13
+ * anything, and the detectors already compute the median.
14
+ */
15
+ export declare const GRADED_METRICS: {
16
+ readonly recovery: "higher";
17
+ readonly sleepHours: "higher";
18
+ readonly stress: "lower";
19
+ readonly restingHrDelta: "lower";
20
+ };
21
+ export type GradedMetric = keyof typeof GRADED_METRICS;
22
+ declare const profileSchema: z.ZodObject<{
23
+ displayName: z.ZodNullable<z.ZodString>;
24
+ units: z.ZodEnum<{
25
+ metric: "metric";
26
+ imperial: "imperial";
27
+ }>;
28
+ timezone: z.ZodNullable<z.ZodString>;
29
+ primarySport: z.ZodNullable<z.ZodEnum<{
30
+ running: "running";
31
+ cycling: "cycling";
32
+ swimming: "swimming";
33
+ strength: "strength";
34
+ mixed: "mixed";
35
+ }>>;
36
+ weeklyGoal: z.ZodObject<{
37
+ sessions: z.ZodNullable<z.ZodNumber>;
38
+ minutes: z.ZodNullable<z.ZodNumber>;
39
+ }, z.core.$strip>;
40
+ thresholds: z.ZodObject<{
41
+ recovery: z.ZodObject<{
42
+ good: z.ZodNumber;
43
+ caution: z.ZodNumber;
44
+ }, z.core.$strip>;
45
+ sleepHours: z.ZodObject<{
46
+ good: z.ZodNumber;
47
+ caution: z.ZodNumber;
48
+ }, z.core.$strip>;
49
+ stress: z.ZodObject<{
50
+ good: z.ZodNumber;
51
+ caution: z.ZodNumber;
52
+ }, z.core.$strip>;
53
+ restingHrDelta: z.ZodObject<{
54
+ good: z.ZodNumber;
55
+ caution: z.ZodNumber;
56
+ }, z.core.$strip>;
57
+ }, z.core.$strip>;
58
+ cards: z.ZodObject<{
59
+ order: z.ZodArray<z.ZodString>;
60
+ hidden: z.ZodArray<z.ZodString>;
61
+ }, z.core.$strip>;
62
+ ai: z.ZodObject<{
63
+ tone: z.ZodEnum<{
64
+ direct: "direct";
65
+ supportive: "supportive";
66
+ technical: "technical";
67
+ }>;
68
+ length: z.ZodEnum<{
69
+ short: "short";
70
+ normal: "normal";
71
+ detailed: "detailed";
72
+ }>;
73
+ model: z.ZodEnum<{
74
+ "claude-haiku-4-5": "claude-haiku-4-5";
75
+ "claude-sonnet-5": "claude-sonnet-5";
76
+ "claude-opus-5": "claude-opus-5";
77
+ }>;
78
+ customPrompts: z.ZodArray<z.ZodString>;
79
+ }, z.core.$strip>;
80
+ budget: z.ZodObject<{
81
+ monthlyUsd: z.ZodNullable<z.ZodNumber>;
82
+ }, z.core.$strip>;
83
+ analytics: z.ZodObject<{
84
+ enabled: z.ZodBoolean;
85
+ }, z.core.$strip>;
86
+ }, z.core.$strip>;
87
+ export type TrainBudProfile = z.infer<typeof profileSchema>;
88
+ /**
89
+ * Bands chosen to match what the watch already drew, so nobody's colours move
90
+ * on upgrade. They are a starting point, not a claim about physiology -- the
91
+ * whole reason they are editable is that the population defaults are wrong for
92
+ * most individuals.
93
+ */
94
+ export declare const DEFAULT_PROFILE: TrainBudProfile;
95
+ /** Tests reach into the cache; nothing else should. */
96
+ export declare function __resetProfileCacheForTests(): void;
97
+ export declare function getProfile(): TrainBudProfile;
98
+ type DeepPartial<T> = {
99
+ [K in keyof T]?: T[K] extends object ? (T[K] extends unknown[] ? T[K] : DeepPartial<T[K]>) : T[K];
100
+ };
101
+ export declare class ProfileValidationError extends Error {
102
+ }
103
+ /**
104
+ * Apply a partial change.
105
+ *
106
+ * Unlike reads, writes are strict: a caller sending a unit we do not know is a
107
+ * bug in that caller, and storing it would mean every later read has to
108
+ * salvage around it. The error names the field so the dashboard can say which
109
+ * input was refused.
110
+ */
111
+ export declare function updateProfile(patch: DeepPartial<TrainBudProfile>): TrainBudProfile;
112
+ /** Card ids in the user's order, with hidden ones removed. */
113
+ export declare function visibleCards(profile?: TrainBudProfile): string[];
114
+ /**
115
+ * Grade one value against this user's bands.
116
+ *
117
+ * A missing value returns `unknown`, never `hard`. An unworn watch is not a
118
+ * recovery score of zero, and colouring an absence red is how a UI invents a
119
+ * measurement it was never given.
120
+ */
121
+ export declare function stateFor(metric: GradedMetric, value: number | null | undefined, profile?: TrainBudProfile): MetricState;
122
+ export {};
123
+ //# sourceMappingURL=profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA8BxB,0DAA0D;AAC1D,eAAO,MAAM,QAAQ,qGAUX,CAAC;AAEX,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/C,sDAAsD;AACtD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;AAElE;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc;;;;;CAKjB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,cAAc,CAAC;AAcvD,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAsCjB,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE5D;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,eAkB7B,CAAC;AAMF,uDAAuD;AACvD,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAuDD,wBAAgB,UAAU,IAAI,eAAe,CAuB5C;AA8BD,KAAK,WAAW,CAAC,CAAC,IAAI;KACnB,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAClG,CAAC;AAqBF,qBAAa,sBAAuB,SAAQ,KAAK;CAAG;AAEpD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,eAAe,CAAC,GAAG,eAAe,CA0ClF;AAED,8DAA8D;AAC9D,wBAAgB,YAAY,CAAC,OAAO,GAAE,eAA8B,GAAG,MAAM,EAAE,CAG9E;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,OAAO,GAAE,eAA8B,GACtC,WAAW,CAiBb"}