@continuumdao/continuum-node-sdk 1.3.24 → 1.3.27

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 (583) hide show
  1. package/README.md +15 -1
  2. package/dist/agent-host-catalog.json +189 -0
  3. package/dist/core/agent/agent-chart-data-access-assert.d.ts +7 -0
  4. package/dist/core/agent/agent-chart-data-access-assert.d.ts.map +1 -0
  5. package/dist/core/agent/agent-chart-data-access-assert.js +27 -0
  6. package/dist/core/agent/agent-chart-data-access-assert.js.map +1 -0
  7. package/dist/core/agent/agent-chart-data-access.d.ts +11 -0
  8. package/dist/core/agent/agent-chart-data-access.d.ts.map +1 -0
  9. package/dist/core/agent/agent-chart-data-access.js +42 -0
  10. package/dist/core/agent/agent-chart-data-access.js.map +1 -0
  11. package/dist/core/agent/environment-variables.d.ts +8 -1
  12. package/dist/core/agent/environment-variables.d.ts.map +1 -1
  13. package/dist/core/agent/environment-variables.js +44 -1
  14. package/dist/core/agent/environment-variables.js.map +1 -1
  15. package/dist/core/agent/mcp-servers.d.ts +8 -1
  16. package/dist/core/agent/mcp-servers.d.ts.map +1 -1
  17. package/dist/core/agent/mcp-servers.js +50 -1
  18. package/dist/core/agent/mcp-servers.js.map +1 -1
  19. package/dist/core/agent/skills.d.ts +6 -0
  20. package/dist/core/agent/skills.d.ts.map +1 -1
  21. package/dist/core/agent/skills.js +40 -1
  22. package/dist/core/agent/skills.js.map +1 -1
  23. package/dist/core/candlestick-patterns/calibration-weights.d.ts +3 -0
  24. package/dist/core/candlestick-patterns/calibration-weights.d.ts.map +1 -0
  25. package/dist/core/candlestick-patterns/calibration-weights.js +3 -0
  26. package/dist/core/candlestick-patterns/calibration-weights.js.map +1 -0
  27. package/dist/core/candlestick-patterns/candle-settings.d.ts +50 -0
  28. package/dist/core/candlestick-patterns/candle-settings.d.ts.map +1 -0
  29. package/dist/core/candlestick-patterns/candle-settings.js +127 -0
  30. package/dist/core/candlestick-patterns/candle-settings.js.map +1 -0
  31. package/dist/core/candlestick-patterns/catalog.d.ts +7 -0
  32. package/dist/core/candlestick-patterns/catalog.d.ts.map +1 -0
  33. package/dist/core/candlestick-patterns/catalog.js +191 -0
  34. package/dist/core/candlestick-patterns/catalog.js.map +1 -0
  35. package/dist/core/candlestick-patterns/index.d.ts +7 -0
  36. package/dist/core/candlestick-patterns/index.d.ts.map +1 -0
  37. package/dist/core/candlestick-patterns/index.js +6 -0
  38. package/dist/core/candlestick-patterns/index.js.map +1 -0
  39. package/dist/core/candlestick-patterns/patterns/detect.d.ts +21 -0
  40. package/dist/core/candlestick-patterns/patterns/detect.d.ts.map +1 -0
  41. package/dist/core/candlestick-patterns/patterns/detect.js +515 -0
  42. package/dist/core/candlestick-patterns/patterns/detect.js.map +1 -0
  43. package/dist/core/candlestick-patterns/recommendation.d.ts +3 -0
  44. package/dist/core/candlestick-patterns/recommendation.d.ts.map +1 -0
  45. package/dist/core/candlestick-patterns/recommendation.js +92 -0
  46. package/dist/core/candlestick-patterns/recommendation.js.map +1 -0
  47. package/dist/core/candlestick-patterns/scan.d.ts +8 -0
  48. package/dist/core/candlestick-patterns/scan.d.ts.map +1 -0
  49. package/dist/core/candlestick-patterns/scan.js +70 -0
  50. package/dist/core/candlestick-patterns/scan.js.map +1 -0
  51. package/dist/core/candlestick-patterns/types.d.ts +47 -0
  52. package/dist/core/candlestick-patterns/types.d.ts.map +1 -0
  53. package/dist/core/candlestick-patterns/types.js +2 -0
  54. package/dist/core/candlestick-patterns/types.js.map +1 -0
  55. package/dist/core/chart/analysis/analysis-agent-view.d.ts +6 -0
  56. package/dist/core/chart/analysis/analysis-agent-view.d.ts.map +1 -0
  57. package/dist/core/chart/analysis/analysis-agent-view.js +197 -0
  58. package/dist/core/chart/analysis/analysis-agent-view.js.map +1 -0
  59. package/dist/core/chart/analysis/analysis-catalog.d.ts +18 -0
  60. package/dist/core/chart/analysis/analysis-catalog.d.ts.map +1 -0
  61. package/dist/core/chart/analysis/analysis-catalog.js +108 -0
  62. package/dist/core/chart/analysis/analysis-catalog.js.map +1 -0
  63. package/dist/core/chart/analysis/analysis-meta.d.ts +97 -0
  64. package/dist/core/chart/analysis/analysis-meta.d.ts.map +1 -0
  65. package/dist/core/chart/analysis/analysis-meta.js +86 -0
  66. package/dist/core/chart/analysis/analysis-meta.js.map +1 -0
  67. package/dist/core/chart/analysis/analyze-tools.d.ts +634 -0
  68. package/dist/core/chart/analysis/analyze-tools.d.ts.map +1 -0
  69. package/dist/core/chart/analysis/analyze-tools.js +785 -0
  70. package/dist/core/chart/analysis/analyze-tools.js.map +1 -0
  71. package/dist/core/chart/analysis/candlestick-patterns-tools.d.ts +125 -0
  72. package/dist/core/chart/analysis/candlestick-patterns-tools.d.ts.map +1 -0
  73. package/dist/core/chart/analysis/candlestick-patterns-tools.js +159 -0
  74. package/dist/core/chart/analysis/candlestick-patterns-tools.js.map +1 -0
  75. package/dist/core/chart/analysis/chart-patterns-drawings-tools.d.ts +105 -0
  76. package/dist/core/chart/analysis/chart-patterns-drawings-tools.d.ts.map +1 -0
  77. package/dist/core/chart/analysis/chart-patterns-drawings-tools.js +512 -0
  78. package/dist/core/chart/analysis/chart-patterns-drawings-tools.js.map +1 -0
  79. package/dist/core/chart/analysis/chart-patterns-tools.d.ts +542 -0
  80. package/dist/core/chart/analysis/chart-patterns-tools.d.ts.map +1 -0
  81. package/dist/core/chart/analysis/chart-patterns-tools.js +283 -0
  82. package/dist/core/chart/analysis/chart-patterns-tools.js.map +1 -0
  83. package/dist/core/chart/analysis/key-fib-drawings-tools.d.ts +42 -0
  84. package/dist/core/chart/analysis/key-fib-drawings-tools.d.ts.map +1 -0
  85. package/dist/core/chart/analysis/key-fib-drawings-tools.js +140 -0
  86. package/dist/core/chart/analysis/key-fib-drawings-tools.js.map +1 -0
  87. package/dist/core/chart/analysis/key-level-break-detect.d.ts +27 -0
  88. package/dist/core/chart/analysis/key-level-break-detect.d.ts.map +1 -0
  89. package/dist/core/chart/analysis/key-level-break-detect.js +156 -0
  90. package/dist/core/chart/analysis/key-level-break-detect.js.map +1 -0
  91. package/dist/core/chart/analysis/key-level-drawings-shared.d.ts +109 -0
  92. package/dist/core/chart/analysis/key-level-drawings-shared.d.ts.map +1 -0
  93. package/dist/core/chart/analysis/key-level-drawings-shared.js +335 -0
  94. package/dist/core/chart/analysis/key-level-drawings-shared.js.map +1 -0
  95. package/dist/core/chart/analysis/key-level-drawings-tools.d.ts +42 -0
  96. package/dist/core/chart/analysis/key-level-drawings-tools.d.ts.map +1 -0
  97. package/dist/core/chart/analysis/key-level-drawings-tools.js +140 -0
  98. package/dist/core/chart/analysis/key-level-drawings-tools.js.map +1 -0
  99. package/dist/core/chart/analysis/key-level-menu-summary.d.ts +84 -0
  100. package/dist/core/chart/analysis/key-level-menu-summary.d.ts.map +1 -0
  101. package/dist/core/chart/analysis/key-level-menu-summary.js +257 -0
  102. package/dist/core/chart/analysis/key-level-menu-summary.js.map +1 -0
  103. package/dist/core/chart/analysis/key-levels-dataset.d.ts +17 -0
  104. package/dist/core/chart/analysis/key-levels-dataset.d.ts.map +1 -0
  105. package/dist/core/chart/analysis/key-levels-dataset.js +44 -0
  106. package/dist/core/chart/analysis/key-levels-dataset.js.map +1 -0
  107. package/dist/core/chart/analysis/ohlcv-input.d.ts +39 -0
  108. package/dist/core/chart/analysis/ohlcv-input.d.ts.map +1 -0
  109. package/dist/core/chart/analysis/ohlcv-input.js +89 -0
  110. package/dist/core/chart/analysis/ohlcv-input.js.map +1 -0
  111. package/dist/core/chart/analysis/ohlcv-live-merge.d.ts +39 -0
  112. package/dist/core/chart/analysis/ohlcv-live-merge.d.ts.map +1 -0
  113. package/dist/core/chart/analysis/ohlcv-live-merge.js +158 -0
  114. package/dist/core/chart/analysis/ohlcv-live-merge.js.map +1 -0
  115. package/dist/core/chart/analysis/time-series-analyze-tools.d.ts +98 -0
  116. package/dist/core/chart/analysis/time-series-analyze-tools.d.ts.map +1 -0
  117. package/dist/core/chart/analysis/time-series-analyze-tools.js +343 -0
  118. package/dist/core/chart/analysis/time-series-analyze-tools.js.map +1 -0
  119. package/dist/core/chart/analysis/time-series-input.d.ts +15 -0
  120. package/dist/core/chart/analysis/time-series-input.d.ts.map +1 -0
  121. package/dist/core/chart/analysis/time-series-input.js +155 -0
  122. package/dist/core/chart/analysis/time-series-input.js.map +1 -0
  123. package/dist/core/chart/analysis/trade-setups/build-trade-uniswap.d.ts +10 -0
  124. package/dist/core/chart/analysis/trade-setups/build-trade-uniswap.d.ts.map +1 -0
  125. package/dist/core/chart/analysis/trade-setups/build-trade-uniswap.js +128 -0
  126. package/dist/core/chart/analysis/trade-setups/build-trade-uniswap.js.map +1 -0
  127. package/dist/core/chart/analysis/trade-setups/build-trade.d.ts +46 -0
  128. package/dist/core/chart/analysis/trade-setups/build-trade.d.ts.map +1 -0
  129. package/dist/core/chart/analysis/trade-setups/build-trade.js +288 -0
  130. package/dist/core/chart/analysis/trade-setups/build-trade.js.map +1 -0
  131. package/dist/core/chart/analysis/trade-setups/candlestick-trade-setup.d.ts +50 -0
  132. package/dist/core/chart/analysis/trade-setups/candlestick-trade-setup.d.ts.map +1 -0
  133. package/dist/core/chart/analysis/trade-setups/candlestick-trade-setup.js +80 -0
  134. package/dist/core/chart/analysis/trade-setups/candlestick-trade-setup.js.map +1 -0
  135. package/dist/core/chart/analysis/trade-setups/chart-pattern-trade-setup.d.ts +56 -0
  136. package/dist/core/chart/analysis/trade-setups/chart-pattern-trade-setup.d.ts.map +1 -0
  137. package/dist/core/chart/analysis/trade-setups/chart-pattern-trade-setup.js +223 -0
  138. package/dist/core/chart/analysis/trade-setups/chart-pattern-trade-setup.js.map +1 -0
  139. package/dist/core/chart/analysis/trade-setups/index.d.ts +13 -0
  140. package/dist/core/chart/analysis/trade-setups/index.d.ts.map +1 -0
  141. package/dist/core/chart/analysis/trade-setups/index.js +13 -0
  142. package/dist/core/chart/analysis/trade-setups/index.js.map +1 -0
  143. package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.d.ts +105 -0
  144. package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.d.ts.map +1 -0
  145. package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.js +452 -0
  146. package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.js.map +1 -0
  147. package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.d.ts +110 -0
  148. package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.d.ts.map +1 -0
  149. package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.js +344 -0
  150. package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.js.map +1 -0
  151. package/dist/core/chart/analysis/trade-setups/momentum-trade-setup.d.ts +39 -0
  152. package/dist/core/chart/analysis/trade-setups/momentum-trade-setup.d.ts.map +1 -0
  153. package/dist/core/chart/analysis/trade-setups/momentum-trade-setup.js +64 -0
  154. package/dist/core/chart/analysis/trade-setups/momentum-trade-setup.js.map +1 -0
  155. package/dist/core/chart/analysis/trade-setups/pattern-limit-entry.d.ts +42 -0
  156. package/dist/core/chart/analysis/trade-setups/pattern-limit-entry.d.ts.map +1 -0
  157. package/dist/core/chart/analysis/trade-setups/pattern-limit-entry.js +395 -0
  158. package/dist/core/chart/analysis/trade-setups/pattern-limit-entry.js.map +1 -0
  159. package/dist/core/chart/analysis/trade-setups/shared.d.ts +21 -0
  160. package/dist/core/chart/analysis/trade-setups/shared.d.ts.map +1 -0
  161. package/dist/core/chart/analysis/trade-setups/shared.js +48 -0
  162. package/dist/core/chart/analysis/trade-setups/shared.js.map +1 -0
  163. package/dist/core/chart/analysis/trade-setups/trade-consensus.d.ts +22 -0
  164. package/dist/core/chart/analysis/trade-setups/trade-consensus.d.ts.map +1 -0
  165. package/dist/core/chart/analysis/trade-setups/trade-consensus.js +95 -0
  166. package/dist/core/chart/analysis/trade-setups/trade-consensus.js.map +1 -0
  167. package/dist/core/chart/analysis/trade-setups/trade-desk-defaults.d.ts +11 -0
  168. package/dist/core/chart/analysis/trade-setups/trade-desk-defaults.d.ts.map +1 -0
  169. package/dist/core/chart/analysis/trade-setups/trade-desk-defaults.js +13 -0
  170. package/dist/core/chart/analysis/trade-setups/trade-desk-defaults.js.map +1 -0
  171. package/dist/core/chart/analysis/trade-setups/trade-entry-gates.d.ts +40 -0
  172. package/dist/core/chart/analysis/trade-setups/trade-entry-gates.d.ts.map +1 -0
  173. package/dist/core/chart/analysis/trade-setups/trade-entry-gates.js +84 -0
  174. package/dist/core/chart/analysis/trade-setups/trade-entry-gates.js.map +1 -0
  175. package/dist/core/chart/analysis/trade-setups/trade-idea-list.d.ts +46 -0
  176. package/dist/core/chart/analysis/trade-setups/trade-idea-list.d.ts.map +1 -0
  177. package/dist/core/chart/analysis/trade-setups/trade-idea-list.js +95 -0
  178. package/dist/core/chart/analysis/trade-setups/trade-idea-list.js.map +1 -0
  179. package/dist/core/chart/analysis/trade-setups/trade-idea.d.ts +72 -0
  180. package/dist/core/chart/analysis/trade-setups/trade-idea.d.ts.map +1 -0
  181. package/dist/core/chart/analysis/trade-setups/trade-idea.js +182 -0
  182. package/dist/core/chart/analysis/trade-setups/trade-idea.js.map +1 -0
  183. package/dist/core/chart/analysis/trade-setups/trade-purpose-format.d.ts +43 -0
  184. package/dist/core/chart/analysis/trade-setups/trade-purpose-format.d.ts.map +1 -0
  185. package/dist/core/chart/analysis/trade-setups/trade-purpose-format.js +183 -0
  186. package/dist/core/chart/analysis/trade-setups/trade-purpose-format.js.map +1 -0
  187. package/dist/core/chart/analysis/trade-setups/trend-structure-trade-setup.d.ts +59 -0
  188. package/dist/core/chart/analysis/trade-setups/trend-structure-trade-setup.d.ts.map +1 -0
  189. package/dist/core/chart/analysis/trade-setups/trend-structure-trade-setup.js +138 -0
  190. package/dist/core/chart/analysis/trade-setups/trend-structure-trade-setup.js.map +1 -0
  191. package/dist/core/chart/analysis/trend-line-drawings-tools.d.ts +56 -0
  192. package/dist/core/chart/analysis/trend-line-drawings-tools.d.ts.map +1 -0
  193. package/dist/core/chart/analysis/trend-line-drawings-tools.js +271 -0
  194. package/dist/core/chart/analysis/trend-line-drawings-tools.js.map +1 -0
  195. package/dist/core/chart/analysis/trend-line-menu-summary.d.ts +38 -0
  196. package/dist/core/chart/analysis/trend-line-menu-summary.d.ts.map +1 -0
  197. package/dist/core/chart/analysis/trend-line-menu-summary.js +94 -0
  198. package/dist/core/chart/analysis/trend-line-menu-summary.js.map +1 -0
  199. package/dist/core/chart/apply-chart-drawings.d.ts +15 -0
  200. package/dist/core/chart/apply-chart-drawings.d.ts.map +1 -1
  201. package/dist/core/chart/apply-chart-drawings.js +114 -31
  202. package/dist/core/chart/apply-chart-drawings.js.map +1 -1
  203. package/dist/core/chart/chart-agent-view.d.ts +4 -0
  204. package/dist/core/chart/chart-agent-view.d.ts.map +1 -0
  205. package/dist/core/chart/chart-agent-view.js +27 -0
  206. package/dist/core/chart/chart-agent-view.js.map +1 -0
  207. package/dist/core/chart/chart-data-validation.d.ts +63 -0
  208. package/dist/core/chart/chart-data-validation.d.ts.map +1 -0
  209. package/dist/core/chart/chart-data-validation.js +320 -0
  210. package/dist/core/chart/chart-data-validation.js.map +1 -0
  211. package/dist/core/chart/chart-ohlcv-load-status.d.ts +39 -0
  212. package/dist/core/chart/chart-ohlcv-load-status.d.ts.map +1 -0
  213. package/dist/core/chart/chart-ohlcv-load-status.js +281 -0
  214. package/dist/core/chart/chart-ohlcv-load-status.js.map +1 -0
  215. package/dist/core/chart/chart-ohlcv-summary.d.ts +58 -0
  216. package/dist/core/chart/chart-ohlcv-summary.d.ts.map +1 -0
  217. package/dist/core/chart/chart-ohlcv-summary.js +118 -0
  218. package/dist/core/chart/chart-ohlcv-summary.js.map +1 -0
  219. package/dist/core/chart/chart-pattern-session-store.d.ts +39 -0
  220. package/dist/core/chart/chart-pattern-session-store.d.ts.map +1 -0
  221. package/dist/core/chart/chart-pattern-session-store.js +94 -0
  222. package/dist/core/chart/chart-pattern-session-store.js.map +1 -0
  223. package/dist/core/chart/customization-catalog.d.ts +1 -1
  224. package/dist/core/chart/customization-catalog.d.ts.map +1 -1
  225. package/dist/core/chart/customization-catalog.js +14 -1
  226. package/dist/core/chart/customization-catalog.js.map +1 -1
  227. package/dist/core/chart/display-downsample.d.ts +9 -0
  228. package/dist/core/chart/display-downsample.d.ts.map +1 -0
  229. package/dist/core/chart/display-downsample.js +79 -0
  230. package/dist/core/chart/display-downsample.js.map +1 -0
  231. package/dist/core/chart/index.d.ts +3 -2
  232. package/dist/core/chart/index.d.ts.map +1 -1
  233. package/dist/core/chart/index.js +3 -2
  234. package/dist/core/chart/index.js.map +1 -1
  235. package/dist/core/chart/levels/calculate-tools.d.ts +37 -0
  236. package/dist/core/chart/levels/calculate-tools.d.ts.map +1 -1
  237. package/dist/core/chart/levels/calculate-tools.js +48 -2
  238. package/dist/core/chart/levels/calculate-tools.js.map +1 -1
  239. package/dist/core/chart/levels/key-levels.d.ts +6 -0
  240. package/dist/core/chart/levels/key-levels.d.ts.map +1 -1
  241. package/dist/core/chart/levels/key-levels.js +3 -3
  242. package/dist/core/chart/levels/key-levels.js.map +1 -1
  243. package/dist/core/chart/levels/trend-lines.d.ts +24 -0
  244. package/dist/core/chart/levels/trend-lines.d.ts.map +1 -0
  245. package/dist/core/chart/levels/trend-lines.js +129 -0
  246. package/dist/core/chart/levels/trend-lines.js.map +1 -0
  247. package/dist/core/chart/live/bar-merge.d.ts +8 -0
  248. package/dist/core/chart/live/bar-merge.d.ts.map +1 -0
  249. package/dist/core/chart/live/bar-merge.js +52 -0
  250. package/dist/core/chart/live/bar-merge.js.map +1 -0
  251. package/dist/core/chart/live/binding-extract.d.ts.map +1 -1
  252. package/dist/core/chart/live/binding-extract.js +10 -1
  253. package/dist/core/chart/live/binding-extract.js.map +1 -1
  254. package/dist/core/chart/live/fetch-tick.d.ts +4 -0
  255. package/dist/core/chart/live/fetch-tick.d.ts.map +1 -0
  256. package/dist/core/chart/live/fetch-tick.js +73 -0
  257. package/dist/core/chart/live/fetch-tick.js.map +1 -0
  258. package/dist/core/chart/live/index.d.ts +2 -0
  259. package/dist/core/chart/live/index.d.ts.map +1 -1
  260. package/dist/core/chart/live/index.js +2 -0
  261. package/dist/core/chart/live/index.js.map +1 -1
  262. package/dist/core/chart/live/merge-tick.d.ts +2 -1
  263. package/dist/core/chart/live/merge-tick.d.ts.map +1 -1
  264. package/dist/core/chart/live/merge-tick.js +10 -5
  265. package/dist/core/chart/live/merge-tick.js.map +1 -1
  266. package/dist/core/chart/ohlcv-integrity-messages.d.ts +5 -0
  267. package/dist/core/chart/ohlcv-integrity-messages.d.ts.map +1 -0
  268. package/dist/core/chart/ohlcv-integrity-messages.js +12 -0
  269. package/dist/core/chart/ohlcv-integrity-messages.js.map +1 -0
  270. package/dist/core/chart/ohlcv-integrity.d.ts +82 -0
  271. package/dist/core/chart/ohlcv-integrity.d.ts.map +1 -0
  272. package/dist/core/chart/ohlcv-integrity.js +266 -0
  273. package/dist/core/chart/ohlcv-integrity.js.map +1 -0
  274. package/dist/core/chart/ohlcv-session-store.d.ts +38 -0
  275. package/dist/core/chart/ohlcv-session-store.d.ts.map +1 -0
  276. package/dist/core/chart/ohlcv-session-store.js +107 -0
  277. package/dist/core/chart/ohlcv-session-store.js.map +1 -0
  278. package/dist/core/chart/ohlcv-window-expectations.d.ts +77 -0
  279. package/dist/core/chart/ohlcv-window-expectations.d.ts.map +1 -0
  280. package/dist/core/chart/ohlcv-window-expectations.js +426 -0
  281. package/dist/core/chart/ohlcv-window-expectations.js.map +1 -0
  282. package/dist/core/chart/ohlcv-window.d.ts +36 -0
  283. package/dist/core/chart/ohlcv-window.d.ts.map +1 -0
  284. package/dist/core/chart/ohlcv-window.js +238 -0
  285. package/dist/core/chart/ohlcv-window.js.map +1 -0
  286. package/dist/core/chart/overlay-schemas.d.ts +686 -0
  287. package/dist/core/chart/overlay-schemas.d.ts.map +1 -1
  288. package/dist/core/chart/overlay-schemas.js +148 -0
  289. package/dist/core/chart/overlay-schemas.js.map +1 -1
  290. package/dist/core/chart/overlays.d.ts.map +1 -1
  291. package/dist/core/chart/overlays.js +356 -9
  292. package/dist/core/chart/overlays.js.map +1 -1
  293. package/dist/core/chart/point-normalize.d.ts.map +1 -1
  294. package/dist/core/chart/point-normalize.js +21 -14
  295. package/dist/core/chart/point-normalize.js.map +1 -1
  296. package/dist/core/chart/prepare-core.d.ts.map +1 -1
  297. package/dist/core/chart/prepare-core.js +5 -1
  298. package/dist/core/chart/prepare-core.js.map +1 -1
  299. package/dist/core/chart/prepare-from-rows.d.ts +237 -1
  300. package/dist/core/chart/prepare-from-rows.d.ts.map +1 -1
  301. package/dist/core/chart/prepare-from-rows.js +81 -11
  302. package/dist/core/chart/prepare-from-rows.js.map +1 -1
  303. package/dist/core/chart/schemas.d.ts +826 -6
  304. package/dist/core/chart/schemas.d.ts.map +1 -1
  305. package/dist/core/chart/schemas.js +49 -6
  306. package/dist/core/chart/schemas.js.map +1 -1
  307. package/dist/core/chart-patterns/atr.d.ts +15 -0
  308. package/dist/core/chart-patterns/atr.d.ts.map +1 -0
  309. package/dist/core/chart-patterns/atr.js +57 -0
  310. package/dist/core/chart-patterns/atr.js.map +1 -0
  311. package/dist/core/chart-patterns/catalog.d.ts +7 -0
  312. package/dist/core/chart-patterns/catalog.d.ts.map +1 -0
  313. package/dist/core/chart-patterns/catalog.js +221 -0
  314. package/dist/core/chart-patterns/catalog.js.map +1 -0
  315. package/dist/core/chart-patterns/confidence.d.ts +12 -0
  316. package/dist/core/chart-patterns/confidence.d.ts.map +1 -0
  317. package/dist/core/chart-patterns/confidence.js +58 -0
  318. package/dist/core/chart-patterns/confidence.js.map +1 -0
  319. package/dist/core/chart-patterns/drawing-spec.d.ts +44 -0
  320. package/dist/core/chart-patterns/drawing-spec.d.ts.map +1 -0
  321. package/dist/core/chart-patterns/drawing-spec.js +425 -0
  322. package/dist/core/chart-patterns/drawing-spec.js.map +1 -0
  323. package/dist/core/chart-patterns/geometry-to-overlay.d.ts +34 -0
  324. package/dist/core/chart-patterns/geometry-to-overlay.d.ts.map +1 -0
  325. package/dist/core/chart-patterns/geometry-to-overlay.js +401 -0
  326. package/dist/core/chart-patterns/geometry-to-overlay.js.map +1 -0
  327. package/dist/core/chart-patterns/index.d.ts +13 -0
  328. package/dist/core/chart-patterns/index.d.ts.map +1 -0
  329. package/dist/core/chart-patterns/index.js +12 -0
  330. package/dist/core/chart-patterns/index.js.map +1 -0
  331. package/dist/core/chart-patterns/interpretation.d.ts +6 -0
  332. package/dist/core/chart-patterns/interpretation.d.ts.map +1 -0
  333. package/dist/core/chart-patterns/interpretation.js +49 -0
  334. package/dist/core/chart-patterns/interpretation.js.map +1 -0
  335. package/dist/core/chart-patterns/measured-move.d.ts +3 -0
  336. package/dist/core/chart-patterns/measured-move.d.ts.map +1 -0
  337. package/dist/core/chart-patterns/measured-move.js +196 -0
  338. package/dist/core/chart-patterns/measured-move.js.map +1 -0
  339. package/dist/core/chart-patterns/pattern-enrich.d.ts +4 -0
  340. package/dist/core/chart-patterns/pattern-enrich.d.ts.map +1 -0
  341. package/dist/core/chart-patterns/pattern-enrich.js +20 -0
  342. package/dist/core/chart-patterns/pattern-enrich.js.map +1 -0
  343. package/dist/core/chart-patterns/pattern-id-aliases.d.ts +3 -0
  344. package/dist/core/chart-patterns/pattern-id-aliases.d.ts.map +1 -0
  345. package/dist/core/chart-patterns/pattern-id-aliases.js +17 -0
  346. package/dist/core/chart-patterns/pattern-id-aliases.js.map +1 -0
  347. package/dist/core/chart-patterns/pattern-menu-summary.d.ts +21 -0
  348. package/dist/core/chart-patterns/pattern-menu-summary.d.ts.map +1 -0
  349. package/dist/core/chart-patterns/pattern-menu-summary.js +68 -0
  350. package/dist/core/chart-patterns/pattern-menu-summary.js.map +1 -0
  351. package/dist/core/chart-patterns/patterns/channel.d.ts +4 -0
  352. package/dist/core/chart-patterns/patterns/channel.d.ts.map +1 -0
  353. package/dist/core/chart-patterns/patterns/channel.js +137 -0
  354. package/dist/core/chart-patterns/patterns/channel.js.map +1 -0
  355. package/dist/core/chart-patterns/patterns/cup-and-handle.d.ts +4 -0
  356. package/dist/core/chart-patterns/patterns/cup-and-handle.d.ts.map +1 -0
  357. package/dist/core/chart-patterns/patterns/cup-and-handle.js +89 -0
  358. package/dist/core/chart-patterns/patterns/cup-and-handle.js.map +1 -0
  359. package/dist/core/chart-patterns/patterns/doubles.d.ts +4 -0
  360. package/dist/core/chart-patterns/patterns/doubles.d.ts.map +1 -0
  361. package/dist/core/chart-patterns/patterns/doubles.js +163 -0
  362. package/dist/core/chart-patterns/patterns/doubles.js.map +1 -0
  363. package/dist/core/chart-patterns/patterns/flag.d.ts +4 -0
  364. package/dist/core/chart-patterns/patterns/flag.d.ts.map +1 -0
  365. package/dist/core/chart-patterns/patterns/flag.js +64 -0
  366. package/dist/core/chart-patterns/patterns/flag.js.map +1 -0
  367. package/dist/core/chart-patterns/patterns/head-and-shoulders.d.ts +5 -0
  368. package/dist/core/chart-patterns/patterns/head-and-shoulders.d.ts.map +1 -0
  369. package/dist/core/chart-patterns/patterns/head-and-shoulders.js +69 -0
  370. package/dist/core/chart-patterns/patterns/head-and-shoulders.js.map +1 -0
  371. package/dist/core/chart-patterns/patterns/inverse-head-and-shoulders.d.ts +4 -0
  372. package/dist/core/chart-patterns/patterns/inverse-head-and-shoulders.d.ts.map +1 -0
  373. package/dist/core/chart-patterns/patterns/inverse-head-and-shoulders.js +66 -0
  374. package/dist/core/chart-patterns/patterns/inverse-head-and-shoulders.js.map +1 -0
  375. package/dist/core/chart-patterns/patterns/pennant.d.ts +4 -0
  376. package/dist/core/chart-patterns/patterns/pennant.d.ts.map +1 -0
  377. package/dist/core/chart-patterns/patterns/pennant.js +66 -0
  378. package/dist/core/chart-patterns/patterns/pennant.js.map +1 -0
  379. package/dist/core/chart-patterns/patterns/trendline-breakout.d.ts +10 -0
  380. package/dist/core/chart-patterns/patterns/trendline-breakout.d.ts.map +1 -0
  381. package/dist/core/chart-patterns/patterns/trendline-breakout.js +241 -0
  382. package/dist/core/chart-patterns/patterns/trendline-breakout.js.map +1 -0
  383. package/dist/core/chart-patterns/patterns/triangles.d.ts +4 -0
  384. package/dist/core/chart-patterns/patterns/triangles.d.ts.map +1 -0
  385. package/dist/core/chart-patterns/patterns/triangles.js +113 -0
  386. package/dist/core/chart-patterns/patterns/triangles.js.map +1 -0
  387. package/dist/core/chart-patterns/patterns/utils.d.ts +20 -0
  388. package/dist/core/chart-patterns/patterns/utils.d.ts.map +1 -0
  389. package/dist/core/chart-patterns/patterns/utils.js +60 -0
  390. package/dist/core/chart-patterns/patterns/utils.js.map +1 -0
  391. package/dist/core/chart-patterns/patterns/wedge.d.ts +4 -0
  392. package/dist/core/chart-patterns/patterns/wedge.d.ts.map +1 -0
  393. package/dist/core/chart-patterns/patterns/wedge.js +88 -0
  394. package/dist/core/chart-patterns/patterns/wedge.js.map +1 -0
  395. package/dist/core/chart-patterns/recommendation.d.ts +5 -0
  396. package/dist/core/chart-patterns/recommendation.d.ts.map +1 -0
  397. package/dist/core/chart-patterns/recommendation.js +84 -0
  398. package/dist/core/chart-patterns/recommendation.js.map +1 -0
  399. package/dist/core/chart-patterns/scan.d.ts +5 -0
  400. package/dist/core/chart-patterns/scan.d.ts.map +1 -0
  401. package/dist/core/chart-patterns/scan.js +121 -0
  402. package/dist/core/chart-patterns/scan.js.map +1 -0
  403. package/dist/core/chart-patterns/smoothing.d.ts +10 -0
  404. package/dist/core/chart-patterns/smoothing.d.ts.map +1 -0
  405. package/dist/core/chart-patterns/smoothing.js +45 -0
  406. package/dist/core/chart-patterns/smoothing.js.map +1 -0
  407. package/dist/core/chart-patterns/swings.d.ts +12 -0
  408. package/dist/core/chart-patterns/swings.d.ts.map +1 -0
  409. package/dist/core/chart-patterns/swings.js +135 -0
  410. package/dist/core/chart-patterns/swings.js.map +1 -0
  411. package/dist/core/chart-patterns/trade-setup.d.ts +2 -0
  412. package/dist/core/chart-patterns/trade-setup.d.ts.map +1 -0
  413. package/dist/core/chart-patterns/trade-setup.js +2 -0
  414. package/dist/core/chart-patterns/trade-setup.js.map +1 -0
  415. package/dist/core/chart-patterns/types.d.ts +225 -0
  416. package/dist/core/chart-patterns/types.d.ts.map +1 -0
  417. package/dist/core/chart-patterns/types.js +2 -0
  418. package/dist/core/chart-patterns/types.js.map +1 -0
  419. package/dist/core/chart-patterns/volume-confirmation.d.ts +13 -0
  420. package/dist/core/chart-patterns/volume-confirmation.d.ts.map +1 -0
  421. package/dist/core/chart-patterns/volume-confirmation.js +172 -0
  422. package/dist/core/chart-patterns/volume-confirmation.js.map +1 -0
  423. package/dist/core/coinmarketcap/api-key.d.ts +8 -0
  424. package/dist/core/coinmarketcap/api-key.d.ts.map +1 -0
  425. package/dist/core/coinmarketcap/api-key.js +30 -0
  426. package/dist/core/coinmarketcap/api-key.js.map +1 -0
  427. package/dist/core/coinmarketcap/client.d.ts +8 -0
  428. package/dist/core/coinmarketcap/client.d.ts.map +1 -0
  429. package/dist/core/coinmarketcap/client.js +103 -0
  430. package/dist/core/coinmarketcap/client.js.map +1 -0
  431. package/dist/core/coinmarketcap/index.d.ts +7 -0
  432. package/dist/core/coinmarketcap/index.d.ts.map +1 -0
  433. package/dist/core/coinmarketcap/index.js +7 -0
  434. package/dist/core/coinmarketcap/index.js.map +1 -0
  435. package/dist/core/coinmarketcap/kline-fallback.d.ts +11 -0
  436. package/dist/core/coinmarketcap/kline-fallback.d.ts.map +1 -0
  437. package/dist/core/coinmarketcap/kline-fallback.js +35 -0
  438. package/dist/core/coinmarketcap/kline-fallback.js.map +1 -0
  439. package/dist/core/coinmarketcap/kline-window.d.ts +26 -0
  440. package/dist/core/coinmarketcap/kline-window.d.ts.map +1 -0
  441. package/dist/core/coinmarketcap/kline-window.js +75 -0
  442. package/dist/core/coinmarketcap/kline-window.js.map +1 -0
  443. package/dist/core/coinmarketcap/kline.d.ts +13 -0
  444. package/dist/core/coinmarketcap/kline.d.ts.map +1 -0
  445. package/dist/core/coinmarketcap/kline.js +49 -0
  446. package/dist/core/coinmarketcap/kline.js.map +1 -0
  447. package/dist/core/coinmarketcap/mcp-server-choice.d.ts +24 -0
  448. package/dist/core/coinmarketcap/mcp-server-choice.d.ts.map +1 -0
  449. package/dist/core/coinmarketcap/mcp-server-choice.js +77 -0
  450. package/dist/core/coinmarketcap/mcp-server-choice.js.map +1 -0
  451. package/dist/core/coinmarketcap/public-api.d.ts +24 -0
  452. package/dist/core/coinmarketcap/public-api.d.ts.map +1 -0
  453. package/dist/core/coinmarketcap/public-api.js +277 -0
  454. package/dist/core/coinmarketcap/public-api.js.map +1 -0
  455. package/dist/core/coinmarketcap/schemas.d.ts +231 -0
  456. package/dist/core/coinmarketcap/schemas.d.ts.map +1 -0
  457. package/dist/core/coinmarketcap/schemas.js +153 -0
  458. package/dist/core/coinmarketcap/schemas.js.map +1 -0
  459. package/dist/core/mpc/mpa-fee-status.d.ts +2 -0
  460. package/dist/core/mpc/mpa-fee-status.d.ts.map +1 -1
  461. package/dist/core/mpc/mpa-fee-status.js +8 -1
  462. package/dist/core/mpc/mpa-fee-status.js.map +1 -1
  463. package/dist/core/node-info.d.ts +3 -1
  464. package/dist/core/node-info.d.ts.map +1 -1
  465. package/dist/core/node-info.js +37 -1
  466. package/dist/core/node-info.js.map +1 -1
  467. package/dist/index.d.ts +6 -4
  468. package/dist/index.d.ts.map +1 -1
  469. package/dist/index.js +6 -4
  470. package/dist/index.js.map +1 -1
  471. package/dist/mcp/agent-chart-data-access-gate.d.ts +5 -0
  472. package/dist/mcp/agent-chart-data-access-gate.d.ts.map +1 -0
  473. package/dist/mcp/agent-chart-data-access-gate.js +20 -0
  474. package/dist/mcp/agent-chart-data-access-gate.js.map +1 -0
  475. package/dist/mcp/agent-environment-variables.d.ts.map +1 -1
  476. package/dist/mcp/agent-environment-variables.js +13 -2
  477. package/dist/mcp/agent-environment-variables.js.map +1 -1
  478. package/dist/mcp/agent-host-catalog.d.ts +27 -0
  479. package/dist/mcp/agent-host-catalog.d.ts.map +1 -0
  480. package/dist/mcp/agent-host-catalog.js +88 -0
  481. package/dist/mcp/agent-host-catalog.js.map +1 -0
  482. package/dist/mcp/agent-mcp-servers.d.ts.map +1 -1
  483. package/dist/mcp/agent-mcp-servers.js +32 -3
  484. package/dist/mcp/agent-mcp-servers.js.map +1 -1
  485. package/dist/mcp/agent-skills.d.ts.map +1 -1
  486. package/dist/mcp/agent-skills.js +13 -1
  487. package/dist/mcp/agent-skills.js.map +1 -1
  488. package/dist/mcp/chart.d.ts.map +1 -1
  489. package/dist/mcp/chart.js +299 -26
  490. package/dist/mcp/chart.js.map +1 -1
  491. package/dist/mcp/coinmarketcap-public/register.d.ts +6 -0
  492. package/dist/mcp/coinmarketcap-public/register.d.ts.map +1 -0
  493. package/dist/mcp/coinmarketcap-public/register.js +99 -0
  494. package/dist/mcp/coinmarketcap-public/register.js.map +1 -0
  495. package/dist/mcp/deferred/discovery-tools.d.ts +6 -0
  496. package/dist/mcp/deferred/discovery-tools.d.ts.map +1 -0
  497. package/dist/mcp/deferred/discovery-tools.js +138 -0
  498. package/dist/mcp/deferred/discovery-tools.js.map +1 -0
  499. package/dist/mcp/deferred/optional-endpoint-groups.d.ts +12 -0
  500. package/dist/mcp/deferred/optional-endpoint-groups.d.ts.map +1 -0
  501. package/dist/mcp/deferred/optional-endpoint-groups.js +51 -0
  502. package/dist/mcp/deferred/optional-endpoint-groups.js.map +1 -0
  503. package/dist/mcp/deferred/session.d.ts +56 -0
  504. package/dist/mcp/deferred/session.d.ts.map +1 -0
  505. package/dist/mcp/deferred/session.js +242 -0
  506. package/dist/mcp/deferred/session.js.map +1 -0
  507. package/dist/mcp/deferred/tool-group-map.d.ts +23 -0
  508. package/dist/mcp/deferred/tool-group-map.d.ts.map +1 -0
  509. package/dist/mcp/deferred/tool-group-map.js +317 -0
  510. package/dist/mcp/deferred/tool-group-map.js.map +1 -0
  511. package/dist/mcp/defi/context.d.ts +2 -0
  512. package/dist/mcp/defi/context.d.ts.map +1 -1
  513. package/dist/mcp/defi/defi-protocol-fetch-meta.d.ts +30 -0
  514. package/dist/mcp/defi/defi-protocol-fetch-meta.d.ts.map +1 -0
  515. package/dist/mcp/defi/defi-protocol-fetch-meta.js +76 -0
  516. package/dist/mcp/defi/defi-protocol-fetch-meta.js.map +1 -0
  517. package/dist/mcp/defi/discovery.d.ts +2 -1
  518. package/dist/mcp/defi/discovery.d.ts.map +1 -1
  519. package/dist/mcp/defi/discovery.js +46 -6
  520. package/dist/mcp/defi/discovery.js.map +1 -1
  521. package/dist/mcp/defi/handler.d.ts.map +1 -1
  522. package/dist/mcp/defi/handler.js +6 -3
  523. package/dist/mcp/defi/handler.js.map +1 -1
  524. package/dist/mcp/defi/input-adapter.d.ts +6 -0
  525. package/dist/mcp/defi/input-adapter.d.ts.map +1 -1
  526. package/dist/mcp/defi/input-adapter.js +29 -12
  527. package/dist/mcp/defi/input-adapter.js.map +1 -1
  528. package/dist/mcp/defi/ohlcv-chart-workflow.d.ts +5 -1
  529. package/dist/mcp/defi/ohlcv-chart-workflow.d.ts.map +1 -1
  530. package/dist/mcp/defi/ohlcv-chart-workflow.js +28 -6
  531. package/dist/mcp/defi/ohlcv-chart-workflow.js.map +1 -1
  532. package/dist/mcp/defi/register-protocol-tools.d.ts +2 -1
  533. package/dist/mcp/defi/register-protocol-tools.d.ts.map +1 -1
  534. package/dist/mcp/defi/register-protocol-tools.js +12 -3
  535. package/dist/mcp/defi/register-protocol-tools.js.map +1 -1
  536. package/dist/mcp/defi/trade-bridge.d.ts +2 -0
  537. package/dist/mcp/defi/trade-bridge.d.ts.map +1 -0
  538. package/dist/mcp/defi/trade-bridge.js +2 -0
  539. package/dist/mcp/defi/trade-bridge.js.map +1 -0
  540. package/dist/mcp/keygen.js +1 -1
  541. package/dist/mcp/keygen.js.map +1 -1
  542. package/dist/mcp/management-signer.d.ts.map +1 -1
  543. package/dist/mcp/management-signer.js +1 -1
  544. package/dist/mcp/management-signer.js.map +1 -1
  545. package/dist/mcp/node.d.ts.map +1 -1
  546. package/dist/mcp/node.js +7 -2
  547. package/dist/mcp/node.js.map +1 -1
  548. package/dist/mcp/ohlcv-session-context.d.ts +4 -0
  549. package/dist/mcp/ohlcv-session-context.d.ts.map +1 -0
  550. package/dist/mcp/ohlcv-session-context.js +13 -0
  551. package/dist/mcp/ohlcv-session-context.js.map +1 -0
  552. package/dist/mcp/ohlcv-session-wrapper.d.ts +8 -0
  553. package/dist/mcp/ohlcv-session-wrapper.d.ts.map +1 -0
  554. package/dist/mcp/ohlcv-session-wrapper.js +138 -0
  555. package/dist/mcp/ohlcv-session-wrapper.js.map +1 -0
  556. package/dist/mcp/register.d.ts +3 -1
  557. package/dist/mcp/register.d.ts.map +1 -1
  558. package/dist/mcp/register.js +24 -5
  559. package/dist/mcp/register.js.map +1 -1
  560. package/dist/mcp/resources/agent-cron-jobs.md +25 -0
  561. package/dist/mcp/resources/agent-mcp-servers.md +21 -0
  562. package/dist/mcp/resources/chart-analysis.md +368 -0
  563. package/dist/mcp/resources/chart.md +72 -24
  564. package/dist/mcp/resources/coinmarketcap-public.md +109 -0
  565. package/dist/mcp/resources/keygen.md +1 -1
  566. package/dist/mcp/resources/trade-defaults-skill.md +69 -0
  567. package/dist/mcp/server/http-transport.d.ts.map +1 -1
  568. package/dist/mcp/server/http-transport.js +9 -2
  569. package/dist/mcp/server/http-transport.js.map +1 -1
  570. package/dist/mcp/server/index.js +3 -0
  571. package/dist/mcp/server/index.js.map +1 -1
  572. package/dist/mcp/tool-utils.d.ts.map +1 -1
  573. package/dist/mcp/tool-utils.js +7 -1
  574. package/dist/mcp/tool-utils.js.map +1 -1
  575. package/dist/mcp/trade-tools.d.ts +7 -0
  576. package/dist/mcp/trade-tools.d.ts.map +1 -0
  577. package/dist/mcp/trade-tools.js +201 -0
  578. package/dist/mcp/trade-tools.js.map +1 -0
  579. package/dist/schemas/extended.d.ts +30 -0
  580. package/dist/schemas/extended.d.ts.map +1 -1
  581. package/dist/schemas/extended.js +40 -0
  582. package/dist/schemas/extended.js.map +1 -1
  583. package/package.json +3 -3
@@ -0,0 +1,785 @@
1
+ import { z } from 'zod';
2
+ import { calculateTechnicalIndicator } from '../../ta/calculate.js';
3
+ import { DEFAULT_CHART_RSI_PERIOD } from '../chart-defaults.js';
4
+ import { coerceFiniteNumber } from '../point-normalize.js';
5
+ import { ChartLiveTickSchema } from '../live/schemas.js';
6
+ import { calculateFibonacciRangeFromBars, detectSwingsFromBars, } from '../levels/key-levels.js';
7
+ import { calculateTrendLinesFromBars } from '../levels/trend-lines.js';
8
+ import { buildOhlcvAnalysisMeta, OhlcvAnalysisMetaSchema } from './analysis-meta.js';
9
+ import { prepareOhlcvBarsForAnalysis } from './ohlcv-live-merge.js';
10
+ import { preprocessOhlcvToolInput, missingOhlcvBarsReason } from './ohlcv-input.js';
11
+ import { buildTrendLineMenu, pickTrendLineForTradeSetup, trendLineMenuLabel, } from './trend-line-menu-summary.js';
12
+ import { buildKeyLevelsTradeSetup } from './trade-setups/key-levels-trade-setup.js';
13
+ import { buildKeyLevelFibRetraceTradeSetup, invertedFib618 } from './trade-setups/key-level-fib-retrace-trade-setup.js';
14
+ import { buildKeyLevelAnalysisDataset } from './key-levels-dataset.js';
15
+ import { keyLevelMenuDisplayLabel, pickOuterConcentricFibPair, } from './key-level-menu-summary.js';
16
+ import { buildMomentumTradeSetup } from './trade-setups/momentum-trade-setup.js';
17
+ import { buildTrendStructureTradeSetup } from './trade-setups/trend-structure-trade-setup.js';
18
+ import { ohlcvToolRejectIfLineOnly } from './time-series-analyze-tools.js';
19
+ const barsInputSchema = z
20
+ .object({
21
+ toolResult: z.unknown().optional(),
22
+ rows: z.array(z.unknown()).min(1).optional(),
23
+ title: z.string().trim().min(1).max(256).optional(),
24
+ label: z.string().trim().min(1).max(128).optional(),
25
+ lookback: z.number().int().min(2).max(20).optional(),
26
+ mergeLive: z.boolean().optional(),
27
+ liveTick: ChartLiveTickSchema.optional(),
28
+ allowRowsOnly: z.boolean().optional(),
29
+ })
30
+ .strict();
31
+ export const AnalyzeTrendStructureInputSchema = z.preprocess(preprocessOhlcvToolInput, barsInputSchema);
32
+ function closesFromBars(bars) {
33
+ const out = [];
34
+ for (const bar of bars) {
35
+ const c = coerceFiniteNumber(bar.close);
36
+ if (c != null) {
37
+ out.push(c);
38
+ }
39
+ }
40
+ return out;
41
+ }
42
+ function analysisMeta(bars, title, toolResult, liveMerge, ohlcvFingerprint) {
43
+ return buildOhlcvAnalysisMeta(bars, { title, toolResult, liveMerge, ohlcvFingerprint });
44
+ }
45
+ function lastClose(bars) {
46
+ if (!bars.length) {
47
+ return null;
48
+ }
49
+ return coerceFiniteNumber(bars[bars.length - 1].close);
50
+ }
51
+ const trendLineMenuEntrySchema = z
52
+ .object({
53
+ index: z.number().int(),
54
+ trendLineNumber: z.number().int(),
55
+ kind: z.enum(['support', 'resistance']),
56
+ score: z.number(),
57
+ touchCount: z.number(),
58
+ isPrimary: z.boolean(),
59
+ barSpan: z
60
+ .object({
61
+ fromTimeSec: z.number(),
62
+ toTimeSec: z.number(),
63
+ barCount: z.number(),
64
+ fromBarIndex: z.number(),
65
+ toBarIndex: z.number(),
66
+ })
67
+ .strict(),
68
+ anchors: z
69
+ .object({
70
+ pointA: z.object({ timeSec: z.number(), price: z.number() }).strict(),
71
+ pointB: z.object({ timeSec: z.number(), price: z.number() }).strict(),
72
+ })
73
+ .strict(),
74
+ })
75
+ .strict();
76
+ const drawableTrendLineSchema = z
77
+ .object({
78
+ kind: z.enum(['support', 'resistance']),
79
+ pointA: z.object({ time: z.number(), price: z.number() }).strict(),
80
+ pointB: z.object({ time: z.number(), price: z.number() }).strict(),
81
+ slope: z.number(),
82
+ touchCount: z.number(),
83
+ score: z.number(),
84
+ })
85
+ .strict();
86
+ export const AnalyzeTrendStructureOutputSchema = z
87
+ .object({
88
+ analysis: z
89
+ .object({
90
+ summary: z.string(),
91
+ interpretation: z.string(),
92
+ bias: z.enum(['bullish', 'bearish', 'neutral']),
93
+ swingHigh: z
94
+ .object({ price: z.number(), timeSec: z.number() })
95
+ .strict()
96
+ .nullable(),
97
+ swingLow: z
98
+ .object({ price: z.number(), timeSec: z.number() })
99
+ .strict()
100
+ .nullable(),
101
+ structure: z.enum(['higher_highs', 'lower_lows', 'range', 'mixed']),
102
+ phases: z.array(z
103
+ .object({
104
+ label: z.string(),
105
+ fromTimeSec: z.number(),
106
+ toTimeSec: z.number(),
107
+ direction: z.enum(['up', 'down', 'sideways']),
108
+ })
109
+ .strict()),
110
+ trendLineMenu: z.array(trendLineMenuEntrySchema),
111
+ drawableTrendLines: z.array(drawableTrendLineSchema),
112
+ trendStructureTradeSetup: z.object({}).catchall(z.unknown()).nullable(),
113
+ })
114
+ .strict(),
115
+ meta: OhlcvAnalysisMetaSchema,
116
+ })
117
+ .strict();
118
+ export async function analyzeTrendStructure(input) {
119
+ const parsed = AnalyzeTrendStructureInputSchema.safeParse(input);
120
+ if (!parsed.success) {
121
+ return { ok: false, reason: parsed.error.message };
122
+ }
123
+ const lineReject = ohlcvToolRejectIfLineOnly(parsed.data);
124
+ if (lineReject) {
125
+ return lineReject;
126
+ }
127
+ const prepared = await prepareOhlcvBarsForAnalysis(parsed.data);
128
+ if (!prepared.ok) {
129
+ return prepared;
130
+ }
131
+ const { bars, liveMerge, fingerprint } = prepared.data;
132
+ if (bars.length < 5) {
133
+ return { ok: false, reason: 'Need at least 5 OHLCV bars for trend structure analysis.' };
134
+ }
135
+ const lookback = parsed.data.lookback ?? Math.max(2, Math.min(5, Math.floor(bars.length / 10)));
136
+ const swings = detectSwingsFromBars(bars, lookback);
137
+ const resistance = swings.filter(s => s.kind === 'resistance').sort((a, b) => b.timeSec - a.timeSec);
138
+ const support = swings.filter(s => s.kind === 'support').sort((a, b) => b.timeSec - a.timeSec);
139
+ const swingHigh = resistance[0] ?? null;
140
+ const swingLow = support[0] ?? null;
141
+ const recentRes = resistance.slice(0, 3).map(s => s.price);
142
+ const recentSup = support.slice(0, 3).map(s => s.price);
143
+ let structure = 'mixed';
144
+ if (recentRes.length >= 2 &&
145
+ recentRes[0] > recentRes[1] &&
146
+ recentSup.length >= 2 &&
147
+ recentSup[0] > recentSup[1]) {
148
+ structure = 'higher_highs';
149
+ }
150
+ else if (recentRes.length >= 2 &&
151
+ recentRes[0] < recentRes[1] &&
152
+ recentSup.length >= 2 &&
153
+ recentSup[0] < recentSup[1]) {
154
+ structure = 'lower_lows';
155
+ }
156
+ else if (recentRes.length >= 2 && recentSup.length >= 2) {
157
+ const resRange = Math.max(...recentRes) - Math.min(...recentRes);
158
+ const supRange = Math.max(...recentSup) - Math.min(...recentSup);
159
+ const mid = (recentRes[0] + recentSup[0]) / 2;
160
+ if (mid > 0 && resRange / mid < 0.02 && supRange / mid < 0.02) {
161
+ structure = 'range';
162
+ }
163
+ }
164
+ const close = lastClose(bars);
165
+ let bias = 'neutral';
166
+ if (close != null && swingHigh && swingLow) {
167
+ const mid = (swingHigh.price + swingLow.price) / 2;
168
+ if (close > mid * 1.002) {
169
+ bias = 'bullish';
170
+ }
171
+ else if (close < mid * 0.998) {
172
+ bias = 'bearish';
173
+ }
174
+ }
175
+ const third = Math.floor(bars.length / 3);
176
+ const phases = [];
177
+ for (let i = 0; i < 3; i++) {
178
+ const slice = bars.slice(i * third, i === 2 ? bars.length : (i + 1) * third);
179
+ if (slice.length < 2) {
180
+ continue;
181
+ }
182
+ const first = coerceFiniteNumber(slice[0].close);
183
+ const last = coerceFiniteNumber(slice[slice.length - 1].close);
184
+ const t0 = coerceFiniteNumber(slice[0].time) ?? 0;
185
+ const t1 = coerceFiniteNumber(slice[slice.length - 1].time) ?? t0;
186
+ let direction = 'sideways';
187
+ if (first != null && last != null) {
188
+ const chg = (last - first) / first;
189
+ if (chg > 0.005) {
190
+ direction = 'up';
191
+ }
192
+ else if (chg < -0.005) {
193
+ direction = 'down';
194
+ }
195
+ }
196
+ phases.push({
197
+ label: i === 0 ? 'early' : i === 1 ? 'mid' : 'recent',
198
+ fromTimeSec: t0,
199
+ toTimeSec: t1,
200
+ direction,
201
+ });
202
+ }
203
+ const drawableTrendLines = calculateTrendLinesFromBars(bars, {});
204
+ const trendLineMenu = buildTrendLineMenu(drawableTrendLines, bars);
205
+ const tradeTrendPick = pickTrendLineForTradeSetup(bias, drawableTrendLines);
206
+ const tradeTrendLine = tradeTrendPick.line;
207
+ const structureLabel = structure === 'higher_highs'
208
+ ? 'higher highs / higher lows'
209
+ : structure === 'lower_lows'
210
+ ? 'lower highs / lower lows'
211
+ : structure === 'range'
212
+ ? 'range-bound'
213
+ : 'mixed structure';
214
+ const summary = `${bias} bias · ${structureLabel} · ${trendLineMenu.length} trend line(s)`;
215
+ const interpretation = (() => {
216
+ if (trendLineMenu.length === 0) {
217
+ return 'No diagonal trend lines met the minimum touch threshold — use key levels or classic patterns for drawable structure.';
218
+ }
219
+ const top = trendLineMenu[0];
220
+ const topLine = drawableTrendLines[0];
221
+ const topLabel = trendLineMenuLabel(topLine, 1);
222
+ let msg = `${topLabel} ranks highest (score ${top.score}, ${top.touchCount} touch(es)). ` +
223
+ 'Use trendLineMenu #N with apply_trend_line_drawings to draw each line on the chart.';
224
+ if (tradeTrendPick.trendLineNumber != null && tradeTrendLine) {
225
+ const tradeLabel = trendLineMenuLabel(tradeTrendLine, tradeTrendPick.trendLineNumber);
226
+ if (tradeTrendPick.trendLineNumber === 1) {
227
+ msg += ` Trade setup uses ${tradeLabel} (bias-aligned).`;
228
+ }
229
+ else {
230
+ msg += ` Trade setup uses ${tradeLabel} (highest-scored ${tradeTrendLine.kind} for ${bias} bias), not menu #1.`;
231
+ }
232
+ }
233
+ return msg;
234
+ })();
235
+ const trendStructureTradeSetup = buildTrendStructureTradeSetup({
236
+ bias,
237
+ structure,
238
+ lastClose: close ?? 0,
239
+ swingHigh: swingHigh ? { price: swingHigh.price } : null,
240
+ swingLow: swingLow ? { price: swingLow.price } : null,
241
+ primaryTrendLine: tradeTrendLine,
242
+ trendLineNumber: tradeTrendPick.trendLineNumber,
243
+ bars,
244
+ });
245
+ return {
246
+ ok: true,
247
+ data: {
248
+ analysis: {
249
+ summary,
250
+ interpretation,
251
+ bias,
252
+ swingHigh: swingHigh ? { price: swingHigh.price, timeSec: swingHigh.timeSec } : null,
253
+ swingLow: swingLow ? { price: swingLow.price, timeSec: swingLow.timeSec } : null,
254
+ structure,
255
+ phases,
256
+ trendLineMenu,
257
+ drawableTrendLines,
258
+ trendStructureTradeSetup,
259
+ },
260
+ meta: analysisMeta(bars, parsed.data.title, parsed.data.toolResult, liveMerge, fingerprint),
261
+ },
262
+ };
263
+ }
264
+ const keyLevelMenuEntrySchema = z
265
+ .object({
266
+ index: z.number().int(),
267
+ levelNumber: z.number().int(),
268
+ kind: z.enum(['support', 'resistance']),
269
+ swingKind: z.enum(['support', 'resistance']),
270
+ isRoleFlipped: z.boolean(),
271
+ price: z.number(),
272
+ strength: z.number(),
273
+ touchCount: z.number(),
274
+ distancePct: z.number(),
275
+ isPrimary: z.boolean(),
276
+ isNearestSupport: z.boolean(),
277
+ isNearestResistance: z.boolean(),
278
+ })
279
+ .strict();
280
+ const keyLevelFibPairSchema = z
281
+ .object({
282
+ pairNumber: z.number().int(),
283
+ pairKind: z.enum(['primary_range', 'concentric']),
284
+ concentricRank: z.number().int().optional(),
285
+ lowLevelNumber: z.number().int(),
286
+ highLevelNumber: z.number().int(),
287
+ low: z.number(),
288
+ high: z.number(),
289
+ closeAboveMid: z.boolean(),
290
+ chartFibTrend: z.enum(['up', 'down']),
291
+ retracement618: z.number(),
292
+ extension1618Up: z.number(),
293
+ extension1618Down: z.number(),
294
+ isPrimaryTradePair: z.boolean().optional(),
295
+ })
296
+ .strict();
297
+ export const AnalyzeKeyLevelsInputSchema = z.preprocess(preprocessOhlcvToolInput, barsInputSchema.extend({
298
+ maxLevels: z.number().int().min(1).max(12).optional(),
299
+ }));
300
+ export const AnalyzeKeyLevelsOutputSchema = z
301
+ .object({
302
+ analysis: z
303
+ .object({
304
+ summary: z.string(),
305
+ interpretation: z.string(),
306
+ lastClose: z.number(),
307
+ nearestSupport: z
308
+ .object({ price: z.number(), distancePct: z.number(), strength: z.number() })
309
+ .strict()
310
+ .nullable(),
311
+ nearestResistance: z
312
+ .object({ price: z.number(), distancePct: z.number(), strength: z.number() })
313
+ .strict()
314
+ .nullable(),
315
+ levels: z.array(z
316
+ .object({
317
+ price: z.number(),
318
+ kind: z.enum(['support', 'resistance']),
319
+ strength: z.number(),
320
+ touchCount: z.number(),
321
+ })
322
+ .strict()),
323
+ levelMenu: z.array(keyLevelMenuEntrySchema),
324
+ keyLevelsTradeSetup: z.object({}).catchall(z.unknown()).nullable(),
325
+ })
326
+ .strict(),
327
+ meta: OhlcvAnalysisMetaSchema,
328
+ })
329
+ .strict();
330
+ export const AnalyzeKeyLevelFibonacciInputSchema = z.preprocess(preprocessOhlcvToolInput, barsInputSchema.extend({
331
+ maxLevels: z.number().int().min(1).max(12).optional(),
332
+ fibPairNumber: z.number().int().min(1).max(32).optional(),
333
+ }));
334
+ export const AnalyzeKeyLevelFibonacciOutputSchema = z
335
+ .object({
336
+ analysis: z
337
+ .object({
338
+ summary: z.string(),
339
+ interpretation: z.string(),
340
+ lastClose: z.number(),
341
+ levelMenu: z.array(keyLevelMenuEntrySchema),
342
+ fibPairs: z.array(keyLevelFibPairSchema),
343
+ primaryFibPair: keyLevelFibPairSchema.nullable(),
344
+ keyLevelFibTradeSetup: z.object({}).catchall(z.unknown()).nullable(),
345
+ })
346
+ .strict(),
347
+ meta: OhlcvAnalysisMetaSchema,
348
+ })
349
+ .strict();
350
+ export async function analyzeKeyLevels(input) {
351
+ const parsed = AnalyzeKeyLevelsInputSchema.safeParse(input);
352
+ if (!parsed.success) {
353
+ return { ok: false, reason: parsed.error.message };
354
+ }
355
+ const lineReject = ohlcvToolRejectIfLineOnly(parsed.data);
356
+ if (lineReject) {
357
+ return lineReject;
358
+ }
359
+ const prepared = await prepareOhlcvBarsForAnalysis(parsed.data);
360
+ if (!prepared.ok) {
361
+ return prepared;
362
+ }
363
+ const { bars, liveMerge, fingerprint } = prepared.data;
364
+ if (!bars.length) {
365
+ return { ok: false, reason: missingOhlcvBarsReason(parsed.data) };
366
+ }
367
+ const dataset = buildKeyLevelAnalysisDataset(bars, { maxLevels: parsed.data.maxLevels ?? 8 });
368
+ if (!dataset.ok) {
369
+ return dataset;
370
+ }
371
+ const { close, levels, levelMenu, nearestSupportRow, nearestResistanceRow } = dataset.data;
372
+ const meta = analysisMeta(bars, parsed.data.title, parsed.data.toolResult, liveMerge, fingerprint);
373
+ const keyLevelsTradeSetup = buildKeyLevelsTradeSetup({
374
+ lastClose: close,
375
+ nearestSupport: nearestSupportRow
376
+ ? { price: nearestSupportRow.price, strength: nearestSupportRow.strength }
377
+ : null,
378
+ nearestResistance: nearestResistanceRow
379
+ ? { price: nearestResistanceRow.price, strength: nearestResistanceRow.strength }
380
+ : null,
381
+ levels,
382
+ levelMenu,
383
+ fibPairs: [],
384
+ bars,
385
+ });
386
+ const summary = `${levels.length} key level(s) · nearest S/R vs last close`;
387
+ const interpretation = (() => {
388
+ if (levelMenu.length === 0) {
389
+ return 'No swing-based key levels met the touch threshold.';
390
+ }
391
+ const top = levelMenu[0];
392
+ const topLabel = keyLevelMenuDisplayLabel(top.kind, top.levelNumber, top.price, top.swingKind);
393
+ let msg = `${topLabel} ranks highest (strength ${top.strength}, ${top.touchCount} touch(es)). ` +
394
+ 'Nearest-level trade uses closest support below / resistance above last close (not Fib). ' +
395
+ 'Use levelMenu #N with apply_key_level_drawings (level line only). ' +
396
+ 'For outer-range Fib 0.618 retrace, run analyze_key_level_fibonacci.';
397
+ if (keyLevelsTradeSetup?.levelNumber != null) {
398
+ const tradeRow = levelMenu.find(m => m.levelNumber === keyLevelsTradeSetup.levelNumber);
399
+ if (tradeRow) {
400
+ const tradeLabel = keyLevelMenuDisplayLabel(tradeRow.kind, tradeRow.levelNumber, tradeRow.price, tradeRow.swingKind);
401
+ msg += ` Trade setup uses ${tradeLabel} (nearest ${tradeRow.kind} for bounce/rejection).`;
402
+ }
403
+ }
404
+ if (keyLevelsTradeSetup?.breakRetestAlternative) {
405
+ const alt = keyLevelsTradeSetup.breakRetestAlternative;
406
+ msg += ` Break+retest alternate at Level #${alt.brokenLevelNumber} (${alt.status}) — see trade-defaults to switch.`;
407
+ }
408
+ return msg;
409
+ })();
410
+ return {
411
+ ok: true,
412
+ data: {
413
+ analysis: {
414
+ summary,
415
+ interpretation,
416
+ lastClose: close,
417
+ nearestSupport: nearestSupportRow
418
+ ? {
419
+ price: nearestSupportRow.price,
420
+ distancePct: ((close - nearestSupportRow.price) / close) * 100,
421
+ strength: nearestSupportRow.strength,
422
+ }
423
+ : null,
424
+ nearestResistance: nearestResistanceRow
425
+ ? {
426
+ price: nearestResistanceRow.price,
427
+ distancePct: ((nearestResistanceRow.price - close) / close) * 100,
428
+ strength: nearestResistanceRow.strength,
429
+ }
430
+ : null,
431
+ levels,
432
+ levelMenu,
433
+ keyLevelsTradeSetup,
434
+ },
435
+ meta,
436
+ },
437
+ };
438
+ }
439
+ export async function analyzeKeyLevelFibonacci(input) {
440
+ const parsed = AnalyzeKeyLevelFibonacciInputSchema.safeParse(input);
441
+ if (!parsed.success) {
442
+ return { ok: false, reason: parsed.error.message };
443
+ }
444
+ const lineReject = ohlcvToolRejectIfLineOnly(parsed.data);
445
+ if (lineReject) {
446
+ return lineReject;
447
+ }
448
+ const prepared = await prepareOhlcvBarsForAnalysis(parsed.data);
449
+ if (!prepared.ok) {
450
+ return prepared;
451
+ }
452
+ const { bars, liveMerge, fingerprint } = prepared.data;
453
+ if (!bars.length) {
454
+ return { ok: false, reason: missingOhlcvBarsReason(parsed.data) };
455
+ }
456
+ const dataset = buildKeyLevelAnalysisDataset(bars, { maxLevels: parsed.data.maxLevels ?? 8 });
457
+ if (!dataset.ok) {
458
+ return dataset;
459
+ }
460
+ const { close, levelMenu, fibPairs } = dataset.data;
461
+ const primaryFibPair = (parsed.data.fibPairNumber != null
462
+ ? fibPairs.find(p => p.pairNumber === parsed.data.fibPairNumber)
463
+ : undefined) ?? pickOuterConcentricFibPair(fibPairs);
464
+ const meta = analysisMeta(bars, parsed.data.title, parsed.data.toolResult, liveMerge, fingerprint);
465
+ const keyLevelFibTradeSetup = buildKeyLevelFibRetraceTradeSetup({
466
+ lastClose: close,
467
+ levelMenu,
468
+ fibPairs,
469
+ bars,
470
+ });
471
+ const summary = primaryFibPair
472
+ ? keyLevelFibTradeSetup?.priceRegime === 'above_range'
473
+ ? `Fib range #${primaryFibPair.pairNumber} · above high · 1.618 ext @ ${primaryFibPair.extension1618Up.toFixed(2)}`
474
+ : keyLevelFibTradeSetup?.priceRegime === 'below_range'
475
+ ? `Fib range #${primaryFibPair.pairNumber} · below low · 1.618 ext @ ${primaryFibPair.extension1618Down.toFixed(2)}`
476
+ : `Fib range #${primaryFibPair.pairNumber} (levels #${primaryFibPair.lowLevelNumber}–#${primaryFibPair.highLevelNumber}) · 0.618 @ ${primaryFibPair.retracement618.toFixed(2)}`
477
+ : 'No concentric Fib range pair in window';
478
+ const interpretation = (() => {
479
+ if (!primaryFibPair) {
480
+ return 'Need at least one swing support and one swing resistance to form an outer Fib range.';
481
+ }
482
+ let msg = `Outer concentric pair spans ${primaryFibPair.low.toFixed(2)}–${primaryFibPair.high.toFixed(2)} ` +
483
+ `(Level #${primaryFibPair.lowLevelNumber} swing low × Level #${primaryFibPair.highLevelNumber} swing high). `;
484
+ if (keyLevelFibTradeSetup?.priceRegime === 'above_range') {
485
+ msg +=
486
+ `Last close is above range high — primary long targets Fib 1.618 extension at ${primaryFibPair.extension1618Up.toFixed(2)}. ` +
487
+ 'Use apply_key_fib_drawings with fibPairNumber. Optional breakRetestAlternative for retest at broken high — see trade-defaults.';
488
+ }
489
+ else if (keyLevelFibTradeSetup?.priceRegime === 'below_range') {
490
+ msg +=
491
+ `Last close is below range low — primary short targets Fib 1.618 extension at ${primaryFibPair.extension1618Down.toFixed(2)} (reversed range). ` +
492
+ 'Use apply_key_fib_drawings with fibPairNumber. Optional breakRetestAlternative for retest at broken low — see trade-defaults.';
493
+ }
494
+ else {
495
+ const inverted = keyLevelFibTradeSetup?.fibRangeInverted === true;
496
+ msg += inverted
497
+ ? `Below standard 0.618 — inverted range (upper=0 / lower=1); inverted 0.618 at ${invertedFib618(primaryFibPair.low, primaryFibPair.high).toFixed(2)}. Default ${keyLevelFibTradeSetup?.defaultSide ?? 'long'} toward ${keyLevelFibTradeSetup?.targetLabel ?? '0.618'}. `
498
+ : `Above standard 0.618 — default ${keyLevelFibTradeSetup?.defaultSide ?? 'short'} toward Fib 0.618 at ${primaryFibPair.retracement618.toFixed(2)} (long alternate toward upper). `;
499
+ msg +=
500
+ 'Use apply_key_fib_drawings with fibPairNumber to draw the Fib range (not level-only apply). Toggle long/short in the trade build form.';
501
+ }
502
+ if (keyLevelFibTradeSetup?.status === 'clear') {
503
+ msg += ` Trade setup: ${keyLevelFibTradeSetup.side} — ${keyLevelFibTradeSetup.entryLabel} toward ${keyLevelFibTradeSetup.targetLabel ?? 'target'}.`;
504
+ }
505
+ else if (keyLevelFibTradeSetup?.unclearReason) {
506
+ msg += ` ${keyLevelFibTradeSetup.unclearReason}`;
507
+ }
508
+ if (keyLevelFibTradeSetup?.breakRetestAlternative) {
509
+ const alt = keyLevelFibTradeSetup.breakRetestAlternative;
510
+ msg += ` Break+retest alternate at Level #${alt.brokenLevelNumber} (${alt.status}) — see trade-defaults to switch.`;
511
+ }
512
+ return msg;
513
+ })();
514
+ return {
515
+ ok: true,
516
+ data: {
517
+ analysis: {
518
+ summary,
519
+ interpretation,
520
+ lastClose: close,
521
+ levelMenu,
522
+ fibPairs,
523
+ primaryFibPair: primaryFibPair ?? null,
524
+ keyLevelFibTradeSetup,
525
+ },
526
+ meta,
527
+ },
528
+ };
529
+ }
530
+ export const AnalyzeMomentumInputSchema = z.preprocess(preprocessOhlcvToolInput, barsInputSchema.extend({
531
+ rsiPeriod: z.number().int().min(2).max(100).optional(),
532
+ }));
533
+ export const AnalyzeMomentumOutputSchema = z
534
+ .object({
535
+ analysis: z
536
+ .object({
537
+ rsi: z
538
+ .object({
539
+ period: z.number(),
540
+ value: z.number().nullable(),
541
+ zone: z.enum(['overbought', 'oversold', 'neutral']),
542
+ })
543
+ .strict(),
544
+ macd: z
545
+ .object({
546
+ macd: z.number().nullable(),
547
+ signal: z.number().nullable(),
548
+ histogram: z.number().nullable(),
549
+ crossover: z.enum(['bullish', 'bearish', 'none']),
550
+ })
551
+ .strict(),
552
+ momentumTradeSetup: z.object({}).catchall(z.unknown()).nullable(),
553
+ })
554
+ .strict(),
555
+ meta: OhlcvAnalysisMetaSchema,
556
+ })
557
+ .strict();
558
+ function lastIndicatorValue(result, warmupCount) {
559
+ const idx = result.length - 1;
560
+ if (idx < warmupCount || idx < 0) {
561
+ return null;
562
+ }
563
+ const v = result[idx];
564
+ return v != null && Number.isFinite(v) ? v : null;
565
+ }
566
+ export async function analyzeMomentum(input) {
567
+ const parsed = AnalyzeMomentumInputSchema.safeParse(input);
568
+ if (!parsed.success) {
569
+ return { ok: false, reason: parsed.error.message };
570
+ }
571
+ const lineReject = ohlcvToolRejectIfLineOnly(parsed.data);
572
+ if (lineReject) {
573
+ return lineReject;
574
+ }
575
+ const prepared = await prepareOhlcvBarsForAnalysis(parsed.data);
576
+ if (!prepared.ok) {
577
+ return prepared;
578
+ }
579
+ const { bars, liveMerge, fingerprint } = prepared.data;
580
+ const closes = closesFromBars(bars);
581
+ if (closes.length < DEFAULT_CHART_RSI_PERIOD + 2) {
582
+ return { ok: false, reason: 'Need more bars for momentum analysis.' };
583
+ }
584
+ const rsiPeriod = parsed.data.rsiPeriod ?? DEFAULT_CHART_RSI_PERIOD;
585
+ const rsiResult = calculateTechnicalIndicator({
586
+ indicator: 'rsi',
587
+ params: { period: rsiPeriod },
588
+ input: { values: closes },
589
+ options: { maxPoints: closes.length },
590
+ });
591
+ if (!rsiResult.ok) {
592
+ return rsiResult;
593
+ }
594
+ const rsiValue = Array.isArray(rsiResult.data.result) &&
595
+ rsiResult.data.result.length > 0 &&
596
+ typeof rsiResult.data.result[0] === 'number'
597
+ ? lastIndicatorValue(rsiResult.data.result, rsiResult.data.warmupCount)
598
+ : null;
599
+ let rsiZone = 'neutral';
600
+ if (rsiValue != null) {
601
+ if (rsiValue >= 70) {
602
+ rsiZone = 'overbought';
603
+ }
604
+ else if (rsiValue <= 30) {
605
+ rsiZone = 'oversold';
606
+ }
607
+ }
608
+ const macdResult = calculateTechnicalIndicator({
609
+ indicator: 'macd',
610
+ params: { fastPeriod: 12, slowPeriod: 26, signalPeriod: 9 },
611
+ input: { values: closes },
612
+ options: { maxPoints: closes.length },
613
+ });
614
+ if (!macdResult.ok) {
615
+ return macdResult;
616
+ }
617
+ const macdRows = macdResult.data.result;
618
+ const lastRow = Array.isArray(macdRows) && macdRows.length > 0 && typeof macdRows[0] === 'object'
619
+ ? macdRows[macdRows.length - 1]
620
+ : undefined;
621
+ const macd = lastRow ? (coerceFiniteNumber(lastRow.MACD ?? lastRow.macd) ?? null) : null;
622
+ const signal = lastRow ? (coerceFiniteNumber(lastRow.signal ?? lastRow.Signal) ?? null) : null;
623
+ const histogram = lastRow
624
+ ? (coerceFiniteNumber(lastRow.histogram ?? lastRow.Histogram) ?? null)
625
+ : null;
626
+ let crossover = 'none';
627
+ if (Array.isArray(macdRows) &&
628
+ macdRows.length >= 2 &&
629
+ typeof macdRows[0] === 'object') {
630
+ const prev = macdRows[macdRows.length - 2];
631
+ const prevMacd = coerceFiniteNumber(prev.MACD ?? prev.macd);
632
+ const prevSignal = coerceFiniteNumber(prev.signal ?? prev.Signal);
633
+ if (macd != null && signal != null && prevMacd != null && prevSignal != null) {
634
+ if (prevMacd <= prevSignal && macd > signal) {
635
+ crossover = 'bullish';
636
+ }
637
+ else if (prevMacd >= prevSignal && macd < signal) {
638
+ crossover = 'bearish';
639
+ }
640
+ }
641
+ }
642
+ const close = lastClose(bars) ?? 0;
643
+ const momentumTradeSetup = buildMomentumTradeSetup({
644
+ lastClose: close,
645
+ rsi: { period: rsiPeriod, value: rsiValue, zone: rsiZone },
646
+ macd: { crossover },
647
+ });
648
+ return {
649
+ ok: true,
650
+ data: {
651
+ analysis: {
652
+ rsi: { period: rsiPeriod, value: rsiValue, zone: rsiZone },
653
+ macd: { macd, signal, histogram, crossover },
654
+ momentumTradeSetup,
655
+ },
656
+ meta: analysisMeta(bars, parsed.data.title, parsed.data.toolResult, liveMerge, fingerprint),
657
+ },
658
+ };
659
+ }
660
+ export const AnalyzeRangeVolatilityInputSchema = z.preprocess(preprocessOhlcvToolInput, barsInputSchema.extend({
661
+ atrPeriod: z.number().int().min(2).max(50).optional(),
662
+ }));
663
+ export const AnalyzeRangeVolatilityOutputSchema = z
664
+ .object({
665
+ analysis: z
666
+ .object({
667
+ rangeHigh: z.number(),
668
+ rangeLow: z.number(),
669
+ rangePct: z.number(),
670
+ atr: z.number().nullable(),
671
+ atrPct: z.number().nullable(),
672
+ recentRangePct: z.number(),
673
+ priorRangePct: z.number(),
674
+ compression: z.enum(['compressing', 'expanding', 'stable']),
675
+ fibRange: z
676
+ .object({ high: z.number(), low: z.number(), trend: z.enum(['up', 'down']) })
677
+ .strict()
678
+ .nullable(),
679
+ })
680
+ .strict(),
681
+ meta: OhlcvAnalysisMetaSchema,
682
+ })
683
+ .strict();
684
+ function trueRange(bar, prevClose) {
685
+ const high = coerceFiniteNumber(bar.high);
686
+ const low = coerceFiniteNumber(bar.low);
687
+ if (high == null || low == null) {
688
+ return null;
689
+ }
690
+ if (prevClose == null) {
691
+ return high - low;
692
+ }
693
+ return Math.max(high - low, Math.abs(high - prevClose), Math.abs(low - prevClose));
694
+ }
695
+ export async function analyzeRangeVolatility(input) {
696
+ const parsed = AnalyzeRangeVolatilityInputSchema.safeParse(input);
697
+ if (!parsed.success) {
698
+ return { ok: false, reason: parsed.error.message };
699
+ }
700
+ const lineReject = ohlcvToolRejectIfLineOnly(parsed.data);
701
+ if (lineReject) {
702
+ return lineReject;
703
+ }
704
+ const prepared = await prepareOhlcvBarsForAnalysis(parsed.data);
705
+ if (!prepared.ok) {
706
+ return prepared;
707
+ }
708
+ const { bars, liveMerge, fingerprint } = prepared.data;
709
+ if (bars.length < 5) {
710
+ return { ok: false, reason: 'Need at least 5 OHLCV bars for range/volatility analysis.' };
711
+ }
712
+ let rangeHigh = Number.NEGATIVE_INFINITY;
713
+ let rangeLow = Number.POSITIVE_INFINITY;
714
+ for (const bar of bars) {
715
+ const h = coerceFiniteNumber(bar.high);
716
+ const l = coerceFiniteNumber(bar.low);
717
+ if (h != null) {
718
+ rangeHigh = Math.max(rangeHigh, h);
719
+ }
720
+ if (l != null) {
721
+ rangeLow = Math.min(rangeLow, l);
722
+ }
723
+ }
724
+ const close = lastClose(bars) ?? (rangeHigh + rangeLow) / 2;
725
+ const rangePct = close > 0 ? ((rangeHigh - rangeLow) / close) * 100 : 0;
726
+ const atrPeriod = parsed.data.atrPeriod ?? 14;
727
+ const trs = [];
728
+ let prevClose = null;
729
+ for (const bar of bars) {
730
+ const tr = trueRange(bar, prevClose);
731
+ if (tr != null) {
732
+ trs.push(tr);
733
+ }
734
+ prevClose = coerceFiniteNumber(bar.close) ?? prevClose;
735
+ }
736
+ const atrSlice = trs.slice(-atrPeriod);
737
+ const atr = atrSlice.length ? atrSlice.reduce((a, b) => a + b, 0) / atrSlice.length : null;
738
+ const atrPct = atr != null && close > 0 ? (atr / close) * 100 : null;
739
+ const half = Math.floor(bars.length / 2);
740
+ const priorSlice = bars.slice(0, half);
741
+ const recentSlice = bars.slice(half);
742
+ const sliceRangePct = (slice) => {
743
+ let hi = Number.NEGATIVE_INFINITY;
744
+ let lo = Number.POSITIVE_INFINITY;
745
+ for (const bar of slice) {
746
+ const h = coerceFiniteNumber(bar.high);
747
+ const l = coerceFiniteNumber(bar.low);
748
+ if (h != null) {
749
+ hi = Math.max(hi, h);
750
+ }
751
+ if (l != null) {
752
+ lo = Math.min(lo, l);
753
+ }
754
+ }
755
+ return close > 0 ? ((hi - lo) / close) * 100 : 0;
756
+ };
757
+ const recentRangePct = sliceRangePct(recentSlice);
758
+ const priorRangePct = sliceRangePct(priorSlice);
759
+ let compression = 'stable';
760
+ if (recentRangePct < priorRangePct * 0.85) {
761
+ compression = 'compressing';
762
+ }
763
+ else if (recentRangePct > priorRangePct * 1.15) {
764
+ compression = 'expanding';
765
+ }
766
+ const fibRange = calculateFibonacciRangeFromBars(bars);
767
+ return {
768
+ ok: true,
769
+ data: {
770
+ analysis: {
771
+ rangeHigh,
772
+ rangeLow,
773
+ rangePct,
774
+ atr,
775
+ atrPct,
776
+ recentRangePct,
777
+ priorRangePct,
778
+ compression,
779
+ fibRange,
780
+ },
781
+ meta: analysisMeta(bars, parsed.data.title, parsed.data.toolResult, liveMerge, fingerprint),
782
+ },
783
+ };
784
+ }
785
+ //# sourceMappingURL=analyze-tools.js.map