@continuumdao/continuum-node-sdk 1.3.36 → 1.3.38

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 (208) hide show
  1. package/dist/agent-host-catalog.json +9 -0
  2. package/dist/core/chart/analysis/analysis-agent-view.d.ts.map +1 -1
  3. package/dist/core/chart/analysis/analysis-agent-view.js +33 -4
  4. package/dist/core/chart/analysis/analysis-agent-view.js.map +1 -1
  5. package/dist/core/chart/analysis/analysis-catalog.d.ts.map +1 -1
  6. package/dist/core/chart/analysis/analysis-catalog.js +47 -1
  7. package/dist/core/chart/analysis/analysis-catalog.js.map +1 -1
  8. package/dist/core/chart/analysis/analyze-tools.d.ts +167 -11
  9. package/dist/core/chart/analysis/analyze-tools.d.ts.map +1 -1
  10. package/dist/core/chart/analysis/analyze-tools.js +47 -55
  11. package/dist/core/chart/analysis/analyze-tools.js.map +1 -1
  12. package/dist/core/chart/analysis/chart-patterns-tools.d.ts +4 -4
  13. package/dist/core/chart/analysis/divergence/detect.d.ts +21 -0
  14. package/dist/core/chart/analysis/divergence/detect.d.ts.map +1 -0
  15. package/dist/core/chart/analysis/divergence/detect.js +223 -0
  16. package/dist/core/chart/analysis/divergence/detect.js.map +1 -0
  17. package/dist/core/chart/analysis/divergence/index.d.ts +4 -0
  18. package/dist/core/chart/analysis/divergence/index.d.ts.map +1 -0
  19. package/dist/core/chart/analysis/divergence/index.js +4 -0
  20. package/dist/core/chart/analysis/divergence/index.js.map +1 -0
  21. package/dist/core/chart/analysis/divergence/peaks.d.ts +11 -0
  22. package/dist/core/chart/analysis/divergence/peaks.d.ts.map +1 -0
  23. package/dist/core/chart/analysis/divergence/peaks.js +108 -0
  24. package/dist/core/chart/analysis/divergence/peaks.js.map +1 -0
  25. package/dist/core/chart/analysis/divergence/types.d.ts +30 -0
  26. package/dist/core/chart/analysis/divergence/types.d.ts.map +1 -0
  27. package/dist/core/chart/analysis/divergence/types.js +2 -0
  28. package/dist/core/chart/analysis/divergence/types.js.map +1 -0
  29. package/dist/core/chart/analysis/divergence-analyze-tools.d.ts +239 -0
  30. package/dist/core/chart/analysis/divergence-analyze-tools.d.ts.map +1 -0
  31. package/dist/core/chart/analysis/divergence-analyze-tools.js +283 -0
  32. package/dist/core/chart/analysis/divergence-analyze-tools.js.map +1 -0
  33. package/dist/core/chart/analysis/divergence-drawings-tools.d.ts +457 -0
  34. package/dist/core/chart/analysis/divergence-drawings-tools.d.ts.map +1 -0
  35. package/dist/core/chart/analysis/divergence-drawings-tools.js +380 -0
  36. package/dist/core/chart/analysis/divergence-drawings-tools.js.map +1 -0
  37. package/dist/core/chart/analysis/divergence-highlight.d.ts +19 -0
  38. package/dist/core/chart/analysis/divergence-highlight.d.ts.map +1 -0
  39. package/dist/core/chart/analysis/divergence-highlight.js +39 -0
  40. package/dist/core/chart/analysis/divergence-highlight.js.map +1 -0
  41. package/dist/core/chart/analysis/donchian-analyze-tools.d.ts +113 -0
  42. package/dist/core/chart/analysis/donchian-analyze-tools.d.ts.map +1 -0
  43. package/dist/core/chart/analysis/donchian-analyze-tools.js +218 -0
  44. package/dist/core/chart/analysis/donchian-analyze-tools.js.map +1 -0
  45. package/dist/core/chart/analysis/donchian-highlight.d.ts +31 -0
  46. package/dist/core/chart/analysis/donchian-highlight.d.ts.map +1 -0
  47. package/dist/core/chart/analysis/donchian-highlight.js +41 -0
  48. package/dist/core/chart/analysis/donchian-highlight.js.map +1 -0
  49. package/dist/core/chart/analysis/elliott-waves-analyze-tools.d.ts +35 -2
  50. package/dist/core/chart/analysis/elliott-waves-analyze-tools.d.ts.map +1 -1
  51. package/dist/core/chart/analysis/ichimoku-analyze-tools.d.ts +124 -0
  52. package/dist/core/chart/analysis/ichimoku-analyze-tools.d.ts.map +1 -0
  53. package/dist/core/chart/analysis/ichimoku-analyze-tools.js +243 -0
  54. package/dist/core/chart/analysis/ichimoku-analyze-tools.js.map +1 -0
  55. package/dist/core/chart/analysis/ichimoku-highlight.d.ts +36 -0
  56. package/dist/core/chart/analysis/ichimoku-highlight.d.ts.map +1 -0
  57. package/dist/core/chart/analysis/ichimoku-highlight.js +40 -0
  58. package/dist/core/chart/analysis/ichimoku-highlight.js.map +1 -0
  59. package/dist/core/chart/analysis/key-fib-drawings-tools.d.ts +2 -6
  60. package/dist/core/chart/analysis/key-fib-drawings-tools.d.ts.map +1 -1
  61. package/dist/core/chart/analysis/key-fib-drawings-tools.js +5 -17
  62. package/dist/core/chart/analysis/key-fib-drawings-tools.js.map +1 -1
  63. package/dist/core/chart/analysis/key-level-drawings-shared.d.ts +3 -12
  64. package/dist/core/chart/analysis/key-level-drawings-shared.d.ts.map +1 -1
  65. package/dist/core/chart/analysis/key-level-drawings-shared.js +6 -36
  66. package/dist/core/chart/analysis/key-level-drawings-shared.js.map +1 -1
  67. package/dist/core/chart/analysis/key-level-menu-summary.d.ts +15 -22
  68. package/dist/core/chart/analysis/key-level-menu-summary.d.ts.map +1 -1
  69. package/dist/core/chart/analysis/key-level-menu-summary.js +63 -124
  70. package/dist/core/chart/analysis/key-level-menu-summary.js.map +1 -1
  71. package/dist/core/chart/analysis/key-levels-dataset.d.ts +1 -0
  72. package/dist/core/chart/analysis/key-levels-dataset.d.ts.map +1 -1
  73. package/dist/core/chart/analysis/key-levels-dataset.js +4 -7
  74. package/dist/core/chart/analysis/key-levels-dataset.js.map +1 -1
  75. package/dist/core/chart/analysis/supertrend-analyze-tools.d.ts +112 -0
  76. package/dist/core/chart/analysis/supertrend-analyze-tools.d.ts.map +1 -0
  77. package/dist/core/chart/analysis/supertrend-analyze-tools.js +214 -0
  78. package/dist/core/chart/analysis/supertrend-analyze-tools.js.map +1 -0
  79. package/dist/core/chart/analysis/supertrend-highlight.d.ts +25 -0
  80. package/dist/core/chart/analysis/supertrend-highlight.d.ts.map +1 -0
  81. package/dist/core/chart/analysis/supertrend-highlight.js +37 -0
  82. package/dist/core/chart/analysis/supertrend-highlight.js.map +1 -0
  83. package/dist/core/chart/analysis/trade-setups/build-trade-uniswap.d.ts.map +1 -1
  84. package/dist/core/chart/analysis/trade-setups/build-trade-uniswap.js +21 -0
  85. package/dist/core/chart/analysis/trade-setups/build-trade-uniswap.js.map +1 -1
  86. package/dist/core/chart/analysis/trade-setups/build-trade.d.ts.map +1 -1
  87. package/dist/core/chart/analysis/trade-setups/build-trade.js +23 -5
  88. package/dist/core/chart/analysis/trade-setups/build-trade.js.map +1 -1
  89. package/dist/core/chart/analysis/trade-setups/divergence-trade-setup.d.ts +78 -0
  90. package/dist/core/chart/analysis/trade-setups/divergence-trade-setup.d.ts.map +1 -0
  91. package/dist/core/chart/analysis/trade-setups/divergence-trade-setup.js +184 -0
  92. package/dist/core/chart/analysis/trade-setups/divergence-trade-setup.js.map +1 -0
  93. package/dist/core/chart/analysis/trade-setups/donchian-trade-setup.d.ts +133 -0
  94. package/dist/core/chart/analysis/trade-setups/donchian-trade-setup.d.ts.map +1 -0
  95. package/dist/core/chart/analysis/trade-setups/donchian-trade-setup.js +419 -0
  96. package/dist/core/chart/analysis/trade-setups/donchian-trade-setup.js.map +1 -0
  97. package/dist/core/chart/analysis/trade-setups/ichimoku-trade-setup.d.ts +154 -0
  98. package/dist/core/chart/analysis/trade-setups/ichimoku-trade-setup.d.ts.map +1 -0
  99. package/dist/core/chart/analysis/trade-setups/ichimoku-trade-setup.js +396 -0
  100. package/dist/core/chart/analysis/trade-setups/ichimoku-trade-setup.js.map +1 -0
  101. package/dist/core/chart/analysis/trade-setups/index.d.ts +5 -0
  102. package/dist/core/chart/analysis/trade-setups/index.d.ts.map +1 -1
  103. package/dist/core/chart/analysis/trade-setups/index.js +5 -0
  104. package/dist/core/chart/analysis/trade-setups/index.js.map +1 -1
  105. package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.d.ts +7 -41
  106. package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.d.ts.map +1 -1
  107. package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.js +33 -235
  108. package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.js.map +1 -1
  109. package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.d.ts +2 -8
  110. package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.d.ts.map +1 -1
  111. package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.js +0 -27
  112. package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.js.map +1 -1
  113. package/dist/core/chart/analysis/trade-setups/shared.d.ts +1 -1
  114. package/dist/core/chart/analysis/trade-setups/shared.d.ts.map +1 -1
  115. package/dist/core/chart/analysis/trade-setups/shared.js +10 -0
  116. package/dist/core/chart/analysis/trade-setups/shared.js.map +1 -1
  117. package/dist/core/chart/analysis/trade-setups/supertrend-trade-setup.d.ts +119 -0
  118. package/dist/core/chart/analysis/trade-setups/supertrend-trade-setup.d.ts.map +1 -0
  119. package/dist/core/chart/analysis/trade-setups/supertrend-trade-setup.js +301 -0
  120. package/dist/core/chart/analysis/trade-setups/supertrend-trade-setup.js.map +1 -0
  121. package/dist/core/chart/analysis/trade-setups/trade-desk-universal-input.d.ts +34 -0
  122. package/dist/core/chart/analysis/trade-setups/trade-desk-universal-input.d.ts.map +1 -1
  123. package/dist/core/chart/analysis/trade-setups/trade-desk-universal-input.js +43 -0
  124. package/dist/core/chart/analysis/trade-setups/trade-desk-universal-input.js.map +1 -1
  125. package/dist/core/chart/analysis/trade-setups/trade-idea-list.d.ts +15 -0
  126. package/dist/core/chart/analysis/trade-setups/trade-idea-list.d.ts.map +1 -1
  127. package/dist/core/chart/analysis/trade-setups/trade-idea-list.js +89 -0
  128. package/dist/core/chart/analysis/trade-setups/trade-idea-list.js.map +1 -1
  129. package/dist/core/chart/analysis/trade-setups/trade-idea.d.ts +32 -0
  130. package/dist/core/chart/analysis/trade-setups/trade-idea.d.ts.map +1 -1
  131. package/dist/core/chart/analysis/trade-setups/trade-idea.js +32 -0
  132. package/dist/core/chart/analysis/trade-setups/trade-idea.js.map +1 -1
  133. package/dist/core/chart/analysis/trade-setups/trade-purpose-format.d.ts +2 -2
  134. package/dist/core/chart/analysis/trade-setups/trade-purpose-format.d.ts.map +1 -1
  135. package/dist/core/chart/analysis/trade-setups/trade-purpose-format.js +2 -6
  136. package/dist/core/chart/analysis/trade-setups/trade-purpose-format.js.map +1 -1
  137. package/dist/core/chart/analysis/trade-setups/trade-setup-selection.d.ts +42 -8
  138. package/dist/core/chart/analysis/trade-setups/trade-setup-selection.d.ts.map +1 -1
  139. package/dist/core/chart/analysis/trade-setups/trade-setup-selection.js +72 -17
  140. package/dist/core/chart/analysis/trade-setups/trade-setup-selection.js.map +1 -1
  141. package/dist/core/chart/analysis/trade-setups/z-score-trade-setup.d.ts +89 -0
  142. package/dist/core/chart/analysis/trade-setups/z-score-trade-setup.d.ts.map +1 -0
  143. package/dist/core/chart/analysis/trade-setups/z-score-trade-setup.js +195 -0
  144. package/dist/core/chart/analysis/trade-setups/z-score-trade-setup.js.map +1 -0
  145. package/dist/core/chart/analysis/z-score-analyze-tools.d.ts +111 -0
  146. package/dist/core/chart/analysis/z-score-analyze-tools.d.ts.map +1 -0
  147. package/dist/core/chart/analysis/z-score-analyze-tools.js +240 -0
  148. package/dist/core/chart/analysis/z-score-analyze-tools.js.map +1 -0
  149. package/dist/core/chart/analysis/z-score-highlight.d.ts +29 -0
  150. package/dist/core/chart/analysis/z-score-highlight.d.ts.map +1 -0
  151. package/dist/core/chart/analysis/z-score-highlight.js +39 -0
  152. package/dist/core/chart/analysis/z-score-highlight.js.map +1 -0
  153. package/dist/core/chart/customization-catalog.d.ts.map +1 -1
  154. package/dist/core/chart/customization-catalog.js +36 -0
  155. package/dist/core/chart/customization-catalog.js.map +1 -1
  156. package/dist/core/chart/display-downsample.d.ts.map +1 -1
  157. package/dist/core/chart/display-downsample.js +4 -14
  158. package/dist/core/chart/display-downsample.js.map +1 -1
  159. package/dist/core/chart/overlay-schemas.d.ts +496 -0
  160. package/dist/core/chart/overlay-schemas.d.ts.map +1 -1
  161. package/dist/core/chart/overlay-schemas.js +137 -0
  162. package/dist/core/chart/overlay-schemas.js.map +1 -1
  163. package/dist/core/chart/overlays.d.ts +2 -0
  164. package/dist/core/chart/overlays.d.ts.map +1 -1
  165. package/dist/core/chart/overlays.js +620 -2
  166. package/dist/core/chart/overlays.js.map +1 -1
  167. package/dist/core/chart/prepare-from-rows.d.ts +143 -0
  168. package/dist/core/chart/prepare-from-rows.d.ts.map +1 -1
  169. package/dist/core/chart/schemas.d.ts +491 -0
  170. package/dist/core/chart/schemas.d.ts.map +1 -1
  171. package/dist/core/coinmarketcap/schemas.d.ts +7 -7
  172. package/dist/index.d.ts +0 -1
  173. package/dist/index.d.ts.map +1 -1
  174. package/dist/index.js +2 -1
  175. package/dist/index.js.map +1 -1
  176. package/dist/mcp/agent-host-catalog.d.ts +1 -1
  177. package/dist/mcp/agent-host-catalog.d.ts.map +1 -1
  178. package/dist/mcp/agent-host-catalog.js +1 -0
  179. package/dist/mcp/agent-host-catalog.js.map +1 -1
  180. package/dist/mcp/chart.d.ts.map +1 -1
  181. package/dist/mcp/chart.js +61 -2
  182. package/dist/mcp/chart.js.map +1 -1
  183. package/dist/mcp/deferred/tool-group-map.d.ts.map +1 -1
  184. package/dist/mcp/deferred/tool-group-map.js +8 -0
  185. package/dist/mcp/deferred/tool-group-map.js.map +1 -1
  186. package/dist/mcp/defi/morpho-input.d.ts +3 -0
  187. package/dist/mcp/defi/morpho-input.d.ts.map +1 -1
  188. package/dist/mcp/defi/morpho-input.js +116 -1
  189. package/dist/mcp/defi/morpho-input.js.map +1 -1
  190. package/dist/mcp/ohlcv-session-wrapper.d.ts.map +1 -1
  191. package/dist/mcp/ohlcv-session-wrapper.js +8 -0
  192. package/dist/mcp/ohlcv-session-wrapper.js.map +1 -1
  193. package/dist/mcp/resources/chart-analysis.md +9 -0
  194. package/dist/mcp/resources/chart.md +3 -0
  195. package/dist/mcp/trade-tools.d.ts.map +1 -1
  196. package/dist/mcp/trade-tools.js +2 -0
  197. package/dist/mcp/trade-tools.js.map +1 -1
  198. package/package.json +65 -60
  199. package/dist/core/agent/mcp-servers-catalog.d.ts +0 -15
  200. package/dist/core/agent/mcp-servers-catalog.d.ts.map +0 -1
  201. package/dist/core/agent/mcp-servers-catalog.js +0 -125
  202. package/dist/core/agent/mcp-servers-catalog.js.map +0 -1
  203. package/dist/core/agent/webhooks-catalog.d.ts +0 -10
  204. package/dist/core/agent/webhooks-catalog.d.ts.map +0 -1
  205. package/dist/core/agent/webhooks-catalog.js +0 -19
  206. package/dist/core/agent/webhooks-catalog.js.map +0 -1
  207. package/dist/mcp/resources/trade-defaults-skill.md +0 -69
  208. package/dist/mcp/ta/resources/indicators.md +0 -86
@@ -0,0 +1,380 @@
1
+ import { z } from 'zod';
2
+ import { ChartDivergenceOverlaySchema } from '../overlay-schemas.js';
3
+ import { resolveOscillatorPaneIds } from '../overlays.js';
4
+ import { extractLiveBindingFromFetchPayload } from '../live/binding-extract.js';
5
+ import { validateOhlcvBarsFromToolResult } from '../ohlcv-window.js';
6
+ import { attachChartLoadMeta } from '../chart-ohlcv-load-status.js';
7
+ import { runOhlcvIntegrityPipeline, rejectApplyPatternDrawingsWithoutChartContext, } from '../ohlcv-integrity.js';
8
+ import { prepareChart } from '../prepare.js';
9
+ import { AGENT_CHART_DISPLAY_MAX_POINTS } from '../schemas.js';
10
+ import { summarizeOhlcvBars } from '../chart-ohlcv-summary.js';
11
+ import { DEFAULT_CHART_RSI_PERIOD } from '../chart-defaults.js';
12
+ import { AGENT_OHLCV_DATA_POLICY } from './analysis-meta.js';
13
+ import { prepareOhlcvBarsForAnalysis } from './ohlcv-live-merge.js';
14
+ import { missingOhlcvBarsReason, preprocessOhlcvToolInput } from './ohlcv-input.js';
15
+ import { kindLabel } from './divergence/detect.js';
16
+ const DIVERGENCE_RSI_ID = 'divergence_rsi';
17
+ const DIVERGENCE_STOCH_ID = 'divergence_stochrsi';
18
+ const hitSchema = z
19
+ .object({
20
+ kind: z.enum([
21
+ 'regular_bullish',
22
+ 'regular_bearish',
23
+ 'hidden_bullish',
24
+ 'hidden_bearish',
25
+ ]),
26
+ oscillator: z.enum(['rsi', 'stochasticrsi']),
27
+ p1: z.object({ index: z.number(), timeSec: z.number(), value: z.number() }).strict(),
28
+ p2: z.object({ index: z.number(), timeSec: z.number(), value: z.number() }).strict(),
29
+ o1: z.object({ index: z.number(), timeSec: z.number(), value: z.number() }).strict(),
30
+ o2: z.object({ index: z.number(), timeSec: z.number(), value: z.number() }).strict(),
31
+ barsSinceConfirm: z.number().int().optional(),
32
+ side: z.enum(['long', 'short']).optional(),
33
+ confidence: z.number().optional(),
34
+ })
35
+ .strict();
36
+ function parseJsonObject(value) {
37
+ if (typeof value !== 'string') {
38
+ return value;
39
+ }
40
+ const trimmed = value.trim();
41
+ if (!trimmed.startsWith('{') && !trimmed.startsWith('[')) {
42
+ return value;
43
+ }
44
+ try {
45
+ return JSON.parse(trimmed);
46
+ }
47
+ catch {
48
+ return value;
49
+ }
50
+ }
51
+ function normalizeAnalysisInput(analysis) {
52
+ const parsed = parseJsonObject(analysis);
53
+ if (typeof parsed !== 'object' || parsed == null) {
54
+ return parsed;
55
+ }
56
+ const record = parsed;
57
+ if (record.primary == null &&
58
+ record.divergences == null &&
59
+ typeof record.analysis === 'object' &&
60
+ record.analysis != null) {
61
+ return record.analysis;
62
+ }
63
+ return parsed;
64
+ }
65
+ function preprocessDivergenceDrawingsInput(raw) {
66
+ const base = preprocessOhlcvToolInput(raw);
67
+ if (typeof base !== 'object' || base == null) {
68
+ return base;
69
+ }
70
+ const input = { ...base };
71
+ if (input.analysis != null) {
72
+ input.analysis = normalizeAnalysisInput(input.analysis);
73
+ }
74
+ return input;
75
+ }
76
+ export function hitsToDivergenceOverlay(hits, paneByOsc) {
77
+ const segments = hits.slice(0, 4).map(hit => ({
78
+ kind: hit.kind,
79
+ oscillator: hit.oscillator,
80
+ ...(paneByOsc?.[hit.oscillator]
81
+ ? { oscillatorPaneId: paneByOsc[hit.oscillator] }
82
+ : {}),
83
+ price: {
84
+ pointA: { time: hit.p1.timeSec, price: hit.p1.value },
85
+ pointB: { time: hit.p2.timeSec, price: hit.p2.value },
86
+ },
87
+ oscillatorLine: {
88
+ pointA: { time: hit.o1.timeSec, value: hit.o1.value },
89
+ pointB: { time: hit.o2.timeSec, value: hit.o2.value },
90
+ },
91
+ label: kindLabel(hit.kind),
92
+ }));
93
+ if (!segments.length) {
94
+ return null;
95
+ }
96
+ return {
97
+ type: 'divergence',
98
+ segments,
99
+ id: 'divergence_primary',
100
+ };
101
+ }
102
+ function collectHitsFromAnalysis(analysis) {
103
+ const hits = [];
104
+ if (analysis.primary) {
105
+ hits.push(analysis.primary);
106
+ }
107
+ if (analysis.includeSecondaries && analysis.divergences?.length) {
108
+ for (const hit of analysis.divergences) {
109
+ if (analysis.primary &&
110
+ hit.p2.index === analysis.primary.p2.index &&
111
+ hit.kind === analysis.primary.kind &&
112
+ hit.oscillator === analysis.primary.oscillator) {
113
+ continue;
114
+ }
115
+ hits.push(hit);
116
+ if (hits.length >= 4) {
117
+ break;
118
+ }
119
+ }
120
+ }
121
+ return hits;
122
+ }
123
+ /**
124
+ * Resolve candlestick series id for new indicator overlays.
125
+ * prepare_chart_from_rows defaults to `candles` (not `price`); reuse any existing overlay source.
126
+ */
127
+ export function resolveDivergenceSourceSeriesId(overlays) {
128
+ for (const o of overlays) {
129
+ if ((o.type === 'ema' ||
130
+ o.type === 'sma' ||
131
+ o.type === 'rsi' ||
132
+ o.type === 'stochasticrsi' ||
133
+ o.type === 'macd' ||
134
+ o.type === 'bollinger' ||
135
+ o.type === 'donchian' ||
136
+ o.type === 'zscore') &&
137
+ typeof o.sourceSeriesId === 'string' &&
138
+ o.sourceSeriesId.trim()) {
139
+ return o.sourceSeriesId.trim();
140
+ }
141
+ }
142
+ return 'candles';
143
+ }
144
+ /** Ensure Stoch RSI always; RSI when any segment needs it. */
145
+ export function ensureDivergenceIndicatorOverlays(overlays, needsRsi, sourceSeriesId) {
146
+ const next = [...overlays];
147
+ const sourceId = sourceSeriesId?.trim() || resolveDivergenceSourceSeriesId(next);
148
+ const hasStoch = next.some(o => o.type === 'stochasticrsi');
149
+ const hasRsi = next.some(o => o.type === 'rsi');
150
+ if (!hasStoch) {
151
+ next.push({
152
+ type: 'stochasticrsi',
153
+ sourceSeriesId: sourceId,
154
+ id: DIVERGENCE_STOCH_ID,
155
+ });
156
+ }
157
+ if (needsRsi && !hasRsi) {
158
+ next.push({
159
+ type: 'rsi',
160
+ sourceSeriesId: sourceId,
161
+ period: DEFAULT_CHART_RSI_PERIOD,
162
+ id: DIVERGENCE_RSI_ID,
163
+ label: `RSI(${DEFAULT_CHART_RSI_PERIOD})`,
164
+ });
165
+ }
166
+ return next;
167
+ }
168
+ export const CalculateDivergenceDrawingsInputSchema = z.preprocess(preprocessDivergenceDrawingsInput, z
169
+ .object({
170
+ analysis: z
171
+ .object({
172
+ primary: hitSchema.nullable().optional(),
173
+ divergences: z.array(hitSchema).optional(),
174
+ })
175
+ .passthrough()
176
+ .optional(),
177
+ primary: hitSchema.optional(),
178
+ divergences: z.array(hitSchema).optional(),
179
+ includeSecondaries: z.boolean().optional(),
180
+ })
181
+ .strict());
182
+ export const CalculateDivergenceDrawingsOutputSchema = z
183
+ .object({
184
+ divergenceOverlay: ChartDivergenceOverlaySchema,
185
+ })
186
+ .strict();
187
+ export function calculateDivergenceDrawings(input) {
188
+ const parsed = CalculateDivergenceDrawingsInputSchema.safeParse(input);
189
+ if (!parsed.success) {
190
+ return { ok: false, reason: parsed.error.message };
191
+ }
192
+ const analysis = parsed.data.analysis ?? {};
193
+ const hits = collectHitsFromAnalysis({
194
+ primary: (parsed.data.primary ?? analysis.primary ?? null),
195
+ divergences: (parsed.data.divergences ?? analysis.divergences),
196
+ includeSecondaries: parsed.data.includeSecondaries === true,
197
+ });
198
+ const overlay = hitsToDivergenceOverlay(hits);
199
+ if (!overlay) {
200
+ return { ok: false, reason: 'No divergence hits to draw. Run analyze_divergence first.' };
201
+ }
202
+ return { ok: true, data: { divergenceOverlay: overlay } };
203
+ }
204
+ export const ApplyDivergenceDrawingsInputSchema = z.preprocess(preprocessDivergenceDrawingsInput, z
205
+ .object({
206
+ title: z.string().trim().min(1).max(256).optional(),
207
+ label: z.string().trim().min(1).max(128).optional(),
208
+ toolResult: z.unknown().optional(),
209
+ rows: z.array(z.unknown()).min(1).optional(),
210
+ ohlcvDigest: z.string().trim().min(1).max(512).optional(),
211
+ prepareReplay: z.unknown().optional(),
212
+ live: z.unknown().optional(),
213
+ removeDrawings: z.boolean().optional(),
214
+ includeSecondaries: z.boolean().optional(),
215
+ analysis: z
216
+ .object({
217
+ primary: hitSchema.nullable().optional(),
218
+ divergences: z.array(hitSchema).optional(),
219
+ })
220
+ .passthrough()
221
+ .optional(),
222
+ drawings: z
223
+ .object({
224
+ divergenceOverlay: ChartDivergenceOverlaySchema.optional(),
225
+ })
226
+ .strict()
227
+ .optional(),
228
+ divergenceOverlay: ChartDivergenceOverlaySchema.optional(),
229
+ })
230
+ .strict());
231
+ function stripDivergenceOverlays(replay) {
232
+ const overlays = replay.overlays?.filter(o => o.type !== 'divergence') ?? [];
233
+ return { ...replay, overlays };
234
+ }
235
+ export async function applyDivergenceDrawings(input) {
236
+ const parsed = ApplyDivergenceDrawingsInputSchema.safeParse(input);
237
+ if (!parsed.success) {
238
+ return { ok: false, reason: parsed.error.message };
239
+ }
240
+ const chartContext = rejectApplyPatternDrawingsWithoutChartContext(parsed.data);
241
+ if (!chartContext.ok) {
242
+ return chartContext;
243
+ }
244
+ const prepared = await prepareOhlcvBarsForAnalysis({
245
+ ...parsed.data,
246
+ allowRowsOnly: Boolean(parsed.data.prepareReplay),
247
+ mergeLive: false,
248
+ });
249
+ if (!prepared.ok) {
250
+ return prepared;
251
+ }
252
+ const rawBars = prepared.data.bars;
253
+ if (!rawBars.length) {
254
+ return {
255
+ ok: false,
256
+ reason: missingOhlcvBarsReason(parsed.data) +
257
+ ' Use the same fetch JSON as the original chart — do not substitute analysis JSON.',
258
+ };
259
+ }
260
+ if (parsed.data.toolResult != null) {
261
+ const windowCheck = validateOhlcvBarsFromToolResult(rawBars, parsed.data.toolResult, parsed.data.title);
262
+ if (!windowCheck.ok) {
263
+ return windowCheck;
264
+ }
265
+ }
266
+ const integrity = runOhlcvIntegrityPipeline(rawBars, {
267
+ toolResult: parsed.data.toolResult,
268
+ rows: parsed.data.rows,
269
+ allowRowsOnly: Boolean(parsed.data.prepareReplay),
270
+ });
271
+ if (!integrity.ok) {
272
+ return integrity;
273
+ }
274
+ let baseReplay = parsed.data.prepareReplay ?? {};
275
+ if (parsed.data.removeDrawings) {
276
+ baseReplay = stripDivergenceOverlays(baseReplay);
277
+ }
278
+ const analysis = parsed.data.analysis;
279
+ let divergenceOverlay = parsed.data.divergenceOverlay ??
280
+ parsed.data.drawings?.divergenceOverlay ??
281
+ undefined;
282
+ if (!parsed.data.removeDrawings && !divergenceOverlay) {
283
+ const fromAnalysisOverlay = analysis
284
+ ?.divergenceOverlay;
285
+ if (fromAnalysisOverlay && typeof fromAnalysisOverlay === 'object') {
286
+ const parsedOverlay = ChartDivergenceOverlaySchema.safeParse(fromAnalysisOverlay);
287
+ if (parsedOverlay.success) {
288
+ divergenceOverlay = parsedOverlay.data;
289
+ }
290
+ }
291
+ }
292
+ if (!parsed.data.removeDrawings && !divergenceOverlay) {
293
+ const hits = collectHitsFromAnalysis({
294
+ primary: (analysis?.primary ?? null),
295
+ divergences: analysis?.divergences,
296
+ includeSecondaries: parsed.data.includeSecondaries === true,
297
+ });
298
+ divergenceOverlay = hitsToDivergenceOverlay(hits) ?? undefined;
299
+ }
300
+ const nonDrawingOverlays = baseReplay.overlays?.filter(o => o.type !== 'horizontal_levels' &&
301
+ o.type !== 'pivot_levels' &&
302
+ o.type !== 'fibonacci' &&
303
+ o.type !== 'trend_lines' &&
304
+ o.type !== 'chart_pattern' &&
305
+ o.type !== 'elliott_waves' &&
306
+ o.type !== 'divergence') ?? [];
307
+ const needsRsi = divergenceOverlay?.segments.some(s => s.oscillator === 'rsi') === true ||
308
+ analysis?.primary?.oscillator === 'rsi' ||
309
+ analysis?.divergences?.some(h => h.oscillator === 'rsi') ===
310
+ true;
311
+ // Always inject Stoch RSI; inject RSI when any segment targets it.
312
+ // sourceSeriesId must match the candlestick series (`candles` by default — not `price`).
313
+ const withIndicators = ensureDivergenceIndicatorOverlays(nonDrawingOverlays, needsRsi);
314
+ const paneByOsc = resolveOscillatorPaneIds(withIndicators);
315
+ if (divergenceOverlay) {
316
+ divergenceOverlay = {
317
+ ...divergenceOverlay,
318
+ segments: divergenceOverlay.segments.map(seg => ({
319
+ ...seg,
320
+ oscillatorPaneId: paneByOsc[seg.oscillator] ?? seg.oscillatorPaneId,
321
+ })),
322
+ };
323
+ }
324
+ const mergedOverlays = [
325
+ ...withIndicators,
326
+ ...(divergenceOverlay && !parsed.data.removeDrawings ? [divergenceOverlay] : []),
327
+ ];
328
+ if (!parsed.data.removeDrawings && !divergenceOverlay) {
329
+ return {
330
+ ok: false,
331
+ reason: 'No divergence overlay to apply. Pass analysis from analyze_divergence or drawings from calculate_divergence_drawings.',
332
+ };
333
+ }
334
+ const baseTitle = parsed.data.title?.trim() || 'Chart';
335
+ const skipDefaults = baseReplay.skipDefaultOverlays === true ||
336
+ baseReplay.usedDefaultOverlays === true ||
337
+ withIndicators.length > 0;
338
+ const chartResult = prepareChart({
339
+ title: baseTitle,
340
+ bars: rawBars,
341
+ ...(mergedOverlays.length ? { overlays: mergedOverlays } : {}),
342
+ options: {
343
+ maxPoints: AGENT_CHART_DISPLAY_MAX_POINTS,
344
+ ...(skipDefaults ? { skipDefaultOverlays: true } : {}),
345
+ },
346
+ });
347
+ if (!chartResult.ok) {
348
+ return chartResult;
349
+ }
350
+ const live = parsed.data.live ??
351
+ (parsed.data.toolResult != null
352
+ ? extractLiveBindingFromFetchPayload(parsed.data.toolResult, {
353
+ maxPoints: AGENT_CHART_DISPLAY_MAX_POINTS,
354
+ })
355
+ : undefined);
356
+ const overlayWarnings = [];
357
+ if (divergenceOverlay && !parsed.data.removeDrawings) {
358
+ overlayWarnings.push(`Divergence overlay applied (${divergenceOverlay.segments.length} segment(s)); Stochastic RSI pane ensured. ` +
359
+ 'Use this chart output — do not call prepare_chart_from_rows again for overlay-only requests.');
360
+ }
361
+ const ohlcvSummary = summarizeOhlcvBars(rawBars);
362
+ return {
363
+ ok: true,
364
+ data: attachChartLoadMeta({
365
+ ...chartResult.data,
366
+ ...(live ? { live } : {}),
367
+ meta: {
368
+ ...(chartResult.data.meta ?? {}),
369
+ dataPolicy: AGENT_OHLCV_DATA_POLICY,
370
+ ...(ohlcvSummary ? { ohlcvSummary } : {}),
371
+ ...(overlayWarnings.length ? { warnings: overlayWarnings } : {}),
372
+ },
373
+ }, rawBars, {
374
+ toolResult: parsed.data.toolResult,
375
+ title: parsed.data.title ?? baseTitle,
376
+ ohlcvFingerprint: integrity.data.fingerprint ?? prepared.data.fingerprint ?? undefined,
377
+ }),
378
+ };
379
+ }
380
+ //# sourceMappingURL=divergence-drawings-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"divergence-drawings-tools.js","sourceRoot":"","sources":["../../../../src/core/chart/analysis/divergence-drawings-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { DivergenceKind, DivergenceOscillator, DivergencePrimary } from './divergence/types.js';
2
+ import type { DivergenceTradeSetup } from './trade-setups/divergence-trade-setup.js';
3
+ export type DivergenceHighlight = {
4
+ summary: string;
5
+ primaryKind: DivergenceKind | null;
6
+ oscillator: DivergenceOscillator | null;
7
+ side: 'long' | 'short' | 'neutral';
8
+ status: 'clear' | 'unclear';
9
+ confidence: number;
10
+ conditionalNote: string;
11
+ divergenceCount: number;
12
+ unclearReason?: string;
13
+ };
14
+ export declare function buildDivergenceHighlight(input: {
15
+ primary: DivergencePrimary | null;
16
+ setup: DivergenceTradeSetup | null;
17
+ divergenceCount: number;
18
+ }): DivergenceHighlight;
19
+ //# sourceMappingURL=divergence-highlight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"divergence-highlight.d.ts","sourceRoot":"","sources":["../../../../src/core/chart/analysis/divergence-highlight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,cAAc,EAAE,oBAAoB,EAAE,iBAAiB,EAAC,MAAM,uBAAuB,CAAC;AACnG,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,0CAA0C,CAAC;AAEnF,MAAM,MAAM,mBAAmB,GAAG;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,cAAc,GAAG,IAAI,CAAC;IACnC,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACxC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACnC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAYF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC/C,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAClC,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACnC,eAAe,EAAE,MAAM,CAAC;CACxB,GAAG,mBAAmB,CA8BtB"}
@@ -0,0 +1,39 @@
1
+ import { kindLabel } from './divergence/detect.js';
2
+ function oscLabel(id) {
3
+ if (id === 'rsi') {
4
+ return 'RSI';
5
+ }
6
+ if (id === 'stochasticrsi') {
7
+ return 'Stochastic RSI';
8
+ }
9
+ return 'oscillator';
10
+ }
11
+ export function buildDivergenceHighlight(input) {
12
+ const setup = input.setup;
13
+ const side = setup?.side ?? 'neutral';
14
+ const status = setup?.status ?? 'unclear';
15
+ const confidence = setup?.confidence ?? 0.35;
16
+ const conditionalNote = setup?.conditionalNote ?? 'No RSI/Stochastic RSI divergence detected — no trade bias.';
17
+ let summary;
18
+ if (input.primary) {
19
+ const kind = kindLabel(input.primary.kind);
20
+ const osc = oscLabel(input.primary.oscillator);
21
+ const bias = side === 'long' ? 'supports long' : side === 'short' ? 'supports short' : 'neutral';
22
+ summary = `${kind} ${osc} divergence — ${bias} (confidence ${confidence.toFixed(2)}). ${input.divergenceCount} hit(s) on session.`;
23
+ }
24
+ else {
25
+ summary = `No divergence detected (${input.divergenceCount} hits). Neutral bias.`;
26
+ }
27
+ return {
28
+ summary,
29
+ primaryKind: input.primary?.kind ?? null,
30
+ oscillator: input.primary?.oscillator ?? null,
31
+ side,
32
+ status,
33
+ confidence,
34
+ conditionalNote,
35
+ divergenceCount: input.divergenceCount,
36
+ ...(setup?.unclearReason ? { unclearReason: setup.unclearReason } : {}),
37
+ };
38
+ }
39
+ //# sourceMappingURL=divergence-highlight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"divergence-highlight.js","sourceRoot":"","sources":["../../../../src/core/chart/analysis/divergence-highlight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,wBAAwB,CAAC;AAgBjD,SAAS,QAAQ,CAAC,EAA+B;IAChD,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACd,CAAC;IACD,IAAI,EAAE,KAAK,eAAe,EAAE,CAAC;QAC5B,OAAO,gBAAgB,CAAC;IACzB,CAAC;IACD,OAAO,YAAY,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAIxC;IACA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,SAAS,CAAC;IACtC,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,SAAS,CAAC;IAC1C,MAAM,UAAU,GAAG,KAAK,EAAE,UAAU,IAAI,IAAI,CAAC;IAC7C,MAAM,eAAe,GACpB,KAAK,EAAE,eAAe,IAAI,4DAA4D,CAAC;IAExF,IAAI,OAAe,CAAC;IACpB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,IAAI,GACT,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;QACrF,OAAO,GAAG,GAAG,IAAI,IAAI,GAAG,iBAAiB,IAAI,gBAAgB,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,eAAe,qBAAqB,CAAC;IACpI,CAAC;SAAM,CAAC;QACP,OAAO,GAAG,2BAA2B,KAAK,CAAC,eAAe,uBAAuB,CAAC;IACnF,CAAC;IAED,OAAO;QACN,OAAO;QACP,WAAW,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI;QACxC,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,IAAI;QAC7C,IAAI;QACJ,MAAM;QACN,UAAU;QACV,eAAe;QACf,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAC,aAAa,EAAE,KAAK,CAAC,aAAa,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACrE,CAAC;AACH,CAAC"}
@@ -0,0 +1,113 @@
1
+ import { z } from 'zod';
2
+ import type { SdkResult } from '../../result.js';
3
+ export declare const AnalyzeDonchianBreakoutInputSchema: z.ZodPreprocess<z.ZodObject<{
4
+ toolResult: z.ZodOptional<z.ZodUnknown>;
5
+ rows: z.ZodOptional<z.ZodArray<z.ZodUnknown>>;
6
+ title: z.ZodOptional<z.ZodString>;
7
+ label: z.ZodOptional<z.ZodString>;
8
+ ohlcvDigest: z.ZodOptional<z.ZodString>;
9
+ mergeLive: z.ZodOptional<z.ZodBoolean>;
10
+ liveTick: z.ZodOptional<z.ZodObject<{
11
+ timeMs: z.ZodNumber;
12
+ price: z.ZodNumber;
13
+ volume: z.ZodOptional<z.ZodNumber>;
14
+ }, z.core.$strict>>;
15
+ allowRowsOnly: z.ZodOptional<z.ZodBoolean>;
16
+ period: z.ZodOptional<z.ZodNumber>;
17
+ donchianPeriod: z.ZodOptional<z.ZodNumber>;
18
+ donchianEntryMode: z.ZodOptional<z.ZodEnum<{
19
+ retest: "retest";
20
+ immediate: "immediate";
21
+ }>>;
22
+ donchianTargetAtrMultiple: z.ZodOptional<z.ZodNumber>;
23
+ entryProximityPct: z.ZodOptional<z.ZodNumber>;
24
+ entryProximityMode: z.ZodOptional<z.ZodEnum<{
25
+ price: "price";
26
+ atr: "atr";
27
+ }>>;
28
+ entryProximityAtrPeriod: z.ZodOptional<z.ZodNumber>;
29
+ entryOffsetPct: z.ZodOptional<z.ZodNumber>;
30
+ invalidationOffsetPct: z.ZodOptional<z.ZodNumber>;
31
+ }, z.core.$strict>>;
32
+ export declare const AnalyzeDonchianBreakoutOutputSchema: z.ZodObject<{
33
+ analysis: z.ZodObject<{
34
+ summary: z.ZodString;
35
+ interpretation: z.ZodString;
36
+ upper: z.ZodNumber;
37
+ middle: z.ZodNumber;
38
+ lower: z.ZodNumber;
39
+ priorUpper: z.ZodNumber;
40
+ priorLower: z.ZodNumber;
41
+ channelWidth: z.ZodNumber;
42
+ period: z.ZodNumber;
43
+ entryMode: z.ZodEnum<{
44
+ retest: "retest";
45
+ immediate: "immediate";
46
+ }>;
47
+ donchianTradeSetup: z.ZodNullable<z.ZodObject<{}, z.core.$catchall<z.ZodUnknown>>>;
48
+ donchianHighlight: z.ZodObject<{}, z.core.$catchall<z.ZodUnknown>>;
49
+ }, z.core.$strict>;
50
+ meta: z.ZodObject<{
51
+ barCount: z.ZodNumber;
52
+ title: z.ZodOptional<z.ZodString>;
53
+ ohlcvSummary: z.ZodOptional<z.ZodObject<{
54
+ barCount: z.ZodNumber;
55
+ timeStartSec: z.ZodNumber;
56
+ timeEndSec: z.ZodNumber;
57
+ low: z.ZodNumber;
58
+ high: z.ZodNumber;
59
+ lastClose: z.ZodNumber;
60
+ }, z.core.$strict>>;
61
+ ohlcvFingerprint: z.ZodOptional<z.ZodObject<{
62
+ version: z.ZodLiteral<1>;
63
+ barCount: z.ZodNumber;
64
+ timeStartSec: z.ZodNumber;
65
+ timeEndSec: z.ZodNumber;
66
+ low: z.ZodNumber;
67
+ high: z.ZodNumber;
68
+ lastClose: z.ZodNumber;
69
+ digest: z.ZodString;
70
+ }, z.core.$strict>>;
71
+ fetchContext: z.ZodOptional<z.ZodObject<{
72
+ interval: z.ZodNullable<z.ZodString>;
73
+ intervalSec: z.ZodNullable<z.ZodNumber>;
74
+ lookbackDays: z.ZodNullable<z.ZodNumber>;
75
+ lookbackHours: z.ZodNullable<z.ZodNumber>;
76
+ lookbackLabel: z.ZodNullable<z.ZodString>;
77
+ coin: z.ZodNullable<z.ZodString>;
78
+ declaredBarCount: z.ZodNullable<z.ZodNumber>;
79
+ windowExpectedBarCount: z.ZodNullable<z.ZodNumber>;
80
+ expectedBarCount: z.ZodNullable<z.ZodNumber>;
81
+ }, z.core.$strict>>;
82
+ windowExpectation: z.ZodOptional<z.ZodObject<{
83
+ interval: z.ZodNullable<z.ZodString>;
84
+ intervalSec: z.ZodNullable<z.ZodNumber>;
85
+ lookbackLabel: z.ZodNullable<z.ZodString>;
86
+ expectedBarCount: z.ZodNullable<z.ZodNumber>;
87
+ minBarCount: z.ZodNullable<z.ZodNumber>;
88
+ sources: z.ZodArray<z.ZodString>;
89
+ }, z.core.$strict>>;
90
+ liveMerge: z.ZodOptional<z.ZodObject<{
91
+ attempted: z.ZodBoolean;
92
+ merged: z.ZodBoolean;
93
+ livePrice: z.ZodOptional<z.ZodNumber>;
94
+ liveTickTimeMs: z.ZodOptional<z.ZodNumber>;
95
+ priorLastClose: z.ZodOptional<z.ZodNumber>;
96
+ barRolledOver: z.ZodOptional<z.ZodBoolean>;
97
+ skippedReason: z.ZodOptional<z.ZodString>;
98
+ }, z.core.$strict>>;
99
+ patternsScanned: z.ZodOptional<z.ZodNumber>;
100
+ dataPolicy: z.ZodString;
101
+ warnings: z.ZodOptional<z.ZodArray<z.ZodString>>;
102
+ sessionBind: z.ZodOptional<z.ZodObject<{
103
+ ohlcvDigest: z.ZodString;
104
+ title: z.ZodOptional<z.ZodString>;
105
+ reuseInput: z.ZodObject<{
106
+ title: z.ZodOptional<z.ZodString>;
107
+ ohlcvDigest: z.ZodString;
108
+ }, z.core.$strict>;
109
+ }, z.core.$strict>>;
110
+ }, z.core.$strict>;
111
+ }, z.core.$strict>;
112
+ export declare function analyzeDonchianBreakout(input: unknown): Promise<SdkResult<z.infer<typeof AnalyzeDonchianBreakoutOutputSchema>>>;
113
+ //# sourceMappingURL=donchian-analyze-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"donchian-analyze-tools.d.ts","sourceRoot":"","sources":["../../../../src/core/chart/analysis/donchian-analyze-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AA4C/C,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAG9C,CAAC;AAEF,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAoBtC,CAAC;AA+DX,wBAAsB,uBAAuB,CAC5C,KAAK,EAAE,OAAO,GACZ,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,mCAAmC,CAAC,CAAC,CAAC,CA8HzE"}