@continuumdao/continuum-node-sdk 1.3.25 → 1.3.28
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.
- package/README.md +15 -1
- package/dist/agent-host-catalog.json +189 -0
- package/dist/core/agent/agent-chart-data-access-assert.d.ts +7 -0
- package/dist/core/agent/agent-chart-data-access-assert.d.ts.map +1 -0
- package/dist/core/agent/agent-chart-data-access-assert.js +27 -0
- package/dist/core/agent/agent-chart-data-access-assert.js.map +1 -0
- package/dist/core/agent/agent-chart-data-access.d.ts +11 -0
- package/dist/core/agent/agent-chart-data-access.d.ts.map +1 -0
- package/dist/core/agent/agent-chart-data-access.js +42 -0
- package/dist/core/agent/agent-chart-data-access.js.map +1 -0
- package/dist/core/agent/environment-variables.d.ts +8 -1
- package/dist/core/agent/environment-variables.d.ts.map +1 -1
- package/dist/core/agent/environment-variables.js +44 -1
- package/dist/core/agent/environment-variables.js.map +1 -1
- package/dist/core/agent/mcp-servers.d.ts +8 -1
- package/dist/core/agent/mcp-servers.d.ts.map +1 -1
- package/dist/core/agent/mcp-servers.js +50 -1
- package/dist/core/agent/mcp-servers.js.map +1 -1
- package/dist/core/agent/skills.d.ts +6 -0
- package/dist/core/agent/skills.d.ts.map +1 -1
- package/dist/core/agent/skills.js +40 -1
- package/dist/core/agent/skills.js.map +1 -1
- package/dist/core/candlestick-patterns/calibration-weights.d.ts +3 -0
- package/dist/core/candlestick-patterns/calibration-weights.d.ts.map +1 -0
- package/dist/core/candlestick-patterns/calibration-weights.js +3 -0
- package/dist/core/candlestick-patterns/calibration-weights.js.map +1 -0
- package/dist/core/candlestick-patterns/candle-settings.d.ts +50 -0
- package/dist/core/candlestick-patterns/candle-settings.d.ts.map +1 -0
- package/dist/core/candlestick-patterns/candle-settings.js +127 -0
- package/dist/core/candlestick-patterns/candle-settings.js.map +1 -0
- package/dist/core/candlestick-patterns/catalog.d.ts +7 -0
- package/dist/core/candlestick-patterns/catalog.d.ts.map +1 -0
- package/dist/core/candlestick-patterns/catalog.js +191 -0
- package/dist/core/candlestick-patterns/catalog.js.map +1 -0
- package/dist/core/candlestick-patterns/index.d.ts +7 -0
- package/dist/core/candlestick-patterns/index.d.ts.map +1 -0
- package/dist/core/candlestick-patterns/index.js +6 -0
- package/dist/core/candlestick-patterns/index.js.map +1 -0
- package/dist/core/candlestick-patterns/patterns/detect.d.ts +21 -0
- package/dist/core/candlestick-patterns/patterns/detect.d.ts.map +1 -0
- package/dist/core/candlestick-patterns/patterns/detect.js +515 -0
- package/dist/core/candlestick-patterns/patterns/detect.js.map +1 -0
- package/dist/core/candlestick-patterns/recommendation.d.ts +3 -0
- package/dist/core/candlestick-patterns/recommendation.d.ts.map +1 -0
- package/dist/core/candlestick-patterns/recommendation.js +92 -0
- package/dist/core/candlestick-patterns/recommendation.js.map +1 -0
- package/dist/core/candlestick-patterns/scan.d.ts +8 -0
- package/dist/core/candlestick-patterns/scan.d.ts.map +1 -0
- package/dist/core/candlestick-patterns/scan.js +70 -0
- package/dist/core/candlestick-patterns/scan.js.map +1 -0
- package/dist/core/candlestick-patterns/types.d.ts +47 -0
- package/dist/core/candlestick-patterns/types.d.ts.map +1 -0
- package/dist/core/candlestick-patterns/types.js +2 -0
- package/dist/core/candlestick-patterns/types.js.map +1 -0
- package/dist/core/chart/analysis/analysis-agent-view.d.ts +6 -0
- package/dist/core/chart/analysis/analysis-agent-view.d.ts.map +1 -0
- package/dist/core/chart/analysis/analysis-agent-view.js +224 -0
- package/dist/core/chart/analysis/analysis-agent-view.js.map +1 -0
- package/dist/core/chart/analysis/analysis-catalog.d.ts +18 -0
- package/dist/core/chart/analysis/analysis-catalog.d.ts.map +1 -0
- package/dist/core/chart/analysis/analysis-catalog.js +108 -0
- package/dist/core/chart/analysis/analysis-catalog.js.map +1 -0
- package/dist/core/chart/analysis/analysis-meta.d.ts +97 -0
- package/dist/core/chart/analysis/analysis-meta.d.ts.map +1 -0
- package/dist/core/chart/analysis/analysis-meta.js +86 -0
- package/dist/core/chart/analysis/analysis-meta.js.map +1 -0
- package/dist/core/chart/analysis/analyze-tools.d.ts +668 -0
- package/dist/core/chart/analysis/analyze-tools.d.ts.map +1 -0
- package/dist/core/chart/analysis/analyze-tools.js +859 -0
- package/dist/core/chart/analysis/analyze-tools.js.map +1 -0
- package/dist/core/chart/analysis/candlestick-highlight.d.ts +55 -0
- package/dist/core/chart/analysis/candlestick-highlight.d.ts.map +1 -0
- package/dist/core/chart/analysis/candlestick-highlight.js +71 -0
- package/dist/core/chart/analysis/candlestick-highlight.js.map +1 -0
- package/dist/core/chart/analysis/candlestick-patterns-tools.d.ts +164 -0
- package/dist/core/chart/analysis/candlestick-patterns-tools.d.ts.map +1 -0
- package/dist/core/chart/analysis/candlestick-patterns-tools.js +205 -0
- package/dist/core/chart/analysis/candlestick-patterns-tools.js.map +1 -0
- package/dist/core/chart/analysis/chart-patterns-drawings-tools.d.ts +105 -0
- package/dist/core/chart/analysis/chart-patterns-drawings-tools.d.ts.map +1 -0
- package/dist/core/chart/analysis/chart-patterns-drawings-tools.js +512 -0
- package/dist/core/chart/analysis/chart-patterns-drawings-tools.js.map +1 -0
- package/dist/core/chart/analysis/chart-patterns-tools.d.ts +542 -0
- package/dist/core/chart/analysis/chart-patterns-tools.d.ts.map +1 -0
- package/dist/core/chart/analysis/chart-patterns-tools.js +283 -0
- package/dist/core/chart/analysis/chart-patterns-tools.js.map +1 -0
- package/dist/core/chart/analysis/key-fib-drawings-tools.d.ts +42 -0
- package/dist/core/chart/analysis/key-fib-drawings-tools.d.ts.map +1 -0
- package/dist/core/chart/analysis/key-fib-drawings-tools.js +140 -0
- package/dist/core/chart/analysis/key-fib-drawings-tools.js.map +1 -0
- package/dist/core/chart/analysis/key-level-break-detect.d.ts +27 -0
- package/dist/core/chart/analysis/key-level-break-detect.d.ts.map +1 -0
- package/dist/core/chart/analysis/key-level-break-detect.js +156 -0
- package/dist/core/chart/analysis/key-level-break-detect.js.map +1 -0
- package/dist/core/chart/analysis/key-level-drawings-shared.d.ts +109 -0
- package/dist/core/chart/analysis/key-level-drawings-shared.d.ts.map +1 -0
- package/dist/core/chart/analysis/key-level-drawings-shared.js +335 -0
- package/dist/core/chart/analysis/key-level-drawings-shared.js.map +1 -0
- package/dist/core/chart/analysis/key-level-drawings-tools.d.ts +42 -0
- package/dist/core/chart/analysis/key-level-drawings-tools.d.ts.map +1 -0
- package/dist/core/chart/analysis/key-level-drawings-tools.js +140 -0
- package/dist/core/chart/analysis/key-level-drawings-tools.js.map +1 -0
- package/dist/core/chart/analysis/key-level-menu-summary.d.ts +84 -0
- package/dist/core/chart/analysis/key-level-menu-summary.d.ts.map +1 -0
- package/dist/core/chart/analysis/key-level-menu-summary.js +257 -0
- package/dist/core/chart/analysis/key-level-menu-summary.js.map +1 -0
- package/dist/core/chart/analysis/key-levels-dataset.d.ts +17 -0
- package/dist/core/chart/analysis/key-levels-dataset.d.ts.map +1 -0
- package/dist/core/chart/analysis/key-levels-dataset.js +44 -0
- package/dist/core/chart/analysis/key-levels-dataset.js.map +1 -0
- package/dist/core/chart/analysis/momentum-highlight.d.ts +31 -0
- package/dist/core/chart/analysis/momentum-highlight.d.ts.map +1 -0
- package/dist/core/chart/analysis/momentum-highlight.js +59 -0
- package/dist/core/chart/analysis/momentum-highlight.js.map +1 -0
- package/dist/core/chart/analysis/ohlcv-input.d.ts +39 -0
- package/dist/core/chart/analysis/ohlcv-input.d.ts.map +1 -0
- package/dist/core/chart/analysis/ohlcv-input.js +89 -0
- package/dist/core/chart/analysis/ohlcv-input.js.map +1 -0
- package/dist/core/chart/analysis/ohlcv-live-merge.d.ts +39 -0
- package/dist/core/chart/analysis/ohlcv-live-merge.d.ts.map +1 -0
- package/dist/core/chart/analysis/ohlcv-live-merge.js +158 -0
- package/dist/core/chart/analysis/ohlcv-live-merge.js.map +1 -0
- package/dist/core/chart/analysis/range-volatility-highlight.d.ts +31 -0
- package/dist/core/chart/analysis/range-volatility-highlight.d.ts.map +1 -0
- package/dist/core/chart/analysis/range-volatility-highlight.js +53 -0
- package/dist/core/chart/analysis/range-volatility-highlight.js.map +1 -0
- package/dist/core/chart/analysis/time-series-analyze-tools.d.ts +98 -0
- package/dist/core/chart/analysis/time-series-analyze-tools.d.ts.map +1 -0
- package/dist/core/chart/analysis/time-series-analyze-tools.js +343 -0
- package/dist/core/chart/analysis/time-series-analyze-tools.js.map +1 -0
- package/dist/core/chart/analysis/time-series-input.d.ts +15 -0
- package/dist/core/chart/analysis/time-series-input.d.ts.map +1 -0
- package/dist/core/chart/analysis/time-series-input.js +155 -0
- package/dist/core/chart/analysis/time-series-input.js.map +1 -0
- package/dist/core/chart/analysis/trade-setups/build-trade-uniswap.d.ts +10 -0
- package/dist/core/chart/analysis/trade-setups/build-trade-uniswap.d.ts.map +1 -0
- package/dist/core/chart/analysis/trade-setups/build-trade-uniswap.js +128 -0
- package/dist/core/chart/analysis/trade-setups/build-trade-uniswap.js.map +1 -0
- package/dist/core/chart/analysis/trade-setups/build-trade.d.ts +46 -0
- package/dist/core/chart/analysis/trade-setups/build-trade.d.ts.map +1 -0
- package/dist/core/chart/analysis/trade-setups/build-trade.js +298 -0
- package/dist/core/chart/analysis/trade-setups/build-trade.js.map +1 -0
- package/dist/core/chart/analysis/trade-setups/candlestick-trade-setup.d.ts +48 -0
- package/dist/core/chart/analysis/trade-setups/candlestick-trade-setup.d.ts.map +1 -0
- package/dist/core/chart/analysis/trade-setups/candlestick-trade-setup.js +76 -0
- package/dist/core/chart/analysis/trade-setups/candlestick-trade-setup.js.map +1 -0
- package/dist/core/chart/analysis/trade-setups/chart-pattern-trade-setup.d.ts +56 -0
- package/dist/core/chart/analysis/trade-setups/chart-pattern-trade-setup.d.ts.map +1 -0
- package/dist/core/chart/analysis/trade-setups/chart-pattern-trade-setup.js +223 -0
- package/dist/core/chart/analysis/trade-setups/chart-pattern-trade-setup.js.map +1 -0
- package/dist/core/chart/analysis/trade-setups/index.d.ts +13 -0
- package/dist/core/chart/analysis/trade-setups/index.d.ts.map +1 -0
- package/dist/core/chart/analysis/trade-setups/index.js +13 -0
- package/dist/core/chart/analysis/trade-setups/index.js.map +1 -0
- package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.d.ts +105 -0
- package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.d.ts.map +1 -0
- package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.js +452 -0
- package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.js.map +1 -0
- package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.d.ts +110 -0
- package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.d.ts.map +1 -0
- package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.js +344 -0
- package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.js.map +1 -0
- package/dist/core/chart/analysis/trade-setups/momentum-trade-setup.d.ts +39 -0
- package/dist/core/chart/analysis/trade-setups/momentum-trade-setup.d.ts.map +1 -0
- package/dist/core/chart/analysis/trade-setups/momentum-trade-setup.js +68 -0
- package/dist/core/chart/analysis/trade-setups/momentum-trade-setup.js.map +1 -0
- package/dist/core/chart/analysis/trade-setups/pattern-limit-entry.d.ts +42 -0
- package/dist/core/chart/analysis/trade-setups/pattern-limit-entry.d.ts.map +1 -0
- package/dist/core/chart/analysis/trade-setups/pattern-limit-entry.js +395 -0
- package/dist/core/chart/analysis/trade-setups/pattern-limit-entry.js.map +1 -0
- package/dist/core/chart/analysis/trade-setups/range-volatility-trade-setup.d.ts +52 -0
- package/dist/core/chart/analysis/trade-setups/range-volatility-trade-setup.d.ts.map +1 -0
- package/dist/core/chart/analysis/trade-setups/range-volatility-trade-setup.js +119 -0
- package/dist/core/chart/analysis/trade-setups/range-volatility-trade-setup.js.map +1 -0
- package/dist/core/chart/analysis/trade-setups/shared.d.ts +21 -0
- package/dist/core/chart/analysis/trade-setups/shared.d.ts.map +1 -0
- package/dist/core/chart/analysis/trade-setups/shared.js +48 -0
- package/dist/core/chart/analysis/trade-setups/shared.js.map +1 -0
- package/dist/core/chart/analysis/trade-setups/trade-consensus.d.ts +22 -0
- package/dist/core/chart/analysis/trade-setups/trade-consensus.d.ts.map +1 -0
- package/dist/core/chart/analysis/trade-setups/trade-consensus.js +95 -0
- package/dist/core/chart/analysis/trade-setups/trade-consensus.js.map +1 -0
- package/dist/core/chart/analysis/trade-setups/trade-desk-defaults.d.ts +11 -0
- package/dist/core/chart/analysis/trade-setups/trade-desk-defaults.d.ts.map +1 -0
- package/dist/core/chart/analysis/trade-setups/trade-desk-defaults.js +13 -0
- package/dist/core/chart/analysis/trade-setups/trade-desk-defaults.js.map +1 -0
- package/dist/core/chart/analysis/trade-setups/trade-entry-gates.d.ts +40 -0
- package/dist/core/chart/analysis/trade-setups/trade-entry-gates.d.ts.map +1 -0
- package/dist/core/chart/analysis/trade-setups/trade-entry-gates.js +84 -0
- package/dist/core/chart/analysis/trade-setups/trade-entry-gates.js.map +1 -0
- package/dist/core/chart/analysis/trade-setups/trade-idea-list.d.ts +46 -0
- package/dist/core/chart/analysis/trade-setups/trade-idea-list.d.ts.map +1 -0
- package/dist/core/chart/analysis/trade-setups/trade-idea-list.js +98 -0
- package/dist/core/chart/analysis/trade-setups/trade-idea-list.js.map +1 -0
- package/dist/core/chart/analysis/trade-setups/trade-idea.d.ts +76 -0
- package/dist/core/chart/analysis/trade-setups/trade-idea.d.ts.map +1 -0
- package/dist/core/chart/analysis/trade-setups/trade-idea.js +187 -0
- package/dist/core/chart/analysis/trade-setups/trade-idea.js.map +1 -0
- package/dist/core/chart/analysis/trade-setups/trade-purpose-format.d.ts +43 -0
- package/dist/core/chart/analysis/trade-setups/trade-purpose-format.d.ts.map +1 -0
- package/dist/core/chart/analysis/trade-setups/trade-purpose-format.js +183 -0
- package/dist/core/chart/analysis/trade-setups/trade-purpose-format.js.map +1 -0
- package/dist/core/chart/analysis/trade-setups/trend-structure-trade-setup.d.ts +59 -0
- package/dist/core/chart/analysis/trade-setups/trend-structure-trade-setup.d.ts.map +1 -0
- package/dist/core/chart/analysis/trade-setups/trend-structure-trade-setup.js +138 -0
- package/dist/core/chart/analysis/trade-setups/trend-structure-trade-setup.js.map +1 -0
- package/dist/core/chart/analysis/trend-line-drawings-tools.d.ts +56 -0
- package/dist/core/chart/analysis/trend-line-drawings-tools.d.ts.map +1 -0
- package/dist/core/chart/analysis/trend-line-drawings-tools.js +271 -0
- package/dist/core/chart/analysis/trend-line-drawings-tools.js.map +1 -0
- package/dist/core/chart/analysis/trend-line-menu-summary.d.ts +38 -0
- package/dist/core/chart/analysis/trend-line-menu-summary.d.ts.map +1 -0
- package/dist/core/chart/analysis/trend-line-menu-summary.js +94 -0
- package/dist/core/chart/analysis/trend-line-menu-summary.js.map +1 -0
- package/dist/core/chart/apply-chart-drawings.d.ts +3 -0
- package/dist/core/chart/apply-chart-drawings.d.ts.map +1 -1
- package/dist/core/chart/apply-chart-drawings.js +101 -31
- package/dist/core/chart/apply-chart-drawings.js.map +1 -1
- package/dist/core/chart/chart-agent-view.d.ts +4 -0
- package/dist/core/chart/chart-agent-view.d.ts.map +1 -0
- package/dist/core/chart/chart-agent-view.js +27 -0
- package/dist/core/chart/chart-agent-view.js.map +1 -0
- package/dist/core/chart/chart-data-validation.d.ts +63 -0
- package/dist/core/chart/chart-data-validation.d.ts.map +1 -0
- package/dist/core/chart/chart-data-validation.js +320 -0
- package/dist/core/chart/chart-data-validation.js.map +1 -0
- package/dist/core/chart/chart-ohlcv-load-status.d.ts +39 -0
- package/dist/core/chart/chart-ohlcv-load-status.d.ts.map +1 -0
- package/dist/core/chart/chart-ohlcv-load-status.js +281 -0
- package/dist/core/chart/chart-ohlcv-load-status.js.map +1 -0
- package/dist/core/chart/chart-ohlcv-summary.d.ts +58 -0
- package/dist/core/chart/chart-ohlcv-summary.d.ts.map +1 -0
- package/dist/core/chart/chart-ohlcv-summary.js +118 -0
- package/dist/core/chart/chart-ohlcv-summary.js.map +1 -0
- package/dist/core/chart/chart-pattern-session-store.d.ts +39 -0
- package/dist/core/chart/chart-pattern-session-store.d.ts.map +1 -0
- package/dist/core/chart/chart-pattern-session-store.js +94 -0
- package/dist/core/chart/chart-pattern-session-store.js.map +1 -0
- package/dist/core/chart/customization-catalog.d.ts.map +1 -1
- package/dist/core/chart/customization-catalog.js +8 -2
- package/dist/core/chart/customization-catalog.js.map +1 -1
- package/dist/core/chart/display-downsample.d.ts +9 -0
- package/dist/core/chart/display-downsample.d.ts.map +1 -0
- package/dist/core/chart/display-downsample.js +79 -0
- package/dist/core/chart/display-downsample.js.map +1 -0
- package/dist/core/chart/index.d.ts +2 -1
- package/dist/core/chart/index.d.ts.map +1 -1
- package/dist/core/chart/index.js +2 -1
- package/dist/core/chart/index.js.map +1 -1
- package/dist/core/chart/levels/calculate-tools.d.ts +8 -0
- package/dist/core/chart/levels/calculate-tools.d.ts.map +1 -1
- package/dist/core/chart/levels/calculate-tools.js +9 -3
- package/dist/core/chart/levels/calculate-tools.js.map +1 -1
- package/dist/core/chart/levels/trend-lines.d.ts +3 -0
- package/dist/core/chart/levels/trend-lines.d.ts.map +1 -1
- package/dist/core/chart/levels/trend-lines.js +6 -3
- package/dist/core/chart/levels/trend-lines.js.map +1 -1
- package/dist/core/chart/live/binding-extract.d.ts.map +1 -1
- package/dist/core/chart/live/binding-extract.js +10 -1
- package/dist/core/chart/live/binding-extract.js.map +1 -1
- package/dist/core/chart/live/fetch-tick.d.ts +4 -0
- package/dist/core/chart/live/fetch-tick.d.ts.map +1 -0
- package/dist/core/chart/live/fetch-tick.js +73 -0
- package/dist/core/chart/live/fetch-tick.js.map +1 -0
- package/dist/core/chart/live/index.d.ts +1 -0
- package/dist/core/chart/live/index.d.ts.map +1 -1
- package/dist/core/chart/live/index.js +1 -0
- package/dist/core/chart/live/index.js.map +1 -1
- package/dist/core/chart/ohlcv-integrity-messages.d.ts +5 -0
- package/dist/core/chart/ohlcv-integrity-messages.d.ts.map +1 -0
- package/dist/core/chart/ohlcv-integrity-messages.js +12 -0
- package/dist/core/chart/ohlcv-integrity-messages.js.map +1 -0
- package/dist/core/chart/ohlcv-integrity.d.ts +82 -0
- package/dist/core/chart/ohlcv-integrity.d.ts.map +1 -0
- package/dist/core/chart/ohlcv-integrity.js +266 -0
- package/dist/core/chart/ohlcv-integrity.js.map +1 -0
- package/dist/core/chart/ohlcv-session-store.d.ts +38 -0
- package/dist/core/chart/ohlcv-session-store.d.ts.map +1 -0
- package/dist/core/chart/ohlcv-session-store.js +107 -0
- package/dist/core/chart/ohlcv-session-store.js.map +1 -0
- package/dist/core/chart/ohlcv-window-expectations.d.ts +77 -0
- package/dist/core/chart/ohlcv-window-expectations.d.ts.map +1 -0
- package/dist/core/chart/ohlcv-window-expectations.js +426 -0
- package/dist/core/chart/ohlcv-window-expectations.js.map +1 -0
- package/dist/core/chart/ohlcv-window.d.ts +36 -0
- package/dist/core/chart/ohlcv-window.d.ts.map +1 -0
- package/dist/core/chart/ohlcv-window.js +238 -0
- package/dist/core/chart/ohlcv-window.js.map +1 -0
- package/dist/core/chart/overlay-schemas.d.ts +545 -0
- package/dist/core/chart/overlay-schemas.d.ts.map +1 -1
- package/dist/core/chart/overlay-schemas.js +116 -1
- package/dist/core/chart/overlay-schemas.js.map +1 -1
- package/dist/core/chart/overlays.d.ts.map +1 -1
- package/dist/core/chart/overlays.js +283 -11
- package/dist/core/chart/overlays.js.map +1 -1
- package/dist/core/chart/point-normalize.d.ts.map +1 -1
- package/dist/core/chart/point-normalize.js +21 -14
- package/dist/core/chart/point-normalize.js.map +1 -1
- package/dist/core/chart/prepare-core.d.ts.map +1 -1
- package/dist/core/chart/prepare-core.js +5 -1
- package/dist/core/chart/prepare-core.js.map +1 -1
- package/dist/core/chart/prepare-from-rows.d.ts +202 -1
- package/dist/core/chart/prepare-from-rows.d.ts.map +1 -1
- package/dist/core/chart/prepare-from-rows.js +81 -11
- package/dist/core/chart/prepare-from-rows.js.map +1 -1
- package/dist/core/chart/schemas.d.ts +686 -6
- package/dist/core/chart/schemas.d.ts.map +1 -1
- package/dist/core/chart/schemas.js +49 -6
- package/dist/core/chart/schemas.js.map +1 -1
- package/dist/core/chart-patterns/atr.d.ts +15 -0
- package/dist/core/chart-patterns/atr.d.ts.map +1 -0
- package/dist/core/chart-patterns/atr.js +57 -0
- package/dist/core/chart-patterns/atr.js.map +1 -0
- package/dist/core/chart-patterns/catalog.d.ts +7 -0
- package/dist/core/chart-patterns/catalog.d.ts.map +1 -0
- package/dist/core/chart-patterns/catalog.js +221 -0
- package/dist/core/chart-patterns/catalog.js.map +1 -0
- package/dist/core/chart-patterns/confidence.d.ts +12 -0
- package/dist/core/chart-patterns/confidence.d.ts.map +1 -0
- package/dist/core/chart-patterns/confidence.js +58 -0
- package/dist/core/chart-patterns/confidence.js.map +1 -0
- package/dist/core/chart-patterns/drawing-spec.d.ts +44 -0
- package/dist/core/chart-patterns/drawing-spec.d.ts.map +1 -0
- package/dist/core/chart-patterns/drawing-spec.js +425 -0
- package/dist/core/chart-patterns/drawing-spec.js.map +1 -0
- package/dist/core/chart-patterns/geometry-to-overlay.d.ts +34 -0
- package/dist/core/chart-patterns/geometry-to-overlay.d.ts.map +1 -0
- package/dist/core/chart-patterns/geometry-to-overlay.js +401 -0
- package/dist/core/chart-patterns/geometry-to-overlay.js.map +1 -0
- package/dist/core/chart-patterns/index.d.ts +13 -0
- package/dist/core/chart-patterns/index.d.ts.map +1 -0
- package/dist/core/chart-patterns/index.js +12 -0
- package/dist/core/chart-patterns/index.js.map +1 -0
- package/dist/core/chart-patterns/interpretation.d.ts +6 -0
- package/dist/core/chart-patterns/interpretation.d.ts.map +1 -0
- package/dist/core/chart-patterns/interpretation.js +49 -0
- package/dist/core/chart-patterns/interpretation.js.map +1 -0
- package/dist/core/chart-patterns/measured-move.d.ts +3 -0
- package/dist/core/chart-patterns/measured-move.d.ts.map +1 -0
- package/dist/core/chart-patterns/measured-move.js +196 -0
- package/dist/core/chart-patterns/measured-move.js.map +1 -0
- package/dist/core/chart-patterns/pattern-enrich.d.ts +4 -0
- package/dist/core/chart-patterns/pattern-enrich.d.ts.map +1 -0
- package/dist/core/chart-patterns/pattern-enrich.js +20 -0
- package/dist/core/chart-patterns/pattern-enrich.js.map +1 -0
- package/dist/core/chart-patterns/pattern-id-aliases.d.ts +3 -0
- package/dist/core/chart-patterns/pattern-id-aliases.d.ts.map +1 -0
- package/dist/core/chart-patterns/pattern-id-aliases.js +17 -0
- package/dist/core/chart-patterns/pattern-id-aliases.js.map +1 -0
- package/dist/core/chart-patterns/pattern-menu-summary.d.ts +21 -0
- package/dist/core/chart-patterns/pattern-menu-summary.d.ts.map +1 -0
- package/dist/core/chart-patterns/pattern-menu-summary.js +68 -0
- package/dist/core/chart-patterns/pattern-menu-summary.js.map +1 -0
- package/dist/core/chart-patterns/patterns/channel.d.ts +4 -0
- package/dist/core/chart-patterns/patterns/channel.d.ts.map +1 -0
- package/dist/core/chart-patterns/patterns/channel.js +137 -0
- package/dist/core/chart-patterns/patterns/channel.js.map +1 -0
- package/dist/core/chart-patterns/patterns/cup-and-handle.d.ts +4 -0
- package/dist/core/chart-patterns/patterns/cup-and-handle.d.ts.map +1 -0
- package/dist/core/chart-patterns/patterns/cup-and-handle.js +89 -0
- package/dist/core/chart-patterns/patterns/cup-and-handle.js.map +1 -0
- package/dist/core/chart-patterns/patterns/doubles.d.ts +4 -0
- package/dist/core/chart-patterns/patterns/doubles.d.ts.map +1 -0
- package/dist/core/chart-patterns/patterns/doubles.js +163 -0
- package/dist/core/chart-patterns/patterns/doubles.js.map +1 -0
- package/dist/core/chart-patterns/patterns/flag.d.ts +4 -0
- package/dist/core/chart-patterns/patterns/flag.d.ts.map +1 -0
- package/dist/core/chart-patterns/patterns/flag.js +64 -0
- package/dist/core/chart-patterns/patterns/flag.js.map +1 -0
- package/dist/core/chart-patterns/patterns/head-and-shoulders.d.ts +5 -0
- package/dist/core/chart-patterns/patterns/head-and-shoulders.d.ts.map +1 -0
- package/dist/core/chart-patterns/patterns/head-and-shoulders.js +69 -0
- package/dist/core/chart-patterns/patterns/head-and-shoulders.js.map +1 -0
- package/dist/core/chart-patterns/patterns/inverse-head-and-shoulders.d.ts +4 -0
- package/dist/core/chart-patterns/patterns/inverse-head-and-shoulders.d.ts.map +1 -0
- package/dist/core/chart-patterns/patterns/inverse-head-and-shoulders.js +66 -0
- package/dist/core/chart-patterns/patterns/inverse-head-and-shoulders.js.map +1 -0
- package/dist/core/chart-patterns/patterns/pennant.d.ts +4 -0
- package/dist/core/chart-patterns/patterns/pennant.d.ts.map +1 -0
- package/dist/core/chart-patterns/patterns/pennant.js +66 -0
- package/dist/core/chart-patterns/patterns/pennant.js.map +1 -0
- package/dist/core/chart-patterns/patterns/trendline-breakout.d.ts +10 -0
- package/dist/core/chart-patterns/patterns/trendline-breakout.d.ts.map +1 -0
- package/dist/core/chart-patterns/patterns/trendline-breakout.js +241 -0
- package/dist/core/chart-patterns/patterns/trendline-breakout.js.map +1 -0
- package/dist/core/chart-patterns/patterns/triangles.d.ts +4 -0
- package/dist/core/chart-patterns/patterns/triangles.d.ts.map +1 -0
- package/dist/core/chart-patterns/patterns/triangles.js +113 -0
- package/dist/core/chart-patterns/patterns/triangles.js.map +1 -0
- package/dist/core/chart-patterns/patterns/utils.d.ts +20 -0
- package/dist/core/chart-patterns/patterns/utils.d.ts.map +1 -0
- package/dist/core/chart-patterns/patterns/utils.js +60 -0
- package/dist/core/chart-patterns/patterns/utils.js.map +1 -0
- package/dist/core/chart-patterns/patterns/wedge.d.ts +4 -0
- package/dist/core/chart-patterns/patterns/wedge.d.ts.map +1 -0
- package/dist/core/chart-patterns/patterns/wedge.js +88 -0
- package/dist/core/chart-patterns/patterns/wedge.js.map +1 -0
- package/dist/core/chart-patterns/recommendation.d.ts +5 -0
- package/dist/core/chart-patterns/recommendation.d.ts.map +1 -0
- package/dist/core/chart-patterns/recommendation.js +84 -0
- package/dist/core/chart-patterns/recommendation.js.map +1 -0
- package/dist/core/chart-patterns/scan.d.ts +5 -0
- package/dist/core/chart-patterns/scan.d.ts.map +1 -0
- package/dist/core/chart-patterns/scan.js +121 -0
- package/dist/core/chart-patterns/scan.js.map +1 -0
- package/dist/core/chart-patterns/smoothing.d.ts +10 -0
- package/dist/core/chart-patterns/smoothing.d.ts.map +1 -0
- package/dist/core/chart-patterns/smoothing.js +45 -0
- package/dist/core/chart-patterns/smoothing.js.map +1 -0
- package/dist/core/chart-patterns/swings.d.ts +12 -0
- package/dist/core/chart-patterns/swings.d.ts.map +1 -0
- package/dist/core/chart-patterns/swings.js +135 -0
- package/dist/core/chart-patterns/swings.js.map +1 -0
- package/dist/core/chart-patterns/trade-setup.d.ts +2 -0
- package/dist/core/chart-patterns/trade-setup.d.ts.map +1 -0
- package/dist/core/chart-patterns/trade-setup.js +2 -0
- package/dist/core/chart-patterns/trade-setup.js.map +1 -0
- package/dist/core/chart-patterns/types.d.ts +225 -0
- package/dist/core/chart-patterns/types.d.ts.map +1 -0
- package/dist/core/chart-patterns/types.js +2 -0
- package/dist/core/chart-patterns/types.js.map +1 -0
- package/dist/core/chart-patterns/volume-confirmation.d.ts +13 -0
- package/dist/core/chart-patterns/volume-confirmation.d.ts.map +1 -0
- package/dist/core/chart-patterns/volume-confirmation.js +172 -0
- package/dist/core/chart-patterns/volume-confirmation.js.map +1 -0
- package/dist/core/coinmarketcap/api-key.d.ts +8 -0
- package/dist/core/coinmarketcap/api-key.d.ts.map +1 -0
- package/dist/core/coinmarketcap/api-key.js +30 -0
- package/dist/core/coinmarketcap/api-key.js.map +1 -0
- package/dist/core/coinmarketcap/client.d.ts +8 -0
- package/dist/core/coinmarketcap/client.d.ts.map +1 -0
- package/dist/core/coinmarketcap/client.js +103 -0
- package/dist/core/coinmarketcap/client.js.map +1 -0
- package/dist/core/coinmarketcap/index.d.ts +7 -0
- package/dist/core/coinmarketcap/index.d.ts.map +1 -0
- package/dist/core/coinmarketcap/index.js +7 -0
- package/dist/core/coinmarketcap/index.js.map +1 -0
- package/dist/core/coinmarketcap/kline-fallback.d.ts +11 -0
- package/dist/core/coinmarketcap/kline-fallback.d.ts.map +1 -0
- package/dist/core/coinmarketcap/kline-fallback.js +35 -0
- package/dist/core/coinmarketcap/kline-fallback.js.map +1 -0
- package/dist/core/coinmarketcap/kline-window.d.ts +26 -0
- package/dist/core/coinmarketcap/kline-window.d.ts.map +1 -0
- package/dist/core/coinmarketcap/kline-window.js +75 -0
- package/dist/core/coinmarketcap/kline-window.js.map +1 -0
- package/dist/core/coinmarketcap/kline.d.ts +13 -0
- package/dist/core/coinmarketcap/kline.d.ts.map +1 -0
- package/dist/core/coinmarketcap/kline.js +49 -0
- package/dist/core/coinmarketcap/kline.js.map +1 -0
- package/dist/core/coinmarketcap/mcp-server-choice.d.ts +24 -0
- package/dist/core/coinmarketcap/mcp-server-choice.d.ts.map +1 -0
- package/dist/core/coinmarketcap/mcp-server-choice.js +77 -0
- package/dist/core/coinmarketcap/mcp-server-choice.js.map +1 -0
- package/dist/core/coinmarketcap/public-api.d.ts +24 -0
- package/dist/core/coinmarketcap/public-api.d.ts.map +1 -0
- package/dist/core/coinmarketcap/public-api.js +277 -0
- package/dist/core/coinmarketcap/public-api.js.map +1 -0
- package/dist/core/coinmarketcap/schemas.d.ts +231 -0
- package/dist/core/coinmarketcap/schemas.d.ts.map +1 -0
- package/dist/core/coinmarketcap/schemas.js +153 -0
- package/dist/core/coinmarketcap/schemas.js.map +1 -0
- package/dist/core/mpc/mpa-fee-status.d.ts +2 -0
- package/dist/core/mpc/mpa-fee-status.d.ts.map +1 -1
- package/dist/core/mpc/mpa-fee-status.js +8 -1
- package/dist/core/mpc/mpa-fee-status.js.map +1 -1
- package/dist/core/node-info.d.ts +3 -1
- package/dist/core/node-info.d.ts.map +1 -1
- package/dist/core/node-info.js +37 -1
- package/dist/core/node-info.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/mcp/agent-chart-data-access-gate.d.ts +5 -0
- package/dist/mcp/agent-chart-data-access-gate.d.ts.map +1 -0
- package/dist/mcp/agent-chart-data-access-gate.js +20 -0
- package/dist/mcp/agent-chart-data-access-gate.js.map +1 -0
- package/dist/mcp/agent-environment-variables.d.ts.map +1 -1
- package/dist/mcp/agent-environment-variables.js +13 -2
- package/dist/mcp/agent-environment-variables.js.map +1 -1
- package/dist/mcp/agent-host-catalog.d.ts +27 -0
- package/dist/mcp/agent-host-catalog.d.ts.map +1 -0
- package/dist/mcp/agent-host-catalog.js +88 -0
- package/dist/mcp/agent-host-catalog.js.map +1 -0
- package/dist/mcp/agent-mcp-servers.d.ts.map +1 -1
- package/dist/mcp/agent-mcp-servers.js +32 -3
- package/dist/mcp/agent-mcp-servers.js.map +1 -1
- package/dist/mcp/agent-skills.d.ts.map +1 -1
- package/dist/mcp/agent-skills.js +13 -1
- package/dist/mcp/agent-skills.js.map +1 -1
- package/dist/mcp/chart.d.ts.map +1 -1
- package/dist/mcp/chart.js +282 -25
- package/dist/mcp/chart.js.map +1 -1
- package/dist/mcp/coinmarketcap-public/register.d.ts +6 -0
- package/dist/mcp/coinmarketcap-public/register.d.ts.map +1 -0
- package/dist/mcp/coinmarketcap-public/register.js +99 -0
- package/dist/mcp/coinmarketcap-public/register.js.map +1 -0
- package/dist/mcp/deferred/discovery-tools.d.ts +6 -0
- package/dist/mcp/deferred/discovery-tools.d.ts.map +1 -0
- package/dist/mcp/deferred/discovery-tools.js +138 -0
- package/dist/mcp/deferred/discovery-tools.js.map +1 -0
- package/dist/mcp/deferred/optional-endpoint-groups.d.ts +12 -0
- package/dist/mcp/deferred/optional-endpoint-groups.d.ts.map +1 -0
- package/dist/mcp/deferred/optional-endpoint-groups.js +51 -0
- package/dist/mcp/deferred/optional-endpoint-groups.js.map +1 -0
- package/dist/mcp/deferred/session.d.ts +56 -0
- package/dist/mcp/deferred/session.d.ts.map +1 -0
- package/dist/mcp/deferred/session.js +242 -0
- package/dist/mcp/deferred/session.js.map +1 -0
- package/dist/mcp/deferred/tool-group-map.d.ts +23 -0
- package/dist/mcp/deferred/tool-group-map.d.ts.map +1 -0
- package/dist/mcp/deferred/tool-group-map.js +317 -0
- package/dist/mcp/deferred/tool-group-map.js.map +1 -0
- package/dist/mcp/defi/context.d.ts +2 -0
- package/dist/mcp/defi/context.d.ts.map +1 -1
- package/dist/mcp/defi/defi-protocol-fetch-meta.d.ts +30 -0
- package/dist/mcp/defi/defi-protocol-fetch-meta.d.ts.map +1 -0
- package/dist/mcp/defi/defi-protocol-fetch-meta.js +76 -0
- package/dist/mcp/defi/defi-protocol-fetch-meta.js.map +1 -0
- package/dist/mcp/defi/discovery.d.ts +2 -1
- package/dist/mcp/defi/discovery.d.ts.map +1 -1
- package/dist/mcp/defi/discovery.js +46 -6
- package/dist/mcp/defi/discovery.js.map +1 -1
- package/dist/mcp/defi/handler.d.ts.map +1 -1
- package/dist/mcp/defi/handler.js +6 -3
- package/dist/mcp/defi/handler.js.map +1 -1
- package/dist/mcp/defi/input-adapter.d.ts +6 -0
- package/dist/mcp/defi/input-adapter.d.ts.map +1 -1
- package/dist/mcp/defi/input-adapter.js +29 -12
- package/dist/mcp/defi/input-adapter.js.map +1 -1
- package/dist/mcp/defi/ohlcv-chart-workflow.d.ts +5 -1
- package/dist/mcp/defi/ohlcv-chart-workflow.d.ts.map +1 -1
- package/dist/mcp/defi/ohlcv-chart-workflow.js +28 -6
- package/dist/mcp/defi/ohlcv-chart-workflow.js.map +1 -1
- package/dist/mcp/defi/register-protocol-tools.d.ts +2 -1
- package/dist/mcp/defi/register-protocol-tools.d.ts.map +1 -1
- package/dist/mcp/defi/register-protocol-tools.js +12 -3
- package/dist/mcp/defi/register-protocol-tools.js.map +1 -1
- package/dist/mcp/defi/trade-bridge.d.ts +2 -0
- package/dist/mcp/defi/trade-bridge.d.ts.map +1 -0
- package/dist/mcp/defi/trade-bridge.js +2 -0
- package/dist/mcp/defi/trade-bridge.js.map +1 -0
- package/dist/mcp/keygen.js +1 -1
- package/dist/mcp/keygen.js.map +1 -1
- package/dist/mcp/management-signer.d.ts.map +1 -1
- package/dist/mcp/management-signer.js +1 -1
- package/dist/mcp/management-signer.js.map +1 -1
- package/dist/mcp/node.d.ts.map +1 -1
- package/dist/mcp/node.js +7 -2
- package/dist/mcp/node.js.map +1 -1
- package/dist/mcp/ohlcv-session-context.d.ts +4 -0
- package/dist/mcp/ohlcv-session-context.d.ts.map +1 -0
- package/dist/mcp/ohlcv-session-context.js +13 -0
- package/dist/mcp/ohlcv-session-context.js.map +1 -0
- package/dist/mcp/ohlcv-session-wrapper.d.ts +8 -0
- package/dist/mcp/ohlcv-session-wrapper.d.ts.map +1 -0
- package/dist/mcp/ohlcv-session-wrapper.js +138 -0
- package/dist/mcp/ohlcv-session-wrapper.js.map +1 -0
- package/dist/mcp/register.d.ts +3 -1
- package/dist/mcp/register.d.ts.map +1 -1
- package/dist/mcp/register.js +24 -5
- package/dist/mcp/register.js.map +1 -1
- package/dist/mcp/resources/agent-cron-jobs.md +25 -0
- package/dist/mcp/resources/agent-mcp-servers.md +21 -0
- package/dist/mcp/resources/chart-analysis.md +368 -0
- package/dist/mcp/resources/chart.md +71 -24
- package/dist/mcp/resources/coinmarketcap-public.md +109 -0
- package/dist/mcp/resources/keygen.md +1 -1
- package/dist/mcp/resources/trade-defaults-skill.md +69 -0
- package/dist/mcp/server/http-transport.d.ts.map +1 -1
- package/dist/mcp/server/http-transport.js +9 -2
- package/dist/mcp/server/http-transport.js.map +1 -1
- package/dist/mcp/server/index.js +3 -0
- package/dist/mcp/server/index.js.map +1 -1
- package/dist/mcp/tool-utils.d.ts.map +1 -1
- package/dist/mcp/tool-utils.js +7 -1
- package/dist/mcp/tool-utils.js.map +1 -1
- package/dist/mcp/trade-tools.d.ts +7 -0
- package/dist/mcp/trade-tools.d.ts.map +1 -0
- package/dist/mcp/trade-tools.js +201 -0
- package/dist/mcp/trade-tools.js.map +1 -0
- package/dist/schemas/extended.d.ts +30 -0
- package/dist/schemas/extended.d.ts.map +1 -1
- package/dist/schemas/extended.js +40 -0
- package/dist/schemas/extended.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,14 +1,40 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { preprocessOhlcvToolInput, missingOhlcvBarsReason } from './analysis/ohlcv-input.js';
|
|
2
|
+
import { extractOhlcvBarsFromUnknown, parseJsonIfString } from './fetch-result.js';
|
|
3
|
+
import { extractLiveBindingFromFetchPayload } from './live/binding-extract.js';
|
|
4
|
+
import { validateOhlcvBarsFromToolResult, sanitizeOhlcvBarRows, OHLCV_EXTRACT_MAX_BARS } from './ohlcv-window.js';
|
|
5
|
+
import { attachChartLoadMeta } from './chart-ohlcv-load-status.js';
|
|
6
|
+
import { runOhlcvIntegrityPipeline } from './ohlcv-integrity.js';
|
|
3
7
|
import { prepareChart } from './prepare.js';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
8
|
+
import { AGENT_CHART_DISPLAY_MAX_POINTS } from './schemas.js';
|
|
9
|
+
const APPLY_DRAWINGS_MAX_POINTS = AGENT_CHART_DISPLAY_MAX_POINTS;
|
|
10
|
+
export function preprocessApplyChartDrawingsInput(raw) {
|
|
11
|
+
if (typeof raw !== 'object' || raw == null) {
|
|
12
|
+
return preprocessOhlcvToolInput(raw);
|
|
7
13
|
}
|
|
8
|
-
|
|
9
|
-
|
|
14
|
+
const input = { ...preprocessOhlcvToolInput(raw) };
|
|
15
|
+
if (input.prepareReplay != null) {
|
|
16
|
+
input.prepareReplay = parseJsonIfString(input.prepareReplay);
|
|
17
|
+
}
|
|
18
|
+
if (input.live != null) {
|
|
19
|
+
input.live = parseJsonIfString(input.live);
|
|
20
|
+
}
|
|
21
|
+
if (input.trendLines == null) {
|
|
22
|
+
const calcTrendLines = input.data?.trendLines;
|
|
23
|
+
if (Array.isArray(calcTrendLines)) {
|
|
24
|
+
input.trendLines = calcTrendLines;
|
|
25
|
+
}
|
|
10
26
|
}
|
|
11
|
-
return
|
|
27
|
+
return input;
|
|
28
|
+
}
|
|
29
|
+
function barsFromInput(input) {
|
|
30
|
+
const extractOptions = { maxPoints: OHLCV_EXTRACT_MAX_BARS };
|
|
31
|
+
const fromTool = input.toolResult != null
|
|
32
|
+
? (extractOhlcvBarsFromUnknown(input.toolResult, extractOptions) ?? [])
|
|
33
|
+
: [];
|
|
34
|
+
const raw = (fromTool.length ? fromTool : null) ??
|
|
35
|
+
(input.rows?.length ? input.rows : null) ??
|
|
36
|
+
[];
|
|
37
|
+
return sanitizeOhlcvBarRows(raw);
|
|
12
38
|
}
|
|
13
39
|
function drawingOverlaysFromInput(input) {
|
|
14
40
|
if (input.removeDrawings) {
|
|
@@ -25,6 +51,13 @@ function drawingOverlaysFromInput(input) {
|
|
|
25
51
|
out.push(input.fibonacci);
|
|
26
52
|
}
|
|
27
53
|
if (input.trendLines?.length) {
|
|
54
|
+
const incomplete = input.trendLines.some(line => !line.pointA ||
|
|
55
|
+
!line.pointB ||
|
|
56
|
+
!Number.isFinite(line.pointA.time) ||
|
|
57
|
+
!Number.isFinite(line.pointB.time));
|
|
58
|
+
if (incomplete) {
|
|
59
|
+
return out;
|
|
60
|
+
}
|
|
28
61
|
out.push({
|
|
29
62
|
type: 'trend_lines',
|
|
30
63
|
lines: input.trendLines.map(line => ({
|
|
@@ -44,20 +77,59 @@ function stripDrawingOverlays(replay) {
|
|
|
44
77
|
const kept = replay.overlays.filter(o => o.type !== 'horizontal_levels' &&
|
|
45
78
|
o.type !== 'pivot_levels' &&
|
|
46
79
|
o.type !== 'fibonacci' &&
|
|
47
|
-
o.type !== 'trend_lines'
|
|
80
|
+
o.type !== 'trend_lines' &&
|
|
81
|
+
o.type !== 'chart_pattern');
|
|
48
82
|
return { ...replay, overlays: kept };
|
|
49
83
|
}
|
|
84
|
+
function shouldSkipDefaultOverlays(baseReplay, indicatorOverlays) {
|
|
85
|
+
return (baseReplay.skipDefaultOverlays === true ||
|
|
86
|
+
baseReplay.usedDefaultOverlays === true ||
|
|
87
|
+
indicatorOverlays.length > 0);
|
|
88
|
+
}
|
|
89
|
+
function resolveLiveBinding(input) {
|
|
90
|
+
if (input.live) {
|
|
91
|
+
return input.live;
|
|
92
|
+
}
|
|
93
|
+
if (input.toolResult != null) {
|
|
94
|
+
return extractLiveBindingFromFetchPayload(input.toolResult, {
|
|
95
|
+
maxPoints: APPLY_DRAWINGS_MAX_POINTS,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
return undefined;
|
|
99
|
+
}
|
|
50
100
|
/** Re-prepare chart with drawing overlays merged into prepareReplay. */
|
|
51
101
|
export function applyChartDrawings(input) {
|
|
52
102
|
const bars = barsFromInput(input);
|
|
53
103
|
if (!bars.length) {
|
|
54
104
|
return {
|
|
55
105
|
ok: false,
|
|
56
|
-
reason:
|
|
106
|
+
reason: missingOhlcvBarsReason(input) +
|
|
107
|
+
' Use the same fetch JSON as the original chart — do not substitute analysis JSON or market snapshot.',
|
|
57
108
|
};
|
|
58
109
|
}
|
|
110
|
+
if (input.toolResult != null) {
|
|
111
|
+
const windowCheck = validateOhlcvBarsFromToolResult(bars, input.toolResult, input.title);
|
|
112
|
+
if (!windowCheck.ok) {
|
|
113
|
+
return windowCheck;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const integrity = runOhlcvIntegrityPipeline(bars, {
|
|
117
|
+
toolResult: input.toolResult,
|
|
118
|
+
rows: input.rows,
|
|
119
|
+
});
|
|
120
|
+
if (!integrity.ok) {
|
|
121
|
+
return integrity;
|
|
122
|
+
}
|
|
59
123
|
const title = input.title?.trim() || 'Chart';
|
|
60
124
|
const newDrawings = drawingOverlaysFromInput(input);
|
|
125
|
+
if (input.trendLines?.length &&
|
|
126
|
+
!newDrawings.some(o => o.type === 'trend_lines') &&
|
|
127
|
+
!input.removeDrawings) {
|
|
128
|
+
return {
|
|
129
|
+
ok: false,
|
|
130
|
+
reason: '`trendLines` entries must include `pointA` and `pointB` from `calculate_trend_lines`. `analyze_trend_structure` summaries cannot be drawn directly.',
|
|
131
|
+
};
|
|
132
|
+
}
|
|
61
133
|
let baseReplay = input.prepareReplay ?? {};
|
|
62
134
|
if (input.removeDrawings) {
|
|
63
135
|
baseReplay = stripDrawingOverlays(baseReplay);
|
|
@@ -65,31 +137,29 @@ export function applyChartDrawings(input) {
|
|
|
65
137
|
const indicatorOverlays = baseReplay.overlays?.filter(o => o.type !== 'horizontal_levels' &&
|
|
66
138
|
o.type !== 'pivot_levels' &&
|
|
67
139
|
o.type !== 'fibonacci' &&
|
|
68
|
-
o.type !== 'trend_lines'
|
|
140
|
+
o.type !== 'trend_lines' &&
|
|
141
|
+
o.type !== 'chart_pattern') ?? [];
|
|
69
142
|
const mergedOverlays = [...indicatorOverlays, ...newDrawings];
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
title,
|
|
73
|
-
toolResult: input.toolResult,
|
|
74
|
-
});
|
|
75
|
-
if (!fromRows.ok) {
|
|
76
|
-
return fromRows;
|
|
77
|
-
}
|
|
78
|
-
if (!mergedOverlays.length && !baseReplay.skipDefaultOverlays) {
|
|
79
|
-
return fromRows;
|
|
80
|
-
}
|
|
81
|
-
return prepareChart({
|
|
82
|
-
title,
|
|
83
|
-
bars,
|
|
84
|
-
overlays: mergedOverlays.length ? mergedOverlays : [],
|
|
85
|
-
...(baseReplay.skipDefaultOverlays ? { options: { skipDefaultOverlays: true } } : {}),
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
return prepareChart({
|
|
143
|
+
const skipDefaults = shouldSkipDefaultOverlays(baseReplay, indicatorOverlays);
|
|
144
|
+
const chartResult = prepareChart({
|
|
89
145
|
title,
|
|
90
146
|
bars,
|
|
91
147
|
...(mergedOverlays.length ? { overlays: mergedOverlays } : {}),
|
|
92
|
-
|
|
148
|
+
options: {
|
|
149
|
+
maxPoints: APPLY_DRAWINGS_MAX_POINTS,
|
|
150
|
+
...(skipDefaults ? { skipDefaultOverlays: true } : {}),
|
|
151
|
+
},
|
|
93
152
|
});
|
|
153
|
+
if (!chartResult.ok) {
|
|
154
|
+
return chartResult;
|
|
155
|
+
}
|
|
156
|
+
const live = resolveLiveBinding(input);
|
|
157
|
+
return {
|
|
158
|
+
ok: true,
|
|
159
|
+
data: attachChartLoadMeta({
|
|
160
|
+
...chartResult.data,
|
|
161
|
+
...(live ? { live } : {}),
|
|
162
|
+
}, bars, { toolResult: input.toolResult, title: input.title, ohlcvFingerprint: integrity.data.fingerprint }),
|
|
163
|
+
};
|
|
94
164
|
}
|
|
95
165
|
//# sourceMappingURL=apply-chart-drawings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply-chart-drawings.js","sourceRoot":"","sources":["../../../src/core/chart/apply-chart-drawings.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,2BAA2B,EAAC,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"apply-chart-drawings.js","sourceRoot":"","sources":["../../../src/core/chart/apply-chart-drawings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { PrepareChartOutput } from './schemas.js';
|
|
2
|
+
/** Agent-facing chart payload — omits series point arrays (UI still gets full chart via structuredContent). */
|
|
3
|
+
export declare function slimChartOutputForAgent(output: PrepareChartOutput): Record<string, unknown>;
|
|
4
|
+
//# sourceMappingURL=chart-agent-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-agent-view.d.ts","sourceRoot":"","sources":["../../../src/core/chart/chart-agent-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,cAAc,CAAC;AAErD,+GAA+G;AAC/G,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyB3F"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** Agent-facing chart payload — omits series point arrays (UI still gets full chart via structuredContent). */
|
|
2
|
+
export function slimChartOutputForAgent(output) {
|
|
3
|
+
const series = output.chart.series.map(s => ({
|
|
4
|
+
id: s.id,
|
|
5
|
+
type: s.type,
|
|
6
|
+
label: s.label,
|
|
7
|
+
pointCount: s.data.length,
|
|
8
|
+
...(s.priceScaleId ? { priceScaleId: s.priceScaleId } : {}),
|
|
9
|
+
...(s.paneId ? { paneId: s.paneId } : {}),
|
|
10
|
+
...(s.overlay != null ? { overlay: s.overlay } : {}),
|
|
11
|
+
...(s.lastValueVisible != null ? { lastValueVisible: s.lastValueVisible } : {}),
|
|
12
|
+
}));
|
|
13
|
+
return {
|
|
14
|
+
kind: output.kind,
|
|
15
|
+
agentView: 'slim',
|
|
16
|
+
chart: {
|
|
17
|
+
...(output.chart.title ? { title: output.chart.title } : {}),
|
|
18
|
+
...(output.chart.height != null ? { height: output.chart.height } : {}),
|
|
19
|
+
...(output.chart.panes ? { paneCount: output.chart.panes.length } : {}),
|
|
20
|
+
series,
|
|
21
|
+
},
|
|
22
|
+
...(output.prepareReplay ? { prepareReplay: output.prepareReplay } : {}),
|
|
23
|
+
...(output.live ? { live: output.live } : {}),
|
|
24
|
+
...(output.meta ? { meta: output.meta } : {}),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=chart-agent-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-agent-view.js","sourceRoot":"","sources":["../../../src/core/chart/chart-agent-view.ts"],"names":[],"mappings":"AAEA,+GAA+G;AAC/G,MAAM,UAAU,uBAAuB,CAAC,MAA0B;IACjE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5C,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM;QACzB,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAC,YAAY,EAAE,CAAC,CAAC,YAAY,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,GAAG,CAAC,CAAC,CAAC,gBAAgB,IAAI,IAAI,CAAC,CAAC,CAAC,EAAC,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7E,CAAC,CAAC,CAAC;IAEJ,OAAO;QACN,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE;YACN,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,MAAM;SACN;QACD,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAC,aAAa,EAAE,MAAM,CAAC,aAAa,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/** OHLCV bar array keys seen across DeFi and market-data providers. */
|
|
2
|
+
export declare const OHLCV_COLLECTION_KEYS: readonly ["candles", "klines", "bars", "candlesticks"];
|
|
3
|
+
/** Line / metric point array keys (time series analysis and some chart sources). */
|
|
4
|
+
export declare const TIME_SERIES_COLLECTION_KEYS: readonly ["series", "points", "values", "data", "list"];
|
|
5
|
+
export declare const CHART_DATA_COLLECTION_KEYS: readonly ["candles", "klines", "bars", "candlesticks", "series", "points", "values", "data", "list"];
|
|
6
|
+
export declare const FETCH_WINDOW_MS_KEYS: readonly ["startTimeMs", "endTimeMs", "startMs", "endMs"];
|
|
7
|
+
export declare const FETCH_LOOKBACK_KEYS: readonly ["lookbackDays", "lookbackHours"];
|
|
8
|
+
export declare const FETCH_DECLARED_COUNT_KEYS: readonly ["candleCount", "expectedBars", "barCount", "pointCount", "expectedPoints"];
|
|
9
|
+
export declare const MANGLED_CHART_DATA_REASON: string;
|
|
10
|
+
/** Primary data record for interval-based OHLCV fetches (nested `ohlcv` or flat symbol envelope). */
|
|
11
|
+
export declare function intervalDataRecordFromPayload(payload: unknown): Record<string, unknown> | null;
|
|
12
|
+
export declare function collectionIsItemWrapper(raw: unknown): boolean;
|
|
13
|
+
export declare function recordHasCollectionKey(record: Record<string, unknown>, keys: readonly string[]): boolean;
|
|
14
|
+
/** Payload layers to scan for mangled `{ item: [...] }` collections. */
|
|
15
|
+
export declare function payloadRecordsForValidation(toolResult: unknown): Record<string, unknown>[];
|
|
16
|
+
/** Interval OHLCV envelope: symbol + bar interval + bar collection. */
|
|
17
|
+
export declare function structuredIntervalEnvelopeRecord(toolResult: unknown): Record<string, unknown> | null;
|
|
18
|
+
/** Time-series envelope: explicit fetch title + point collection (metric / line charts). */
|
|
19
|
+
export declare function structuredTimeSeriesEnvelopeRecord(toolResult: unknown): Record<string, unknown> | null;
|
|
20
|
+
export declare function fetchMetadataPresent(toolResult: unknown, record: Record<string, unknown>): boolean;
|
|
21
|
+
/** Reject agent-reconstructed chart fetch payloads (OHLCV or time series). */
|
|
22
|
+
export declare function rejectMangledChartDataToolResult(toolResult: unknown): {
|
|
23
|
+
ok: true;
|
|
24
|
+
} | {
|
|
25
|
+
ok: false;
|
|
26
|
+
reason: string;
|
|
27
|
+
};
|
|
28
|
+
/** @deprecated Alias — use rejectMangledChartDataToolResult */
|
|
29
|
+
export declare const rejectMangledVendorFetchToolResult: typeof rejectMangledChartDataToolResult;
|
|
30
|
+
/** Validate declared bar count and timestamp field consistency for interval OHLCV fetches. */
|
|
31
|
+
export declare function validateStructuredIntervalFetchShape(toolResult: unknown, bars: Record<string, unknown>[]): {
|
|
32
|
+
ok: true;
|
|
33
|
+
} | {
|
|
34
|
+
ok: false;
|
|
35
|
+
reason: string;
|
|
36
|
+
};
|
|
37
|
+
/** Hard-fail when point times disagree with chart title lookback (OHLCV bars or line series). */
|
|
38
|
+
export declare function rejectTitleLookbackVsPointTimes(title: string | undefined, rows: Record<string, unknown>[], timeSecFromRow: (row: Record<string, unknown>) => number | null): {
|
|
39
|
+
ok: true;
|
|
40
|
+
} | {
|
|
41
|
+
ok: false;
|
|
42
|
+
reason: string;
|
|
43
|
+
};
|
|
44
|
+
export declare function rejectTitleLookbackVsBarTimes(title: string | undefined, bars: Record<string, unknown>[]): {
|
|
45
|
+
ok: true;
|
|
46
|
+
} | {
|
|
47
|
+
ok: false;
|
|
48
|
+
reason: string;
|
|
49
|
+
};
|
|
50
|
+
export declare function rejectTitleLookbackVsTimeSeriesPoints(title: string | undefined, points: Record<string, unknown>[]): {
|
|
51
|
+
ok: true;
|
|
52
|
+
} | {
|
|
53
|
+
ok: false;
|
|
54
|
+
reason: string;
|
|
55
|
+
};
|
|
56
|
+
/** When toolResult is present, reject mangled fetches and title/point timeline mismatches. */
|
|
57
|
+
export declare function validateTimeSeriesPointsFromToolResult(points: Record<string, unknown>[], toolResult: unknown, title?: string): {
|
|
58
|
+
ok: true;
|
|
59
|
+
} | {
|
|
60
|
+
ok: false;
|
|
61
|
+
reason: string;
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=chart-data-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-data-validation.d.ts","sourceRoot":"","sources":["../../../src/core/chart/chart-data-validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
import { barTimeSecFromRow } from './live/bar-merge.js';
|
|
2
|
+
import { timeSeriesPointTimeSec } from './analysis/time-series-input.js';
|
|
3
|
+
import { parseLookbackSpanFromChartTitle } from './ohlcv-window-expectations.js';
|
|
4
|
+
import { parseChartTime } from './point-normalize.js';
|
|
5
|
+
/** OHLCV bar array keys seen across DeFi and market-data providers. */
|
|
6
|
+
export const OHLCV_COLLECTION_KEYS = ['candles', 'klines', 'bars', 'candlesticks'];
|
|
7
|
+
/** Line / metric point array keys (time series analysis and some chart sources). */
|
|
8
|
+
export const TIME_SERIES_COLLECTION_KEYS = ['series', 'points', 'values', 'data', 'list'];
|
|
9
|
+
export const CHART_DATA_COLLECTION_KEYS = [
|
|
10
|
+
...OHLCV_COLLECTION_KEYS,
|
|
11
|
+
...TIME_SERIES_COLLECTION_KEYS,
|
|
12
|
+
];
|
|
13
|
+
export const FETCH_WINDOW_MS_KEYS = ['startTimeMs', 'endTimeMs', 'startMs', 'endMs'];
|
|
14
|
+
export const FETCH_LOOKBACK_KEYS = ['lookbackDays', 'lookbackHours'];
|
|
15
|
+
export const FETCH_DECLARED_COUNT_KEYS = [
|
|
16
|
+
'candleCount',
|
|
17
|
+
'expectedBars',
|
|
18
|
+
'barCount',
|
|
19
|
+
'pointCount',
|
|
20
|
+
'expectedPoints',
|
|
21
|
+
];
|
|
22
|
+
export const MANGLED_CHART_DATA_REASON = 'Chart data toolResult must be the full provider fetch MCP result — not hand-reconstructed rows. ' +
|
|
23
|
+
'Run the provider fetch once and pass the structured JSON unchanged (timestamps and window metadata). ' +
|
|
24
|
+
'Do not wrap arrays as `{ item: [...] }`.';
|
|
25
|
+
const TITLE_LOOKBACK_POINT_GRACE_SEC = 2 * 86_400;
|
|
26
|
+
function coerceCount(raw) {
|
|
27
|
+
if (typeof raw === 'number' && Number.isFinite(raw) && raw > 0) {
|
|
28
|
+
return Math.floor(raw);
|
|
29
|
+
}
|
|
30
|
+
if (typeof raw === 'string') {
|
|
31
|
+
const n = Number(raw.trim());
|
|
32
|
+
if (Number.isFinite(n) && n > 0) {
|
|
33
|
+
return Math.floor(n);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
function coerceMs(raw) {
|
|
39
|
+
if (typeof raw === 'number' && Number.isFinite(raw) && raw > 0) {
|
|
40
|
+
return raw;
|
|
41
|
+
}
|
|
42
|
+
if (typeof raw === 'string') {
|
|
43
|
+
const n = Number(raw.trim());
|
|
44
|
+
if (Number.isFinite(n) && n > 0) {
|
|
45
|
+
return n;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
/** Primary data record for interval-based OHLCV fetches (nested `ohlcv` or flat symbol envelope). */
|
|
51
|
+
export function intervalDataRecordFromPayload(payload) {
|
|
52
|
+
if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
const record = payload;
|
|
56
|
+
if (record.ohlcv && typeof record.ohlcv === 'object' && !Array.isArray(record.ohlcv)) {
|
|
57
|
+
return record.ohlcv;
|
|
58
|
+
}
|
|
59
|
+
for (const key of ['candles', 'startTimeMs', 'coin', 'symbol', 'timeframe', 'interval']) {
|
|
60
|
+
if (key in record) {
|
|
61
|
+
return record;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
export function collectionIsItemWrapper(raw) {
|
|
67
|
+
return (raw != null &&
|
|
68
|
+
typeof raw === 'object' &&
|
|
69
|
+
!Array.isArray(raw) &&
|
|
70
|
+
Array.isArray(raw.item));
|
|
71
|
+
}
|
|
72
|
+
export function recordHasCollectionKey(record, keys) {
|
|
73
|
+
for (const key of keys) {
|
|
74
|
+
if (key in record) {
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
/** Payload layers to scan for mangled `{ item: [...] }` collections. */
|
|
81
|
+
export function payloadRecordsForValidation(toolResult) {
|
|
82
|
+
if (!toolResult || typeof toolResult !== 'object' || Array.isArray(toolResult)) {
|
|
83
|
+
return [];
|
|
84
|
+
}
|
|
85
|
+
const root = toolResult;
|
|
86
|
+
const records = [root];
|
|
87
|
+
const intervalRecord = intervalDataRecordFromPayload(toolResult);
|
|
88
|
+
if (intervalRecord && intervalRecord !== root) {
|
|
89
|
+
records.push(intervalRecord);
|
|
90
|
+
}
|
|
91
|
+
if (root.result && typeof root.result === 'object' && !Array.isArray(root.result)) {
|
|
92
|
+
records.push(root.result);
|
|
93
|
+
}
|
|
94
|
+
return records;
|
|
95
|
+
}
|
|
96
|
+
/** Interval OHLCV envelope: symbol + bar interval + bar collection. */
|
|
97
|
+
export function structuredIntervalEnvelopeRecord(toolResult) {
|
|
98
|
+
const record = intervalDataRecordFromPayload(toolResult);
|
|
99
|
+
if (!record) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
const symbolRaw = record.coin ?? record.symbol;
|
|
103
|
+
const hasSymbol = typeof symbolRaw === 'string' && symbolRaw.trim().length > 0;
|
|
104
|
+
const intervalRaw = record.interval ?? record.timeframe;
|
|
105
|
+
const hasInterval = typeof intervalRaw === 'string' && intervalRaw.trim().length > 0;
|
|
106
|
+
if (!hasSymbol || !hasInterval || !recordHasCollectionKey(record, OHLCV_COLLECTION_KEYS)) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
return record;
|
|
110
|
+
}
|
|
111
|
+
/** Time-series envelope: explicit fetch title + point collection (metric / line charts). */
|
|
112
|
+
export function structuredTimeSeriesEnvelopeRecord(toolResult) {
|
|
113
|
+
if (!toolResult || typeof toolResult !== 'object' || Array.isArray(toolResult)) {
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
const root = toolResult;
|
|
117
|
+
const title = typeof root.title === 'string' && root.title.trim()
|
|
118
|
+
? root.title.trim()
|
|
119
|
+
: typeof root.result?.title === 'string'
|
|
120
|
+
? String(root.result.title).trim()
|
|
121
|
+
: '';
|
|
122
|
+
if (!title) {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
for (const record of payloadRecordsForValidation(toolResult)) {
|
|
126
|
+
if (recordHasCollectionKey(record, TIME_SERIES_COLLECTION_KEYS)) {
|
|
127
|
+
return record;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (recordHasCollectionKey(root, TIME_SERIES_COLLECTION_KEYS)) {
|
|
131
|
+
return root;
|
|
132
|
+
}
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
function hasFetchWindowMs(record) {
|
|
136
|
+
const start = coerceMs(record.startTimeMs ?? record.startMs);
|
|
137
|
+
const end = coerceMs(record.endTimeMs ?? record.endMs);
|
|
138
|
+
return start != null && end != null;
|
|
139
|
+
}
|
|
140
|
+
function candlesFromIntervalRecord(record) {
|
|
141
|
+
for (const key of OHLCV_COLLECTION_KEYS) {
|
|
142
|
+
const raw = record[key];
|
|
143
|
+
if (Array.isArray(raw)) {
|
|
144
|
+
return raw.filter((row) => row != null && typeof row === 'object');
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
/** Vendor interval fetches use millisecond bar timestamps; agent hand-copies often use generic `time`. */
|
|
150
|
+
function intervalEnvelopeHasVendorBarTimestamps(record) {
|
|
151
|
+
const candles = candlesFromIntervalRecord(record);
|
|
152
|
+
if (!candles?.length) {
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
const hasVendorMs = (bar) => coerceMs(bar.timestampMs) != null || coerceMs(bar.openTime) != null;
|
|
156
|
+
return hasVendorMs(candles[0]) && hasVendorMs(candles[candles.length - 1]);
|
|
157
|
+
}
|
|
158
|
+
export function fetchMetadataPresent(toolResult, record) {
|
|
159
|
+
const layers = [record, ...payloadRecordsForValidation(toolResult)];
|
|
160
|
+
for (const layer of layers) {
|
|
161
|
+
if (hasFetchWindowMs(layer)) {
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
for (const key of FETCH_LOOKBACK_KEYS) {
|
|
165
|
+
if (coerceCount(layer[key]) != null) {
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
for (const key of FETCH_DECLARED_COUNT_KEYS) {
|
|
170
|
+
if (coerceCount(layer[key]) != null) {
|
|
171
|
+
return true;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (intervalEnvelopeHasVendorBarTimestamps(record)) {
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
/** Reject agent-reconstructed chart fetch payloads (OHLCV or time series). */
|
|
181
|
+
export function rejectMangledChartDataToolResult(toolResult) {
|
|
182
|
+
if (!toolResult || typeof toolResult !== 'object') {
|
|
183
|
+
return { ok: true };
|
|
184
|
+
}
|
|
185
|
+
for (const record of payloadRecordsForValidation(toolResult)) {
|
|
186
|
+
for (const key of CHART_DATA_COLLECTION_KEYS) {
|
|
187
|
+
if (collectionIsItemWrapper(record[key])) {
|
|
188
|
+
return { ok: false, reason: MANGLED_CHART_DATA_REASON };
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
const intervalEnvelope = structuredIntervalEnvelopeRecord(toolResult);
|
|
193
|
+
if (intervalEnvelope && !fetchMetadataPresent(toolResult, intervalEnvelope)) {
|
|
194
|
+
return { ok: false, reason: MANGLED_CHART_DATA_REASON };
|
|
195
|
+
}
|
|
196
|
+
return { ok: true };
|
|
197
|
+
}
|
|
198
|
+
/** @deprecated Alias — use rejectMangledChartDataToolResult */
|
|
199
|
+
export const rejectMangledVendorFetchToolResult = rejectMangledChartDataToolResult;
|
|
200
|
+
function barTimeTimestampConflict(bar) {
|
|
201
|
+
if (bar.timestampMs == null || !('time' in bar)) {
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
const fromMs = parseChartTime(bar.timestampMs);
|
|
205
|
+
const fromTime = parseChartTime(bar.time);
|
|
206
|
+
if (fromMs == null || fromTime == null) {
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
const msSec = typeof fromMs === 'number' ? fromMs : null;
|
|
210
|
+
const timeSec = typeof fromTime === 'number' ? fromTime : null;
|
|
211
|
+
if (msSec == null || timeSec == null) {
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
return Math.abs(msSec - timeSec) > 86_400;
|
|
215
|
+
}
|
|
216
|
+
/** Validate declared bar count and timestamp field consistency for interval OHLCV fetches. */
|
|
217
|
+
export function validateStructuredIntervalFetchShape(toolResult, bars) {
|
|
218
|
+
const record = intervalDataRecordFromPayload(toolResult);
|
|
219
|
+
if (!record) {
|
|
220
|
+
return { ok: true };
|
|
221
|
+
}
|
|
222
|
+
const symbolRaw = record.coin ?? record.symbol;
|
|
223
|
+
if (typeof symbolRaw !== 'string' || !symbolRaw.trim()) {
|
|
224
|
+
return { ok: true };
|
|
225
|
+
}
|
|
226
|
+
const fetchUsesTimestampMs = bars.some(bar => bar.timestampMs != null);
|
|
227
|
+
for (const bar of bars) {
|
|
228
|
+
if (barTimeTimestampConflict(bar)) {
|
|
229
|
+
return {
|
|
230
|
+
ok: false,
|
|
231
|
+
reason: 'OHLCV rows have conflicting `time` and `timestampMs` fields. ' +
|
|
232
|
+
'Pass the full fetch toolResult unchanged — do not rewrite timestamps.',
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
if (fetchUsesTimestampMs &&
|
|
236
|
+
bar.timestampMs == null &&
|
|
237
|
+
!('openTime' in bar) &&
|
|
238
|
+
'time' in bar) {
|
|
239
|
+
return {
|
|
240
|
+
ok: false,
|
|
241
|
+
reason: 'OHLCV rows must keep vendor timestamp fields from the fetch result. ' +
|
|
242
|
+
'Pass the full fetch toolResult unchanged — do not replace with generic `time` fields.',
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
let expected = null;
|
|
247
|
+
for (const key of FETCH_DECLARED_COUNT_KEYS) {
|
|
248
|
+
const n = coerceCount(record[key]);
|
|
249
|
+
if (n != null) {
|
|
250
|
+
expected = expected == null ? n : Math.max(expected, n);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
if (expected != null && Math.abs(bars.length - expected) > 1) {
|
|
254
|
+
return {
|
|
255
|
+
ok: false,
|
|
256
|
+
reason: `Row count (${bars.length}) does not match fetch declared count (${expected}). ` +
|
|
257
|
+
'Pass the full chart data fetch toolResult unchanged.',
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
return { ok: true };
|
|
261
|
+
}
|
|
262
|
+
/** Hard-fail when point times disagree with chart title lookback (OHLCV bars or line series). */
|
|
263
|
+
export function rejectTitleLookbackVsPointTimes(title, rows, timeSecFromRow) {
|
|
264
|
+
if (!title?.trim() || rows.length < 2) {
|
|
265
|
+
return { ok: true };
|
|
266
|
+
}
|
|
267
|
+
const lookback = parseLookbackSpanFromChartTitle(title);
|
|
268
|
+
if (!lookback) {
|
|
269
|
+
return { ok: true };
|
|
270
|
+
}
|
|
271
|
+
const times = rows
|
|
272
|
+
.map(row => timeSecFromRow(row))
|
|
273
|
+
.filter((t) => t != null);
|
|
274
|
+
if (times.length < 2) {
|
|
275
|
+
return { ok: true };
|
|
276
|
+
}
|
|
277
|
+
const firstSec = Math.min(...times);
|
|
278
|
+
const lastSec = Math.max(...times);
|
|
279
|
+
const nowSec = Math.floor(Date.now() / 1000);
|
|
280
|
+
const graceSec = TITLE_LOOKBACK_POINT_GRACE_SEC;
|
|
281
|
+
const earliestAllowed = nowSec - lookback.spanSec - graceSec;
|
|
282
|
+
if (firstSec < earliestAllowed) {
|
|
283
|
+
return {
|
|
284
|
+
ok: false,
|
|
285
|
+
reason: `First point is too old for chart title lookback (${lookback.label}). ` +
|
|
286
|
+
'Run the provider fetch for the requested window and pass the full MCP toolResult unchanged — do not paste rows from memory.',
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
if (lastSec < nowSec - lookback.spanSec - graceSec) {
|
|
290
|
+
return {
|
|
291
|
+
ok: false,
|
|
292
|
+
reason: `Latest point is too stale for chart title lookback (${lookback.label}). ` +
|
|
293
|
+
'Re-run the provider fetch and pass the full MCP result unchanged.',
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
const actualSpanSec = Math.max(0, lastSec - firstSec);
|
|
297
|
+
if (actualSpanSec > lookback.spanSec * 1.35) {
|
|
298
|
+
return {
|
|
299
|
+
ok: false,
|
|
300
|
+
reason: `Point span (~${Math.round(actualSpanSec / 86_400)}d) exceeds chart title lookback (${lookback.label}) — likely mixed timelines. ` +
|
|
301
|
+
'Pass the full fetch toolResult unchanged; do not merge old and new data.',
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
return { ok: true };
|
|
305
|
+
}
|
|
306
|
+
export function rejectTitleLookbackVsBarTimes(title, bars) {
|
|
307
|
+
return rejectTitleLookbackVsPointTimes(title, bars, barTimeSecFromRow);
|
|
308
|
+
}
|
|
309
|
+
export function rejectTitleLookbackVsTimeSeriesPoints(title, points) {
|
|
310
|
+
return rejectTitleLookbackVsPointTimes(title, points, timeSeriesPointTimeSec);
|
|
311
|
+
}
|
|
312
|
+
/** When toolResult is present, reject mangled fetches and title/point timeline mismatches. */
|
|
313
|
+
export function validateTimeSeriesPointsFromToolResult(points, toolResult, title) {
|
|
314
|
+
const mangled = rejectMangledChartDataToolResult(toolResult);
|
|
315
|
+
if (!mangled.ok) {
|
|
316
|
+
return mangled;
|
|
317
|
+
}
|
|
318
|
+
return rejectTitleLookbackVsTimeSeriesPoints(title, points);
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=chart-data-validation.js.map
|