@363045841yyt/klinechart-ai-runtime 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +130 -0
  2. package/dist/createWithMcp.d.ts +9 -0
  3. package/dist/createWithMcp.d.ts.map +1 -0
  4. package/dist/createWithMcp.js +15 -0
  5. package/dist/createWithMcp.js.map +1 -0
  6. package/dist/describeControllers.d.ts +34 -0
  7. package/dist/describeControllers.d.ts.map +1 -0
  8. package/dist/describeControllers.js +104 -0
  9. package/dist/describeControllers.js.map +1 -0
  10. package/dist/executeTool.d.ts +12 -0
  11. package/dist/executeTool.d.ts.map +1 -0
  12. package/dist/executeTool.js +63 -0
  13. package/dist/executeTool.js.map +1 -0
  14. package/dist/index.d.ts +8 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +7 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/mcpServer.d.ts +35 -0
  19. package/dist/mcpServer.d.ts.map +1 -0
  20. package/dist/mcpServer.js +189 -0
  21. package/dist/mcpServer.js.map +1 -0
  22. package/dist/serialization.d.ts +28 -0
  23. package/dist/serialization.d.ts.map +1 -0
  24. package/dist/serialization.js +53 -0
  25. package/dist/serialization.js.map +1 -0
  26. package/dist/sessionRegistry.d.ts +19 -0
  27. package/dist/sessionRegistry.d.ts.map +1 -0
  28. package/dist/sessionRegistry.js +41 -0
  29. package/dist/sessionRegistry.js.map +1 -0
  30. package/dist/toolSchemas.d.ts +14 -0
  31. package/dist/toolSchemas.d.ts.map +1 -0
  32. package/dist/toolSchemas.js +216 -0
  33. package/dist/toolSchemas.js.map +1 -0
  34. package/dist/types.d.ts +75 -0
  35. package/dist/types.d.ts.map +1 -0
  36. package/dist/types.js +2 -0
  37. package/dist/types.js.map +1 -0
  38. package/package.json +63 -0
  39. package/src/__tests__/chartBridge.integration.test.ts +100 -0
  40. package/src/__tests__/describeControllers.test.ts +163 -0
  41. package/src/__tests__/executeTool.test.ts +187 -0
  42. package/src/__tests__/mcpServer.integration.test.ts +155 -0
  43. package/src/__tests__/mcpServer.test.ts +30 -0
  44. package/src/__tests__/serialization.test.ts +116 -0
  45. package/src/__tests__/sessionRegistry.test.ts +139 -0
  46. package/src/__tests__/toolSchemas.test.ts +149 -0
  47. package/src/createWithMcp.ts +28 -0
  48. package/src/describeControllers.ts +166 -0
  49. package/src/executeTool.ts +92 -0
  50. package/src/index.ts +38 -0
  51. package/src/mcpServer.ts +268 -0
  52. package/src/serialization.ts +88 -0
  53. package/src/sessionRegistry.ts +61 -0
  54. package/src/toolSchemas.ts +235 -0
  55. package/src/types.ts +52 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcpServer.js","sourceRoot":"","sources":["../src/mcpServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { SerializedChartState } from './types';
2
+ export declare class ChartSerializationError extends Error {
3
+ readonly code: string;
4
+ constructor(code: string, message: string);
5
+ }
6
+ export interface ChartSnapshotInput {
7
+ label?: string;
8
+ viewport?: {
9
+ zoomLevel: number;
10
+ visibleFrom: number;
11
+ visibleTo: number;
12
+ };
13
+ theme?: 'light' | 'dark';
14
+ indicators?: ReadonlyArray<{
15
+ definitionId: string;
16
+ params: Readonly<Record<string, number | string | boolean>>;
17
+ }>;
18
+ alerts?: ReadonlyArray<{
19
+ id: string;
20
+ name: string;
21
+ predicate: unknown;
22
+ oneShot: boolean;
23
+ cooldownMs?: number;
24
+ }>;
25
+ }
26
+ export declare function serialize(snapshot: ChartSnapshotInput): SerializedChartState;
27
+ export declare function deserialize(json: string): SerializedChartState;
28
+ //# sourceMappingURL=serialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAInD,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;gBACT,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;IACxE,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,aAAa,CAAC;QACzB,YAAY,EAAE,MAAM,CAAA;QACpB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAA;KAC5D,CAAC,CAAA;IACF,MAAM,CAAC,EAAE,aAAa,CAAC;QACrB,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,SAAS,EAAE,OAAO,CAAA;QAClB,OAAO,EAAE,OAAO,CAAA;QAChB,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAC,CAAA;CACH;AAED,wBAAgB,SAAS,CACvB,QAAQ,EAAE,kBAAkB,GAC3B,oBAAoB,CActB;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,CAuC9D"}
@@ -0,0 +1,53 @@
1
+ const SCHEMA_VERSION = 1;
2
+ export class ChartSerializationError extends Error {
3
+ code;
4
+ constructor(code, message) {
5
+ super(message);
6
+ this.name = 'ChartSerializationError';
7
+ this.code = code;
8
+ }
9
+ }
10
+ export function serialize(snapshot) {
11
+ const controllers = {};
12
+ if (snapshot.viewport !== undefined)
13
+ controllers.viewport = snapshot.viewport;
14
+ if (snapshot.theme !== undefined)
15
+ controllers.theme = snapshot.theme;
16
+ if (snapshot.indicators !== undefined)
17
+ controllers.indicators = snapshot.indicators;
18
+ if (snapshot.alerts !== undefined)
19
+ controllers.alerts = snapshot.alerts;
20
+ const out = {
21
+ schemaVersion: SCHEMA_VERSION,
22
+ snapshotTakenAt: new Date().toISOString(),
23
+ controllers,
24
+ };
25
+ if (snapshot.label !== undefined)
26
+ out.label = snapshot.label;
27
+ return out;
28
+ }
29
+ export function deserialize(json) {
30
+ let parsed;
31
+ try {
32
+ parsed = JSON.parse(json);
33
+ }
34
+ catch (err) {
35
+ throw new ChartSerializationError('INVALID_JSON', `Could not parse SerializedChartState as JSON: ${err.message}`);
36
+ }
37
+ if (typeof parsed !== 'object' || parsed === null) {
38
+ throw new ChartSerializationError('NOT_OBJECT', 'SerializedChartState root must be an object.');
39
+ }
40
+ const root = parsed;
41
+ if (root.schemaVersion !== SCHEMA_VERSION) {
42
+ throw new ChartSerializationError('SCHEMA_VERSION_MISMATCH', `Expected schemaVersion ${SCHEMA_VERSION}, got ${String(root.schemaVersion)}.`);
43
+ }
44
+ if (typeof root.snapshotTakenAt !== 'string' ||
45
+ Number.isNaN(Date.parse(root.snapshotTakenAt))) {
46
+ throw new ChartSerializationError('INVALID_TIMESTAMP', 'snapshotTakenAt must be an ISO 8601 string.');
47
+ }
48
+ if (typeof root.controllers !== 'object' || root.controllers === null) {
49
+ throw new ChartSerializationError('MISSING_CONTROLLERS', 'controllers object is required.');
50
+ }
51
+ return root;
52
+ }
53
+ //# sourceMappingURL=serialization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialization.js","sourceRoot":"","sources":["../src/serialization.ts"],"names":[],"mappings":"AAEA,MAAM,cAAc,GAAG,CAAU,CAAA;AAEjC,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IACvC,IAAI,CAAQ;IACrB,YAAY,IAAY,EAAE,OAAe;QACvC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAA;QACrC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;CACF;AAmBD,MAAM,UAAU,SAAS,CACvB,QAA4B;IAE5B,MAAM,WAAW,GAAwC,EAAE,CAAA;IAC3D,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS;QAAE,WAAW,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAA;IAC7E,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS;QAAE,WAAW,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAA;IACpE,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS;QACnC,WAAW,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAA;IAC9C,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS;QAAE,WAAW,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;IACvE,MAAM,GAAG,GAAyB;QAChC,aAAa,EAAE,cAAc;QAC7B,eAAe,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACzC,WAAW;KACZ,CAAA;IACD,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS;QAAE,GAAG,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAA;IAC5D,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,uBAAuB,CAC/B,cAAc,EACd,iDAAkD,GAAa,CAAC,OAAO,EAAE,CAC1E,CAAA;IACH,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClD,MAAM,IAAI,uBAAuB,CAC/B,YAAY,EACZ,8CAA8C,CAC/C,CAAA;IACH,CAAC;IACD,MAAM,IAAI,GAAG,MAAuC,CAAA;IACpD,IAAI,IAAI,CAAC,aAAa,KAAK,cAAc,EAAE,CAAC;QAC1C,MAAM,IAAI,uBAAuB,CAC/B,yBAAyB,EACzB,0BAA0B,cAAc,SAAS,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAC/E,CAAA;IACH,CAAC;IACD,IACE,OAAO,IAAI,CAAC,eAAe,KAAK,QAAQ;QACxC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAC9C,CAAC;QACD,MAAM,IAAI,uBAAuB,CAC/B,mBAAmB,EACnB,6CAA6C,CAC9C,CAAA;IACH,CAAC;IACD,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QACtE,MAAM,IAAI,uBAAuB,CAC/B,qBAAqB,EACrB,iCAAiC,CAClC,CAAA;IACH,CAAC;IACD,OAAO,IAA4B,CAAA;AACrC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ToolCall, ToolResult } from './executeTool';
2
+ import type { ControllerDescription } from './types';
3
+ export interface SessionHandle {
4
+ readonly sessionId: string;
5
+ executeTool(call: ToolCall): Promise<ToolResult>;
6
+ }
7
+ export declare class SessionRegistry {
8
+ private sessions;
9
+ private states;
10
+ register(sessionId: string, handle: SessionHandle): void;
11
+ unregister(sessionId: string): void;
12
+ get(sessionId: string): SessionHandle | undefined;
13
+ has(sessionId: string): boolean;
14
+ getActiveSessionIds(): string[];
15
+ updateState(sessionId: string, descriptions: Record<string, ControllerDescription>): void;
16
+ getState(sessionId: string): Record<string, ControllerDescription> | undefined;
17
+ getSummary(sessionId: string): string;
18
+ }
19
+ //# sourceMappingURL=sessionRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionRegistry.d.ts","sourceRoot":"","sources":["../src/sessionRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAEpD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;CACjD;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,MAAM,CAA2D;IAEzE,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI;IAKxD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAKnC,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAIjD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI/B,mBAAmB,IAAI,MAAM,EAAE;IAI/B,WAAW,CACT,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAClD,IAAI;IAOP,QAAQ,CACN,SAAS,EAAE,MAAM,GAChB,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,SAAS;IAIpD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAUtC"}
@@ -0,0 +1,41 @@
1
+ export class SessionRegistry {
2
+ sessions = new Map();
3
+ states = new Map();
4
+ register(sessionId, handle) {
5
+ this.sessions.set(sessionId, handle);
6
+ this.states.set(sessionId, {});
7
+ }
8
+ unregister(sessionId) {
9
+ this.sessions.delete(sessionId);
10
+ this.states.delete(sessionId);
11
+ }
12
+ get(sessionId) {
13
+ return this.sessions.get(sessionId);
14
+ }
15
+ has(sessionId) {
16
+ return this.sessions.has(sessionId);
17
+ }
18
+ getActiveSessionIds() {
19
+ return Array.from(this.sessions.keys());
20
+ }
21
+ updateState(sessionId, descriptions) {
22
+ const existing = this.states.get(sessionId);
23
+ if (existing) {
24
+ Object.assign(existing, descriptions);
25
+ }
26
+ }
27
+ getState(sessionId) {
28
+ return this.states.get(sessionId);
29
+ }
30
+ getSummary(sessionId) {
31
+ const descriptions = this.states.get(sessionId);
32
+ if (!descriptions)
33
+ return 'No state available.';
34
+ const parts = [];
35
+ for (const desc of Object.values(descriptions)) {
36
+ parts.push(`[${desc.controllerId}] ${desc.summary}`);
37
+ }
38
+ return parts.length > 0 ? parts.join(' | ') : 'No controllers described.';
39
+ }
40
+ }
41
+ //# sourceMappingURL=sessionRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionRegistry.js","sourceRoot":"","sources":["../src/sessionRegistry.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,eAAe;IAClB,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAA;IAC3C,MAAM,GAAG,IAAI,GAAG,EAAiD,CAAA;IAEzE,QAAQ,CAAC,SAAiB,EAAE,MAAqB;QAC/C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IAChC,CAAC;IAED,UAAU,CAAC,SAAiB;QAC1B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAC/B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAC/B,CAAC;IAED,GAAG,CAAC,SAAiB;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IACrC,CAAC;IAED,GAAG,CAAC,SAAiB;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IACrC,CAAC;IAED,mBAAmB;QACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IACzC,CAAC;IAED,WAAW,CACT,SAAiB,EACjB,YAAmD;QAEnD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC3C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;IAED,QAAQ,CACN,SAAiB;QAEjB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IACnC,CAAC;IAED,UAAU,CAAC,SAAiB;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC/C,IAAI,CAAC,YAAY;YAAE,OAAO,qBAAqB,CAAA;QAE/C,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;QACtD,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAA;IAC3E,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import type { McpToolSchema } from './types';
2
+ export declare const CHART_NAVIGATION_TOOLS: McpToolSchema[];
3
+ export declare const INDICATOR_TOOLS: McpToolSchema[];
4
+ export declare const ALERT_TOOLS: McpToolSchema[];
5
+ export declare const REPLAY_TOOLS: McpToolSchema[];
6
+ export declare const ALL_TOOLS: ReadonlyArray<McpToolSchema>;
7
+ export declare const TOOL_GROUPS: {
8
+ readonly navigation: McpToolSchema[];
9
+ readonly indicators: McpToolSchema[];
10
+ readonly alerts: McpToolSchema[];
11
+ readonly replay: McpToolSchema[];
12
+ };
13
+ export declare function findTool(name: string): McpToolSchema | null;
14
+ //# sourceMappingURL=toolSchemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolSchemas.d.ts","sourceRoot":"","sources":["../src/toolSchemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5C,eAAO,MAAM,sBAAsB,EAAE,aAAa,EAuCjD,CAAA;AAED,eAAO,MAAM,eAAe,EAAE,aAAa,EA+D1C,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,aAAa,EA4DtC,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,aAAa,EA2CvC,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,aAAa,CAAC,aAAa,CAKlD,CAAA;AAED,eAAO,MAAM,WAAW;;;;;CAKd,CAAA;AAEV,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAK3D"}
@@ -0,0 +1,216 @@
1
+ export const CHART_NAVIGATION_TOOLS = [
2
+ {
3
+ name: 'chart.zoomToLevel',
4
+ description: 'Zoom the chart to a specific discrete level (1 = most zoomed out, ' +
5
+ 'higher numbers = more zoomed in). Use when the user says "zoom in", ' +
6
+ '"zoom out", "fit the chart", or asks for a specific zoom level.',
7
+ inputSchema: {
8
+ type: 'object',
9
+ properties: {
10
+ level: {
11
+ type: 'integer',
12
+ minimum: 1,
13
+ maximum: 20,
14
+ description: 'Discrete zoom level. Higher = more zoomed in.',
15
+ },
16
+ anchorX: {
17
+ type: 'number',
18
+ description: 'Optional X coordinate to keep stationary during zoom.',
19
+ },
20
+ },
21
+ required: ['level'],
22
+ },
23
+ safety: 'mutates-state',
24
+ },
25
+ {
26
+ name: 'chart.setTheme',
27
+ description: 'Switch between light and dark theme. Use when the user asks for ' +
28
+ '"dark mode", "light mode", or expresses a theme preference.',
29
+ inputSchema: {
30
+ type: 'object',
31
+ properties: {
32
+ theme: { type: 'string', enum: ['light', 'dark'] },
33
+ },
34
+ required: ['theme'],
35
+ },
36
+ safety: 'mutates-state',
37
+ },
38
+ ];
39
+ export const INDICATOR_TOOLS = [
40
+ {
41
+ name: 'indicators.add',
42
+ description: 'Add a technical indicator to the chart by its catalog id (e.g. "MA", ' +
43
+ '"BOLL", "MACD", "RSI"). Use when the user asks to "add a moving ' +
44
+ 'average", "show MACD", "I want to see Bollinger Bands", etc.',
45
+ inputSchema: {
46
+ type: 'object',
47
+ properties: {
48
+ definitionId: {
49
+ type: 'string',
50
+ description: 'Catalog id of the indicator. Common: MA, EMA, BOLL, EXPMA, ' +
51
+ 'MACD, RSI, KDJ, VOL, ATR, OBV.',
52
+ },
53
+ },
54
+ required: ['definitionId'],
55
+ },
56
+ outputSchema: {
57
+ type: 'object',
58
+ properties: {
59
+ instanceId: {
60
+ type: 'string',
61
+ description: 'New instance id, or null if the indicator was already active.',
62
+ },
63
+ },
64
+ },
65
+ safety: 'mutates-state',
66
+ },
67
+ {
68
+ name: 'indicators.remove',
69
+ description: 'Remove an indicator instance by its instance id.',
70
+ inputSchema: {
71
+ type: 'object',
72
+ properties: {
73
+ instanceId: { type: 'string' },
74
+ },
75
+ required: ['instanceId'],
76
+ },
77
+ safety: 'mutates-state',
78
+ },
79
+ {
80
+ name: 'indicators.updateParams',
81
+ description: 'Change the parameters of an active indicator (e.g. MA period from ' +
82
+ '20 to 50, BOLL multiplier from 2 to 2.5).',
83
+ inputSchema: {
84
+ type: 'object',
85
+ properties: {
86
+ instanceId: { type: 'string' },
87
+ params: {
88
+ type: 'object',
89
+ properties: {},
90
+ additionalProperties: true,
91
+ description: 'Param key to value map (numbers, strings, booleans).',
92
+ },
93
+ },
94
+ required: ['instanceId', 'params'],
95
+ },
96
+ safety: 'mutates-state',
97
+ },
98
+ ];
99
+ export const ALERT_TOOLS = [
100
+ {
101
+ name: 'alerts.addPriceCross',
102
+ description: 'Create a price-crossing alert. Use when the user says "alert me when ' +
103
+ 'BTC crosses 100k", "tell me when price drops below X", "wake me up at Y".',
104
+ inputSchema: {
105
+ type: 'object',
106
+ properties: {
107
+ id: { type: 'string', description: 'Unique alert id.' },
108
+ name: { type: 'string', description: 'Human-readable label.' },
109
+ price: { type: 'number' },
110
+ direction: { type: 'string', enum: ['up', 'down', 'any'] },
111
+ oneShot: {
112
+ type: 'boolean',
113
+ description: 'If true, fires once then auto-disables.',
114
+ },
115
+ },
116
+ required: ['id', 'name', 'price', 'direction', 'oneShot'],
117
+ },
118
+ safety: 'mutates-state',
119
+ },
120
+ {
121
+ name: 'alerts.addIndicatorCross',
122
+ description: 'Alert when an indicator value crosses a threshold (e.g. RSI > 70, MACD ' +
123
+ 'histogram goes positive).',
124
+ inputSchema: {
125
+ type: 'object',
126
+ properties: {
127
+ id: { type: 'string' },
128
+ name: { type: 'string' },
129
+ indicatorId: { type: 'string' },
130
+ threshold: { type: 'number' },
131
+ direction: { type: 'string', enum: ['up', 'down', 'any'] },
132
+ oneShot: { type: 'boolean' },
133
+ },
134
+ required: [
135
+ 'id',
136
+ 'name',
137
+ 'indicatorId',
138
+ 'threshold',
139
+ 'direction',
140
+ 'oneShot',
141
+ ],
142
+ },
143
+ safety: 'mutates-state',
144
+ },
145
+ {
146
+ name: 'alerts.remove',
147
+ description: 'Remove an existing alert rule by its id. Use when the user says ' +
148
+ '"cancel the BTC alert", "delete that alert", "I no longer need notification X".',
149
+ inputSchema: {
150
+ type: 'object',
151
+ properties: { id: { type: 'string' } },
152
+ required: ['id'],
153
+ },
154
+ safety: 'mutates-state',
155
+ },
156
+ ];
157
+ export const REPLAY_TOOLS = [
158
+ {
159
+ name: 'replay.seekTo',
160
+ description: 'Move the replay cursor to a specific bar index. Use when the user says ' +
161
+ '"go to bar X", "rewind to the start", "show me what happened at this point".',
162
+ inputSchema: {
163
+ type: 'object',
164
+ properties: {
165
+ position: { type: 'number', description: 'Bar index (float).' },
166
+ },
167
+ required: ['position'],
168
+ },
169
+ safety: 'mutates-state',
170
+ },
171
+ {
172
+ name: 'replay.play',
173
+ description: 'Start replay from the current cursor at the configured pacing and speed. ' +
174
+ 'Use when the user says "play", "start replay", "go".',
175
+ inputSchema: { type: 'object', properties: {} },
176
+ safety: 'mutates-state',
177
+ },
178
+ {
179
+ name: 'replay.pause',
180
+ description: 'Pause the replay at the current bar. Use when the user says "pause", ' +
181
+ '"stop", "hold on", or wants to inspect a specific bar.',
182
+ inputSchema: { type: 'object', properties: {} },
183
+ safety: 'mutates-state',
184
+ },
185
+ {
186
+ name: 'replay.setSpeed',
187
+ description: 'Set replay speed multiplier (1.0 = real-time, 10.0 = 10x speed). ' +
188
+ 'Use when the user says "faster", "slow down", "real-time".',
189
+ inputSchema: {
190
+ type: 'object',
191
+ properties: { speed: { type: 'number', minimum: 0.01 } },
192
+ required: ['speed'],
193
+ },
194
+ safety: 'mutates-state',
195
+ },
196
+ ];
197
+ export const ALL_TOOLS = [
198
+ ...CHART_NAVIGATION_TOOLS,
199
+ ...INDICATOR_TOOLS,
200
+ ...ALERT_TOOLS,
201
+ ...REPLAY_TOOLS,
202
+ ];
203
+ export const TOOL_GROUPS = {
204
+ navigation: CHART_NAVIGATION_TOOLS,
205
+ indicators: INDICATOR_TOOLS,
206
+ alerts: ALERT_TOOLS,
207
+ replay: REPLAY_TOOLS,
208
+ };
209
+ export function findTool(name) {
210
+ for (const tool of ALL_TOOLS) {
211
+ if (tool.name === name)
212
+ return tool;
213
+ }
214
+ return null;
215
+ }
216
+ //# sourceMappingURL=toolSchemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolSchemas.js","sourceRoot":"","sources":["../src/toolSchemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ export interface McpToolSchema {
2
+ name: string;
3
+ description: string;
4
+ inputSchema: JsonSchema;
5
+ outputSchema?: JsonSchema;
6
+ safety: 'readonly' | 'mutates-state' | 'destroys-state';
7
+ }
8
+ export type JsonSchema = {
9
+ type: 'object';
10
+ properties: Record<string, JsonSchema>;
11
+ required?: string[];
12
+ additionalProperties?: boolean;
13
+ description?: string;
14
+ } | {
15
+ type: 'array';
16
+ items: JsonSchema;
17
+ description?: string;
18
+ } | {
19
+ type: 'string';
20
+ enum?: ReadonlyArray<string>;
21
+ description?: string;
22
+ } | {
23
+ type: 'number';
24
+ minimum?: number;
25
+ maximum?: number;
26
+ description?: string;
27
+ } | {
28
+ type: 'integer';
29
+ minimum?: number;
30
+ maximum?: number;
31
+ description?: string;
32
+ } | {
33
+ type: 'boolean';
34
+ description?: string;
35
+ } | {
36
+ type: 'null';
37
+ description?: string;
38
+ } | {
39
+ oneOf: JsonSchema[];
40
+ description?: string;
41
+ } | {
42
+ anyOf: JsonSchema[];
43
+ description?: string;
44
+ };
45
+ export interface ControllerDescription {
46
+ controllerId: string;
47
+ summary: string;
48
+ facts: Readonly<Record<string, string | number | boolean | null>>;
49
+ warnings?: ReadonlyArray<string>;
50
+ }
51
+ export interface SerializedChartState {
52
+ schemaVersion: 1;
53
+ snapshotTakenAt: string;
54
+ label?: string;
55
+ controllers: {
56
+ viewport?: {
57
+ zoomLevel: number;
58
+ visibleFrom: number;
59
+ visibleTo: number;
60
+ };
61
+ theme?: 'light' | 'dark';
62
+ indicators?: ReadonlyArray<{
63
+ definitionId: string;
64
+ params: Readonly<Record<string, number | string | boolean>>;
65
+ }>;
66
+ alerts?: ReadonlyArray<{
67
+ id: string;
68
+ name: string;
69
+ predicate: unknown;
70
+ oneShot: boolean;
71
+ cooldownMs?: number;
72
+ }>;
73
+ };
74
+ }
75
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,UAAU,CAAA;IACvB,YAAY,CAAC,EAAE,UAAU,CAAA;IACzB,MAAM,EAAE,UAAU,GAAG,eAAe,GAAG,gBAAgB,CAAA;CACxD;AAED,MAAM,MAAM,UAAU,GAClB;IACE,IAAI,EAAE,QAAQ,CAAA;IACd,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACtC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,GACD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7E;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEjD,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAA;IACjE,QAAQ,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,CAAC,CAAA;IAChB,eAAe,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,EAAE;QACX,QAAQ,CAAC,EAAE;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAA;QACxE,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;QACxB,UAAU,CAAC,EAAE,aAAa,CAAC;YACzB,YAAY,EAAE,MAAM,CAAA;YACpB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAA;SAC5D,CAAC,CAAA;QACF,MAAM,CAAC,EAAE,aAAa,CAAC;YACrB,EAAE,EAAE,MAAM,CAAA;YACV,IAAI,EAAE,MAAM,CAAA;YACZ,SAAS,EAAE,OAAO,CAAA;YAClB,OAAO,EAAE,OAAO,CAAA;YAChB,UAAU,CAAC,EAAE,MAAM,CAAA;SACpB,CAAC,CAAA;KACH,CAAA;CACF"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@363045841yyt/klinechart-ai-runtime",
3
+ "version": "0.1.0",
4
+ "description": "AI Native runtime for @363045841yyt/klinechart — MCP tool schemas, controller describe() output, chart state serialization.",
5
+ "keywords": [
6
+ "kline",
7
+ "candlestick",
8
+ "chart",
9
+ "mcp",
10
+ "model-context-protocol",
11
+ "ai",
12
+ "agent",
13
+ "websocket",
14
+ "trading",
15
+ "quantitative"
16
+ ],
17
+ "license": "MIT",
18
+ "type": "module",
19
+ "sideEffects": false,
20
+ "main": "./dist/index.js",
21
+ "module": "./dist/index.js",
22
+ "types": "./dist/index.d.ts",
23
+ "exports": {
24
+ ".": {
25
+ "types": "./dist/index.d.ts",
26
+ "import": "./dist/index.js"
27
+ },
28
+ "./mcp-server": {
29
+ "types": "./dist/mcpServer.d.ts",
30
+ "import": "./dist/mcpServer.js"
31
+ },
32
+ "./create-with-mcp": {
33
+ "types": "./dist/createWithMcp.d.ts",
34
+ "import": "./dist/createWithMcp.js"
35
+ }
36
+ },
37
+ "files": [
38
+ "dist",
39
+ "src"
40
+ ],
41
+ "scripts": {
42
+ "build": "tsc -p tsconfig.build.json",
43
+ "prepublishOnly": "pnpm build",
44
+ "start": "tsx scripts/dev.ts",
45
+ "test": "vitest run",
46
+ "inspect": "npx @modelcontextprotocol/inspector npx tsx scripts/dev.ts"
47
+ },
48
+ "peerDependencies": {
49
+ "@363045841yyt/klinechart-core": "workspace:*"
50
+ },
51
+ "dependencies": {
52
+ "@modelcontextprotocol/sdk": "^1",
53
+ "ws": "^8"
54
+ },
55
+ "devDependencies": {
56
+ "@types/ws": "^8",
57
+ "typescript": "~6.0.3",
58
+ "vitest": "^4.1.5"
59
+ },
60
+ "publishConfig": {
61
+ "access": "public"
62
+ }
63
+ }