@hedgehog-finance/hedgehog-plugin 1.0.21 → 1.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +4 -3
- package/dist/index.js +49 -6
- package/dist/index.js.map +1 -1
- package/dist/setup-api.d.ts +2 -0
- package/dist/setup-api.js +8 -0
- package/dist/setup-api.js.map +1 -0
- package/dist/src/channel.js +25 -23
- package/dist/src/channel.js.map +1 -1
- package/dist/src/core/database.js +449 -39
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/dailyMorningBriefingCron.d.ts +46 -0
- package/dist/src/dailyMorningBriefingCron.js +82 -0
- package/dist/src/dailyMorningBriefingCron.js.map +1 -0
- package/dist/src/features/chartOutput.d.ts +2 -0
- package/dist/src/features/chartOutput.js +35 -0
- package/dist/src/features/chartOutput.js.map +1 -0
- package/dist/src/features/dailyMorningBriefing/schema.d.ts +56 -0
- package/dist/src/features/dailyMorningBriefing/schema.js +22 -0
- package/dist/src/features/dailyMorningBriefing/schema.js.map +1 -0
- package/dist/src/features/dailyMorningBriefing/tools.d.ts +12 -0
- package/dist/src/features/dailyMorningBriefing/tools.js +204 -0
- package/dist/src/features/dailyMorningBriefing/tools.js.map +1 -0
- package/dist/src/features/deepReasoning/schema.d.ts +43 -0
- package/dist/src/features/deepReasoning/schema.js +17 -0
- package/dist/src/features/deepReasoning/schema.js.map +1 -0
- package/dist/src/features/deepReasoning/tools.d.ts +12 -0
- package/dist/src/features/deepReasoning/tools.js +163 -0
- package/dist/src/features/deepReasoning/tools.js.map +1 -0
- package/dist/src/features/index.d.ts +2 -1
- package/dist/src/features/index.js +9 -1
- package/dist/src/features/index.js.map +1 -1
- package/dist/src/features/informationVerification/schema.d.ts +43 -0
- package/dist/src/features/informationVerification/schema.js +17 -0
- package/dist/src/features/informationVerification/schema.js.map +1 -0
- package/dist/src/features/informationVerification/tools.d.ts +12 -0
- package/dist/src/features/informationVerification/tools.js +162 -0
- package/dist/src/features/informationVerification/tools.js.map +1 -0
- package/dist/src/features/notes/schema.d.ts +136 -39
- package/dist/src/features/notes/schema.js +13 -10
- package/dist/src/features/notes/schema.js.map +1 -1
- package/dist/src/features/notes/tools.d.ts +1 -0
- package/dist/src/features/notes/tools.js +47 -14
- package/dist/src/features/notes/tools.js.map +1 -1
- package/dist/src/features/pluginInfo/schema.d.ts +79 -0
- package/dist/src/features/pluginInfo/schema.js +14 -0
- package/dist/src/features/pluginInfo/schema.js.map +1 -0
- package/dist/src/features/pluginInfo/tools.d.ts +1 -0
- package/dist/src/features/pluginInfo/tools.js +157 -2
- package/dist/src/features/pluginInfo/tools.js.map +1 -1
- package/dist/src/features/profileLibrary/schema.d.ts +34 -6
- package/dist/src/features/profileLibrary/schema.js +1 -1
- package/dist/src/features/profileLibrary/schema.js.map +1 -1
- package/dist/src/features/stockAnalysis/schema.d.ts +224 -31
- package/dist/src/features/stockAnalysis/schema.js +76 -12
- package/dist/src/features/stockAnalysis/schema.js.map +1 -1
- package/dist/src/features/stockAnalysis/tools.d.ts +6 -4
- package/dist/src/features/stockAnalysis/tools.js +389 -44
- package/dist/src/features/stockAnalysis/tools.js.map +1 -1
- package/dist/src/features/stockBasic/schema.d.ts +149 -0
- package/dist/src/features/stockBasic/schema.js +26 -0
- package/dist/src/features/stockBasic/schema.js.map +1 -0
- package/dist/src/features/stockBasic/tools.d.ts +12 -0
- package/dist/src/features/stockBasic/tools.js +124 -0
- package/dist/src/features/stockBasic/tools.js.map +1 -0
- package/dist/src/features/watchlist/logic.d.ts +3 -3
- package/dist/src/features/watchlist/logic.js +47 -46
- package/dist/src/features/watchlist/logic.js.map +1 -1
- package/dist/src/features/watchlist/schema.d.ts +89 -54
- package/dist/src/features/watchlist/schema.js +7 -4
- package/dist/src/features/watchlist/schema.js.map +1 -1
- package/dist/src/features/watchlist/tools.d.ts +106 -59
- package/dist/src/features/watchlist/tools.js +182 -104
- package/dist/src/features/watchlist/tools.js.map +1 -1
- package/dist/src/openclawConfig.d.ts +6 -0
- package/dist/src/openclawConfig.js +74 -0
- package/dist/src/openclawConfig.js.map +1 -0
- package/dist/src/openclawConstants.d.ts +4 -0
- package/dist/src/openclawConstants.js +10 -0
- package/dist/src/openclawConstants.js.map +1 -0
- package/dist/src/runtime.js +20 -0
- package/dist/src/runtime.js.map +1 -1
- package/index.ts +52 -5
- package/openclaw.plugin.json +24 -0
- package/package.json +20 -5
- package/setup-api.ts +10 -0
- package/src/channel.ts +26 -25
- package/src/core/database.ts +447 -40
- package/src/dailyMorningBriefingCron.ts +129 -0
- package/src/features/chartOutput.ts +35 -0
- package/src/features/dailyMorningBriefing/schema.ts +38 -0
- package/src/features/dailyMorningBriefing/tools.ts +246 -0
- package/src/features/deepReasoning/schema.ts +22 -0
- package/src/features/deepReasoning/tools.ts +182 -0
- package/src/features/index.ts +11 -2
- package/src/features/informationVerification/schema.ts +22 -0
- package/src/features/informationVerification/tools.ts +181 -0
- package/src/features/notes/schema.ts +17 -12
- package/src/features/notes/tools.ts +54 -17
- package/src/features/pluginInfo/schema.ts +19 -0
- package/src/features/pluginInfo/tools.ts +173 -2
- package/src/features/profileLibrary/schema.ts +1 -1
- package/src/features/stockAnalysis/schema.ts +99 -17
- package/src/features/stockAnalysis/tools.ts +447 -49
- package/src/features/stockBasic/schema.ts +33 -0
- package/src/features/stockBasic/tools.ts +157 -0
- package/src/features/watchlist/logic.ts +56 -53
- package/src/features/watchlist/schema.ts +11 -6
- package/src/features/watchlist/tools.ts +191 -106
- package/src/openclawConfig.ts +101 -0
- package/src/openclawConstants.ts +11 -0
- package/src/runtime.ts +19 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/features/stockAnalysis/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../src/features/stockAnalysis/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,19 +2,21 @@ import { getDB } from "../../core/database.js";
|
|
|
2
2
|
import { StockAiAnalysis } from "./schema.js";
|
|
3
3
|
interface RuntimeTool {
|
|
4
4
|
name: string;
|
|
5
|
+
label?: string;
|
|
5
6
|
description: string;
|
|
6
7
|
parameters: unknown;
|
|
7
8
|
registerTool?: boolean;
|
|
8
|
-
execute(params: unknown, ctx
|
|
9
|
+
execute(params: unknown, ctx?: {
|
|
9
10
|
userId: string;
|
|
10
11
|
}): Promise<string>;
|
|
11
12
|
}
|
|
12
|
-
export declare function normalizeStockCode(
|
|
13
|
+
export declare function normalizeStockCode(stock_code: string): string;
|
|
13
14
|
export declare function saveStockAiAnalysisRecord(db: ReturnType<typeof getDB>, userId: string, args: {
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
stock_code: string;
|
|
16
|
+
stock_name?: string;
|
|
16
17
|
market: string;
|
|
17
18
|
content: string;
|
|
19
|
+
status?: string;
|
|
18
20
|
}): StockAiAnalysis;
|
|
19
21
|
export declare const stockAnalysisTools: Record<string, RuntimeTool>;
|
|
20
22
|
export {};
|
|
@@ -1,90 +1,286 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { getDB } from "../../core/database.js";
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
import { CHART_OUTPUT_GUIDANCE, ensureChartPlaceholdersInBody } from "../chartOutput.js";
|
|
4
|
+
import { BuildStockAiAnalysisMessageParamsSchema, GetArticleAiAnalysisParamsSchema, GetStockAiAnalysisDetailParamsSchema, GetStockAiAnalysisParamsSchema, QueryArticleAiAnalysisHistoryParamsSchema, QueryStockAiAnalysisStocksParamsSchema, SaveArticleDeepReasoningParamsSchema, QueryStockAiAnalysisHistoryParamsSchema, SaveArticleAiAnalysisParamsSchema, SaveStockAiAnalysisParamsSchema } from "./schema.js";
|
|
5
|
+
const STOCK_AI_ANALYSIS_SKILL = "hedgehog-stock-research";
|
|
6
|
+
const BuildStockAiAnalysisMessageAgentToolSchema = {
|
|
7
|
+
type: "object",
|
|
8
|
+
additionalProperties: false,
|
|
9
|
+
required: ["stock_code", "stock_name"],
|
|
10
|
+
properties: {
|
|
11
|
+
stock_code: { type: "string", description: "股票代码" },
|
|
12
|
+
stock_name: { type: "string", description: "股票名称" },
|
|
13
|
+
market: { type: "string", description: "市场类型,默认 CN" }
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
export function normalizeStockCode(stock_code) {
|
|
17
|
+
return stock_code.trim().toUpperCase().replace(/\.SS$/i, ".SH");
|
|
18
|
+
}
|
|
19
|
+
function resolveToolUserId(ctx) {
|
|
20
|
+
return ctx?.userId || "default";
|
|
21
|
+
}
|
|
22
|
+
function buildStockAiAnalysisContent(args) {
|
|
23
|
+
return [
|
|
24
|
+
`分析一下${args.stock_name}股票`,
|
|
25
|
+
"",
|
|
26
|
+
`股票代码:${normalizeStockCode(args.stock_code)}`,
|
|
27
|
+
`股票名称:${args.stock_name}`,
|
|
28
|
+
`市场:${args.market}`
|
|
29
|
+
].join("\n");
|
|
30
|
+
}
|
|
31
|
+
function buildStockAiAnalysisMessage(args) {
|
|
32
|
+
const stock_code = normalizeStockCode(args.stock_code);
|
|
33
|
+
const buildGeneratingSaveParams = () => JSON.stringify({
|
|
34
|
+
stock_code,
|
|
35
|
+
stock_name: args.stock_name,
|
|
36
|
+
market: args.market,
|
|
37
|
+
status: "generating",
|
|
38
|
+
content: ""
|
|
39
|
+
});
|
|
40
|
+
const buildFinalSaveParams = (status) => JSON.stringify({
|
|
41
|
+
stock_code,
|
|
42
|
+
stock_name: args.stock_name,
|
|
43
|
+
market: args.market,
|
|
44
|
+
status,
|
|
45
|
+
content: "..."
|
|
46
|
+
});
|
|
47
|
+
return JSON.stringify({
|
|
48
|
+
cw_system_prompt: [
|
|
49
|
+
`开始分析前必须先调用 save_stock_ai_analysis,参数为 ${buildGeneratingSaveParams()};如果返回 skipped=true,必须立即停止,不要继续调用 skill 或生成正文。`,
|
|
50
|
+
`必须触发并使用 ${STOCK_AI_ANALYSIS_SKILL} skill 生成个股 AI 分析报告。`,
|
|
51
|
+
`生成成功后必须调用 save_stock_ai_analysis,参数为 ${buildFinalSaveParams("completed")},content 传最终完整个股分析正文。`,
|
|
52
|
+
`生成失败后必须调用 save_stock_ai_analysis,参数为 ${buildFinalSaveParams("failed")},content 存放完整错误信息。`,
|
|
53
|
+
"如果最终内容包含 [图表数据],正文必须已经包含所有对应图表占位符。"
|
|
54
|
+
].join("\n"),
|
|
55
|
+
cw_context: JSON.stringify({
|
|
56
|
+
stock_code,
|
|
57
|
+
stock_name: args.stock_name,
|
|
58
|
+
market: args.market,
|
|
59
|
+
saveMode: "tool"
|
|
60
|
+
}),
|
|
61
|
+
cw_market: args.market,
|
|
62
|
+
cw_stock_code: stock_code,
|
|
63
|
+
cw_stock_name: args.stock_name,
|
|
64
|
+
cw_content: buildStockAiAnalysisContent({ ...args, stock_code }),
|
|
65
|
+
cw_output: [
|
|
66
|
+
`输出结构以 ${STOCK_AI_ANALYSIS_SKILL} skill 的交付模板为准。`,
|
|
67
|
+
CHART_OUTPUT_GUIDANCE
|
|
68
|
+
].join("\n")
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
function selectLatestStockAnalysis(db, stock_code, market) {
|
|
72
|
+
return db.prepare(`
|
|
73
|
+
SELECT id, stock_code, stock_name, market, status, content, createdAt, updatedAt
|
|
74
|
+
FROM stock_ai_analysis
|
|
75
|
+
WHERE stock_code = ? AND market = ?
|
|
76
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
77
|
+
LIMIT 1
|
|
78
|
+
`).get(stock_code, market);
|
|
79
|
+
}
|
|
80
|
+
function selectLatestGeneratingStockAnalysis(db, userId, stock_code, market) {
|
|
81
|
+
return db.prepare(`
|
|
82
|
+
SELECT id, stock_code, stock_name, market, status, content, createdAt, updatedAt
|
|
83
|
+
FROM stock_ai_analysis
|
|
84
|
+
WHERE userId = ? AND stock_code = ? AND market = ? AND status = 'generating'
|
|
85
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
86
|
+
LIMIT 1
|
|
87
|
+
`).get(userId, stock_code, market);
|
|
6
88
|
}
|
|
7
|
-
function
|
|
89
|
+
function selectStockAnalysisDetail(db, id) {
|
|
8
90
|
return db.prepare(`
|
|
9
|
-
SELECT id,
|
|
91
|
+
SELECT id, stock_code, stock_name, market, status, content, createdAt, updatedAt
|
|
10
92
|
FROM stock_ai_analysis
|
|
11
|
-
WHERE
|
|
93
|
+
WHERE id = ?
|
|
12
94
|
ORDER BY updatedAt DESC, createdAt DESC
|
|
13
95
|
LIMIT 1
|
|
14
|
-
`).get(
|
|
96
|
+
`).get(id);
|
|
97
|
+
}
|
|
98
|
+
function queryStockAnalysisStocks(db, userId, market, page, pageSize) {
|
|
99
|
+
const offset = (page - 1) * pageSize;
|
|
100
|
+
const rows = db.prepare(`
|
|
101
|
+
WITH grouped AS (
|
|
102
|
+
SELECT
|
|
103
|
+
stock_code,
|
|
104
|
+
market,
|
|
105
|
+
COUNT(*) AS analysisCount,
|
|
106
|
+
MAX(updatedAt || '|' || createdAt || '|' || id) AS latestKey
|
|
107
|
+
FROM stock_ai_analysis
|
|
108
|
+
WHERE userId = ? AND market = ?
|
|
109
|
+
GROUP BY stock_code, market
|
|
110
|
+
)
|
|
111
|
+
SELECT
|
|
112
|
+
a.stock_code,
|
|
113
|
+
a.stock_name,
|
|
114
|
+
a.market,
|
|
115
|
+
a.id AS latestAnalysisId,
|
|
116
|
+
a.status AS latestStatus,
|
|
117
|
+
a.createdAt AS latestCreatedAt,
|
|
118
|
+
a.updatedAt AS latestUpdatedAt,
|
|
119
|
+
g.analysisCount
|
|
120
|
+
FROM grouped g
|
|
121
|
+
JOIN stock_ai_analysis a
|
|
122
|
+
ON a.stock_code = g.stock_code
|
|
123
|
+
AND a.market = g.market
|
|
124
|
+
AND (a.updatedAt || '|' || a.createdAt || '|' || a.id) = g.latestKey
|
|
125
|
+
WHERE a.userId = ?
|
|
126
|
+
ORDER BY a.updatedAt DESC, a.createdAt DESC
|
|
127
|
+
LIMIT ? OFFSET ?
|
|
128
|
+
`).all(userId, market, userId, pageSize, offset);
|
|
129
|
+
const countRow = db.prepare(`
|
|
130
|
+
SELECT COUNT(*) AS total
|
|
131
|
+
FROM (
|
|
132
|
+
SELECT 1
|
|
133
|
+
FROM stock_ai_analysis
|
|
134
|
+
WHERE userId = ? AND market = ?
|
|
135
|
+
GROUP BY stock_code, market
|
|
136
|
+
)
|
|
137
|
+
`).get(userId, market);
|
|
138
|
+
return { rows, total: countRow.total || 0 };
|
|
15
139
|
}
|
|
16
140
|
export function saveStockAiAnalysisRecord(db, userId, args) {
|
|
17
|
-
const
|
|
141
|
+
const stock_code = normalizeStockCode(args.stock_code);
|
|
142
|
+
const status = args.status || "completed";
|
|
143
|
+
const stock_name = args.stock_name?.trim() || stock_code;
|
|
144
|
+
const content = status === "completed" ? ensureChartPlaceholdersInBody(args.content) : args.content.trim();
|
|
18
145
|
const id = randomUUID();
|
|
146
|
+
const generating = status === "generating"
|
|
147
|
+
? undefined
|
|
148
|
+
: selectLatestGeneratingStockAnalysis(db, userId, stock_code, args.market);
|
|
149
|
+
if (generating) {
|
|
150
|
+
db.prepare(`
|
|
151
|
+
UPDATE stock_ai_analysis
|
|
152
|
+
SET status = ?,
|
|
153
|
+
content = ?,
|
|
154
|
+
updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')
|
|
155
|
+
WHERE id = ? AND userId = ?
|
|
156
|
+
`).run(status, content, generating.id, userId);
|
|
157
|
+
return selectStockAnalysisDetail(db, generating.id);
|
|
158
|
+
}
|
|
19
159
|
db.prepare(`
|
|
20
|
-
INSERT INTO stock_ai_analysis (id, userId,
|
|
21
|
-
VALUES (?, ?, ?, ?, ?, ?)
|
|
22
|
-
`).run(id, userId,
|
|
160
|
+
INSERT INTO stock_ai_analysis (id, userId, stock_code, stock_name, market, status, content)
|
|
161
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
162
|
+
`).run(id, userId, stock_code, stock_name, args.market, status, content);
|
|
23
163
|
return db.prepare(`
|
|
24
|
-
SELECT id,
|
|
164
|
+
SELECT id, stock_code, stock_name, market, status, content, createdAt, updatedAt
|
|
25
165
|
FROM stock_ai_analysis
|
|
26
166
|
WHERE userId = ? AND id = ?
|
|
27
167
|
`).get(userId, id);
|
|
28
168
|
}
|
|
29
|
-
function
|
|
169
|
+
function tableForArticleAnalysis(analysisType) {
|
|
170
|
+
return analysisType === "verification" ? "news_fact_check_analysis" : "news_deep_reasoning_analysis";
|
|
171
|
+
}
|
|
172
|
+
function selectLatestArticleAnalysis(db, userId, sourceId, analysisType, market = "CN") {
|
|
173
|
+
const table = tableForArticleAnalysis(analysisType);
|
|
174
|
+
if (analysisType === "deduction") {
|
|
175
|
+
return db.prepare(`
|
|
176
|
+
SELECT id, sourceId, ? AS analysisType, sourceTitle, market, status, content, createdAt, updatedAt
|
|
177
|
+
FROM ${table}
|
|
178
|
+
WHERE userId = ? AND sourceId = ? AND market = ?
|
|
179
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
180
|
+
LIMIT 1
|
|
181
|
+
`).get(analysisType, userId, sourceId, market);
|
|
182
|
+
}
|
|
30
183
|
return db.prepare(`
|
|
31
|
-
SELECT id, sourceId, analysisType,
|
|
32
|
-
FROM
|
|
33
|
-
WHERE userId = ? AND sourceId = ?
|
|
184
|
+
SELECT id, sourceId, ? AS analysisType, sourceTitle, status, content, createdAt, updatedAt
|
|
185
|
+
FROM ${table}
|
|
186
|
+
WHERE userId = ? AND sourceId = ?
|
|
34
187
|
ORDER BY updatedAt DESC, createdAt DESC
|
|
35
188
|
LIMIT 1
|
|
36
|
-
`).get(userId, sourceId
|
|
189
|
+
`).get(analysisType, userId, sourceId);
|
|
190
|
+
}
|
|
191
|
+
function selectLatestGeneratingArticleAnalysis(db, userId, sourceId, analysisType) {
|
|
192
|
+
const table = tableForArticleAnalysis(analysisType);
|
|
193
|
+
if (analysisType === "deduction") {
|
|
194
|
+
return db.prepare(`
|
|
195
|
+
SELECT id, sourceId, ? AS analysisType, sourceTitle, market, status, content, createdAt, updatedAt
|
|
196
|
+
FROM ${table}
|
|
197
|
+
WHERE userId = ? AND sourceId = ? AND status = 'generating'
|
|
198
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
199
|
+
LIMIT 1
|
|
200
|
+
`).get(analysisType, userId, sourceId);
|
|
201
|
+
}
|
|
202
|
+
return db.prepare(`
|
|
203
|
+
SELECT id, sourceId, ? AS analysisType, sourceTitle, status, content, createdAt, updatedAt
|
|
204
|
+
FROM ${table}
|
|
205
|
+
WHERE userId = ? AND sourceId = ? AND status = 'generating'
|
|
206
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
207
|
+
LIMIT 1
|
|
208
|
+
`).get(analysisType, userId, sourceId);
|
|
37
209
|
}
|
|
38
210
|
function saveArticleAiAnalysisRecord(db, userId, args) {
|
|
39
211
|
const id = randomUUID();
|
|
40
212
|
db.prepare(`
|
|
41
|
-
INSERT INTO
|
|
213
|
+
INSERT INTO news_fact_check_analysis (id, sourceId, sourceTitle, userId, status, content)
|
|
42
214
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
43
|
-
ON CONFLICT(sourceId, userId
|
|
215
|
+
ON CONFLICT(sourceId, userId) DO UPDATE SET
|
|
216
|
+
sourceTitle = CASE WHEN excluded.sourceTitle != '' THEN excluded.sourceTitle ELSE news_fact_check_analysis.sourceTitle END,
|
|
217
|
+
status = excluded.status,
|
|
218
|
+
content = excluded.content,
|
|
219
|
+
updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')
|
|
220
|
+
`).run(id, args.sourceId, args.sourceTitle, userId, args.status, args.content);
|
|
221
|
+
return db.prepare(`
|
|
222
|
+
SELECT id, sourceId, 'verification' AS analysisType, sourceTitle, status, content, createdAt, updatedAt
|
|
223
|
+
FROM news_fact_check_analysis
|
|
224
|
+
WHERE userId = ? AND sourceId = ?
|
|
225
|
+
`).get(userId, args.sourceId);
|
|
226
|
+
}
|
|
227
|
+
function saveArticleDeepReasoningRecord(db, userId, args) {
|
|
228
|
+
const id = randomUUID();
|
|
229
|
+
db.prepare(`
|
|
230
|
+
INSERT INTO news_deep_reasoning_analysis (id, sourceId, sourceTitle, userId, market, status, content)
|
|
231
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
232
|
+
ON CONFLICT(sourceId, userId, market) DO UPDATE SET
|
|
233
|
+
sourceTitle = CASE WHEN excluded.sourceTitle != '' THEN excluded.sourceTitle ELSE news_deep_reasoning_analysis.sourceTitle END,
|
|
234
|
+
status = excluded.status,
|
|
44
235
|
content = excluded.content,
|
|
45
236
|
updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')
|
|
46
|
-
`).run(id, args.sourceId, userId, args.
|
|
237
|
+
`).run(id, args.sourceId, args.sourceTitle, userId, args.market, args.status, args.content);
|
|
47
238
|
return db.prepare(`
|
|
48
|
-
SELECT id, sourceId, analysisType, market, content, createdAt, updatedAt
|
|
49
|
-
FROM
|
|
50
|
-
WHERE userId = ? AND sourceId = ? AND
|
|
51
|
-
`).get(userId, args.sourceId, args.
|
|
239
|
+
SELECT id, sourceId, 'deduction' AS analysisType, sourceTitle, market, status, content, createdAt, updatedAt
|
|
240
|
+
FROM news_deep_reasoning_analysis
|
|
241
|
+
WHERE userId = ? AND sourceId = ? AND market = ?
|
|
242
|
+
`).get(userId, args.sourceId, args.market);
|
|
52
243
|
}
|
|
53
244
|
export const stockAnalysisTools = {
|
|
54
245
|
get_stock_ai_analysis: {
|
|
55
246
|
name: "get_stock_ai_analysis",
|
|
56
|
-
description: "
|
|
247
|
+
description: "查询指定股票最新一条 AI 分析详情。该接口仅读取已持久化的分析结果,返回完整 content,不触发新的模型生成流程。",
|
|
57
248
|
parameters: GetStockAiAnalysisParamsSchema,
|
|
58
249
|
registerTool: false,
|
|
59
250
|
async execute(params, ctx) {
|
|
60
251
|
const args = GetStockAiAnalysisParamsSchema.parse(params);
|
|
61
252
|
const db = getDB();
|
|
62
|
-
const data = selectLatestStockAnalysis(db,
|
|
253
|
+
const data = selectLatestStockAnalysis(db, normalizeStockCode(args.stock_code), args.market);
|
|
63
254
|
return JSON.stringify({ success: true, data: data || null });
|
|
64
255
|
}
|
|
65
256
|
},
|
|
66
257
|
query_stock_ai_analysis_history: {
|
|
67
258
|
name: "query_stock_ai_analysis_history",
|
|
68
|
-
description: "
|
|
259
|
+
description: "分页查询股票 AI 分析记录列表。支持按股票代码和市场过滤,返回记录标识、股票信息、状态和时间字段;列表结果不包含 content,详情内容请使用详情查询接口获取。",
|
|
69
260
|
parameters: QueryStockAiAnalysisHistoryParamsSchema,
|
|
70
261
|
registerTool: false,
|
|
71
262
|
async execute(params, ctx) {
|
|
72
|
-
const args = QueryStockAiAnalysisHistoryParamsSchema.parse(params);
|
|
263
|
+
const args = QueryStockAiAnalysisHistoryParamsSchema.parse(params ?? {});
|
|
73
264
|
const db = getDB();
|
|
74
|
-
const stockCode = normalizeStockCode(args.stockCode);
|
|
75
265
|
const offset = (args.page - 1) * args.pageSize;
|
|
266
|
+
const conditions = ["userId = ?", "market = ?"];
|
|
267
|
+
const queryParams = [resolveToolUserId(ctx), args.market];
|
|
268
|
+
if (args.stock_code) {
|
|
269
|
+
conditions.push("stock_code = ?");
|
|
270
|
+
queryParams.push(normalizeStockCode(args.stock_code));
|
|
271
|
+
}
|
|
76
272
|
const rows = db.prepare(`
|
|
77
|
-
SELECT id,
|
|
273
|
+
SELECT id, stock_code, stock_name, market, status, createdAt, updatedAt
|
|
78
274
|
FROM stock_ai_analysis
|
|
79
|
-
WHERE
|
|
275
|
+
WHERE ${conditions.join(" AND ")}
|
|
80
276
|
ORDER BY updatedAt DESC, createdAt DESC
|
|
81
277
|
LIMIT ? OFFSET ?
|
|
82
|
-
`).all(
|
|
278
|
+
`).all(...queryParams, args.pageSize, offset);
|
|
83
279
|
const countRow = db.prepare(`
|
|
84
280
|
SELECT COUNT(*) AS total
|
|
85
281
|
FROM stock_ai_analysis
|
|
86
|
-
WHERE
|
|
87
|
-
`).get(
|
|
282
|
+
WHERE ${conditions.join(" AND ")}
|
|
283
|
+
`).get(...queryParams);
|
|
88
284
|
const total = countRow.total || 0;
|
|
89
285
|
return JSON.stringify({
|
|
90
286
|
success: true,
|
|
@@ -98,39 +294,188 @@ export const stockAnalysisTools = {
|
|
|
98
294
|
});
|
|
99
295
|
}
|
|
100
296
|
},
|
|
297
|
+
query_stock_ai_analysis_stocks: {
|
|
298
|
+
name: "query_stock_ai_analysis_stocks",
|
|
299
|
+
description: "分页查询当前用户所有已经产生过个股 AI 分析记录的股票列表。按股票代码和市场去重,返回每只股票最近一次分析记录 ID、最近状态、最近更新时间和累计分析次数;不返回分析正文 content。",
|
|
300
|
+
parameters: QueryStockAiAnalysisStocksParamsSchema,
|
|
301
|
+
registerTool: false,
|
|
302
|
+
async execute(params, ctx) {
|
|
303
|
+
const args = QueryStockAiAnalysisStocksParamsSchema.parse(params ?? {});
|
|
304
|
+
const db = getDB();
|
|
305
|
+
const { rows, total } = queryStockAnalysisStocks(db, resolveToolUserId(ctx), args.market, args.page, args.pageSize);
|
|
306
|
+
return JSON.stringify({
|
|
307
|
+
success: true,
|
|
308
|
+
data: rows,
|
|
309
|
+
pagination: {
|
|
310
|
+
page: args.page,
|
|
311
|
+
pageSize: args.pageSize,
|
|
312
|
+
total,
|
|
313
|
+
totalPages: Math.ceil(total / args.pageSize)
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
},
|
|
318
|
+
get_stock_ai_analysis_detail: {
|
|
319
|
+
name: "get_stock_ai_analysis_detail",
|
|
320
|
+
description: "根据分析记录 ID 查询股票 AI 分析详情。返回指定记录的完整分析内容 content 及元数据,用于详情页展示或历史记录回放。",
|
|
321
|
+
parameters: GetStockAiAnalysisDetailParamsSchema,
|
|
322
|
+
registerTool: false,
|
|
323
|
+
async execute(params, ctx) {
|
|
324
|
+
const args = GetStockAiAnalysisDetailParamsSchema.parse(params);
|
|
325
|
+
const db = getDB();
|
|
326
|
+
const data = selectStockAnalysisDetail(db, args.id);
|
|
327
|
+
return JSON.stringify({ success: true, data: data || null });
|
|
328
|
+
}
|
|
329
|
+
},
|
|
330
|
+
build_stock_ai_analysis_message: {
|
|
331
|
+
name: "build_stock_ai_analysis_message",
|
|
332
|
+
label: "构建个股分析消息",
|
|
333
|
+
description: "根据股票代码、名称和市场构建用于主动 RPC 发起 Agent 个股 AI 分析任务的标准消息。该工具只返回提示词消息体,不触发定时任务,也不保存分析结果。",
|
|
334
|
+
parameters: BuildStockAiAnalysisMessageAgentToolSchema,
|
|
335
|
+
registerTool: false,
|
|
336
|
+
async execute(params, ctx) {
|
|
337
|
+
const args = BuildStockAiAnalysisMessageParamsSchema.parse(params);
|
|
338
|
+
const db = getDB();
|
|
339
|
+
const userId = resolveToolUserId(ctx);
|
|
340
|
+
const stock_code = normalizeStockCode(args.stock_code);
|
|
341
|
+
const generating = selectLatestGeneratingStockAnalysis(db, userId, stock_code, args.market);
|
|
342
|
+
if (generating) {
|
|
343
|
+
return JSON.stringify({
|
|
344
|
+
success: true,
|
|
345
|
+
skipped: true,
|
|
346
|
+
reason: "already_generating",
|
|
347
|
+
data: generating
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
const message = buildStockAiAnalysisMessage({ ...args, stock_code });
|
|
351
|
+
return JSON.stringify({
|
|
352
|
+
success: true,
|
|
353
|
+
data: {
|
|
354
|
+
message,
|
|
355
|
+
payload: JSON.parse(message),
|
|
356
|
+
stock_code,
|
|
357
|
+
saveParams: {
|
|
358
|
+
stock_code,
|
|
359
|
+
stock_name: args.stock_name,
|
|
360
|
+
market: args.market
|
|
361
|
+
},
|
|
362
|
+
skill: STOCK_AI_ANALYSIS_SKILL
|
|
363
|
+
}
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
},
|
|
101
367
|
save_stock_ai_analysis: {
|
|
102
368
|
name: "save_stock_ai_analysis",
|
|
103
|
-
description:
|
|
369
|
+
description: [
|
|
370
|
+
"保存个股 AI 分析结果。生成前必须先以 status=generating、content=\"\" 调用,并传入 stock_code、stock_name、market;生成成功后以 status=completed 保存完整正文 content;生成失败后以 status=failed 保存完整错误信息。",
|
|
371
|
+
"个股分析的 cw_output 需要包含图表相关要求:",
|
|
372
|
+
CHART_OUTPUT_GUIDANCE
|
|
373
|
+
].join("\n"),
|
|
104
374
|
parameters: SaveStockAiAnalysisParamsSchema,
|
|
105
|
-
registerTool:
|
|
375
|
+
registerTool: true,
|
|
106
376
|
async execute(params, ctx) {
|
|
107
377
|
const args = SaveStockAiAnalysisParamsSchema.parse(params);
|
|
108
378
|
const db = getDB();
|
|
109
|
-
const
|
|
379
|
+
const userId = resolveToolUserId(ctx);
|
|
380
|
+
if (args.status === "generating") {
|
|
381
|
+
const stock_code = normalizeStockCode(args.stock_code);
|
|
382
|
+
const generating = selectLatestGeneratingStockAnalysis(db, userId, stock_code, args.market);
|
|
383
|
+
if (generating) {
|
|
384
|
+
return JSON.stringify({ success: true, skipped: true, reason: "already_generating", data: generating });
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
const data = saveStockAiAnalysisRecord(db, userId, args);
|
|
110
388
|
return JSON.stringify({ success: true, data });
|
|
111
389
|
}
|
|
112
390
|
},
|
|
113
391
|
get_article_ai_analysis: {
|
|
114
392
|
name: "get_article_ai_analysis",
|
|
115
|
-
description: "
|
|
393
|
+
description: "根据资讯来源 ID 查询文章 AI 分析详情。支持信息求证和深度推演两类结果,返回完整 content;该接口仅读取已持久化数据,不触发新的模型生成流程。",
|
|
116
394
|
parameters: GetArticleAiAnalysisParamsSchema,
|
|
117
395
|
registerTool: false,
|
|
118
396
|
async execute(params, ctx) {
|
|
119
397
|
const args = GetArticleAiAnalysisParamsSchema.parse(params);
|
|
120
398
|
const db = getDB();
|
|
121
|
-
const data = selectLatestArticleAnalysis(db, ctx
|
|
399
|
+
const data = selectLatestArticleAnalysis(db, resolveToolUserId(ctx), args.sourceId, args.analysisType, args.market);
|
|
122
400
|
return JSON.stringify({ success: true, data: data || null });
|
|
123
401
|
}
|
|
124
402
|
},
|
|
125
|
-
|
|
126
|
-
name: "
|
|
127
|
-
description: "
|
|
128
|
-
parameters:
|
|
403
|
+
query_article_ai_analysis_history: {
|
|
404
|
+
name: "query_article_ai_analysis_history",
|
|
405
|
+
description: "分页查询文章 AI 分析记录列表。支持按分析类型过滤,返回记录标识、sourceId、状态和时间字段;列表结果不包含 content,详情内容请按 sourceId 查询。",
|
|
406
|
+
parameters: QueryArticleAiAnalysisHistoryParamsSchema,
|
|
129
407
|
registerTool: false,
|
|
408
|
+
async execute(params, ctx) {
|
|
409
|
+
const args = QueryArticleAiAnalysisHistoryParamsSchema.parse(params ?? {});
|
|
410
|
+
const db = getDB();
|
|
411
|
+
const userId = resolveToolUserId(ctx);
|
|
412
|
+
const table = tableForArticleAnalysis(args.analysisType);
|
|
413
|
+
const offset = (args.page - 1) * args.pageSize;
|
|
414
|
+
const marketCondition = args.analysisType === "deduction" ? " AND market = ?" : "";
|
|
415
|
+
const queryParams = args.analysisType === "deduction"
|
|
416
|
+
? [args.analysisType, userId, args.market, args.pageSize, offset]
|
|
417
|
+
: [args.analysisType, userId, args.pageSize, offset];
|
|
418
|
+
const rows = db.prepare(`
|
|
419
|
+
SELECT id, sourceId, ? AS analysisType, sourceTitle, ${args.analysisType === "deduction" ? "market," : ""} status, createdAt, updatedAt
|
|
420
|
+
FROM ${table}
|
|
421
|
+
WHERE userId = ?${marketCondition}
|
|
422
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
423
|
+
LIMIT ? OFFSET ?
|
|
424
|
+
`).all(...queryParams);
|
|
425
|
+
const countParams = args.analysisType === "deduction" ? [userId, args.market] : [userId];
|
|
426
|
+
const countRow = db.prepare(`
|
|
427
|
+
SELECT COUNT(*) AS total
|
|
428
|
+
FROM ${table}
|
|
429
|
+
WHERE userId = ?${marketCondition}
|
|
430
|
+
`).get(...countParams);
|
|
431
|
+
const total = countRow.total || 0;
|
|
432
|
+
return JSON.stringify({
|
|
433
|
+
success: true,
|
|
434
|
+
data: rows,
|
|
435
|
+
pagination: {
|
|
436
|
+
page: args.page,
|
|
437
|
+
pageSize: args.pageSize,
|
|
438
|
+
total,
|
|
439
|
+
totalPages: Math.ceil(total / args.pageSize)
|
|
440
|
+
}
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
},
|
|
444
|
+
save_information_verification: {
|
|
445
|
+
name: "save_information_verification",
|
|
446
|
+
description: "保存新闻信息求证结果。生成前必须先以 status=generating、content=\"\" 调用,并传入 sourceId、sourceTitle;生成成功后以 status=completed 保存完整正文 content;生成失败后以 status=failed 保存完整错误信息。",
|
|
447
|
+
parameters: SaveArticleAiAnalysisParamsSchema,
|
|
448
|
+
registerTool: true,
|
|
130
449
|
async execute(params, ctx) {
|
|
131
450
|
const args = SaveArticleAiAnalysisParamsSchema.parse(params);
|
|
132
451
|
const db = getDB();
|
|
133
|
-
const
|
|
452
|
+
const userId = resolveToolUserId(ctx);
|
|
453
|
+
if (args.status === "generating") {
|
|
454
|
+
const generating = selectLatestGeneratingArticleAnalysis(db, userId, args.sourceId, "verification");
|
|
455
|
+
if (generating) {
|
|
456
|
+
return JSON.stringify({ success: true, skipped: true, reason: "already_generating", data: generating });
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
const data = saveArticleAiAnalysisRecord(db, userId, args);
|
|
460
|
+
return JSON.stringify({ success: true, data });
|
|
461
|
+
}
|
|
462
|
+
},
|
|
463
|
+
save_article_deep_reasoning_analysis: {
|
|
464
|
+
name: "save_article_deep_reasoning_analysis",
|
|
465
|
+
description: "保存新闻深度推演结果。生成前必须先以 status=generating、content=\"\" 调用,并传入 sourceId、sourceTitle、sourceContent、market;生成成功后以 status=completed 保存完整正文 content;生成失败后以 status=failed 保存完整错误信息。",
|
|
466
|
+
parameters: SaveArticleDeepReasoningParamsSchema,
|
|
467
|
+
registerTool: true,
|
|
468
|
+
async execute(params, ctx) {
|
|
469
|
+
const args = SaveArticleDeepReasoningParamsSchema.parse(params);
|
|
470
|
+
const db = getDB();
|
|
471
|
+
const userId = resolveToolUserId(ctx);
|
|
472
|
+
if (args.status === "generating") {
|
|
473
|
+
const generating = selectLatestGeneratingArticleAnalysis(db, userId, args.sourceId, "deduction");
|
|
474
|
+
if (generating) {
|
|
475
|
+
return JSON.stringify({ success: true, skipped: true, reason: "already_generating", data: generating });
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
const data = saveArticleDeepReasoningRecord(db, userId, args);
|
|
134
479
|
return JSON.stringify({ success: true, data });
|
|
135
480
|
}
|
|
136
481
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../../src/features/stockAnalysis/tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../../src/features/stockAnalysis/tools.ts"],"names":[],"mappings":"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"}
|