@continuumdao/continuum-node-sdk 1.3.9 → 1.3.10
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/dist/core/chart/chart-defaults.d.ts +14 -0
- package/dist/core/chart/chart-defaults.d.ts.map +1 -0
- package/dist/core/chart/chart-defaults.js +100 -0
- package/dist/core/chart/chart-defaults.js.map +1 -0
- package/dist/core/chart/index.d.ts +1 -0
- package/dist/core/chart/index.d.ts.map +1 -1
- package/dist/core/chart/index.js +1 -0
- package/dist/core/chart/index.js.map +1 -1
- package/dist/core/chart/prepare.d.ts.map +1 -1
- package/dist/core/chart/prepare.js +9 -6
- package/dist/core/chart/prepare.js.map +1 -1
- package/dist/core/chart/schemas.d.ts +1 -0
- package/dist/core/chart/schemas.d.ts.map +1 -1
- package/dist/core/chart/schemas.js +2 -0
- package/dist/core/chart/schemas.js.map +1 -1
- package/dist/mcp/resources/chart.md +65 -1
- package/package.json +1 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ChartOverlayInput } from './overlay-schemas.js';
|
|
2
|
+
import type { PrepareChartInput } from './schemas.js';
|
|
3
|
+
/** Default EMA on candlestick charts when the caller omits `overlays`. */
|
|
4
|
+
export declare const DEFAULT_CHART_EMA_PERIOD = 50;
|
|
5
|
+
/** Default RSI oscillator pane when the caller omits `overlays`. */
|
|
6
|
+
export declare const DEFAULT_CHART_RSI_PERIOD = 14;
|
|
7
|
+
export declare function primaryCandlestickSeriesId(series: PrepareChartInput['series']): string | null;
|
|
8
|
+
export declare function hasHistogramVolumeSeries(series: PrepareChartInput['series']): boolean;
|
|
9
|
+
/** Promote per-bar `volume` on candlestick rows into a histogram series when none exists. */
|
|
10
|
+
export declare function ensureVolumeHistogramSeries(input: PrepareChartInput): PrepareChartInput;
|
|
11
|
+
export declare function buildDefaultCandlestickOverlays(sourceSeriesId: string, barCount: number): ChartOverlayInput[];
|
|
12
|
+
export declare function shouldApplyDefaultCandlestickOverlays(series: PrepareChartInput['series']): boolean;
|
|
13
|
+
export declare function resolvePrepareChartOverlays(input: PrepareChartInput): ChartOverlayInput[] | undefined;
|
|
14
|
+
//# sourceMappingURL=chart-defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-defaults.d.ts","sourceRoot":"","sources":["../../../src/core/chart/chart-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,cAAc,CAAC;AAEpD,0EAA0E;AAC1E,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,oEAAoE;AACpE,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,wBAAgB,0BAA0B,CACzC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GACjC,MAAM,GAAG,IAAI,CAGf;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GAAG,OAAO,CAErF;AAED,6FAA6F;AAC7F,wBAAgB,2BAA2B,CAC1C,KAAK,EAAE,iBAAiB,GACtB,iBAAiB,CA0CnB;AAED,wBAAgB,+BAA+B,CAC9C,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,GACd,iBAAiB,EAAE,CAoBrB;AAED,wBAAgB,qCAAqC,CACpD,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GACjC,OAAO,CAST;AAED,wBAAgB,2BAA2B,CAC1C,KAAK,EAAE,iBAAiB,GACtB,iBAAiB,EAAE,GAAG,SAAS,CAkBjC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/** Default EMA on candlestick charts when the caller omits `overlays`. */
|
|
2
|
+
export const DEFAULT_CHART_EMA_PERIOD = 50;
|
|
3
|
+
/** Default RSI oscillator pane when the caller omits `overlays`. */
|
|
4
|
+
export const DEFAULT_CHART_RSI_PERIOD = 14;
|
|
5
|
+
export function primaryCandlestickSeriesId(series) {
|
|
6
|
+
const candle = series.find(s => s.type === 'candlestick');
|
|
7
|
+
return candle?.id ?? null;
|
|
8
|
+
}
|
|
9
|
+
export function hasHistogramVolumeSeries(series) {
|
|
10
|
+
return series.some(s => s.type === 'histogram');
|
|
11
|
+
}
|
|
12
|
+
/** Promote per-bar `volume` on candlestick rows into a histogram series when none exists. */
|
|
13
|
+
export function ensureVolumeHistogramSeries(input) {
|
|
14
|
+
if (hasHistogramVolumeSeries(input.series)) {
|
|
15
|
+
return input;
|
|
16
|
+
}
|
|
17
|
+
const candle = input.series.find(s => s.type === 'candlestick');
|
|
18
|
+
if (!candle) {
|
|
19
|
+
return input;
|
|
20
|
+
}
|
|
21
|
+
const volumeData = [];
|
|
22
|
+
for (const row of candle.data) {
|
|
23
|
+
const time = row.time;
|
|
24
|
+
const volume = row.volume;
|
|
25
|
+
if (time == null ||
|
|
26
|
+
typeof volume !== 'number' ||
|
|
27
|
+
!Number.isFinite(volume) ||
|
|
28
|
+
volume < 0) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
volumeData.push({ time, value: volume });
|
|
32
|
+
}
|
|
33
|
+
if (volumeData.length === 0) {
|
|
34
|
+
return input;
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
...input,
|
|
38
|
+
series: [
|
|
39
|
+
...input.series,
|
|
40
|
+
{
|
|
41
|
+
id: 'volume',
|
|
42
|
+
type: 'histogram',
|
|
43
|
+
label: 'Volume',
|
|
44
|
+
priceScaleId: 'left',
|
|
45
|
+
data: volumeData,
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export function buildDefaultCandlestickOverlays(sourceSeriesId, barCount) {
|
|
51
|
+
const overlays = [];
|
|
52
|
+
if (barCount >= DEFAULT_CHART_EMA_PERIOD) {
|
|
53
|
+
overlays.push({
|
|
54
|
+
type: 'ema',
|
|
55
|
+
sourceSeriesId,
|
|
56
|
+
period: DEFAULT_CHART_EMA_PERIOD,
|
|
57
|
+
label: `EMA(${DEFAULT_CHART_EMA_PERIOD})`,
|
|
58
|
+
overlay: true,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
if (barCount > DEFAULT_CHART_RSI_PERIOD) {
|
|
62
|
+
overlays.push({
|
|
63
|
+
type: 'rsi',
|
|
64
|
+
sourceSeriesId,
|
|
65
|
+
period: DEFAULT_CHART_RSI_PERIOD,
|
|
66
|
+
label: `RSI(${DEFAULT_CHART_RSI_PERIOD})`,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return overlays;
|
|
70
|
+
}
|
|
71
|
+
export function shouldApplyDefaultCandlestickOverlays(series) {
|
|
72
|
+
if (!series.some(s => s.type === 'candlestick')) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
// Hand-built overlay lines or extra price series → caller controls indicators.
|
|
76
|
+
if (series.some(s => s.type === 'line' || s.type === 'area')) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
export function resolvePrepareChartOverlays(input) {
|
|
82
|
+
if (input.overlays?.length) {
|
|
83
|
+
return input.overlays;
|
|
84
|
+
}
|
|
85
|
+
if (input.options?.skipDefaultOverlays) {
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
if (!shouldApplyDefaultCandlestickOverlays(input.series)) {
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
const sourceId = primaryCandlestickSeriesId(input.series);
|
|
92
|
+
if (!sourceId) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
const candle = input.series.find(s => s.id === sourceId);
|
|
96
|
+
const barCount = candle?.data.length ?? 0;
|
|
97
|
+
const defaults = buildDefaultCandlestickOverlays(sourceId, barCount);
|
|
98
|
+
return defaults.length > 0 ? defaults : undefined;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=chart-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-defaults.js","sourceRoot":"","sources":["../../../src/core/chart/chart-defaults.ts"],"names":[],"mappings":"AAGA,0EAA0E;AAC1E,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAC3C,oEAAoE;AACpE,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C,MAAM,UAAU,0BAA0B,CACzC,MAAmC;IAEnC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;IAC1D,OAAO,MAAM,EAAE,EAAE,IAAI,IAAI,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAmC;IAC3E,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;AACjD,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,2BAA2B,CAC1C,KAAwB;IAExB,IAAI,wBAAwB,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;IAChE,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAA8B,EAAE,CAAC;IACjD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACtB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,IACC,IAAI,IAAI,IAAI;YACZ,OAAO,MAAM,KAAK,QAAQ;YAC1B,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACxB,MAAM,GAAG,CAAC,EACT,CAAC;YACF,SAAS;QACV,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAC,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACd,CAAC;IAED,OAAO;QACN,GAAG,KAAK;QACR,MAAM,EAAE;YACP,GAAG,KAAK,CAAC,MAAM;YACf;gBACC,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,QAAQ;gBACf,YAAY,EAAE,MAAM;gBACpB,IAAI,EAAE,UAAU;aAChB;SACD;KACD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC9C,cAAsB,EACtB,QAAgB;IAEhB,MAAM,QAAQ,GAAwB,EAAE,CAAC;IACzC,IAAI,QAAQ,IAAI,wBAAwB,EAAE,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,KAAK;YACX,cAAc;YACd,MAAM,EAAE,wBAAwB;YAChC,KAAK,EAAE,OAAO,wBAAwB,GAAG;YACzC,OAAO,EAAE,IAAI;SACb,CAAC,CAAC;IACJ,CAAC;IACD,IAAI,QAAQ,GAAG,wBAAwB,EAAE,CAAC;QACzC,QAAQ,CAAC,IAAI,CAAC;YACb,IAAI,EAAE,KAAK;YACX,cAAc;YACd,MAAM,EAAE,wBAAwB;YAChC,KAAK,EAAE,OAAO,wBAAwB,GAAG;SACzC,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,qCAAqC,CACpD,MAAmC;IAEnC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC;IACd,CAAC;IACD,+EAA+E;IAC/E,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC;QAC9D,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,UAAU,2BAA2B,CAC1C,KAAwB;IAExB,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,EAAE,mBAAmB,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,qCAAqC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1D,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,QAAQ,GAAG,0BAA0B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,SAAS,CAAC;IAClB,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;IACzD,MAAM,QAAQ,GAAG,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,+BAA+B,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACrE,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { prepareChartCore, isChartV1Payload } from './prepare-core.js';
|
|
2
2
|
export { prepareChart } from './prepare.js';
|
|
3
|
+
export { DEFAULT_CHART_EMA_PERIOD, DEFAULT_CHART_RSI_PERIOD, buildDefaultCandlestickOverlays, ensureVolumeHistogramSeries, } from './chart-defaults.js';
|
|
3
4
|
export { expandChartOverlays } from './overlays.js';
|
|
4
5
|
export { buildChartAttachmentRef, formatChartKeyGenFence, formatMpcTaskResultChartsYaml, sha256HexUtf8, type ChartAttachmentRef, } from './keygen-format.js';
|
|
5
6
|
export { ohlcvToPrepareChartInput, type OhlcvRow, type OhlcvToPrepareChartInputOptions } from './ohlcv.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/chart/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,EACN,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,aAAa,EACb,KAAK,kBAAkB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,wBAAwB,EAAE,KAAK,QAAQ,EAAE,KAAK,+BAA+B,EAAC,MAAM,YAAY,CAAC;AACzG,OAAO,EACN,aAAa,EACb,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,SAAS,GACd,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/chart/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,EACN,wBAAwB,EACxB,wBAAwB,EACxB,+BAA+B,EAC/B,2BAA2B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,EACN,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,aAAa,EACb,KAAK,kBAAkB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,wBAAwB,EAAE,KAAK,QAAQ,EAAE,KAAK,+BAA+B,EAAC,MAAM,YAAY,CAAC;AACzG,OAAO,EACN,aAAa,EACb,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,SAAS,GACd,MAAM,cAAc,CAAC"}
|
package/dist/core/chart/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { prepareChartCore, isChartV1Payload } from './prepare-core.js';
|
|
2
2
|
export { prepareChart } from './prepare.js';
|
|
3
|
+
export { DEFAULT_CHART_EMA_PERIOD, DEFAULT_CHART_RSI_PERIOD, buildDefaultCandlestickOverlays, ensureVolumeHistogramSeries, } from './chart-defaults.js';
|
|
3
4
|
export { expandChartOverlays } from './overlays.js';
|
|
4
5
|
export { buildChartAttachmentRef, formatChartKeyGenFence, formatMpcTaskResultChartsYaml, sha256HexUtf8, } from './keygen-format.js';
|
|
5
6
|
export { ohlcvToPrepareChartInput } from './ohlcv.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/chart/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,EACN,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,aAAa,GAEb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,wBAAwB,EAAsD,MAAM,YAAY,CAAC;AACzG,OAAO,EACN,aAAa,EACb,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,GAMpB,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/chart/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAC,YAAY,EAAC,MAAM,cAAc,CAAC;AAC1C,OAAO,EACN,wBAAwB,EACxB,wBAAwB,EACxB,+BAA+B,EAC/B,2BAA2B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,EACN,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,aAAa,GAEb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAC,wBAAwB,EAAsD,MAAM,YAAY,CAAC;AACzG,OAAO,EACN,aAAa,EACb,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,GAMpB,MAAM,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare.d.ts","sourceRoot":"","sources":["../../../src/core/chart/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,EAEN,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"prepare.d.ts","sourceRoot":"","sources":["../../../src/core/chart/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,EAEN,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,MAAM,cAAc,CAAC;AAOtB,OAAO,EAAmB,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAC,gBAAgB,EAAC,CAAC;AAE1B,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,SAAS,CAAC,kBAAkB,CAAC,CAkCpF"}
|
|
@@ -1,26 +1,29 @@
|
|
|
1
1
|
import { DEFAULT_CHART_HEIGHT, } from './schemas.js';
|
|
2
|
+
import { ensureVolumeHistogramSeries, resolvePrepareChartOverlays, } from './chart-defaults.js';
|
|
2
3
|
import { expandChartOverlays } from './overlays.js';
|
|
3
4
|
import { buildPaneLayout } from './panes.js';
|
|
4
5
|
import { prepareChartCore, isChartV1Payload } from './prepare-core.js';
|
|
5
6
|
export { isChartV1Payload };
|
|
6
7
|
export function prepareChart(input) {
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
const withVolume = ensureVolumeHistogramSeries(input);
|
|
9
|
+
const overlays = resolvePrepareChartOverlays(withVolume);
|
|
10
|
+
if (!overlays?.length) {
|
|
11
|
+
return prepareChartCore(withVolume);
|
|
9
12
|
}
|
|
10
13
|
const core = prepareChartCore({
|
|
11
|
-
...
|
|
14
|
+
...withVolume,
|
|
12
15
|
overlays: undefined,
|
|
13
16
|
});
|
|
14
17
|
if (!core.ok) {
|
|
15
18
|
return core;
|
|
16
19
|
}
|
|
17
|
-
const expanded = expandChartOverlays(core.data.chart.series,
|
|
20
|
+
const expanded = expandChartOverlays(core.data.chart.series, overlays);
|
|
18
21
|
if (!expanded.ok) {
|
|
19
22
|
return expanded;
|
|
20
23
|
}
|
|
21
24
|
const chartPayload = buildPaneLayout({
|
|
22
|
-
...(
|
|
23
|
-
height:
|
|
25
|
+
...(withVolume.title?.trim() ? { title: withVolume.title.trim() } : {}),
|
|
26
|
+
height: withVolume.height ?? DEFAULT_CHART_HEIGHT,
|
|
24
27
|
series: expanded.data,
|
|
25
28
|
});
|
|
26
29
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../../src/core/chart/prepare.ts"],"names":[],"mappings":"AACA,OAAO,EACN,oBAAoB,GAGpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAC,gBAAgB,EAAC,CAAC;AAE1B,MAAM,UAAU,YAAY,CAAC,KAAwB;IACpD,
|
|
1
|
+
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../../src/core/chart/prepare.ts"],"names":[],"mappings":"AACA,OAAO,EACN,oBAAoB,GAGpB,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,2BAA2B,EAC3B,2BAA2B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAClD,OAAO,EAAC,eAAe,EAAC,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAC,gBAAgB,EAAC,CAAC;AAE1B,MAAM,UAAU,YAAY,CAAC,KAAwB;IACpD,MAAM,UAAU,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAC;IAEzD,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QACvB,OAAO,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,IAAI,GAAG,gBAAgB,CAAC;QAC7B,GAAG,UAAU;QACb,QAAQ,EAAE,SAAS;KACnB,CAAC,CAAC;IACH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,MAAM,YAAY,GAAG,eAAe,CAAC;QACpC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,oBAAoB;QACjD,MAAM,EAAE,QAAQ,CAAC,IAAI;KACrB,CAAC,CAAC;IAEH,OAAO;QACN,EAAE,EAAE,IAAI;QACR,IAAI,EAAE;YACL,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;YACpB,KAAK,EAAE,YAAY;SACnB;KACD,CAAC;AACH,CAAC"}
|
|
@@ -204,6 +204,7 @@ export declare const PrepareChartInputSchema: z.ZodObject<{
|
|
|
204
204
|
options: z.ZodOptional<z.ZodObject<{
|
|
205
205
|
maxPoints: z.ZodOptional<z.ZodNumber>;
|
|
206
206
|
colorVolumeFromCandles: z.ZodOptional<z.ZodBoolean>;
|
|
207
|
+
skipDefaultOverlays: z.ZodOptional<z.ZodBoolean>;
|
|
207
208
|
}, z.core.$strict>>;
|
|
208
209
|
}, z.core.$strict>;
|
|
209
210
|
export declare const ChartTimeSchema: z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/core/chart/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAGtB,OAAO,EAAC,uBAAuB,EAAE,0BAA0B,EAAC,MAAM,sBAAsB,CAAC;AACzF,YAAY,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAE5D,eAAO,MAAM,aAAa,EAAG,oBAA6B,CAAC;AAE3D,eAAO,MAAM,wBAAwB,OAAQ,CAAC;AAC9C,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,eAAO,MAAM,qBAAqB;;;;;EAAuD,CAAC;AAE1F,eAAO,MAAM,oBAAoB;;;;EAAwC,CAAC;AAE1E,eAAO,MAAM,sBAAsB;;;;;;;;kBAMzB,CAAC;AAEX,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;kBAUzB,CAAC;AAEX,eAAO,MAAM,uBAAuB
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/core/chart/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAGtB,OAAO,EAAC,uBAAuB,EAAE,0BAA0B,EAAC,MAAM,sBAAsB,CAAC;AACzF,YAAY,EAAC,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAE5D,eAAO,MAAM,aAAa,EAAG,oBAA6B,CAAC;AAE3D,eAAO,MAAM,wBAAwB,OAAQ,CAAC;AAC9C,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,eAAO,MAAM,qBAAqB;;;;;EAAuD,CAAC;AAE1F,eAAO,MAAM,oBAAoB;;;;EAAwC,CAAC;AAE1E,eAAO,MAAM,sBAAsB;;;;;;;;kBAMzB,CAAC;AAEX,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;kBAUzB,CAAC;AAEX,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAiB1B,CAAC;AAEX,eAAO,MAAM,eAAe;;;;oBAS1B,CAAC;AAEH,eAAO,MAAM,eAAe;;;kBAKlB,CAAC;AAEX,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;kBAW1B,CAAC;AAEX,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAOvB,CAAC;AAEX,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAK3B,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
|
|
@@ -36,6 +36,8 @@ export const PrepareChartInputSchema = z
|
|
|
36
36
|
maxPoints: z.number().int().min(2).max(DEFAULT_CHART_MAX_POINTS).optional(),
|
|
37
37
|
/** Match histogram bars to candlestick open/close at the same time (any bar period). Default true. */
|
|
38
38
|
colorVolumeFromCandles: z.boolean().optional(),
|
|
39
|
+
/** When true, omit default EMA(50) + RSI(14) overlays on candlestick charts. */
|
|
40
|
+
skipDefaultOverlays: z.boolean().optional(),
|
|
39
41
|
})
|
|
40
42
|
.strict()
|
|
41
43
|
.optional(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/core/chart/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,0BAA0B,EAAC,MAAM,sBAAsB,CAAC;AAEhE,OAAO,EAAC,uBAAuB,EAAE,0BAA0B,EAAC,MAAM,sBAAsB,CAAC;AAGzF,MAAM,CAAC,MAAM,aAAa,GAAG,oBAA6B,CAAC;AAE3D,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAC9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACxC,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAEnC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;AAE1F,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE1E,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC;KACrC,MAAM,CAAC;IACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACnC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC3C,SAAS,EAAE,oBAAoB,CAAC,QAAQ,EAAE;CAC1C,CAAC;KACD,MAAM,EAAE,CAAC;AAEX,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC;KACrC,MAAM,CAAC;IACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAC7B,IAAI,EAAE,qBAAqB;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;IAClD,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/B,KAAK,EAAE,sBAAsB,CAAC,QAAQ,EAAE;CACxC,CAAC;KACD,MAAM,EAAE,CAAC;AAEX,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACtC,MAAM,CAAC;IACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACrC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;IACrD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IACtD,QAAQ,EAAE,0BAA0B,CAAC,QAAQ,EAAE;IAC/C,OAAO,EAAE,CAAC;SACR,MAAM,CAAC;QACP,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,QAAQ,EAAE;QAC3E,sGAAsG;QACtG,sBAAsB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/core/chart/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,70 @@ Returns **`kind: continuum/chart/v1`** for the node agent chat UI (lightweight-c
|
|
|
8
8
|
2. Call **`prepare_chart`** with **`series`** (price/volume) and optional **`overlays`**.
|
|
9
9
|
3. **Main pane:** candles, volume, SMA, EMA, Bollinger, Fibonacci. **Oscillator panes (below):** RSI, MACD, Stochastic RSI — TradingView-style stacked sub-charts.
|
|
10
10
|
|
|
11
|
+
See **Lookback & bar budget** below when the operator does not specify a time range. Optional node skills **`chart-periods`** (time range) and **`chart-defaults`** (indicator overrides, MCP load) — load via `agent_load_skill` when charting.
|
|
12
|
+
|
|
13
|
+
## Default indicators (candlestick)
|
|
14
|
+
|
|
15
|
+
When **`prepare_chart`** receives a **candlestick** series and **no `overlays`**, the tool automatically adds:
|
|
16
|
+
|
|
17
|
+
| Pane | Indicator | Default |
|
|
18
|
+
|------|-----------|---------|
|
|
19
|
+
| Main (price) | **EMA** | period **50** |
|
|
20
|
+
| Below | **RSI** | period **14** |
|
|
21
|
+
| Main (left scale) | **Volume** histogram | when volume exists on candle rows or a histogram series is already supplied |
|
|
22
|
+
|
|
23
|
+
- Pass a non-empty **`overlays`** array to **replace** these defaults entirely (e.g. SMA 20 only).
|
|
24
|
+
- Set **`options.skipDefaultOverlays`: true** to show candles (+ volume) only.
|
|
25
|
+
- Defaults apply only when there are enough bars (≥ **50** for EMA, > **14** for RSI); shorter series chart as candles only.
|
|
26
|
+
- **`prepare_chart` computes overlays internally** — you do **not** need the **`technical-indicators`** MCP server for default EMA/RSI. Load **`technical-indicators`** for standalone `calculate_technical_indicator` calls or catalog exploration (see skill **`chart-defaults`**).
|
|
27
|
+
|
|
28
|
+
Operator-specific overrides (different EMA period, add MACD, disable RSI): edit node skill **`chart-defaults`** or pass explicit **`overlays`** / **`skipDefaultOverlays`** in the tool call.
|
|
29
|
+
|
|
30
|
+
## Lookback & bar budget
|
|
31
|
+
|
|
32
|
+
When the operator asks to chart something but **does not specify how far back** to look, choose a sensible window from the **bar interval** (or from their stated period). Target **~150–400 bars** on screen for agent chat — enough context without clutter or oversized payloads.
|
|
33
|
+
|
|
34
|
+
### Default lookback (operator did not specify a range)
|
|
35
|
+
|
|
36
|
+
| Bar interval | Default calendar window | Approx. bars |
|
|
37
|
+
|--------------|-------------------------|--------------|
|
|
38
|
+
| 1m – 5m | 1 – 3 days | 300 – 500 |
|
|
39
|
+
| 15m | 5 – 10 days | 300 – 500 |
|
|
40
|
+
| 1h | 30 – 60 days | 720 – 1 440 (trim below) |
|
|
41
|
+
| 4h | 60 – 90 days | 360 – 540 |
|
|
42
|
+
| 1d | 6 – 12 months | 180 – 365 |
|
|
43
|
+
| 1w | 2 – 3 years | 100 – 150 |
|
|
44
|
+
|
|
45
|
+
Put the chosen window in **`title`** (e.g. `BTC/USD 4H — last 90d`) so the operator knows what they are seeing.
|
|
46
|
+
|
|
47
|
+
### When the operator specifies a period
|
|
48
|
+
|
|
49
|
+
Honor their range (e.g. “6 months on 4h” ≈ 1 080 bars). Still apply the **bar budget** and **newest-first trim** below if the result exceeds chat limits.
|
|
50
|
+
|
|
51
|
+
### Bar budget (agent chat)
|
|
52
|
+
|
|
53
|
+
- Aim for **≤ ~400 bars** in each series passed to **`prepare_chart`**.
|
|
54
|
+
- Set **`options.maxPoints`: 400** (or lower) as a safety net. The tool keeps the **newest** points when trimming (never the oldest).
|
|
55
|
+
- **`prepare_chart` does not fix oversized fetch payloads** — trim **before** the call when you aggregate or download more data than needed.
|
|
56
|
+
|
|
57
|
+
### Newest data wins (always)
|
|
58
|
+
|
|
59
|
+
Sort ascending by `time`, then keep the tail:
|
|
60
|
+
|
|
61
|
+
```javascript
|
|
62
|
+
bars.sort((a, b) => a.time - b.time);
|
|
63
|
+
bars = bars.slice(-maxBars); // maxBars ≤ 400 for chat; use operator range when smaller
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Apply the same tail slice to volume / indicator inputs aligned on those times. Do **not** pass the oldest segment of a long download.
|
|
67
|
+
|
|
68
|
+
### Fetch strategy
|
|
69
|
+
|
|
70
|
+
1. Request the **coarsest API resolution** that matches the target interval (avoid 30 days of 1h ticks when you only need 4h bars).
|
|
71
|
+
2. **Aggregate** (e.g. hourly → 4h) then **trim** with `slice(-maxBars)`.
|
|
72
|
+
3. Pass trimmed, ascending OHLCV to **`prepare_chart`**; use **`overlays`** for SMA / RSI / MACD — do not hand-build indicator series unless necessary.
|
|
73
|
+
4. For KeyGen attachments (larger payloads allowed), you may use more bars; still prefer newest-first trim.
|
|
74
|
+
|
|
11
75
|
## Overlays (auto-computed)
|
|
12
76
|
|
|
13
77
|
Add **`overlays`** to compute indicators from a **`sourceSeriesId`** (candlestick or line closes).
|
|
@@ -168,7 +232,7 @@ First bar: close ≥ open → green volume. Second: close < open → red volume.
|
|
|
168
232
|
|
|
169
233
|
## Options
|
|
170
234
|
|
|
171
|
-
- **`options.maxPoints`** — cap per series (default **5000**); keeps newest points when trimming.
|
|
235
|
+
- **`options.maxPoints`** — cap per series (default **5000**); keeps **newest** points when trimming. Use **400** (or similar) for agent chat unless the operator needs a longer on-screen history.
|
|
172
236
|
- **`options.colorVolumeFromCandles`** — color histogram bars from candlestick open/close at the same timestamp (default **true**).
|
|
173
237
|
- **`priceScaleId`**: `"left"` | `"right"` — use different scales for unlike units.
|
|
174
238
|
- **`overlay`**: `true` — draw line/area on the main price pane.
|
package/package.json
CHANGED