@continuumdao/continuum-node-sdk 1.3.24 → 1.3.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +197 -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 +634 -0
- package/dist/core/chart/analysis/analyze-tools.d.ts.map +1 -0
- package/dist/core/chart/analysis/analyze-tools.js +785 -0
- package/dist/core/chart/analysis/analyze-tools.js.map +1 -0
- package/dist/core/chart/analysis/candlestick-patterns-tools.d.ts +125 -0
- package/dist/core/chart/analysis/candlestick-patterns-tools.d.ts.map +1 -0
- package/dist/core/chart/analysis/candlestick-patterns-tools.js +159 -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/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/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 +288 -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 +50 -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 +80 -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 +64 -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/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 +95 -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 +72 -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 +182 -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 +15 -0
- package/dist/core/chart/apply-chart-drawings.d.ts.map +1 -1
- package/dist/core/chart/apply-chart-drawings.js +114 -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 +1 -1
- package/dist/core/chart/customization-catalog.d.ts.map +1 -1
- package/dist/core/chart/customization-catalog.js +14 -1
- 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 +3 -2
- package/dist/core/chart/index.d.ts.map +1 -1
- package/dist/core/chart/index.js +3 -2
- package/dist/core/chart/index.js.map +1 -1
- package/dist/core/chart/levels/calculate-tools.d.ts +37 -0
- package/dist/core/chart/levels/calculate-tools.d.ts.map +1 -1
- package/dist/core/chart/levels/calculate-tools.js +48 -2
- package/dist/core/chart/levels/calculate-tools.js.map +1 -1
- package/dist/core/chart/levels/key-levels.d.ts +6 -0
- package/dist/core/chart/levels/key-levels.d.ts.map +1 -1
- package/dist/core/chart/levels/key-levels.js +3 -3
- package/dist/core/chart/levels/key-levels.js.map +1 -1
- package/dist/core/chart/levels/trend-lines.d.ts +24 -0
- package/dist/core/chart/levels/trend-lines.d.ts.map +1 -0
- package/dist/core/chart/levels/trend-lines.js +129 -0
- package/dist/core/chart/levels/trend-lines.js.map +1 -0
- package/dist/core/chart/live/bar-merge.d.ts +8 -0
- package/dist/core/chart/live/bar-merge.d.ts.map +1 -0
- package/dist/core/chart/live/bar-merge.js +52 -0
- package/dist/core/chart/live/bar-merge.js.map +1 -0
- 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 +2 -0
- package/dist/core/chart/live/index.d.ts.map +1 -1
- package/dist/core/chart/live/index.js +2 -0
- package/dist/core/chart/live/index.js.map +1 -1
- package/dist/core/chart/live/merge-tick.d.ts +2 -1
- package/dist/core/chart/live/merge-tick.d.ts.map +1 -1
- package/dist/core/chart/live/merge-tick.js +10 -5
- package/dist/core/chart/live/merge-tick.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 +686 -0
- package/dist/core/chart/overlay-schemas.d.ts.map +1 -1
- package/dist/core/chart/overlay-schemas.js +148 -0
- 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 +356 -9
- 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 +237 -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 +826 -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 +299 -26
- 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 +72 -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 +3 -3
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
# Chart analysis (data only — no chart envelope)
|
|
2
|
+
|
|
3
|
+
Structured OHLCV analysis for agent chat and orchestration. **Does not render charts.**
|
|
4
|
+
|
|
5
|
+
For plotting and on-chart drawings, see **`chart_docs`** (`chart.md`).
|
|
6
|
+
|
|
7
|
+
## Data integrity — never invent numbers
|
|
8
|
+
|
|
9
|
+
**Hard rule:** The agent must **not invent** OHLCV prices, timestamps, volumes, bar counts, period highs/lows, or pattern levels. Every number in chat must come from tool JSON on **this turn**.
|
|
10
|
+
|
|
11
|
+
| Source | Use for |
|
|
12
|
+
|--------|---------|
|
|
13
|
+
| **`meta.ohlcvSummary`** | Period **high**, **low**, **lastClose**, **barCount**, time span — ground truth for the loaded bars |
|
|
14
|
+
| **`meta.sessionBind`** | `{ title, ohlcvDigest }` for follow-up chart/analyze/apply — **do not re-paste fetch JSON** |
|
|
15
|
+
| **`meta.dataPolicy`** | One-line integrity reminder on tool responses |
|
|
16
|
+
| **`meta.loadStatus`** / **`meta.warnings`** (charts) | Incomplete fetch, live price issues |
|
|
17
|
+
| **`analysis.focusBar`** (candlestick) | Latest scanned bar OHLC |
|
|
18
|
+
| **`analysis.pattern` / `patterns[]`** (classic) | Pattern geometry only — still bounded by `meta.ohlcvSummary.high` |
|
|
19
|
+
| **`analysis.lastClose`**, **`analysis.levels[]`**, etc. | Typed analysis fields |
|
|
20
|
+
|
|
21
|
+
**Forbidden:** Pasting reformatted candle tables, “latest bar ~$X” without `focusBar` or `ohlcvSummary`, citing levels when `meta.ohlcvSummary.high` is lower, **stringifying `toolResult`**, mixing `rows` from an old turn with a new fetch.
|
|
22
|
+
|
|
23
|
+
## Never offer or deliver analysis without tools
|
|
24
|
+
|
|
25
|
+
**Hard rule:** Do **not** perform interpretive chart/OHLCV analysis in assistant prose without a matching **`analyze_*`** tool result on **this turn**. The UI chart is not a substitute for analysis tools.
|
|
26
|
+
|
|
27
|
+
| Situation | Wrong | Right |
|
|
28
|
+
|-----------|-------|-------|
|
|
29
|
+
| Operator asks to analyze / interpret / outlook | Prose-only trend, patterns, momentum | **`list_chart_analysis_options`** (if type unclear) → **`analyze_*`** → summarize tool JSON |
|
|
30
|
+
| Chart already visible; operator asks “what patterns?” | Visual read of candles | **`analyze_chart_patterns`** on same OHLCV session |
|
|
31
|
+
| After plotting, offering follow-ups | “Want RSI / key levels / patterns?” with no tool names | **`list_chart_analysis_options`**, or each option cites its **`analyze_*`** tool |
|
|
32
|
+
| Operator picks an analysis type | Summarize before calling tool | Call **`analyze_*` first**, then reply from **`analysis`** + **`meta`** |
|
|
33
|
+
|
|
34
|
+
**Routing is allowed without `analyze_*`:** present **`list_chart_analysis_options`** menu, ask operator to pick, quote **`meta.ohlcvSummary`** high/low/lastClose/barCount from the last chart/fetch tool only.
|
|
35
|
+
|
|
36
|
+
**One fetch per session:** Pass the full fetch object **once** on the first chart/analyze call. Follow-ups use **`{ title, ohlcvDigest }`** from **`meta.sessionBind`** — the node keeps the fetch server-side. Do **not** re-fetch for analysis-only follow-ups unless the operator changed symbol, interval, or lookback.
|
|
37
|
+
|
|
38
|
+
**Window expectations:** Put **interval + lookback** in every `title` (e.g. `ETH-PERP 15m — last 24h`, `BTC 4H — last 30d`, `ETH 1d — 6 months`). The SDK computes **`meta.windowExpectation`** / **`meta.fetchContext.expectedBarCount`** for any interval × lookback. If `meta.barCount` is far below expected, the payload is truncated or from a different fetch — **hard fail**; fix by passing the same full `toolResult`, not by switching interval.
|
|
39
|
+
|
|
40
|
+
If the operator asks for raw candles, **re-fetch** and summarize from `meta.ohlcvSummary` — do not reconstruct from memory.
|
|
41
|
+
|
|
42
|
+
## OHLCV integrity enforcement (SDK)
|
|
43
|
+
|
|
44
|
+
Chart and analysis tools **reject** bad input before rendering or scanning:
|
|
45
|
+
|
|
46
|
+
| Check | Effect |
|
|
47
|
+
|-------|--------|
|
|
48
|
+
| **`rows` without fetch `toolResult`** | **Hard fail** — hand-copied candles are not trusted (all vendors: Hyperliquid, GMX, CoinGecko, CMC, etc.) |
|
|
49
|
+
| **Invalid OHLC per bar** | **Hard fail** — e.g. `high < close`, or body at a stale price level while wick matches prior bar (mixed composite) |
|
|
50
|
+
| **Title interval ≠ fetch interval** | **Hard fail** — e.g. title `1H` with fetch `12h`; re-fetch at the requested interval, do not switch timeframe |
|
|
51
|
+
| **Pattern geometry outside `ohlcvSummary` range** | **Hard fail** on `analyze_chart_patterns` / `apply_chart_pattern_drawings` |
|
|
52
|
+
| **`meta.ohlcvFingerprint.digest`** | Fetch identity — stable across chart + analyze even when live merge updates lastClose; must match **`meta.sessionBind.ohlcvDigest`** |
|
|
53
|
+
|
|
54
|
+
On failure, re-fetch OHLCV and pass the **full** MCP JSON as **`toolResult`** unchanged. Do not retry with edited `rows`.
|
|
55
|
+
|
|
56
|
+
## “Analyse …” after charting (same session)
|
|
57
|
+
|
|
58
|
+
When the operator already has a chart and asks to **analyse**, **interpret**, or **add patterns**:
|
|
59
|
+
|
|
60
|
+
1. Reuse the **same `toolResult`** from the chart step — **no new `fetch_ohlcv`** unless they changed symbol, interval, or lookback.
|
|
61
|
+
2. Call **`analyze_*`** with that `toolResult` and the **same `title`** interval/lookback as the chart.
|
|
62
|
+
3. Verify **`meta.fetchContext.interval`**, **`meta.windowExpectation.expectedBarCount`**, and **`meta.ohlcvFingerprint.digest`** match the chart response.
|
|
63
|
+
4. To draw on the chart: **`apply_chart_pattern_drawings`** with `prepareReplay` + `live` from the chart — not another `prepare_chart_from_rows`.
|
|
64
|
+
|
|
65
|
+
Works for any vendor (Hyperliquid, GMX, CoinGecko, CMC, etc.) and any interval/lookback the operator requested.
|
|
66
|
+
|
|
67
|
+
## Live merge on analysis (default)
|
|
68
|
+
|
|
69
|
+
Every **`analyze_*`** on OHLCV **merges a live tick into the last bar by default** when:
|
|
70
|
+
|
|
71
|
+
- The data source supports live binding (Hyperliquid, GMX-shaped, CoinGecko market chart)
|
|
72
|
+
- The fetch is **current** (not a historical `endTimeMs` in the past)
|
|
73
|
+
- The OHLCV tail is at most **one bar** behind now
|
|
74
|
+
|
|
75
|
+
Check **`meta.liveMerge`** in the response:
|
|
76
|
+
|
|
77
|
+
| Field | Meaning |
|
|
78
|
+
|-------|---------|
|
|
79
|
+
| `liveMerge.merged: true` | Last bar updated with live price — quote **`meta.ohlcvSummary.lastClose`** |
|
|
80
|
+
| `liveMerge.priorLastClose` | Close before live merge (for comparison) |
|
|
81
|
+
| `liveMerge.livePrice` | Tick price used |
|
|
82
|
+
| `liveMerge.skippedReason` | Why live was not merged (historical window, stale tail, fetch failed, etc.) |
|
|
83
|
+
|
|
84
|
+
Set **`mergeLive: false`** for historical backtests or fixed `startTimeMs`/`endTimeMs` windows. Pass **`liveTick`** to skip the network fetch when reusing a tick from chart live poll.
|
|
85
|
+
|
|
86
|
+
**One OHLCV fetch** still suffices for multiple analyses on the same task — each `analyze_*` call re-merges live at invocation time (small network tick fetch, not a full OHLCV refetch).
|
|
87
|
+
|
|
88
|
+
## Analysis vs plotting
|
|
89
|
+
|
|
90
|
+
| Lane | Discovery | Tools | Output |
|
|
91
|
+
|------|-----------|-------|--------|
|
|
92
|
+
| **Analysis** | `list_chart_analysis_options` | `analyze_*` | JSON `{ analysis, meta }` |
|
|
93
|
+
| **Plotting** | `list_chart_customization_options` | `prepare_chart*`, `calculate_*`, `apply_chart_drawings` | `continuum/chart/v1` |
|
|
94
|
+
|
|
95
|
+
**Do not call `prepare_chart*` or `apply_chart_drawings` for analysis-only requests.**
|
|
96
|
+
|
|
97
|
+
**Do not call `analyze_*` when the operator only asked to plot or draw on a chart** — use the plotting lane instead.
|
|
98
|
+
|
|
99
|
+
## “Load data and analyze” (no chart)
|
|
100
|
+
|
|
101
|
+
When the operator asks to **load**, **fetch**, or **get** OHLCV and **analyze** / **interpret** (without **chart**, **plot**, or **draw**):
|
|
102
|
+
|
|
103
|
+
1. **Operator chooses** an OHLCV source; load MCP server if needed; fetch OHLCV (DeFi `fetch_ohlcv`, CoinGecko, CMC, etc.). Do not auto-load catalog servers.
|
|
104
|
+
2. Call **`analyze_*`** with the fetch JSON as **`toolResult`**.
|
|
105
|
+
3. Summarize **`{ analysis, meta }`** in prose.
|
|
106
|
+
|
|
107
|
+
**Stop there.** Do **not** call **`prepare_chart_from_rows`** — it fills chat context with a rendered chart and is reserved for plot tasks or explicit chart requests.
|
|
108
|
+
|
|
109
|
+
Orchestration: **analysis sub-agent** returns JSON only; **plot sub-agent** (separate task) may call **`prepare_chart_from_rows`** later.
|
|
110
|
+
|
|
111
|
+
## Vague analysis requests → text menu
|
|
112
|
+
|
|
113
|
+
When the operator says **interpret**, **analyze**, **what does it mean**, **outlook**, etc. **without** naming a specific analysis type:
|
|
114
|
+
|
|
115
|
+
1. Call **`list_chart_analysis_options`**.
|
|
116
|
+
2. Reply with a **numbered text menu** from the catalog (label + one-line description per type).
|
|
117
|
+
3. Ask the operator to pick a number or name.
|
|
118
|
+
4. On selection: fetch OHLCV (if needed) → call **one** `analyze_*` → summarize from the tool JSON.
|
|
119
|
+
|
|
120
|
+
**Never** auto-run trend line analysis or replot a chart for vague “interpret” / “analyze” prompts.
|
|
121
|
+
|
|
122
|
+
When the operator names a type (e.g. “run momentum analysis”), skip the menu and call the matching `analyze_*` directly.
|
|
123
|
+
|
|
124
|
+
Optional: load skill **`chart-analysis-menu`** (initialLoad) or per-type skills (`chart-analysis-trend`, etc.) for narrative templates.
|
|
125
|
+
|
|
126
|
+
## Analysis tools
|
|
127
|
+
|
|
128
|
+
All accept **`toolResult`** or **`rows`**. Optional **`title`** for `meta`.
|
|
129
|
+
|
|
130
|
+
### OHLCV analyses (`dataKind`: `ohlcv`)
|
|
131
|
+
|
|
132
|
+
Requires candle rows (open/high/low/close). Use after OHLCV fetch tools.
|
|
133
|
+
|
|
134
|
+
| Tool | Returns |
|
|
135
|
+
|------|---------|
|
|
136
|
+
| **`analyze_trend_structure`** | Bias, swing high/low, HH/HL/range structure, time phases, trend-line scores |
|
|
137
|
+
| **`analyze_key_levels`** | Ranked supports/resistances, nearest levels vs last close |
|
|
138
|
+
| **`analyze_momentum`** | RSI zone, MACD values, crossover state |
|
|
139
|
+
| **`analyze_range_volatility`** | Range %, ATR-style stats, compression vs expansion, Fib swing range |
|
|
140
|
+
| **`analyze_candlestick_patterns`** | Detected pattern **name** + **description**, buy/sell/hold, confidence, rationale |
|
|
141
|
+
| **`analyze_chart_patterns`** | Classic multi-bar patterns: geometry, **5-level classification**, **interpretation**, **`drawingSpec`**, **`measuredMove`**, **`patternMenu`**, confidence |
|
|
142
|
+
|
|
143
|
+
**`analyze_candlestick_patterns`** requires at least **14** OHLCV bars (TA-Lib lookback). Optional: `patterns[]` filter, `focusBar` (default last bar), `minConfidence` (0–1). Standalone candlestick hit rates are ~50–55%; use with trend context.
|
|
144
|
+
|
|
145
|
+
**`analyze_chart_patterns`** requires **25–40** bars depending on pattern (cup & handle ~40; trendline patterns ~20). Optional: `patterns[]`, `focusWindow` (default recent window), `minConfidence` (default 0.45), `swingLookback`, `smoothHeadShoulders` (default **true**), `smoothWindow` (`3`|`5`, default `5`), `retestTolerancePct` (default **0.10**), `retestAtrPeriod` (default **14**), `retestAtrMultiplier` (default **1.0**). Volume is **not** required — OHLC only.
|
|
146
|
+
|
|
147
|
+
When no credible pattern is found:
|
|
148
|
+
|
|
149
|
+
```json
|
|
150
|
+
{
|
|
151
|
+
"analysis": {
|
|
152
|
+
"summary": "No obvious recent pattern found",
|
|
153
|
+
"classification": null,
|
|
154
|
+
"interpretation": "No completed classic chart pattern met the confidence threshold…",
|
|
155
|
+
"primaryPattern": null,
|
|
156
|
+
"pattern": null,
|
|
157
|
+
"patterns": [],
|
|
158
|
+
"rationale": "Scanned N pattern types on M bars; …"
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
When a pattern is found, read **`analysis.interpretation`** first (agent digest), then **`analysis.pattern`** for coordinates and **`drawingSpec`** (canonical chart overlay recipe).
|
|
164
|
+
|
|
165
|
+
| Field | Purpose |
|
|
166
|
+
|-------|---------|
|
|
167
|
+
| `summary` | One-line headline |
|
|
168
|
+
| `interpretation` | 2–4 sentence implication for the agent |
|
|
169
|
+
| `description` | Technical geometry summary on the hit |
|
|
170
|
+
| `classification` | `bullish` \| `moderately_bullish` \| `neutral` \| `moderately_bearish` \| `bearish` |
|
|
171
|
+
| `primaryPattern` | **Most recent** pattern (`barSpan.toIndex` desc) — slim summary |
|
|
172
|
+
| `highestConfidencePattern` | **Highest confidence** pattern (tie-break: most recent) — slim summary |
|
|
173
|
+
| `patternMenu[]` | `{ index, patternNumber (1-based), id, name, confidence, drawable, isPrimary, isHighestConfidence, barSpan, keyLevels[], measuredMove? { targetPrice, referencePrice, direction, status, formula } }` — cite **times, prices, and measured-move targets** from these fields |
|
|
174
|
+
| `pattern` | Full enriched primary hit (`drawingSpec`, `measuredMove`, `volumeConfirmation`) or `null` |
|
|
175
|
+
| `patterns[]` | All enriched hits in menu order |
|
|
176
|
+
| `chartPatternTradeSetup` | Primary-pattern trade levels (`status: clear\|unclear`, `side`, **pattern-limit entry** at support/broken boundary retest, target/invalidation from opposite boundary, `entryPhase`, `entryOffsetMode`, `setupPurposeCode`, `lastClose`) — wrapped into `conversation.tradeIdeas[]` for `build_trade_from_*` when `status=clear` |
|
|
177
|
+
|
|
178
|
+
**Pattern IDs:** use catalog ids (`double_bottom_adam_eve`, `trendline_breakout_retest_bullish`, …). Aliases accepted on apply/calculate: e.g. `adam_eve_double_bottom` → `double_bottom_adam_eve`.
|
|
179
|
+
|
|
180
|
+
**Selection on apply/calculate:** `patternNumber` (1-based menu # — preferred when the operator says "pattern 1"), `patternIndex` (0-based into `analysis.patterns` / menu order), `selectionMode: 'primary'` (default) \| `'highest_confidence'`, or explicit `patternId`. Do not conflate **primary** (most recent) with **highest confidence**.
|
|
181
|
+
|
|
182
|
+
### Drawing patterns on the chart (operator workflow)
|
|
183
|
+
|
|
184
|
+
After **`analyze_chart_patterns`**, the agent-facing JSON is **slim** — it lists **`patternMenu`** but omits full `patterns[]` geometry. The node keeps geometry server-side for the session.
|
|
185
|
+
|
|
186
|
+
1. **Present** a numbered summary from **`analysis.patternMenu`**. For each row, cite tool JSON only:
|
|
187
|
+
- **Window:** `barSpan.fromTimeSec` → `barSpan.toTimeSec` (UTC ISO from unix seconds) and `barSpan.barCount`
|
|
188
|
+
- **Key levels:** every `keyLevels[]` item as **label @ price** and **time** when `timeSec` is set
|
|
189
|
+
- **Measured move:** when `measuredMove` is present, quote **targetPrice**, **referencePrice**, **status** (`projected` \| `active`), and **direction** from tool JSON — do not invent targets
|
|
190
|
+
- **Trade setup (if asked):** entry at **pattern boundary** (inside bounce or post-breakout retest), invalidation at **pattern-failure** opposite boundary; target from `measuredMove.targetPrice`; compare vs `meta.ohlcvSummary.lastClose` and `entryProximityPct` (default 1% for inside bounces)
|
|
191
|
+
- **`chartPatternTradeSetup`:** structured primary-pattern setup — upserted into **`conversation.tradeIdeas[]`** for **`build_trade_from_chart_pattern`** / **`build_trade_from_trade_idea`**
|
|
192
|
+
2. **Ask** which pattern to draw **unless** the operator already named one (e.g. "add pattern 1", "draw the falling wedge").
|
|
193
|
+
3. **Call `apply_chart_pattern_drawings`** with `{ title, ohlcvDigest, patternNumber }` plus **`prepareReplay`** + **`live`** from the existing chart — **not** prose describing trendlines.
|
|
194
|
+
4. **Confirm drawn** only after **`apply_chart_pattern_drawings`** succeeds (`meta.warnings` mentions overlay applied; chart has `pattern_*` series). Never claim an overlay without that tool result.
|
|
195
|
+
|
|
196
|
+
Example apply payload after the operator picks menu **#1**:
|
|
197
|
+
|
|
198
|
+
```json
|
|
199
|
+
{
|
|
200
|
+
"title": "ETH-PERP 1H — last 7d",
|
|
201
|
+
"ohlcvDigest": "<from meta.sessionBind>",
|
|
202
|
+
"patternNumber": 1
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Plot workflow: `analyze_chart_patterns` → **`apply_chart_pattern_drawings`** with `toolResult`, `prepareReplay`, `live` from prior `prepare_chart_from_rows`, plus **`patternNumber`** / **`patternId`** / **`patternIndex`** **or** `drawings` from `calculate_chart_pattern_drawings`. Overlay renders **only** `drawingSpec` → `patternOverlay` (no duplicate trend-line / horizontal-level merges). **Never call `prepare_chart_from_rows` again** to add a pattern overlay — that recreates the chart, may switch interval (e.g. 4H), and burns tool rounds.
|
|
207
|
+
|
|
208
|
+
**Apply toggles (when volume present, default on):** `showVolumeConfirmation` (bar shading at key events), `showVolumeProfile` (pattern-span mini profile). `removeDrawings: true` strips prior pattern overlay only.
|
|
209
|
+
|
|
210
|
+
**Overlay-only (operator says “draw/add the pattern on the chart”):** one `apply_chart_pattern_drawings` call with:
|
|
211
|
+
- `toolResult` — same unmodified OHLCV fetch JSON, or `{ title, ohlcvDigest }` from session bind
|
|
212
|
+
- `prepareReplay` + `live` — copied from the existing chart’s `prepare_chart_from_rows` output
|
|
213
|
+
- **`patternNumber`** — 1-based menu # when the operator picks from the analysis table (e.g. "pattern 1")
|
|
214
|
+
- **or** `patternId` / `patternIndex`, **`analysis`** from `analyze_chart_patterns`, or **`drawings`** from `calculate_chart_pattern_drawings`
|
|
215
|
+
|
|
216
|
+
If apply fails, fix the payload — do **not** re-fetch at a different interval or call `prepare_chart_from_rows` again.
|
|
217
|
+
|
|
218
|
+
Example:
|
|
219
|
+
|
|
220
|
+
```json
|
|
221
|
+
{
|
|
222
|
+
"title": "BTC 1d",
|
|
223
|
+
"toolResult": { "... prior OHLCV fetch ..." },
|
|
224
|
+
"patterns": ["hammer", "doji", "engulfing"],
|
|
225
|
+
"focusBar": "last"
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Response includes `analysis.patterns[]` with `name`, `description`, `direction`, `confidence`, plus `primaryPattern`, `recommendation`, `recommendationConfidence`, and `rationale`. **`analysis.focusBar`** gives the exact OHLC of the scanned bar — quote those values in prose; do not invent prices.
|
|
230
|
+
|
|
231
|
+
**Same data for every step:** use one unmodified fetch **`toolResult`** for `prepare_chart_from_rows`, all `analyze_*`, and `apply_chart_pattern_drawings`. Do not pass hand-copied `rows` from an earlier turn.
|
|
232
|
+
|
|
233
|
+
Detection uses a **pure TypeScript port of TA-Lib CDL** logic (`src/core/candlestick-patterns/`). It is separate from the optional **`technical-indicators`** MCP (`fast-technical-indicators`).
|
|
234
|
+
|
|
235
|
+
#### Supported patterns (18)
|
|
236
|
+
|
|
237
|
+
Filter with `patterns: ["hammer", "doji", …]` using the **id** column. Bias: **bullish** / **bearish** / **neutral** (indecision) / **signal** (direction from candle color or engulfing sign).
|
|
238
|
+
|
|
239
|
+
**Single-bar indecision**
|
|
240
|
+
|
|
241
|
+
| id | Name | Description |
|
|
242
|
+
|----|------|-------------|
|
|
243
|
+
| `doji` | Doji | Open and close are nearly equal, showing indecision; the market may pause or reverse. |
|
|
244
|
+
| `spinning_top` | Spinning Top | Small body with upper and lower shadows longer than the body; signals indecision between buyers and sellers. |
|
|
245
|
+
| `long_legged_doji` | Long-Legged Doji | Doji with long upper and/or lower shadows; extreme indecision and potential turning point. |
|
|
246
|
+
| `dragonfly_doji` | Dragonfly Doji | Doji with open/close at the high and a long lower shadow; often bullish after a selloff. |
|
|
247
|
+
| `gravestone_doji` | Gravestone Doji | Doji with open/close at the low and a long upper shadow; often bearish after a rally. |
|
|
248
|
+
|
|
249
|
+
**Single-bar reversal / conviction**
|
|
250
|
+
|
|
251
|
+
| id | Name | Bias | Description |
|
|
252
|
+
|----|------|------|-------------|
|
|
253
|
+
| `hammer` | Hammer | bullish | Small body at the top of the range with a long lower shadow; often interpreted as bullish reversal after a decline. |
|
|
254
|
+
| `hanging_man` | Hanging Man | bearish | Hammer-shaped candle appearing after an advance; often interpreted as bearish reversal at highs. |
|
|
255
|
+
| `shooting_star` | Shooting Star | bearish | Small body near the low with a long upper shadow after a gap up; bearish reversal signal at resistance. |
|
|
256
|
+
| `inverted_hammer` | Inverted Hammer | bullish | Small body near the low with a long upper shadow after a gap down; potential bullish reversal. |
|
|
257
|
+
| `marubozu` | Marubozu | signal | Long body with very little or no shadows; strong directional conviction from open to close. |
|
|
258
|
+
|
|
259
|
+
**Two-bar**
|
|
260
|
+
|
|
261
|
+
| id | Name | Bias | Description |
|
|
262
|
+
|----|------|------|-------------|
|
|
263
|
+
| `engulfing` | Engulfing | signal | Second candle body fully engulfs the prior body with opposite color; strong two-bar reversal signal. |
|
|
264
|
+
| `harami` | Harami | signal | Small second candle contained within the prior long body; suggests momentum loss and possible reversal. |
|
|
265
|
+
| `piercing` | Piercing Line | bullish | Bullish two-bar pattern: black candle followed by white candle closing above the midpoint of the black body. |
|
|
266
|
+
| `dark_cloud_cover` | Dark Cloud Cover | bearish | Bearish two-bar pattern: white candle followed by black candle opening above prior high and closing deeply into the white body. |
|
|
267
|
+
|
|
268
|
+
**Three-bar**
|
|
269
|
+
|
|
270
|
+
| id | Name | Bias | Description |
|
|
271
|
+
|----|------|------|-------------|
|
|
272
|
+
| `morning_star` | Morning Star | bullish | Three-bar bullish reversal: long black, small gapped body, then strong white close into the first body. |
|
|
273
|
+
| `evening_star` | Evening Star | bearish | Three-bar bearish reversal: long white, small gapped body, then strong black close into the first body. |
|
|
274
|
+
| `three_white_soldiers` | Three White Soldiers | bullish | Three consecutive bullish candles with higher closes and controlled shadows; strong uptrend continuation or reversal. |
|
|
275
|
+
| `three_black_crows` | Three Black Crows | bearish | Three consecutive bearish candles with lower closes opening within prior bodies; strong downtrend signal. |
|
|
276
|
+
|
|
277
|
+
Each TA-Lib equivalent is documented in catalog metadata (`taLibName`, e.g. `CDLHAMMER`). **`signal`** bias patterns map direction from the raw TA-Lib sign (+100 bullish candle / engulfing, −100 bearish).
|
|
278
|
+
|
|
279
|
+
### Classic chart patterns (multi-bar geometry)
|
|
280
|
+
|
|
281
|
+
Separate from candlestick patterns. Detectors live in `src/core/chart-patterns/` (clean-room TypeScript; see `REFERENCES.md`).
|
|
282
|
+
|
|
283
|
+
**Supported pattern ids (v1):** `head_and_shoulders`, `inverse_head_and_shoulders`, `double_top`, `double_bottom`, `double_bottom_adam_eve`, `ascending_triangle`, `descending_triangle`, `symmetrical_triangle`, `pennant_bullish`, `pennant_bearish`, `flag_bullish`, `flag_bearish`, `rising_wedge`, `falling_wedge`, `channel_up`, `channel_down`, `cup_and_handle`, `trendline_breakout_bullish`, `trendline_breakout_bearish`, `trendline_breakout_retest_bullish`, `trendline_breakout_retest_bearish`.
|
|
284
|
+
|
|
285
|
+
**H&S smoothing (default on):** `smoothHeadShoulders` defaults to `true`. Uses centered Savitzky-Golay on highs/lows before swing detection (similar in spirit to TradingPatternScanner's filtered H&S). Set `smoothHeadShoulders: false` for raw fractal swings. Optional `smoothWindow`: `3` or `5` (default `5`).
|
|
286
|
+
|
|
287
|
+
**Trendline breakout / retest:** Detects close crossing a swing-based diagonal trendline (`calculateTrendLinesFromBars`). Retest tolerance uses **both** excursion-percent and ATR bands — the effective band is **`max(retestTolerancePct × post-break move, retestAtrMultiplier × ATR)`** (AlgoAlpha / Pineify style). Defaults: **`retestTolerancePct` 0.10**, **`retestAtrPeriod` 14**, **`retestAtrMultiplier` 1.0**. Close must hold the broken line on the retest bar.
|
|
288
|
+
|
|
289
|
+
Example:
|
|
290
|
+
|
|
291
|
+
```json
|
|
292
|
+
{
|
|
293
|
+
"title": "ETH 1d",
|
|
294
|
+
"toolResult": { "... prior OHLCV fetch ..." },
|
|
295
|
+
"patterns": ["cup_and_handle", "double_bottom"],
|
|
296
|
+
"minConfidence": 0.45
|
|
297
|
+
}
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
Sample hit geometry:
|
|
301
|
+
|
|
302
|
+
```json
|
|
303
|
+
{
|
|
304
|
+
"id": "cup_and_handle",
|
|
305
|
+
"name": "Cup and Handle",
|
|
306
|
+
"classification": "moderately_bullish",
|
|
307
|
+
"confidence": 0.58,
|
|
308
|
+
"interpretation": "Cup and handle suggests accumulation… Classification is moderately bullish (moderate confidence, 0.58). …",
|
|
309
|
+
"points": [
|
|
310
|
+
{ "timeSec": 1000, "price": 120, "label": "A", "role": "left_rim" },
|
|
311
|
+
{ "timeSec": 5000, "price": 95, "label": "B", "role": "cup_bottom" }
|
|
312
|
+
],
|
|
313
|
+
"lines": [
|
|
314
|
+
{ "pointA": { "timeSec": 1000, "price": 120 }, "pointB": { "timeSec": 9000, "price": 119 }, "label": "Cup rim", "kind": "boundary" }
|
|
315
|
+
]
|
|
316
|
+
}
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### Time-series analyses (`dataKind`: `time_series`)
|
|
320
|
+
|
|
321
|
+
For **line-only** metrics: `{ time, value }`, `[timestamp, value]` tuples, TVL/fees/index feeds. **Not** OHLC candles.
|
|
322
|
+
|
|
323
|
+
| Tool | Returns |
|
|
324
|
+
|------|---------|
|
|
325
|
+
| **`analyze_time_series_trend`** | Direction bias, slope, change %, value peaks/troughs |
|
|
326
|
+
| **`analyze_time_series_momentum`** | RSI and rate-of-change on values |
|
|
327
|
+
| **`analyze_time_series_stats`** | Min/max/mean, change %, return volatility, compression |
|
|
328
|
+
|
|
329
|
+
If OHLCV `analyze_*` returns *Line-only time series detected*, switch to the matching `analyze_time_series_*` tool.
|
|
330
|
+
|
|
331
|
+
Example after fetch:
|
|
332
|
+
|
|
333
|
+
```json
|
|
334
|
+
{
|
|
335
|
+
"title": "<asset> <interval> — <lookback from operator>",
|
|
336
|
+
"toolResult": { "... prior fetch ..." }
|
|
337
|
+
}
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
## Linking analysis to plots (deliberate two-step)
|
|
341
|
+
|
|
342
|
+
Analysis JSON may include hints (e.g. `relatedDrawing` in the catalog). **Drawing on chart is always a separate step:**
|
|
343
|
+
|
|
344
|
+
1. `calculate_trend_lines` / `calculate_key_levels` / `calculate_chart_pattern_drawings` / … (geometry — optional for patterns when passing `analysis` to apply)
|
|
345
|
+
2. `apply_chart_drawings` or **`apply_chart_pattern_drawings`** with `prepareReplay` + `live` + `toolResult` from the prior chart — **not** another `prepare_chart_from_rows`
|
|
346
|
+
|
|
347
|
+
Do not re-fetch OHLCV when adding drawings to an existing chart unless the operator changed symbol, interval, or lookback.
|
|
348
|
+
|
|
349
|
+
## Orchestration sub-agents
|
|
350
|
+
|
|
351
|
+
- **Analysis task:** fetch → `analyze_*` → `mpc-task-result` body with JSON; **no** chart attachment.
|
|
352
|
+
- **Plot task:** fetch → `prepare_chart_from_rows` → optional drawings → `post_key_gen_chart_attachment`.
|
|
353
|
+
|
|
354
|
+
See optional skill **`orchestration-chart-analysis`** (on-demand) for task-shape patterns. Base **`orchestration_planning`** skill stays domain-neutral.
|
|
355
|
+
|
|
356
|
+
## Skills
|
|
357
|
+
|
|
358
|
+
| Skill | Load | Role |
|
|
359
|
+
|-------|------|------|
|
|
360
|
+
| `chart-analysis-menu` | initialLoad | Menu workflow, analysis vs plot routing |
|
|
361
|
+
| `chart-analysis-trend` | on demand | Narrative template for trend structure |
|
|
362
|
+
| `chart-analysis-levels` | on demand | Key levels analysis |
|
|
363
|
+
| `chart-analysis-momentum` | on demand | Momentum analysis |
|
|
364
|
+
| `chart-analysis-range` | on demand | Range / volatility analysis |
|
|
365
|
+
| `chart-analysis-patterns` | on demand | Candlestick pattern recognition narrative |
|
|
366
|
+
| `chart-analysis-classic-patterns` | on demand | Classic chart pattern narrative (H&S, cup & handle, etc.) |
|
|
367
|
+
| `chart-analysis-time-series` | on demand | Line-only metric analyses (TVL, fees, custom series) |
|
|
368
|
+
| `orchestration-chart-analysis` | on demand | Plan-mode chart task patterns (no hardcoded symbols/intervals) |
|
|
@@ -4,7 +4,7 @@ Returns **`kind: continuum/chart/v1`** for agent chat, KeyGen attachments, and D
|
|
|
4
4
|
|
|
5
5
|
## Workflow
|
|
6
6
|
|
|
7
|
-
1. **Fetch OHLCV** with
|
|
7
|
+
1. **Fetch OHLCV** with a source the **operator chose** (CoinGecko, CoinMarketCap, `ctm_*_fetch_ohlcv`, exchange APIs, subgraphs, etc.). Never auto-load catalog MCP servers.
|
|
8
8
|
2. **`prepare_chart_from_rows`** — preferred for a single feed: pass **`rows`** (bar array) or **`toolResult`** (full prior MCP JSON). Never `{}`.
|
|
9
9
|
3. **`prepare_chart`** — advanced: multi-series, custom overlays, or shorthand **`bars`** / **`toolResult`**.
|
|
10
10
|
|
|
@@ -24,6 +24,7 @@ Each object in **`series[].data`** is normalized before charting. **`prepare_cha
|
|
|
24
24
|
| Binance `get_klines` (JSON) | `openTime` (ms) | strings → coerced |
|
|
25
25
|
| Bybit `getMarketKline` | tuple `[startTime, …]` or `{ startTime, open, … }` | strings → coerced |
|
|
26
26
|
| Bitget REST / MCP | tuple `[ts, o,h,l,c,vol,…]` or `{ timestamp, … }` | strings → coerced |
|
|
27
|
+
| CoinMarketCap keyless (`get_kline_candles`) | `time` (Unix **seconds**) | numbers; `{ candles: [...] }` wrapper |
|
|
27
28
|
| CoinMarketCap OHLCV API | `{ time_open, quote: { USD: { … } } }` | numbers; nested `quote` flattened |
|
|
28
29
|
| Uniswap subgraph (`PoolHourData` / `PoolDayData`) | `periodStartUnix` | `open`/`high`/`low`/`close`, optional `volumeUSD` |
|
|
29
30
|
|
|
@@ -33,7 +34,7 @@ SDK charting is **vendor-agnostic** after fetch:
|
|
|
33
34
|
|
|
34
35
|
1. **`extractOhlcvBarsFromUnknown`** — pulls a bar array from any MCP/tool JSON (nested wrappers, stringified JSON, `{ prices, total_volumes }` spot series). Walks unknown wrapper keys up to depth 6; prefers known keys (`result`, `candles`, `ohlcv`, `klines`, …).
|
|
35
36
|
2. **`normalizeCandleRow`** (`point-normalize.ts`) — single source of truth per bar: time fields (`time`, `timestampMs`, `timestamp`, `openTime`, `t`, `periodStartUnix`, …), OHLC aliases (`o`/`h`/`l`/`c`, `price_*`), nested CMC `quote.USD`, numeric strings → numbers, ms → sec.
|
|
36
|
-
3. **`prepare_chart_from_rows`** / **`prepareChart`** — sort, dedupe,
|
|
37
|
+
3. **`prepare_chart_from_rows`** / **`prepareChart`** — sort, dedupe, optional display cap via `maxPoints` (does **not** require pre-trimming fetch candles), optional volume histogram (only when volume present), default EMA/RSI overlays.
|
|
37
38
|
|
|
38
39
|
**Volume optional:** rows without `volume` / `v` / tuple index 5 chart as **candles only** (warning in `meta.warnings`; volume pane omitted). GMX is an example.
|
|
39
40
|
|
|
@@ -50,7 +51,7 @@ SDK charting is **vendor-agnostic** after fetch:
|
|
|
50
51
|
- **Tuple rows** (Binance/Bybit/Bitget native arrays) may be passed directly in **`series[].data`**.
|
|
51
52
|
- Pass **`ohlcv.candles`** / **`klines`** / **`result.list`** as a flat **`data`** array — not the whole API wrapper as **`series`**.
|
|
52
53
|
- Binance MCP defaults to markdown; use **`response_format: "json"`** and map **`klines`** into **`series[0].data`**.
|
|
53
|
-
- CMC
|
|
54
|
+
- CMC **`coinmarketcap-public__get_kline_candles`** returns **`candles`** with `time`/`open`/`high`/`low`/`close`/`volume` — pass the full tool result object to **`prepare_chart_from_rows`** (not a JSON string). Use **`lookbackDays`** or **`from`/`to`** so the fetch covers the requested window; `limit` alone without time bounds used to return oldest bars.
|
|
54
55
|
## Default indicators (candlestick)
|
|
55
56
|
|
|
56
57
|
When **`prepare_chart`** receives a **candlestick** series and **no `overlays`**, the tool automatically adds:
|
|
@@ -70,7 +71,22 @@ Operator-specific overrides (different EMA period, add MACD, disable RSI): edit
|
|
|
70
71
|
|
|
71
72
|
## Lookback & bar budget
|
|
72
73
|
|
|
73
|
-
|
|
74
|
+
### `prepare_chart_from_rows` + fetch `toolResult` (Hyperliquid, GMX, CoinGecko, CMC)
|
|
75
|
+
|
|
76
|
+
**Do not trim or slice candles before this call.** Pass the **full, unmodified** fetch JSON as `toolResult`. The chart layer downsamples for **display** via `options.maxPoints` (default 400) — that is not the same as deleting history from the fetch.
|
|
77
|
+
|
|
78
|
+
| Operator request | Typical bars | Action |
|
|
79
|
+
|------------------|--------------|--------|
|
|
80
|
+
| ETH-PERP **1H — last 7d** | ~168–169 | Pass full `toolResult`; title `ETH-PERP 1H — last 7d` |
|
|
81
|
+
| ETH-PERP **1H — last 30d** | ~721 | Pass full `toolResult`; title `ETH-PERP 1H — last 30d` — **do not** switch to 1D |
|
|
82
|
+
| **4H — last 30d** | ~181 | Pass full `toolResult` |
|
|
83
|
+
| **15m — last 24h** | ~96 | Pass full `toolResult` |
|
|
84
|
+
|
|
85
|
+
- **Never** shorten the window or switch to a **coarser interval** because you think the payload is too large — there is no chart-builder bar-count limit for normal fetch windows.
|
|
86
|
+
- If `prepare_chart_from_rows` fails, quote the tool **`reason`** exactly — do not invent payload or metadata errors.
|
|
87
|
+
- Match **`title`** interval + lookback to the fetch. **`meta.windowExpectation`** and **`meta.loadStatus`** reflect what was loaded vs displayed.
|
|
88
|
+
|
|
89
|
+
When the operator **does not** specify a range, choose a sensible fetch window from the bar interval (table below) and put it in **`title`**.
|
|
74
90
|
|
|
75
91
|
### Default lookback (operator did not specify a range)
|
|
76
92
|
|
|
@@ -78,8 +94,8 @@ When the operator asks to chart something but **does not specify how far back**
|
|
|
78
94
|
|--------------|-------------------------|--------------|
|
|
79
95
|
| 1m – 5m | 1 – 3 days | 300 – 500 |
|
|
80
96
|
| 15m | 5 – 10 days | 300 – 500 |
|
|
81
|
-
| 1h |
|
|
82
|
-
| 4h |
|
|
97
|
+
| 1h | 7 – 30 days | 168 – 720 |
|
|
98
|
+
| 4h | 30 – 90 days | 180 – 540 |
|
|
83
99
|
| 1d | 6 – 12 months | 180 – 365 |
|
|
84
100
|
| 1w | 2 – 3 years | 100 – 150 |
|
|
85
101
|
|
|
@@ -87,31 +103,26 @@ Put the chosen window in **`title`** (e.g. `BTC/USD 4H — last 90d`) so the ope
|
|
|
87
103
|
|
|
88
104
|
### When the operator specifies a period
|
|
89
105
|
|
|
90
|
-
Honor their range (e.g. “
|
|
91
|
-
|
|
92
|
-
### Bar budget (agent chat)
|
|
106
|
+
Honor their range exactly (e.g. “7 days on 1h” ≈ 168 bars). Fetch that window, pass the **full** `toolResult`, and chart it — do **not** substitute a shorter window or coarser interval.
|
|
93
107
|
|
|
94
|
-
|
|
95
|
-
- Set **`options.maxPoints`: 400** (or lower) as a safety net. The tool keeps the **newest** points when trimming (never the oldest).
|
|
96
|
-
- **`prepare_chart` does not fix oversized fetch payloads** — trim **before** the call when you aggregate or download more data than needed.
|
|
108
|
+
### Bar budget — **`prepare_chart` only** (manual series assembly)
|
|
97
109
|
|
|
98
|
-
|
|
110
|
+
These limits apply when you build **`series[].data`** yourself for **`prepare_chart`**, not when using **`prepare_chart_from_rows`** with a vendor fetch `toolResult`:
|
|
99
111
|
|
|
100
|
-
|
|
112
|
+
- Aim for **≤ ~400 bars** per series when hand-assembling data.
|
|
113
|
+
- Set **`options.maxPoints`: 400** as a display cap; the tool keeps the **newest** points when trimming (never the oldest).
|
|
101
114
|
|
|
102
115
|
```javascript
|
|
103
116
|
bars.sort((a, b) => a.time - b.time);
|
|
104
|
-
bars = bars.slice(-maxBars); //
|
|
117
|
+
bars = bars.slice(-maxBars); // manual prepare_chart only; never slice fetch toolResult
|
|
105
118
|
```
|
|
106
119
|
|
|
107
|
-
|
|
120
|
+
### Fetch strategy (before charting)
|
|
108
121
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
3. Pass trimmed, ascending OHLCV to **`prepare_chart`**; use **`overlays`** for SMA / RSI / MACD — do not hand-build indicator series unless necessary.
|
|
114
|
-
4. For KeyGen attachments (larger payloads allowed), you may use more bars; still prefer newest-first trim.
|
|
122
|
+
1. Request the interval and lookback the operator asked for (or the default window above).
|
|
123
|
+
2. Pass the complete fetch result to **`prepare_chart_from_rows`** — do not pre-trim candles for MCP context size.
|
|
124
|
+
3. Use **`overlays`** for SMA / RSI / MACD — do not hand-build indicator series unless necessary.
|
|
125
|
+
4. For KeyGen attachments (larger payloads allowed), you may use more bars in manual **`prepare_chart`** series.
|
|
115
126
|
|
|
116
127
|
## Overlays (auto-computed)
|
|
117
128
|
|
|
@@ -282,7 +293,11 @@ When the user asks to graph, plot, or chart data, call **`prepare_chart_from_row
|
|
|
282
293
|
|
|
283
294
|
**Where charts appear:** the node app renders charts under the **MCP result** row for `prepare_chart` / `prepare_chart_from_rows`, not inside the assistant text bubble. A prose reply like “chart prepared” without a successful chart tool result means nothing was rendered.
|
|
284
295
|
|
|
285
|
-
**Hyperliquid / DeFi `fetch_ohlcv`:** returns `{ ohlcv: { coin, interval, candles: [...] } }`. After `fetch_ohlcv`, call `prepare_chart_from_rows` with the **full fetch
|
|
296
|
+
**Hyperliquid / DeFi `fetch_ohlcv`:** returns `{ ohlcv: { coin, interval, candles: [...] } }`. After `fetch_ohlcv`, call `prepare_chart_from_rows` with the **full fetch object** as `toolResult` once, plus a descriptive `title` (interval + lookback, e.g. `ETH-PERP 1H — last 7d`). The response includes **`meta.sessionBind`**. Follow-up chart/analyze/apply calls use **`{ title, ohlcvDigest }`** only — do not re-paste candle JSON.
|
|
297
|
+
|
|
298
|
+
**OHLCV integrity:** `prepare_chart_from_rows` hard-fails hand-copied `rows` without fetch `toolResult`, invalid OHLC structure, stale-body composite bars, and **title interval ≠ fetch interval** (e.g. title `1H` with fetch `12h`). On failure, re-fetch at the **requested** interval — do not switch to a coarser timeframe or retry prepare in a loop (that burns tool rounds).
|
|
299
|
+
|
|
300
|
+
**Never truncate OHLCV for the MCP context window.** Pass the complete fetch `toolResult` unchanged — the chart layer downsamples for display (`maxPoints`). Match **`title`** interval and lookback to fetch params (e.g. `15m — last 24h`, `4H — last 30d`, `1H — last 7d`). The SDK validates **`meta.windowExpectation`** for any interval × lookback; mismatches **hard fail** — re-fetch at the **requested** interval only, never a coarser substitute.
|
|
286
301
|
|
|
287
302
|
## Live updates (agent chat + DeFi dialogs)
|
|
288
303
|
|
|
@@ -312,7 +327,27 @@ The node app polls a **tick adapter** registered for `providerId` every `pollMs`
|
|
|
312
327
|
|
|
313
328
|
**Static charts:** KeyGen chart attachments and charts without `live` are never polled. **`prepare_chart`** alone does not attach `live` — pass the original fetch JSON via **`prepare_chart_from_rows`** (`toolResult`) so binding can be inferred.
|
|
314
329
|
|
|
315
|
-
|
|
330
|
+
**Agent load status:** Successful `prepare_chart_from_rows` / `apply_chart_*` responses may include **`meta.loadStatus`**, **`meta.ohlcvSummary`**, **`meta.dataPolicy`**, and **`meta.warnings`**. Read these before telling the operator the chart is complete or that live price is working:
|
|
331
|
+
|
|
332
|
+
| Field | Meaning |
|
|
333
|
+
|-------|---------|
|
|
334
|
+
| `meta.ohlcvSummary.high` / `.low` / `.lastClose` | **Only** prices to quote for “period high”, “latest close”, etc. — never invent |
|
|
335
|
+
| `meta.dataPolicy` | Restated rule: no invented OHLCV |
|
|
336
|
+
| `loadStatus.dataComplete` | Historical OHLCV matches fetch metadata (bar count, gaps, window) |
|
|
337
|
+
| `loadStatus.dataIssues` | Incomplete historical data — **independent of live price** |
|
|
338
|
+
| `loadStatus.liveReady` | Live tick merge likely to work |
|
|
339
|
+
| `loadStatus.liveBindingAttached` | `live` binding is on the chart payload |
|
|
340
|
+
| `loadStatus.liveIssues` | Live price may be unavailable in the UI |
|
|
341
|
+
|
|
342
|
+
**Data not fully loaded:** `meta.warnings` tells the agent not to treat the chart as complete. Ask the operator whether to **re-run the OHLCV fetch** or **switch data source** (provider, symbol, interval, lookback).
|
|
343
|
+
|
|
344
|
+
**Live price (when `live` is attached or expected):** Do **not** claim live updates are active unless the chart header confirms it. If live price is unavailable in the UI, ask whether to re-fetch, try another provider, or use the static chart only.
|
|
345
|
+
|
|
346
|
+
## Customization (plotting — agent-driven)
|
|
347
|
+
|
|
348
|
+
For **analysis without a chart**, use **`chart_analysis_docs`** and **`list_chart_analysis_options`** — not this section.
|
|
349
|
+
|
|
350
|
+
**Analysis after plotting:** a visible chart does **not** replace **`analyze_*`**. For interpret/pattern/momentum/levels requests, call **`list_chart_analysis_options`** or the matching **`analyze_*`** on the same OHLCV session — never prose-only analysis invented from the rendered chart.
|
|
316
351
|
|
|
317
352
|
Use **`list_chart_customization_options`** to discover overlay types, drawing tools, and styling knobs before changing a chart. There is no UI picker — the agent chooses from the catalog and re-prepares.
|
|
318
353
|
|
|
@@ -324,7 +359,20 @@ Use **`list_chart_customization_options`** to discover overlay types, drawing to
|
|
|
324
359
|
- **`calculate_key_levels`** — swing support/resistance from recent bars
|
|
325
360
|
- **`calculate_pivot_points`** — classic pivot levels for a session
|
|
326
361
|
- **`calculate_fibonacci_range`** — retracement levels between swing high/low (0.618 highlighted by default)
|
|
362
|
+
- **`calculate_trend_lines`** — diagonal support/resistance from swing pivot pairs
|
|
363
|
+
- **`calculate_chart_pattern_drawings`** — classic pattern geometry (optional if `apply_chart_pattern_drawings` receives `analysis` / `patternId`)
|
|
327
364
|
- **`apply_chart_drawings`** — merge computed levels into the chart via **`drawings`** / **`prepareReplay`**
|
|
365
|
+
- **`apply_chart_pattern_drawings`** — merge classic pattern overlays (trend boundaries, necklines) onto an existing chart
|
|
366
|
+
|
|
367
|
+
### Adding drawings to an existing chart (do not re-fetch)
|
|
368
|
+
|
|
369
|
+
When the operator already has a chart on screen and asks to **show trend lines**, **add Fibonacci**, **draw support/resistance**, etc.:
|
|
370
|
+
|
|
371
|
+
1. **Do not call CoinGecko / OHLCV fetch again** unless they explicitly change symbol, interval, or lookback.
|
|
372
|
+
2. **`calculate_trend_lines`** (or other `calculate_*` drawing tool) with **`{ title, ohlcvDigest }`** from `meta.sessionBind` — or the full fetch object on the first call only.
|
|
373
|
+
3. **`apply_chart_drawings`** or **`apply_chart_pattern_drawings`** with geometry from step 2 (or **`patternNumber`** / `patternId` for patterns), plus **`prepareReplay`** from the prior **`prepare_chart_from_rows`** output when available. Pass the same **`toolResult`** so bar count and lookback stay identical.
|
|
374
|
+
|
|
375
|
+
**Prose-only replies are wrong** when the operator asked to **draw** or **show on the chart** — use **`apply_chart_drawings`** / **`apply_chart_pattern_drawings`**, not a new **`prepare_chart_from_rows`** with a different window. For classic patterns after **`analyze_chart_patterns`**, pass **`patternNumber`** (menu #1 → `patternNumber: 1`) — do not describe overlays in chat without calling the apply tool.
|
|
328
376
|
|
|
329
377
|
**Live refresh:** When `live` is set, the node replays **`prepareReplay`** on each tick so custom overlays and drawings survive 4s updates. Default EMA/RSI are snapshotted into `prepareReplay.overlays` when they were applied implicitly.
|
|
330
378
|
|