@continuumdao/continuum-node-sdk 1.3.9 → 1.3.11

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.
@@ -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":"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"}
@@ -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"}
@@ -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;AAGtB,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,CA+BpF"}
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
- if (!input.overlays?.length) {
8
- return prepareChartCore(input);
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
- ...input,
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, input.overlays);
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
- ...(input.title?.trim() ? { title: input.title.trim() } : {}),
23
- height: input.height ?? DEFAULT_CHART_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,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAC7B,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,IAAI,GAAG,gBAAgB,CAAC;QAC7B,GAAG,KAAK;QACR,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,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7E,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,OAAO,QAAQ,CAAC;IACjB,CAAC;IAED,MAAM,YAAY,GAAG,eAAe,CAAC;QACpC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,oBAAoB;QAC5C,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"}
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"}
@@ -50,7 +50,9 @@ export declare const ChartSeriesInputSchema: z.ZodObject<{
50
50
  }>>;
51
51
  }, z.core.$strict>>;
52
52
  }, z.core.$strict>;
53
- export declare const PrepareChartInputSchema: z.ZodObject<{
53
+ /** Agents sometimes stringify `series` / `overlays`; coerce before strict validation. */
54
+ export declare function preprocessPrepareChartInput(raw: unknown): unknown;
55
+ export declare const PrepareChartInputSchema: z.ZodPreprocess<z.ZodObject<{
54
56
  title: z.ZodOptional<z.ZodString>;
55
57
  height: z.ZodOptional<z.ZodNumber>;
56
58
  series: z.ZodArray<z.ZodObject<{
@@ -204,8 +206,9 @@ export declare const PrepareChartInputSchema: z.ZodObject<{
204
206
  options: z.ZodOptional<z.ZodObject<{
205
207
  maxPoints: z.ZodOptional<z.ZodNumber>;
206
208
  colorVolumeFromCandles: z.ZodOptional<z.ZodBoolean>;
209
+ skipDefaultOverlays: z.ZodOptional<z.ZodBoolean>;
207
210
  }, z.core.$strict>>;
208
- }, z.core.$strict>;
211
+ }, z.core.$strict>>;
209
212
  export declare const ChartTimeSchema: z.ZodUnion<readonly [z.ZodNumber, z.ZodObject<{
210
213
  year: z.ZodNumber;
211
214
  month: z.ZodNumber;
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAe1B,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"}
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;AAgCX,yFAAyF;AACzF,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAejE;AAqBD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAGnC,CAAC;AAEF,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"}
@@ -25,7 +25,54 @@ export const ChartSeriesInputSchema = z
25
25
  style: ChartSeriesStyleSchema.optional(),
26
26
  })
27
27
  .strict();
28
- export const PrepareChartInputSchema = z
28
+ function parseJsonArrayIfString(raw) {
29
+ if (typeof raw !== 'string') {
30
+ return raw;
31
+ }
32
+ const trimmed = raw.trim();
33
+ if (!trimmed.startsWith('[')) {
34
+ return raw;
35
+ }
36
+ try {
37
+ return JSON.parse(trimmed);
38
+ }
39
+ catch {
40
+ return raw;
41
+ }
42
+ }
43
+ function parseJsonObjectIfString(raw) {
44
+ if (typeof raw !== 'string') {
45
+ return raw;
46
+ }
47
+ const trimmed = raw.trim();
48
+ if (!trimmed.startsWith('{')) {
49
+ return raw;
50
+ }
51
+ try {
52
+ return JSON.parse(trimmed);
53
+ }
54
+ catch {
55
+ return raw;
56
+ }
57
+ }
58
+ /** Agents sometimes stringify `series` / `overlays`; coerce before strict validation. */
59
+ export function preprocessPrepareChartInput(raw) {
60
+ if (!raw || typeof raw !== 'object') {
61
+ return raw;
62
+ }
63
+ const input = { ...raw };
64
+ if ('series' in input) {
65
+ input.series = parseJsonArrayIfString(input.series);
66
+ }
67
+ if ('overlays' in input) {
68
+ input.overlays = parseJsonArrayIfString(input.overlays);
69
+ }
70
+ if ('options' in input) {
71
+ input.options = parseJsonObjectIfString(input.options);
72
+ }
73
+ return input;
74
+ }
75
+ const PrepareChartInputInnerSchema = z
29
76
  .object({
30
77
  title: z.string().max(256).optional(),
31
78
  height: z.number().int().min(120).max(800).optional(),
@@ -36,11 +83,14 @@ export const PrepareChartInputSchema = z
36
83
  maxPoints: z.number().int().min(2).max(DEFAULT_CHART_MAX_POINTS).optional(),
37
84
  /** Match histogram bars to candlestick open/close at the same time (any bar period). Default true. */
38
85
  colorVolumeFromCandles: z.boolean().optional(),
86
+ /** When true, omit default EMA(50) + RSI(14) overlays on candlestick charts. */
87
+ skipDefaultOverlays: z.boolean().optional(),
39
88
  })
40
89
  .strict()
41
90
  .optional(),
42
91
  })
43
92
  .strict();
93
+ export const PrepareChartInputSchema = z.preprocess(preprocessPrepareChartInput, PrepareChartInputInnerSchema);
44
94
  export const ChartTimeSchema = z.union([
45
95
  z.number().int().nonnegative(),
46
96
  z
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/core/chart/schemas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/core/chart/schemas.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../src/mcp/chart.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAQvE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAc1D"}
1
+ {"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../src/mcp/chart.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAQvE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAe1D"}
package/dist/mcp/chart.js CHANGED
@@ -6,7 +6,8 @@ export function registerChartTools(server) {
6
6
  description: 'Build a continuum/chart/v1 payload for the agent chat UI (lightweight-charts). ' +
7
7
  'Supports candlestick, line, area, histogram series plus overlays: sma, ema, bollinger, fibonacci ' +
8
8
  '(main pane) and rsi, macd, stochasticrsi (separate oscillator panes below price). ' +
9
- 'Need ~30+ bars for MACD/Stoch RSI. Times: Unix seconds, ms, or YYYY-MM-DD.',
9
+ 'Need ~30+ bars for MACD/Stoch RSI. Times: Unix seconds, ms, or YYYY-MM-DD. ' +
10
+ 'Pass `series` as a JSON array (not a stringified JSON blob).',
10
11
  inputSchema: PrepareChartInputSchema,
11
12
  outputSchema: PrepareChartOutputSchema,
12
13
  }, async (input) => sdkResultToCallToolResult(prepareChart(input)));
@@ -1 +1 @@
1
- {"version":3,"file":"chart.js","sourceRoot":"","sources":["../../src/mcp/chart.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,0BAA0B,CAAC;AACtD,OAAO,EACN,uBAAuB,EACvB,wBAAwB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAC,YAAY,EAAE,yBAAyB,EAAC,MAAM,iBAAiB,CAAC;AAExE,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CAClB,YAAY,CAAC,cAAc,CAAC,EAC5B;QACC,WAAW,EACV,iFAAiF;YACjF,mGAAmG;YACnG,oFAAoF;YACpF,4EAA4E;QAC7E,WAAW,EAAE,uBAAuB;QACpC,YAAY,EAAE,wBAAwB;KACtC,EACD,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,yBAAyB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAC/D,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"chart.js","sourceRoot":"","sources":["../../src/mcp/chart.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,0BAA0B,CAAC;AACtD,OAAO,EACN,uBAAuB,EACvB,wBAAwB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAC,YAAY,EAAE,yBAAyB,EAAC,MAAM,iBAAiB,CAAC;AAExE,MAAM,UAAU,kBAAkB,CAAC,MAAiB;IACnD,MAAM,CAAC,YAAY,CAClB,YAAY,CAAC,cAAc,CAAC,EAC5B;QACC,WAAW,EACV,iFAAiF;YACjF,mGAAmG;YACnG,oFAAoF;YACpF,6EAA6E;YAC7E,8DAA8D;QAC/D,WAAW,EAAE,uBAAuB;QACpC,YAAY,EAAE,wBAAwB;KACtC,EACD,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,yBAAyB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAC/D,CAAC;AACH,CAAC"}
@@ -4,10 +4,76 @@ Returns **`kind: continuum/chart/v1`** for the node agent chat UI (lightweight-c
4
4
 
5
5
  ## Workflow
6
6
 
7
- 1. Fetch OHLCV or price history (CoinGecko, Binance, protocol APIs, etc.) any source.
8
- 2. Call **`prepare_chart`** with **`series`** (price/volume) and optional **`overlays`**.
7
+ 1. **Default:** fetch spot OHLCV from **CoinGecko** MCP (`coingecko` catalog id load via **`agent_load_mcp_server`** if needed). See node skill **`chart-periods`**.
8
+ 2. Call **`prepare_chart`** with **`series`** as a **JSON array** (not a string) 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
+ Use Hyperliquid / GMX / DeFi OHLCV only when the operator asks for that venue — not for generic “chart BTC” requests.
12
+
13
+ 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.
14
+
15
+ ## Default indicators (candlestick)
16
+
17
+ When **`prepare_chart`** receives a **candlestick** series and **no `overlays`**, the tool automatically adds:
18
+
19
+ | Pane | Indicator | Default |
20
+ |------|-----------|---------|
21
+ | Main (price) | **EMA** | period **50** |
22
+ | Below | **RSI** | period **14** |
23
+ | Main (left scale) | **Volume** histogram | when volume exists on candle rows or a histogram series is already supplied |
24
+
25
+ - Pass a non-empty **`overlays`** array to **replace** these defaults entirely (e.g. SMA 20 only).
26
+ - Set **`options.skipDefaultOverlays`: true** to show candles (+ volume) only.
27
+ - Defaults apply only when there are enough bars (≥ **50** for EMA, > **14** for RSI); shorter series chart as candles only.
28
+ - **`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`**).
29
+
30
+ Operator-specific overrides (different EMA period, add MACD, disable RSI): edit node skill **`chart-defaults`** or pass explicit **`overlays`** / **`skipDefaultOverlays`** in the tool call.
31
+
32
+ ## Lookback & bar budget
33
+
34
+ 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.
35
+
36
+ ### Default lookback (operator did not specify a range)
37
+
38
+ | Bar interval | Default calendar window | Approx. bars |
39
+ |--------------|-------------------------|--------------|
40
+ | 1m – 5m | 1 – 3 days | 300 – 500 |
41
+ | 15m | 5 – 10 days | 300 – 500 |
42
+ | 1h | 30 – 60 days | 720 – 1 440 (trim below) |
43
+ | 4h | 60 – 90 days | 360 – 540 |
44
+ | 1d | 6 – 12 months | 180 – 365 |
45
+ | 1w | 2 – 3 years | 100 – 150 |
46
+
47
+ Put the chosen window in **`title`** (e.g. `BTC/USD 4H — last 90d`) so the operator knows what they are seeing.
48
+
49
+ ### When the operator specifies a period
50
+
51
+ 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.
52
+
53
+ ### Bar budget (agent chat)
54
+
55
+ - Aim for **≤ ~400 bars** in each series passed to **`prepare_chart`**.
56
+ - Set **`options.maxPoints`: 400** (or lower) as a safety net. The tool keeps the **newest** points when trimming (never the oldest).
57
+ - **`prepare_chart` does not fix oversized fetch payloads** — trim **before** the call when you aggregate or download more data than needed.
58
+
59
+ ### Newest data wins (always)
60
+
61
+ Sort ascending by `time`, then keep the tail:
62
+
63
+ ```javascript
64
+ bars.sort((a, b) => a.time - b.time);
65
+ bars = bars.slice(-maxBars); // maxBars ≤ 400 for chat; use operator range when smaller
66
+ ```
67
+
68
+ Apply the same tail slice to volume / indicator inputs aligned on those times. Do **not** pass the oldest segment of a long download.
69
+
70
+ ### Fetch strategy
71
+
72
+ 1. Request the **coarsest API resolution** that matches the target interval (avoid 30 days of 1h ticks when you only need 4h bars).
73
+ 2. **Aggregate** (e.g. hourly → 4h) then **trim** with `slice(-maxBars)`.
74
+ 3. Pass trimmed, ascending OHLCV to **`prepare_chart`**; use **`overlays`** for SMA / RSI / MACD — do not hand-build indicator series unless necessary.
75
+ 4. For KeyGen attachments (larger payloads allowed), you may use more bars; still prefer newest-first trim.
76
+
11
77
  ## Overlays (auto-computed)
12
78
 
13
79
  Add **`overlays`** to compute indicators from a **`sourceSeriesId`** (candlestick or line closes).
@@ -168,7 +234,7 @@ First bar: close ≥ open → green volume. Second: close < open → red volume.
168
234
 
169
235
  ## Options
170
236
 
171
- - **`options.maxPoints`** — cap per series (default **5000**); keeps newest points when trimming.
237
+ - **`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
238
  - **`options.colorVolumeFromCandles`** — color histogram bars from candlestick open/close at the same timestamp (default **true**).
173
239
  - **`priceScaleId`**: `"left"` | `"right"` — use different scales for unlike units.
174
240
  - **`overlay`**: `true` — draw line/area on the main price pane.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@continuumdao/continuum-node-sdk",
3
- "version": "1.3.9",
3
+ "version": "1.3.11",
4
4
  "description": "JSON SDK for the Continuum node client management API",
5
5
  "keywords": [],
6
6
  "homepage": "https://github.com/ContinuumDAO/continuum-node-sdk#readme",