@helloxiaohu/plugin-stock-market 0.0.2

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 (50) hide show
  1. package/README.md +134 -0
  2. package/dist/index.d.ts +24 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +48 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/lib/market-client.d.ts +27 -0
  7. package/dist/lib/market-client.d.ts.map +1 -0
  8. package/dist/lib/market-client.js +698 -0
  9. package/dist/lib/market-client.js.map +1 -0
  10. package/dist/lib/stock-market.plugin.d.ts +10 -0
  11. package/dist/lib/stock-market.plugin.d.ts.map +1 -0
  12. package/dist/lib/stock-market.plugin.js +33 -0
  13. package/dist/lib/stock-market.plugin.js.map +1 -0
  14. package/dist/lib/stock-market.strategy.d.ts +119 -0
  15. package/dist/lib/stock-market.strategy.d.ts.map +1 -0
  16. package/dist/lib/stock-market.strategy.js +99 -0
  17. package/dist/lib/stock-market.strategy.js.map +1 -0
  18. package/dist/lib/tools/basic-info.tool.d.ts +16 -0
  19. package/dist/lib/tools/basic-info.tool.d.ts.map +1 -0
  20. package/dist/lib/tools/basic-info.tool.js +83 -0
  21. package/dist/lib/tools/basic-info.tool.js.map +1 -0
  22. package/dist/lib/tools/kline-history.tool.d.ts +26 -0
  23. package/dist/lib/tools/kline-history.tool.d.ts.map +1 -0
  24. package/dist/lib/tools/kline-history.tool.js +68 -0
  25. package/dist/lib/tools/kline-history.tool.js.map +1 -0
  26. package/dist/lib/tools/money-flow.tool.d.ts +16 -0
  27. package/dist/lib/tools/money-flow.tool.d.ts.map +1 -0
  28. package/dist/lib/tools/money-flow.tool.js +80 -0
  29. package/dist/lib/tools/money-flow.tool.js.map +1 -0
  30. package/dist/lib/tools/quote-realtime.tool.d.ts +16 -0
  31. package/dist/lib/tools/quote-realtime.tool.d.ts.map +1 -0
  32. package/dist/lib/tools/quote-realtime.tool.js +65 -0
  33. package/dist/lib/tools/quote-realtime.tool.js.map +1 -0
  34. package/dist/lib/tools/technical-indicators.tool.d.ts +16 -0
  35. package/dist/lib/tools/technical-indicators.tool.d.ts.map +1 -0
  36. package/dist/lib/tools/technical-indicators.tool.js +88 -0
  37. package/dist/lib/tools/technical-indicators.tool.js.map +1 -0
  38. package/dist/lib/tools/us-stock-search.tool.d.ts +16 -0
  39. package/dist/lib/tools/us-stock-search.tool.d.ts.map +1 -0
  40. package/dist/lib/tools/us-stock-search.tool.js +42 -0
  41. package/dist/lib/tools/us-stock-search.tool.js.map +1 -0
  42. package/dist/lib/toolset.d.ts +10 -0
  43. package/dist/lib/toolset.d.ts.map +1 -0
  44. package/dist/lib/toolset.js +31 -0
  45. package/dist/lib/toolset.js.map +1 -0
  46. package/dist/lib/types.d.ts +85 -0
  47. package/dist/lib/types.d.ts.map +1 -0
  48. package/dist/lib/types.js +13 -0
  49. package/dist/lib/types.js.map +1 -0
  50. package/package.json +37 -0
@@ -0,0 +1,80 @@
1
+ /**
2
+ * 资金流向工具
3
+ */
4
+ import { tool } from '@langchain/core/tools';
5
+ import { getErrorMessage } from '@xpert-ai/plugin-sdk';
6
+ import { z } from 'zod';
7
+ import { fetchMoneyFlow, detectMarket } from '../market-client.js';
8
+ import { MarketType } from '../types.js';
9
+ export function buildMoneyFlowTool() {
10
+ return tool(async (input) => {
11
+ try {
12
+ const code = input.code.trim();
13
+ if (!code) {
14
+ throw new Error('请提供有效的股票代码');
15
+ }
16
+ const market = detectMarket(code);
17
+ if (market === MarketType.US) {
18
+ return '资金流向数据暂不支持美股,仅支持A股';
19
+ }
20
+ if (market === MarketType.HK) {
21
+ return '资金流向数据暂不支持港股,仅支持A股';
22
+ }
23
+ const flow = await fetchMoneyFlow(code);
24
+ if (!flow) {
25
+ return `【资金流向 ${code}】${market === MarketType.SH ? '沪A' : '深A'}
26
+
27
+ 暂未获取到实时资金流向数据。
28
+ 可能原因:
29
+ - 数据源接口短时无数据
30
+ - 非交易时段或数据延迟
31
+ - 股票代码不在支持范围
32
+
33
+ 建议:
34
+ - 稍后重试
35
+ - 使用 stock_quote_realtime 先确认标的可正常查询`;
36
+ }
37
+ const formatAmount = (value) => {
38
+ if (Math.abs(value) >= 100000000) {
39
+ return `${(value / 100000000).toFixed(2)}亿`;
40
+ }
41
+ return `${(value / 10000).toFixed(2)}万`;
42
+ };
43
+ const formatSign = (value) => value >= 0 ? '+' : '';
44
+ const marketLabel = market === MarketType.SH ? '沪A' : '深A';
45
+ const result = `【资金流向 ${code}】${marketLabel}
46
+
47
+ 主力净流入: ${formatSign(flow.mainNetInflow)}${formatAmount(flow.mainNetInflow)} (${formatSign(flow.mainNetInflowPercent)}${flow.mainNetInflowPercent.toFixed(2)}%)
48
+
49
+ 详细分类:
50
+ 超大单: ${formatSign(flow.superLargeNetInflow)}${formatAmount(flow.superLargeNetInflow)}
51
+ 大单: ${formatSign(flow.largeNetInflow)}${formatAmount(flow.largeNetInflow)}
52
+ 中单: ${formatSign(flow.mediumNetInflow)}${formatAmount(flow.mediumNetInflow)}
53
+ 小单: ${formatSign(flow.smallNetInflow)}${formatAmount(flow.smallNetInflow)}
54
+
55
+ 说明:
56
+ - 正值表示净流入,负值表示净流出
57
+ - 超大单: 单笔成交额>100万
58
+ - 大单: 20万<单笔成交额≤100万
59
+ - 中单: 5万<单笔成交额≤20万
60
+ - 小单: 单笔成交额≤5万
61
+
62
+ 更新时间: ${flow.time || 'N/A'}`;
63
+ return result;
64
+ }
65
+ catch (error) {
66
+ throw new Error(`获取资金流向失败: ${getErrorMessage(error)}`);
67
+ }
68
+ }, {
69
+ name: 'stock_money_flow',
70
+ description: `获取A股主力资金流向数据。
71
+ 仅支持A股市场:
72
+ - 上海证券交易所 (6开头)
73
+ - 深圳证券交易所 (0/3开头)
74
+ 返回主力净流入、超大单、大单、中单、小单等资金流向数据。`,
75
+ schema: z.object({
76
+ code: z.string().describe('A股股票代码,如: 600519, 000001')
77
+ })
78
+ });
79
+ }
80
+ //# sourceMappingURL=money-flow.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"money-flow.tool.js","sourceRoot":"","sources":["../../../src/lib/tools/money-flow.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * 实时行情工具
3
+ */
4
+ import { z } from 'zod';
5
+ export declare function buildQuoteRealtimeTool(): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
6
+ codes: z.ZodString;
7
+ }, "strip", z.ZodTypeAny, {
8
+ codes?: string;
9
+ }, {
10
+ codes?: string;
11
+ }>, {
12
+ codes?: string;
13
+ }, {
14
+ codes?: string;
15
+ }, string>;
16
+ //# sourceMappingURL=quote-realtime.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quote-realtime.tool.d.ts","sourceRoot":"","sources":["../../../src/lib/tools/quote-realtime.tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,wBAAgB,sBAAsB;;;;;;;;;;WAoErC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * 实时行情工具
3
+ */
4
+ import { tool } from '@langchain/core/tools';
5
+ import { getErrorMessage } from '@xpert-ai/plugin-sdk';
6
+ import { z } from 'zod';
7
+ import { fetchRealtimeQuotes } from '../market-client.js';
8
+ import { MarketType } from '../types.js';
9
+ export function buildQuoteRealtimeTool() {
10
+ return tool(async (input) => {
11
+ try {
12
+ const codes = input.codes.split(',').map((c) => c.trim()).filter(Boolean);
13
+ if (codes.length === 0) {
14
+ throw new Error('请提供有效的股票代码');
15
+ }
16
+ const quotes = await fetchRealtimeQuotes(codes);
17
+ if (quotes.size === 0) {
18
+ throw new Error('未获取到股票数据,请检查股票代码是否正确');
19
+ }
20
+ const results = [];
21
+ quotes.forEach((quote, code) => {
22
+ const changeSign = quote.change >= 0 ? '+' : '';
23
+ const marketLabel = {
24
+ [MarketType.SH]: '沪A',
25
+ [MarketType.SZ]: '深A',
26
+ [MarketType.HK]: '港股',
27
+ [MarketType.US]: '美股'
28
+ }[quote.market];
29
+ const currency = quote.market === MarketType.HK ? '港元' :
30
+ quote.market === MarketType.US ? '美元' : '元';
31
+ const volumeStr = quote.market === MarketType.US
32
+ ? `${(quote.volume / 1000000).toFixed(2)}百万股`
33
+ : `${(quote.volume / 10000).toFixed(2)}万股`;
34
+ const amountStr = quote.market === MarketType.US
35
+ ? quote.amount > 0 ? `${(quote.amount / 1000000).toFixed(2)}百万美元` : 'N/A'
36
+ : `${(quote.amount / 100000000).toFixed(2)}亿`;
37
+ results.push(`【${quote.name}(${quote.code})】${marketLabel}\n` +
38
+ ` 当前价: ${quote.price.toFixed(2)} ${currency}\n` +
39
+ ` 涨跌额: ${changeSign}${quote.change.toFixed(2)}\n` +
40
+ ` 涨跌幅: ${changeSign}${quote.changePercent.toFixed(2)}%\n` +
41
+ ` 今开: ${quote.open.toFixed(2)} | 最高: ${quote.high.toFixed(2)} | 最低: ${quote.low.toFixed(2)}\n` +
42
+ ` 昨收: ${quote.preClose.toFixed(2)}\n` +
43
+ ` 成交量: ${volumeStr}${quote.market !== MarketType.US ? ` | 成交额: ${amountStr}` : ''}\n` +
44
+ ` 更新: ${quote.time || 'N/A'}`);
45
+ });
46
+ return results.join('\n\n');
47
+ }
48
+ catch (error) {
49
+ throw new Error(`获取实时行情失败: ${getErrorMessage(error)}`);
50
+ }
51
+ }, {
52
+ name: 'stock_quote_realtime',
53
+ description: `获取A股、港股和美股的实时行情数据。
54
+ 支持市场:
55
+ - 上海证券交易所 (6开头)
56
+ - 深圳证券交易所 (0/3开头)
57
+ - 香港联合交易所 (5位代码)
58
+ - 美国股市 (字母代码如 AAPL, TSLA, GOOGL)
59
+ 返回实时价格、涨跌幅、成交量等信息。`,
60
+ schema: z.object({
61
+ codes: z.string().describe('股票代码,多个用逗号分隔,如: 600519,000001,00700,AAPL,TSLA')
62
+ })
63
+ });
64
+ }
65
+ //# sourceMappingURL=quote-realtime.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quote-realtime.tool.js","sourceRoot":"","sources":["../../../src/lib/tools/quote-realtime.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * 技术指标工具
3
+ */
4
+ import { z } from 'zod';
5
+ export declare function buildTechnicalIndicatorsTool(): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
6
+ code: z.ZodString;
7
+ }, "strip", z.ZodTypeAny, {
8
+ code?: string;
9
+ }, {
10
+ code?: string;
11
+ }>, {
12
+ code?: string;
13
+ }, {
14
+ code?: string;
15
+ }, string>;
16
+ //# sourceMappingURL=technical-indicators.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"technical-indicators.tool.d.ts","sourceRoot":"","sources":["../../../src/lib/tools/technical-indicators.tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,wBAAgB,4BAA4B;;;;;;;;;;WA0F3C"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * 技术指标工具
3
+ */
4
+ import { tool } from '@langchain/core/tools';
5
+ import { getErrorMessage } from '@xpert-ai/plugin-sdk';
6
+ import { z } from 'zod';
7
+ import { fetchKlineData, calculateMA, calculateMACD, calculateRSI, calculateKDJ, detectMarket } from '../market-client.js';
8
+ import { MarketType } from '../types.js';
9
+ export function buildTechnicalIndicatorsTool() {
10
+ return tool(async (input) => {
11
+ try {
12
+ const code = input.code.trim();
13
+ if (!code) {
14
+ throw new Error('请提供有效的股票代码');
15
+ }
16
+ const market = detectMarket(code);
17
+ if (market === MarketType.US) {
18
+ throw new Error('暂不支持美股技术指标');
19
+ }
20
+ const klineData = await fetchKlineData(code, 'day', 100);
21
+ if (!klineData || klineData.data.length < 35) {
22
+ throw new Error('数据不足,无法计算技术指标');
23
+ }
24
+ const data = klineData.data;
25
+ const latest = data[data.length - 1];
26
+ const ma = calculateMA(data, [5, 10, 20, 30, 60]);
27
+ const macd = calculateMACD(data);
28
+ const rsi6 = calculateRSI(data, 6);
29
+ const rsi12 = calculateRSI(data, 12);
30
+ const rsi24 = calculateRSI(data, 24);
31
+ const kdj = calculateKDJ(data);
32
+ let output = `【${code}】技术指标分析\n\n`;
33
+ output += `均线系统 (MA):\n`;
34
+ Object.entries(ma).forEach(([key, value]) => {
35
+ const diff = latest.close - value;
36
+ const sign = diff >= 0 ? '+' : '';
37
+ output += ` ${key.toUpperCase()}: ${value.toFixed(2)} (${sign}${diff.toFixed(2)})\n`;
38
+ });
39
+ if (macd) {
40
+ output += `\nMACD指标:\n`;
41
+ output += ` DIF: ${macd.dif.toFixed(2)}\n`;
42
+ output += ` DEA: ${macd.dea.toFixed(2)}\n`;
43
+ output += ` MACD: ${macd.macd.toFixed(2)} ${macd.macd > 0 ? '(多头)' : '(空头)'}\n`;
44
+ }
45
+ if (rsi6 !== null || rsi12 !== null || rsi24 !== null) {
46
+ output += `\nRSI指标:\n`;
47
+ if (rsi6 !== null)
48
+ output += ` RSI(6): ${rsi6.toFixed(2)} ${rsi6 > 70 ? '(超买)' : rsi6 < 30 ? '(超卖)' : ''}\n`;
49
+ if (rsi12 !== null)
50
+ output += ` RSI(12): ${rsi12.toFixed(2)}\n`;
51
+ if (rsi24 !== null)
52
+ output += ` RSI(24): ${rsi24.toFixed(2)}\n`;
53
+ }
54
+ if (kdj) {
55
+ output += `\nKDJ指标:\n`;
56
+ output += ` K: ${kdj.k.toFixed(2)}\n`;
57
+ output += ` D: ${kdj.d.toFixed(2)}\n`;
58
+ output += ` J: ${kdj.j.toFixed(2)}\n`;
59
+ }
60
+ output += `\n价格位置:\n`;
61
+ output += ` 当前价: ${latest.close.toFixed(2)}\n`;
62
+ if (ma.ma5) {
63
+ const ma5Status = latest.close > ma.ma5 ? '站上' : '跌破';
64
+ output += ` 相对MA5: ${ma5Status} (${((latest.close / ma.ma5 - 1) * 100).toFixed(2)}%)\n`;
65
+ }
66
+ if (ma.ma20) {
67
+ const ma20Status = latest.close > ma.ma20 ? '站上' : '跌破';
68
+ output += ` 相对MA20: ${ma20Status} (${((latest.close / ma.ma20 - 1) * 100).toFixed(2)}%)\n`;
69
+ }
70
+ return output;
71
+ }
72
+ catch (error) {
73
+ throw new Error(`计算技术指标失败: ${getErrorMessage(error)}`);
74
+ }
75
+ }, {
76
+ name: 'stock_technical_indicators',
77
+ description: `计算股票技术指标,包括:
78
+ - 移动平均线 (MA5/10/20/30/60)
79
+ - MACD指标 (DIF/DEA/MACD)
80
+ - RSI指标 (6/12/24日)
81
+ - KDJ指标
82
+ 返回指标数值和简单分析。`,
83
+ schema: z.object({
84
+ code: z.string().describe('股票代码,如: 600519, 00700')
85
+ })
86
+ });
87
+ }
88
+ //# sourceMappingURL=technical-indicators.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"technical-indicators.tool.js","sourceRoot":"","sources":["../../../src/lib/tools/technical-indicators.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * 美股搜索工具
3
+ */
4
+ import { z } from 'zod';
5
+ export declare function buildUSSearchTool(): import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
6
+ keyword: z.ZodString;
7
+ }, "strip", z.ZodTypeAny, {
8
+ keyword?: string;
9
+ }, {
10
+ keyword?: string;
11
+ }>, {
12
+ keyword?: string;
13
+ }, {
14
+ keyword?: string;
15
+ }, string>;
16
+ //# sourceMappingURL=us-stock-search.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"us-stock-search.tool.d.ts","sourceRoot":"","sources":["../../../src/lib/tools/us-stock-search.tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,wBAAgB,iBAAiB;;;;;;;;;;WA0ChC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * 美股搜索工具
3
+ */
4
+ import { tool } from '@langchain/core/tools';
5
+ import { getErrorMessage } from '@xpert-ai/plugin-sdk';
6
+ import { z } from 'zod';
7
+ import { searchStock } from '../market-client.js';
8
+ export function buildUSSearchTool() {
9
+ return tool(async (input) => {
10
+ try {
11
+ const keyword = input.keyword.trim();
12
+ if (!keyword) {
13
+ throw new Error('请提供有效的搜索关键词');
14
+ }
15
+ const results = await searchStock(keyword);
16
+ if (results.length === 0) {
17
+ return `未找到匹配 "${keyword}" 的美股,请尝试其他关键词`;
18
+ }
19
+ const lines = [`找到 ${results.length} 个匹配 "${keyword}" 的美股:\n`];
20
+ for (const item of results) {
21
+ const typeLabel = item.type === 'ETF' ? 'ETF' : '股票';
22
+ lines.push(`【${item.code}】${item.name} (${typeLabel})`);
23
+ }
24
+ lines.push('\n提示: 使用股票代码查询实时行情,例如 AAPL, TSLA, GOOGL');
25
+ return lines.join('\n');
26
+ }
27
+ catch (error) {
28
+ throw new Error(`美股搜索失败: ${getErrorMessage(error)}`);
29
+ }
30
+ }, {
31
+ name: 'stock_us_search',
32
+ description: `搜索美股股票代码和名称。
33
+ 支持搜索:
34
+ - 美股上市公司 (如 Apple, Tesla, Google)
35
+ - ETF基金 (如 SPY, QQQ)
36
+ 输入公司名称或股票代码的一部分进行搜索。`,
37
+ schema: z.object({
38
+ keyword: z.string().describe('搜索关键词,可以是公司名称或股票代码,如: Apple, Tesla, AAPL')
39
+ })
40
+ });
41
+ }
42
+ //# sourceMappingURL=us-stock-search.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"us-stock-search.tool.js","sourceRoot":"","sources":["../../../src/lib/tools/us-stock-search.tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEjD,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,CACT,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;YAEpC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;YAChC,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YAE1C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,UAAU,OAAO,gBAAgB,CAAA;YAC1C,CAAC;YAED,MAAM,KAAK,GAAa,CAAC,MAAM,OAAO,CAAC,MAAM,SAAS,OAAO,UAAU,CAAC,CAAA;YAExE,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;gBACpD,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,GAAG,CAAC,CAAA;YACzD,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAA;YAErD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,WAAW,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACtD,CAAC;IACH,CAAC,EACD;QACE,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE;;;;qBAIE;QACf,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;SACzE,CAAC;KACH,CACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * 股票行情工具集
3
+ */
4
+ import { BuiltinToolset } from '@xpert-ai/plugin-sdk';
5
+ export declare class StockMarketToolset extends BuiltinToolset {
6
+ validateCredentials(credentials: Record<string, never>): Promise<void>;
7
+ _validateCredentials(credentials: Record<string, never>): Promise<void>;
8
+ initTools(): Promise<any[]>;
9
+ }
10
+ //# sourceMappingURL=toolset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolset.d.ts","sourceRoot":"","sources":["../../src/lib/toolset.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAQrD,qBAAa,kBAAmB,SAAQ,cAAc;IAErC,mBAAmB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvE,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;CAW3C"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * 股票行情工具集
3
+ */
4
+ import { BuiltinToolset } from '@xpert-ai/plugin-sdk';
5
+ import { buildQuoteRealtimeTool } from './tools/quote-realtime.tool.js';
6
+ import { buildKlineHistoryTool } from './tools/kline-history.tool.js';
7
+ import { buildTechnicalIndicatorsTool } from './tools/technical-indicators.tool.js';
8
+ import { buildBasicInfoTool } from './tools/basic-info.tool.js';
9
+ import { buildUSSearchTool } from './tools/us-stock-search.tool.js';
10
+ import { buildMoneyFlowTool } from './tools/money-flow.tool.js';
11
+ export class StockMarketToolset extends BuiltinToolset {
12
+ // Keep compatibility with different SDK implementations.
13
+ async validateCredentials(credentials) {
14
+ await this._validateCredentials(credentials);
15
+ }
16
+ async _validateCredentials(credentials) {
17
+ // 新浪财经API无需凭证,免费使用
18
+ }
19
+ async initTools() {
20
+ this.tools = [
21
+ buildQuoteRealtimeTool(),
22
+ buildKlineHistoryTool(),
23
+ buildTechnicalIndicatorsTool(),
24
+ buildBasicInfoTool(),
25
+ buildUSSearchTool(),
26
+ buildMoneyFlowTool(),
27
+ ];
28
+ return this.tools;
29
+ }
30
+ }
31
+ //# sourceMappingURL=toolset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolset.js","sourceRoot":"","sources":["../../src/lib/toolset.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AACrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAA;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAE/D,MAAM,OAAO,kBAAmB,SAAQ,cAAc;IACpD,yDAAyD;IAChD,KAAK,CAAC,mBAAmB,CAAC,WAAkC;QACnE,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAA;IAC9C,CAAC;IAEQ,KAAK,CAAC,oBAAoB,CAAC,WAAkC;QACpE,mBAAmB;IACrB,CAAC;IAEQ,KAAK,CAAC,SAAS;QACtB,IAAI,CAAC,KAAK,GAAG;YACX,sBAAsB,EAAE;YACxB,qBAAqB,EAAE;YACvB,4BAA4B,EAAE;YAC9B,kBAAkB,EAAE;YACpB,iBAAiB,EAAE;YACnB,kBAAkB,EAAE;SACrB,CAAA;QACD,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;CACF"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * 股票行情工具集类型定义
3
+ */
4
+ export declare const StockMarketProvider = "stock-market";
5
+ export declare enum MarketType {
6
+ SH = "sh",
7
+ SZ = "sz",
8
+ HK = "hk",
9
+ US = "us"
10
+ }
11
+ export interface StockQuote {
12
+ code: string;
13
+ name: string;
14
+ market: MarketType;
15
+ price: number;
16
+ open: number;
17
+ high: number;
18
+ low: number;
19
+ preClose: number;
20
+ volume: number;
21
+ amount: number;
22
+ change: number;
23
+ changePercent: number;
24
+ time: string;
25
+ source?: string;
26
+ }
27
+ export interface KlineData {
28
+ code: string;
29
+ market: MarketType;
30
+ period: string;
31
+ data: KlinePoint[];
32
+ }
33
+ export interface KlinePoint {
34
+ date: string;
35
+ open: number;
36
+ high: number;
37
+ low: number;
38
+ close: number;
39
+ volume: number;
40
+ amount?: number;
41
+ }
42
+ export interface TechnicalIndicators {
43
+ code: string;
44
+ market: MarketType;
45
+ indicators: {
46
+ ma?: {
47
+ [period: string]: number;
48
+ };
49
+ macd?: {
50
+ dif: number;
51
+ dea: number;
52
+ macd: number;
53
+ };
54
+ rsi?: {
55
+ [period: string]: number;
56
+ };
57
+ kdj?: {
58
+ k: number;
59
+ d: number;
60
+ j: number;
61
+ };
62
+ };
63
+ time: string;
64
+ }
65
+ export interface StockSearchResult {
66
+ code: string;
67
+ name: string;
68
+ market: MarketType;
69
+ type?: string;
70
+ }
71
+ export interface MoneyFlow {
72
+ code: string;
73
+ name: string;
74
+ market: MarketType;
75
+ mainNetInflow: number;
76
+ mainNetInflowPercent: number;
77
+ superLargeNetInflow: number;
78
+ largeNetInflow: number;
79
+ mediumNetInflow: number;
80
+ smallNetInflow: number;
81
+ time: string;
82
+ source?: string;
83
+ }
84
+ export declare const icon = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjNGE5MGUyIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+CiAgPHBvbHlsaW5lIHBvaW50cz0iMjIgMTIgMTggMTIgMTUgMjEgOSAzIDEyIDkgNiA5Ij48L3BvbHlsaW5lPgogIDxsaW5lIHgxPSIyIiB5MT0iMTIiIHgyPSIyMiIgeTI9IjEyIj48L2xpbmU+Cjwvc3ZnPg==";
85
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,mBAAmB,iBAAiB,CAAA;AAEjD,oBAAY,UAAU;IACpB,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;CACV;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,UAAU,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,UAAU,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,UAAU,EAAE,CAAA;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,UAAU,CAAA;IAClB,UAAU,EAAE;QACV,EAAE,CAAC,EAAE;YAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAA;QACjC,IAAI,CAAC,EAAE;YACL,GAAG,EAAE,MAAM,CAAA;YACX,GAAG,EAAE,MAAM,CAAA;YACX,IAAI,EAAE,MAAM,CAAA;SACb,CAAA;QACD,GAAG,CAAC,EAAE;YAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAA;QAClC,GAAG,CAAC,EAAE;YACJ,CAAC,EAAE,MAAM,CAAA;YACT,CAAC,EAAE,MAAM,CAAA;YACT,CAAC,EAAE,MAAM,CAAA;SACV,CAAA;KACF,CAAA;IACD,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,UAAU,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,UAAU,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,mBAAmB,EAAE,MAAM,CAAA;IAC3B,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,eAAO,MAAM,IAAI,2YAA2Y,CAAA"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 股票行情工具集类型定义
3
+ */
4
+ export const StockMarketProvider = 'stock-market';
5
+ export var MarketType;
6
+ (function (MarketType) {
7
+ MarketType["SH"] = "sh";
8
+ MarketType["SZ"] = "sz";
9
+ MarketType["HK"] = "hk";
10
+ MarketType["US"] = "us";
11
+ })(MarketType || (MarketType = {}));
12
+ export const icon = `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjNGE5MGUyIiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+CiAgPHBvbHlsaW5lIHBvaW50cz0iMjIgMTIgMTggMTIgMTUgMjEgOSAzIDEyIDkgNiA5Ij48L3BvbHlsaW5lPgogIDxsaW5lIHgxPSIyIiB5MT0iMTIiIHgyPSIyMiIgeTI9IjEyIj48L2xpbmU+Cjwvc3ZnPg==`;
13
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,cAAc,CAAA;AAEjD,MAAM,CAAN,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,uBAAS,CAAA;IACT,uBAAS,CAAA;IACT,uBAAS,CAAA;IACT,uBAAS,CAAA;AACX,CAAC,EALW,UAAU,KAAV,UAAU,QAKrB;AA6ED,MAAM,CAAC,MAAM,IAAI,GAAG,wYAAwY,CAAA"}
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@helloxiaohu/plugin-stock-market",
3
+ "version": "0.0.2",
4
+ "repository": {
5
+ "type": "git",
6
+ "url": "https://github.com/xpert-ai/xpert-plugins"
7
+ },
8
+ "type": "module",
9
+ "main": "./dist/index.js",
10
+ "module": "./dist/index.js",
11
+ "types": "./dist/index.d.ts",
12
+ "exports": {
13
+ "./package.json": "./package.json",
14
+ ".": {
15
+ "@xpert-plugins-starter/source": "./src/index.ts",
16
+ "types": "./dist/index.d.ts",
17
+ "import": "./dist/index.js",
18
+ "default": "./dist/index.js"
19
+ }
20
+ },
21
+ "files": [
22
+ "dist",
23
+ "!**/*.tsbuildinfo"
24
+ ],
25
+ "dependencies": {
26
+ "iconv-lite": "^0.7.0",
27
+ "tslib": "^2.3.0"
28
+ },
29
+ "peerDependencies": {
30
+ "@xpert-ai/plugin-sdk": "^3.6.2",
31
+ "zod": "3.25.67",
32
+ "chalk": "4.1.2",
33
+ "@nestjs/config": "^4.0.2",
34
+ "@nestjs/common": "^11.1.6",
35
+ "@langchain/core": "0.3.72"
36
+ }
37
+ }