antitone 1.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.
- package/LICENSE +21 -0
- package/README.md +219 -0
- package/SKILL.md +114 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +371 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +108 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +412 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +42 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +117 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +53 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +224 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/output.d.ts +74 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +283 -0
- package/dist/output.js.map +1 -0
- package/dist/tools/astock.d.ts +5 -0
- package/dist/tools/astock.d.ts.map +1 -0
- package/dist/tools/astock.js +30 -0
- package/dist/tools/astock.js.map +1 -0
- package/dist/tools/backtest.d.ts +5 -0
- package/dist/tools/backtest.d.ts.map +1 -0
- package/dist/tools/backtest.js +36 -0
- package/dist/tools/backtest.js.map +1 -0
- package/dist/tools/briefing.d.ts +5 -0
- package/dist/tools/briefing.d.ts.map +1 -0
- package/dist/tools/briefing.js +28 -0
- package/dist/tools/briefing.js.map +1 -0
- package/dist/tools/calendar.d.ts +5 -0
- package/dist/tools/calendar.d.ts.map +1 -0
- package/dist/tools/calendar.js +35 -0
- package/dist/tools/calendar.js.map +1 -0
- package/dist/tools/entity.d.ts +5 -0
- package/dist/tools/entity.d.ts.map +1 -0
- package/dist/tools/entity.js +41 -0
- package/dist/tools/entity.js.map +1 -0
- package/dist/tools/index.d.ts +28 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +58 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/kit.d.ts +82 -0
- package/dist/tools/kit.d.ts.map +1 -0
- package/dist/tools/kit.js +146 -0
- package/dist/tools/kit.js.map +1 -0
- package/dist/tools/market.d.ts +5 -0
- package/dist/tools/market.d.ts.map +1 -0
- package/dist/tools/market.js +194 -0
- package/dist/tools/market.js.map +1 -0
- package/dist/tools/news.d.ts +5 -0
- package/dist/tools/news.d.ts.map +1 -0
- package/dist/tools/news.js +101 -0
- package/dist/tools/news.js.map +1 -0
- package/dist/tools/usage.d.ts +13 -0
- package/dist/tools/usage.d.ts.map +1 -0
- package/dist/tools/usage.js +50 -0
- package/dist/tools/usage.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kit.js","sourceRoot":"","sources":["../../src/tools/kit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** 市场类工具:market_overview / list_sectors / get_sector / list_themes / get_theme_news / get_quotes / get_kline(scope: market:read)。 */
|
|
2
|
+
import type { AntitoneClient } from "../client.js";
|
|
3
|
+
import { type ToolSink } from "./kit.js";
|
|
4
|
+
export declare function registerMarketTools(server: ToolSink, client: AntitoneClient): void;
|
|
5
|
+
//# sourceMappingURL=market.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"market.d.ts","sourceRoot":"","sources":["../../src/tools/market.ts"],"names":[],"mappings":"AAAA,qIAAqI;AAGrI,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAkF,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAQzH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CA4LlF"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/** 市场类工具:market_overview / list_sectors / get_sector / list_themes / get_theme_news / get_quotes / get_kline(scope: market:read)。 */
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { DEFAULT_LIMIT } from "../config.js";
|
|
4
|
+
import { badInput, countItems, fromEnvelope, fromEnvelopes, registerReadTool, STALE_MS } from "./kit.js";
|
|
5
|
+
const NEWS_HINTS = [
|
|
6
|
+
"把 limit 降到 20 以内",
|
|
7
|
+
"换一个更窄的题材编码(先用 list_themes 看编码)",
|
|
8
|
+
"用 from_at 缩小时间窗(≤7 天不加价)",
|
|
9
|
+
];
|
|
10
|
+
export function registerMarketTools(server, client) {
|
|
11
|
+
registerReadTool(server, client, {
|
|
12
|
+
name: "market_overview",
|
|
13
|
+
title: "市场总览",
|
|
14
|
+
description: [
|
|
15
|
+
"一次性取当前市场状态:交易阶段(盘前/盘中/午休/收盘)与市场宽度(涨跌家数、涨停跌停、赚钱效应)。",
|
|
16
|
+
"什么时候用:会话开场需要判断「现在是不是交易时段」「今天大盘强弱」;回答「今天市场怎么样」这类宏观问题。",
|
|
17
|
+
"返回 data.phase 与 data.breadth 两部分;组合调用比分别取更省一次往返。",
|
|
18
|
+
"费用:4 积分(phase 1 分 + breadth 3 分)。",
|
|
19
|
+
].join("\n"),
|
|
20
|
+
inputSchema: {},
|
|
21
|
+
hints: ["如需个股/指数点位,请改用 get_quotes", "如需板块强弱,请改用 list_sectors"],
|
|
22
|
+
run: async (_args, ctx) => {
|
|
23
|
+
const [phase, breadth] = await Promise.all([
|
|
24
|
+
ctx.client.get("/v1/market/phase", { staleAfterMs: STALE_MS.quote, signal: ctx.signal }),
|
|
25
|
+
ctx.client.get("/v1/market/breadth", { staleAfterMs: STALE_MS.quote, signal: ctx.signal }),
|
|
26
|
+
]);
|
|
27
|
+
return fromEnvelopes([
|
|
28
|
+
["phase", phase],
|
|
29
|
+
["breadth", breadth],
|
|
30
|
+
]);
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
registerReadTool(server, client, {
|
|
34
|
+
name: "list_sectors",
|
|
35
|
+
title: "板块总览",
|
|
36
|
+
description: [
|
|
37
|
+
"列出全部行业/板块的涨跌幅、成交额、领涨股等总览数据,用于横向比较板块强弱。",
|
|
38
|
+
"什么时候用:用户问「今天哪些板块强/弱」「资金流去哪了」;需要先拿到 sector_code 再调 get_sector 看细节。",
|
|
39
|
+
"返回条数多,若只想看头部板块可在本地按涨跌幅排序取前几条。",
|
|
40
|
+
"费用:固定 3 积分。",
|
|
41
|
+
].join("\n"),
|
|
42
|
+
inputSchema: {},
|
|
43
|
+
hints: ["只想看某一个板块时,直接用 get_sector(sector_code) 更便宜(1 积分)"],
|
|
44
|
+
run: async (_args, ctx) => {
|
|
45
|
+
const envelope = await ctx.client.get("/v1/sectors/overview", {
|
|
46
|
+
query: { window: "2h" },
|
|
47
|
+
staleAfterMs: STALE_MS.quote,
|
|
48
|
+
signal: ctx.signal,
|
|
49
|
+
});
|
|
50
|
+
return fromEnvelope(envelope, {
|
|
51
|
+
...(countItems(envelope.data) !== undefined ? { count: countItems(envelope.data) } : {}),
|
|
52
|
+
});
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
registerReadTool(server, client, {
|
|
56
|
+
name: "get_sector",
|
|
57
|
+
title: "单个板块行情",
|
|
58
|
+
description: [
|
|
59
|
+
"读取单个板块(行业)的实时行情:涨跌幅、成交额、领涨/领跌股。",
|
|
60
|
+
"什么时候用:已经知道板块代码(来自 list_sectors),要追问「这个板块具体怎样」时。",
|
|
61
|
+
"费用:固定 1 积分,是最便宜的板块查询方式。",
|
|
62
|
+
].join("\n"),
|
|
63
|
+
inputSchema: {
|
|
64
|
+
sector_code: z.string().min(1).max(64).describe("板块代码,来自 list_sectors 返回的 sector_code(如 BK0475 之类的服务端编码)"),
|
|
65
|
+
},
|
|
66
|
+
hints: ["板块代码不确定时先调 list_sectors 取编码"],
|
|
67
|
+
run: async (args, ctx) => {
|
|
68
|
+
const code = args.sector_code.trim();
|
|
69
|
+
if (!code)
|
|
70
|
+
throw badInput("sector_code 不能为空。", "先调用 list_sectors 获取板块代码。");
|
|
71
|
+
const envelope = await ctx.client.get(`/v1/sectors/${encodeURIComponent(code)}/quote`, {
|
|
72
|
+
staleAfterMs: STALE_MS.quote,
|
|
73
|
+
signal: ctx.signal,
|
|
74
|
+
});
|
|
75
|
+
return fromEnvelope(envelope, { meta: { sector_code: code } });
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
registerReadTool(server, client, {
|
|
79
|
+
name: "list_themes",
|
|
80
|
+
title: "题材总览",
|
|
81
|
+
description: [
|
|
82
|
+
"列出当前活跃题材(概念)及其热度、涨跌幅、代表个股,返回题材编码 theme_code。",
|
|
83
|
+
"什么时候用:用户问「最近炒什么题材」「XX 概念哪些票」,或需要 theme_code 再调 get_theme_news 看题材新闻。",
|
|
84
|
+
"费用:固定 3 积分。",
|
|
85
|
+
].join("\n"),
|
|
86
|
+
inputSchema: {},
|
|
87
|
+
hints: ["拿到 theme_code 后用 get_theme_news 看该题材的新闻(按新闻条数计价)"],
|
|
88
|
+
run: async (_args, ctx) => {
|
|
89
|
+
const envelope = await ctx.client.get("/v1/themes/overview", {
|
|
90
|
+
query: { window: "2h" },
|
|
91
|
+
staleAfterMs: STALE_MS.quote,
|
|
92
|
+
signal: ctx.signal,
|
|
93
|
+
});
|
|
94
|
+
return fromEnvelope(envelope, {
|
|
95
|
+
...(countItems(envelope.data) !== undefined ? { count: countItems(envelope.data) } : {}),
|
|
96
|
+
});
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
registerReadTool(server, client, {
|
|
100
|
+
name: "get_theme_news",
|
|
101
|
+
title: "题材新闻",
|
|
102
|
+
description: [
|
|
103
|
+
"按题材编码拉取该题材最新新闻列表(底层是 /v1/news?theme=...)。",
|
|
104
|
+
"什么时候用:用户问「半导体题材最近有什么消息」「XX 概念的消息面」,且你已经从 list_themes 拿到 theme_code。",
|
|
105
|
+
"费用:与 search_news 同口径 —— 1 + ⌈limit/20⌉ 积分(limit=20 → 2 分)。",
|
|
106
|
+
].join("\n"),
|
|
107
|
+
inputSchema: {
|
|
108
|
+
theme_code: z.string().min(1).max(64).describe("题材编码,来自 list_themes 的返回结果"),
|
|
109
|
+
limit: z.number().int().min(1).max(200).optional().describe("返回条数,默认 20,最大 200"),
|
|
110
|
+
},
|
|
111
|
+
hints: NEWS_HINTS,
|
|
112
|
+
run: async (args, ctx) => {
|
|
113
|
+
const code = args.theme_code.trim();
|
|
114
|
+
if (!code)
|
|
115
|
+
throw badInput("theme_code 不能为空。", "先调用 list_themes 获取题材编码。");
|
|
116
|
+
const limit = args.limit ?? DEFAULT_LIMIT;
|
|
117
|
+
const envelope = await ctx.client.get("/v1/news", {
|
|
118
|
+
query: { theme: code, limit },
|
|
119
|
+
staleAfterMs: STALE_MS.news,
|
|
120
|
+
signal: ctx.signal,
|
|
121
|
+
});
|
|
122
|
+
return fromEnvelope(envelope, {
|
|
123
|
+
...(countItems(envelope.data) !== undefined ? { count: countItems(envelope.data) } : {}),
|
|
124
|
+
meta: { theme_code: code, limit_requested: limit },
|
|
125
|
+
});
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
registerReadTool(server, client, {
|
|
129
|
+
name: "get_quotes",
|
|
130
|
+
title: "批量行情",
|
|
131
|
+
description: [
|
|
132
|
+
"批量取股票/指数实时行情:最新价、涨跌幅、成交量、成交额、时间戳(一次最多 50 只)。",
|
|
133
|
+
"什么时候用:用户问「某某股票现在多少钱」「自选股今天表现」;需要几分钟级的现价快照时。",
|
|
134
|
+
"符号支持数组或逗号分隔字符串(如 [\"600519\",\"000001\"] 或 \"600519,000001\"),上限 50 只。",
|
|
135
|
+
"费用:1 + ⌈只数/50⌉ 积分(≤50 只 = 2 分)。",
|
|
136
|
+
].join("\n"),
|
|
137
|
+
inputSchema: {
|
|
138
|
+
symbols: z
|
|
139
|
+
.union([z.array(z.string().min(1).max(32)).min(1).max(50), z.string().min(1).max(1200)])
|
|
140
|
+
.describe("股票/指数代码,最多 50 只;数组形式或逗号分隔字符串均可(如 \"600519,000001,399001\")"),
|
|
141
|
+
},
|
|
142
|
+
hints: ["一次传满需要查的代码(≤50 只按 2 积分计,拆多次更贵)", "只要 K 线用 get_kline,不需要先取 quotes"],
|
|
143
|
+
run: async (args, ctx) => {
|
|
144
|
+
const raw = Array.isArray(args.symbols) ? args.symbols : args.symbols.split(",");
|
|
145
|
+
const symbols = [...new Set(raw.map((item) => item.trim()).filter((item) => item.length > 0))];
|
|
146
|
+
if (symbols.length === 0)
|
|
147
|
+
throw badInput("symbols 不能为空。", "传入至少一个股票代码,如 [\"600519\"]。");
|
|
148
|
+
if (symbols.length > 50) {
|
|
149
|
+
throw badInput(`一次最多查询 50 只,当前传入 ${symbols.length} 只。`, "拆成多次调用(每次 ≤50 只),或先按关注度筛选后再查。");
|
|
150
|
+
}
|
|
151
|
+
const envelope = await ctx.client.get("/v1/quotes", {
|
|
152
|
+
query: { symbols: symbols.join(",") },
|
|
153
|
+
staleAfterMs: STALE_MS.quote,
|
|
154
|
+
signal: ctx.signal,
|
|
155
|
+
});
|
|
156
|
+
return fromEnvelope(envelope, {
|
|
157
|
+
...(countItems(envelope.data) !== undefined ? { count: countItems(envelope.data) } : {}),
|
|
158
|
+
meta: { symbols_requested: symbols.length },
|
|
159
|
+
});
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
registerReadTool(server, client, {
|
|
163
|
+
name: "get_kline",
|
|
164
|
+
title: "K 线数据",
|
|
165
|
+
description: [
|
|
166
|
+
"取单只标的的 K 线(默认日线 1d,可选 5 分钟 5m),用于走势、涨跌幅、均线等技术判断。",
|
|
167
|
+
"什么时候用:用户问「最近走势」「这段时间涨了多少」「画个 K 线」;需要历史价格序列做计算时。",
|
|
168
|
+
"参数:code 代码、days 根数(默认 60,最大 250)、period 周期(1d / 5m)。",
|
|
169
|
+
"费用:2 + ⌈根数/50⌉ 积分(60 根 → 4 分;250 根 → 7 分)。",
|
|
170
|
+
].join("\n"),
|
|
171
|
+
inputSchema: {
|
|
172
|
+
code: z.string().min(1).max(32).describe("股票/指数代码,如 600519、000001、399001"),
|
|
173
|
+
days: z.number().int().min(1).max(250).optional().describe("K 线根数,默认 60,最大 250;每 50 根 +1 积分"),
|
|
174
|
+
period: z.enum(["1d", "5m"]).optional().describe("周期:1d 日线(默认)、5m 五分钟线"),
|
|
175
|
+
},
|
|
176
|
+
hints: ["把 days 降到 60 以内", "日线够用时不要取 5m(根数越多越贵、体积越大)"],
|
|
177
|
+
run: async (args, ctx) => {
|
|
178
|
+
const code = args.code.trim();
|
|
179
|
+
if (!code)
|
|
180
|
+
throw badInput("code 不能为空。", "传入股票代码,如 \"600519\"。");
|
|
181
|
+
const days = args.days ?? 60;
|
|
182
|
+
const period = args.period ?? "1d";
|
|
183
|
+
const envelope = await ctx.client.get("/v1/stocks/kline", {
|
|
184
|
+
query: { codes: code, days, period }, // 服务端参数名为 codes(逗号分隔)
|
|
185
|
+
staleAfterMs: period === "5m" ? STALE_MS.quote : STALE_MS.sessionHalfDay,
|
|
186
|
+
signal: ctx.signal,
|
|
187
|
+
});
|
|
188
|
+
return fromEnvelope(envelope, {
|
|
189
|
+
meta: { code, days_requested: days, period },
|
|
190
|
+
});
|
|
191
|
+
},
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=market.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"market.js","sourceRoot":"","sources":["../../src/tools/market.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** 情报类工具:search_news / get_news / get_story(scope: news:read)。 */
|
|
2
|
+
import type { AntitoneClient } from "../client.js";
|
|
3
|
+
import { type ToolSink } from "./kit.js";
|
|
4
|
+
export declare function registerNewsTools(server: ToolSink, client: AntitoneClient): void;
|
|
5
|
+
//# sourceMappingURL=news.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"news.d.ts","sourceRoot":"","sources":["../../src/tools/news.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAGlE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAmE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAQ1G,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CA0FhF"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/** 情报类工具:search_news / get_news / get_story(scope: news:read)。 */
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { DEFAULT_LIMIT } from "../config.js";
|
|
4
|
+
import { countItems, fromEnvelope, registerReadTool, STALE_MS, badInput } from "./kit.js";
|
|
5
|
+
const NEWS_HINTS = [
|
|
6
|
+
"把 limit 降到 20 以内(每 20 条 +1 积分,也更省 token)",
|
|
7
|
+
"用 q / ticker / theme 收窄主题,而不是拉全量",
|
|
8
|
+
"用 from_at 缩小时间窗:≤7 天不加价,8–30 天 ×2、31–180 天 ×3、>180 天 ×5",
|
|
9
|
+
];
|
|
10
|
+
export function registerNewsTools(server, client) {
|
|
11
|
+
registerReadTool(server, client, {
|
|
12
|
+
name: "search_news",
|
|
13
|
+
title: "搜索新闻",
|
|
14
|
+
description: [
|
|
15
|
+
"按关键词 / 股票 / 题材 / 时间窗检索 Antitone 情报流,返回新闻列表(标题、摘要、来源、重要度、关联标的、public_id)。",
|
|
16
|
+
"什么时候用:用户问「今天/最近有什么关于 X 的消息」「某只股票/板块出了什么事」「某题材有什么新闻」;或需要先拿到 public_id 再用 get_news 读详情。",
|
|
17
|
+
"什么时候不用:需要实时推送(MCP 不能主动推送,实时请用 Webhook);需要全量历史同步(改用 /v1/stream/replay 脚本)。",
|
|
18
|
+
"参数:q 关键词、ticker 股票代码、market 市场、theme 题材编码、from_at 起始时间、limit 条数(默认 20,最大 200)。",
|
|
19
|
+
"费用:1 + ⌈limit/20⌉ 积分(limit=20 → 2 分;100 → 6 分),历史跨度修饰另乘。",
|
|
20
|
+
].join("\n"),
|
|
21
|
+
inputSchema: {
|
|
22
|
+
q: z.string().min(1).max(200).optional().describe("关键词,中英文均可(如「半导体」「降息」「业绩预增」),与 ticker/theme 可组合"),
|
|
23
|
+
ticker: z.string().min(1).max(32).optional().describe("股票代码,A 股为 6 位数字(如 600519),也支持 600519.SH 形式"),
|
|
24
|
+
market: z.string().min(1).max(16).optional().describe("市场过滤,如 cn / hk / us"),
|
|
25
|
+
theme: z.string().min(1).max(64).optional().describe("题材编码,先用 list_themes 取编码"),
|
|
26
|
+
from_at: z.string().min(1).max(64).optional().describe("起始时间,ISO8601(2026-09-01T00:00:00Z)或日期(2026-09-01);跨度 >7 天会加价"),
|
|
27
|
+
limit: z.number().int().min(1).max(200).optional().describe("返回条数,默认 20,最大 200;每 20 条 +1 积分"),
|
|
28
|
+
},
|
|
29
|
+
hints: NEWS_HINTS,
|
|
30
|
+
run: async (args, ctx) => {
|
|
31
|
+
const limit = args.limit ?? DEFAULT_LIMIT;
|
|
32
|
+
const envelope = await ctx.client.get("/v1/news", {
|
|
33
|
+
query: {
|
|
34
|
+
q: args.q,
|
|
35
|
+
ticker: args.ticker,
|
|
36
|
+
market: args.market,
|
|
37
|
+
theme: args.theme,
|
|
38
|
+
published_from: args.from_at, // 服务端参数名为 published_from
|
|
39
|
+
limit,
|
|
40
|
+
},
|
|
41
|
+
staleAfterMs: STALE_MS.news,
|
|
42
|
+
signal: ctx.signal,
|
|
43
|
+
});
|
|
44
|
+
return fromEnvelope(envelope, {
|
|
45
|
+
...(countItems(envelope.data) !== undefined ? { count: countItems(envelope.data) } : {}),
|
|
46
|
+
meta: { limit_requested: limit },
|
|
47
|
+
});
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
registerReadTool(server, client, {
|
|
51
|
+
name: "get_news",
|
|
52
|
+
title: "读取单条新闻",
|
|
53
|
+
description: [
|
|
54
|
+
"按 public_id 读取一条新闻的完整结构化记录(含正文摘要、来源、时间、重要度、关联股票/题材)。",
|
|
55
|
+
"什么时候用:已经从 search_news 拿到 public_id,需要看这一条的细节或全文时;用户追问「刚才那条第 2 条具体说了什么」。",
|
|
56
|
+
"include_full_text=true 会返回全文,费用 ×3(2 → 6 积分),只在确实需要原文时开启。",
|
|
57
|
+
"费用:固定 2 积分(含全文 6 积分)。",
|
|
58
|
+
].join("\n"),
|
|
59
|
+
inputSchema: {
|
|
60
|
+
public_id: z.string().min(1).max(128).describe("新闻 public_id,来自 search_news 的返回结果"),
|
|
61
|
+
include_full_text: z.boolean().optional().describe("是否返回全文,默认 false;开启后费用 ×3(2 → 6 积分)"),
|
|
62
|
+
},
|
|
63
|
+
hints: ["确认 public_id 是否来自 search_news(拼错会 404)", "非必要不要开 include_full_text(费用 ×3)"],
|
|
64
|
+
run: async (args, ctx) => {
|
|
65
|
+
const publicId = args.public_id.trim();
|
|
66
|
+
if (!publicId)
|
|
67
|
+
throw badInput("public_id 不能为空。", "先用 search_news 取一条新闻的 public_id 再调用。");
|
|
68
|
+
const envelope = await ctx.client.get(`/v1/news/${encodeURIComponent(publicId)}`, {
|
|
69
|
+
query: { include_full_text: args.include_full_text === true },
|
|
70
|
+
staleAfterMs: STALE_MS.news,
|
|
71
|
+
signal: ctx.signal,
|
|
72
|
+
});
|
|
73
|
+
return fromEnvelope(envelope, { meta: { public_id: publicId, include_full_text: args.include_full_text === true } });
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
registerReadTool(server, client, {
|
|
77
|
+
name: "get_story",
|
|
78
|
+
title: "读取事件簇(story)",
|
|
79
|
+
description: [
|
|
80
|
+
"读取一个事件簇(story):同一事件的多条新闻聚合、时间线与影响面。",
|
|
81
|
+
"什么时候用:用户想了解「这件事的来龙去脉/最新进展」,而不是零散单条新闻时;先用 search_news 找到相关新闻里的 story_id。",
|
|
82
|
+
"story_id 与 public_id 不同:public_id 是单条新闻,story_id 是一个事件簇。",
|
|
83
|
+
"费用:固定 3 积分。",
|
|
84
|
+
].join("\n"),
|
|
85
|
+
inputSchema: {
|
|
86
|
+
story_id: z.string().min(1).max(128).describe("事件簇 ID(story_id),可从 search_news 结果里带出"),
|
|
87
|
+
},
|
|
88
|
+
hints: ["story_id 与 public_id 不同,别混用", "若只有关键词,先用 search_news 找 story_id"],
|
|
89
|
+
run: async (args, ctx) => {
|
|
90
|
+
const storyId = args.story_id.trim();
|
|
91
|
+
if (!storyId)
|
|
92
|
+
throw badInput("story_id 不能为空。", "先用 search_news 找到相关新闻,取其 story_id。");
|
|
93
|
+
const envelope = await ctx.client.get(`/v1/stories/${encodeURIComponent(storyId)}`, {
|
|
94
|
+
staleAfterMs: STALE_MS.news,
|
|
95
|
+
signal: ctx.signal,
|
|
96
|
+
});
|
|
97
|
+
return fromEnvelope(envelope, { meta: { story_id: storyId } });
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=news.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"news.js","sourceRoot":"","sources":["../../src/tools/news.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** get_usage(scope: usage:read,免费端点)。 */
|
|
2
|
+
import type { AntitoneClient } from "../client.js";
|
|
3
|
+
import { type ToolSink } from "./kit.js";
|
|
4
|
+
/**
|
|
5
|
+
* 2026-09-16 压缩(实测教训):
|
|
6
|
+
* 旧版无条件同时拉 /v1/usage + /v1/credits/usage,后者一次最多返回 500 条积分流水 ——
|
|
7
|
+
* 一次「查余额」实测 82,914 B,被 32 KB 上限截断后仍灌了约 31 KB(≈8–10k tokens)进上下文。
|
|
8
|
+
* 现在的口径:
|
|
9
|
+
* · 默认只拉 /v1/usage(体量小,就是余额与调用统计)
|
|
10
|
+
* · 需要逐笔流水时显式传 ledger_days(1–90)
|
|
11
|
+
*/
|
|
12
|
+
export declare function registerUsageTools(server: ToolSink, client: AntitoneClient): void;
|
|
13
|
+
//# sourceMappingURL=usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/tools/usage.ts"],"names":[],"mappings":"AAAA,yCAAyC;AAGzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAA8C,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAErF;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAuCjF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/** get_usage(scope: usage:read,免费端点)。 */
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { fromEnvelopes, registerReadTool, STALE_MS } from "./kit.js";
|
|
4
|
+
/**
|
|
5
|
+
* 2026-09-16 压缩(实测教训):
|
|
6
|
+
* 旧版无条件同时拉 /v1/usage + /v1/credits/usage,后者一次最多返回 500 条积分流水 ——
|
|
7
|
+
* 一次「查余额」实测 82,914 B,被 32 KB 上限截断后仍灌了约 31 KB(≈8–10k tokens)进上下文。
|
|
8
|
+
* 现在的口径:
|
|
9
|
+
* · 默认只拉 /v1/usage(体量小,就是余额与调用统计)
|
|
10
|
+
* · 需要逐笔流水时显式传 ledger_days(1–90)
|
|
11
|
+
*/
|
|
12
|
+
export function registerUsageTools(server, client) {
|
|
13
|
+
registerReadTool(server, client, {
|
|
14
|
+
name: "get_usage",
|
|
15
|
+
title: "用量与余额",
|
|
16
|
+
description: [
|
|
17
|
+
"查询账号用量与余额:/v1/usage 的调用统计(免费端点,返回很小)。",
|
|
18
|
+
"什么时候用:用户问「我还剩多少额度」「今天/本月用了多少」;或在其他工具返回 402(余额不足)/429(超限)之后做诊断。",
|
|
19
|
+
"需要逐笔积分流水时传 ledger_days(如 7)会额外拉 /v1/credits/usage;不传则跳过 —— 流水一次可能几百条,很占上下文。",
|
|
20
|
+
"费用:0 积分。",
|
|
21
|
+
].join("\n"),
|
|
22
|
+
inputSchema: {
|
|
23
|
+
ledger_days: z
|
|
24
|
+
.number()
|
|
25
|
+
.int()
|
|
26
|
+
.min(1)
|
|
27
|
+
.max(90)
|
|
28
|
+
.optional()
|
|
29
|
+
.describe("可选:同时返回最近 N 天的积分流水(1–90)。不传则不拉流水(推荐,省上下文)"),
|
|
30
|
+
},
|
|
31
|
+
hints: ["若只是余额不足,用本工具确认后到个人中心充值即可(1 积分 = ¥0.005)"],
|
|
32
|
+
run: async (args, ctx) => {
|
|
33
|
+
const usage = await ctx.client.get("/v1/usage", {
|
|
34
|
+
staleAfterMs: STALE_MS.quote,
|
|
35
|
+
signal: ctx.signal,
|
|
36
|
+
});
|
|
37
|
+
const envelopes = [["usage", usage]];
|
|
38
|
+
if (args.ledger_days !== undefined) {
|
|
39
|
+
const credits = await ctx.client.get("/v1/credits/usage", {
|
|
40
|
+
query: { days: args.ledger_days },
|
|
41
|
+
staleAfterMs: STALE_MS.quote,
|
|
42
|
+
signal: ctx.signal,
|
|
43
|
+
});
|
|
44
|
+
envelopes.push(["credits", credits]);
|
|
45
|
+
}
|
|
46
|
+
return fromEnvelopes(envelopes, { meta: { free: true } });
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/tools/usage.ts"],"names":[],"mappings":"AAAA,yCAAyC;AAEzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,QAAQ,EAAkB,MAAM,UAAU,CAAC;AAErF;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAgB,EAAE,MAAsB;IACzE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE;QAC/B,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,OAAO;QACd,WAAW,EAAE;YACX,uCAAuC;YACvC,gEAAgE;YAChE,6EAA6E;YAC7E,UAAU;SACX,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,WAAW,EAAE;YACX,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,GAAG,CAAC,CAAC,CAAC;iBACN,GAAG,CAAC,EAAE,CAAC;iBACP,QAAQ,EAAE;iBACV,QAAQ,CAAC,2CAA2C,CAAC;SACzD;QACD,KAAK,EAAE,CAAC,yCAAyC,CAAC;QAClD,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YACvB,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAU,WAAW,EAAE;gBACvD,YAAY,EAAE,QAAQ,CAAC,KAAK;gBAC5B,MAAM,EAAE,GAAG,CAAC,MAAM;aACnB,CAAC,CAAC;YACH,MAAM,SAAS,GAAsC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YAExE,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBACnC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAU,mBAAmB,EAAE;oBACjE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;oBACjC,YAAY,EAAE,QAAQ,CAAC,KAAK;oBAC5B,MAAM,EAAE,GAAG,CAAC,MAAM;iBACnB,CAAC,CAAC;gBACH,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;YACvC,CAAC;YAED,OAAO,aAAa,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5D,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "antitone",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "Antitone 财经情报 CLI + Skill:A股/港股/美股的行情、新闻、板块题材、涨停龙虎榜、早晚报与信号回测(16 个只读工具)。装上 Skill,Agent 会自己判断何时调用。",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"antitone",
|
|
7
|
+
"agent",
|
|
8
|
+
"skill",
|
|
9
|
+
"cli",
|
|
10
|
+
"a-share",
|
|
11
|
+
"finance",
|
|
12
|
+
"news",
|
|
13
|
+
"stock",
|
|
14
|
+
"market-data"
|
|
15
|
+
],
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"author": "Antitone",
|
|
18
|
+
"homepage": "https://desicterminal.com",
|
|
19
|
+
"type": "module",
|
|
20
|
+
"bin": {
|
|
21
|
+
"antitone": "dist/cli.js"
|
|
22
|
+
},
|
|
23
|
+
"main": "dist/index.js",
|
|
24
|
+
"types": "dist/index.d.ts",
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"import": "./dist/index.js"
|
|
29
|
+
},
|
|
30
|
+
"./server": {
|
|
31
|
+
"types": "./dist/server.d.ts",
|
|
32
|
+
"import": "./dist/server.js"
|
|
33
|
+
},
|
|
34
|
+
"./package.json": "./package.json"
|
|
35
|
+
},
|
|
36
|
+
"files": [
|
|
37
|
+
"dist",
|
|
38
|
+
"README.md",
|
|
39
|
+
"SKILL.md"
|
|
40
|
+
],
|
|
41
|
+
"engines": {
|
|
42
|
+
"node": ">=18.17"
|
|
43
|
+
},
|
|
44
|
+
"publishConfig": {
|
|
45
|
+
"access": "public"
|
|
46
|
+
},
|
|
47
|
+
"scripts": {
|
|
48
|
+
"clean": "node -e \"fs.rmSync('dist',{recursive:true,force:true})\"",
|
|
49
|
+
"build": "npm run clean && tsc -p tsconfig.json && node scripts/postbuild.mjs",
|
|
50
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
51
|
+
"smoke": "node scripts/smoke.mjs",
|
|
52
|
+
"test": "npm run build && npm run smoke",
|
|
53
|
+
"prepublishOnly": "npm run build && npm run smoke"
|
|
54
|
+
},
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"zod": "^3.25.76"
|
|
57
|
+
},
|
|
58
|
+
"devDependencies": {
|
|
59
|
+
"@types/node": "^22.20.2",
|
|
60
|
+
"typescript": "^5.9.3"
|
|
61
|
+
},
|
|
62
|
+
"repository": {
|
|
63
|
+
"type": "git",
|
|
64
|
+
"url": "git+https://github.com/xiazhi88/antitone-mcp.git"
|
|
65
|
+
}
|
|
66
|
+
}
|