@hedgehog-finance/hedgehog-plugin 1.0.27 → 1.0.28
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/src/features/deepReasoning/tools.js +64 -17
- package/dist/src/features/deepReasoning/tools.js.map +1 -1
- package/dist/src/features/informationVerification/tools.js +63 -16
- package/dist/src/features/informationVerification/tools.js.map +1 -1
- package/dist/src/features/stockAnalysis/tools.js +63 -40
- package/dist/src/features/stockAnalysis/tools.js.map +1 -1
- package/package.json +1 -1
- package/src/features/deepReasoning/tools.ts +67 -17
- package/src/features/informationVerification/tools.ts +66 -16
- package/src/features/stockAnalysis/tools.ts +66 -41
|
@@ -57,35 +57,83 @@ function buildDeepReasoningMessage(args) {
|
|
|
57
57
|
].join("\n")
|
|
58
58
|
});
|
|
59
59
|
}
|
|
60
|
-
function selectGeneratingDeepReasoning(
|
|
60
|
+
function selectGeneratingDeepReasoning(sourceId, market, sessionId) {
|
|
61
61
|
const db = getDB();
|
|
62
|
+
const normalizedSessionId = sessionId?.trim() || "";
|
|
63
|
+
if (normalizedSessionId) {
|
|
64
|
+
const bySession = db.prepare(`
|
|
65
|
+
SELECT id, sourceId, sourceTitle, market, sessionId, status, content, createdAt, updatedAt
|
|
66
|
+
FROM news_deep_reasoning_analysis
|
|
67
|
+
WHERE sourceId = ? AND market = ? AND sessionId = ? AND status = 'generating'
|
|
68
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
69
|
+
LIMIT 1
|
|
70
|
+
`).get(sourceId, market, normalizedSessionId);
|
|
71
|
+
if (bySession)
|
|
72
|
+
return bySession;
|
|
73
|
+
}
|
|
74
|
+
return db.prepare(`
|
|
75
|
+
SELECT id, sourceId, sourceTitle, market, sessionId, status, content, createdAt, updatedAt
|
|
76
|
+
FROM news_deep_reasoning_analysis
|
|
77
|
+
WHERE sourceId = ? AND market = ? AND status = 'generating'
|
|
78
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
79
|
+
LIMIT 1
|
|
80
|
+
`).get(sourceId, market);
|
|
81
|
+
}
|
|
82
|
+
function selectDeepReasoningForUpdate(sourceId, market, sessionId) {
|
|
83
|
+
const db = getDB();
|
|
84
|
+
if (sessionId) {
|
|
85
|
+
const bySession = db.prepare(`
|
|
86
|
+
SELECT id, sourceId, sourceTitle, market, sessionId, status, content, createdAt, updatedAt
|
|
87
|
+
FROM news_deep_reasoning_analysis
|
|
88
|
+
WHERE sourceId = ? AND market = ? AND sessionId = ?
|
|
89
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
90
|
+
LIMIT 1
|
|
91
|
+
`).get(sourceId, market, sessionId);
|
|
92
|
+
if (bySession)
|
|
93
|
+
return bySession;
|
|
94
|
+
}
|
|
95
|
+
const generating = selectGeneratingDeepReasoning(sourceId, market);
|
|
96
|
+
if (generating)
|
|
97
|
+
return generating;
|
|
62
98
|
return db.prepare(`
|
|
63
|
-
SELECT id, sourceId, sourceTitle, sessionId, status, content, createdAt, updatedAt
|
|
99
|
+
SELECT id, sourceId, sourceTitle, market, sessionId, status, content, createdAt, updatedAt
|
|
64
100
|
FROM news_deep_reasoning_analysis
|
|
65
|
-
WHERE
|
|
101
|
+
WHERE sourceId = ? AND market = ?
|
|
66
102
|
ORDER BY updatedAt DESC, createdAt DESC
|
|
67
103
|
LIMIT 1
|
|
68
|
-
`).get(
|
|
104
|
+
`).get(sourceId, market);
|
|
69
105
|
}
|
|
70
106
|
function saveDeepReasoningRecord(userId, args) {
|
|
71
107
|
const db = getDB();
|
|
72
108
|
const id = randomUUID();
|
|
73
109
|
const sessionId = args.sessionId?.trim() || "";
|
|
110
|
+
const existing = selectDeepReasoningForUpdate(args.sourceId, args.market, sessionId);
|
|
111
|
+
if (existing) {
|
|
112
|
+
const sourceTitle = args.sourceTitle.trim() || existing.sourceTitle || "";
|
|
113
|
+
db.prepare(`
|
|
114
|
+
UPDATE news_deep_reasoning_analysis
|
|
115
|
+
SET sourceTitle = ?,
|
|
116
|
+
sessionId = CASE WHEN ? != '' THEN ? ELSE sessionId END,
|
|
117
|
+
status = ?,
|
|
118
|
+
content = ?,
|
|
119
|
+
updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')
|
|
120
|
+
WHERE id = ?
|
|
121
|
+
`).run(sourceTitle, sessionId, sessionId, args.status, args.content, existing.id);
|
|
122
|
+
return db.prepare(`
|
|
123
|
+
SELECT id, sourceId, 'deduction' AS analysisType, sourceTitle, market, sessionId, status, content, createdAt, updatedAt
|
|
124
|
+
FROM news_deep_reasoning_analysis
|
|
125
|
+
WHERE id = ?
|
|
126
|
+
`).get(existing.id);
|
|
127
|
+
}
|
|
74
128
|
db.prepare(`
|
|
75
129
|
INSERT INTO news_deep_reasoning_analysis (id, sourceId, sourceTitle, userId, market, sessionId, status, content)
|
|
76
130
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
77
|
-
ON CONFLICT(sourceId, userId, market) DO UPDATE SET
|
|
78
|
-
sourceTitle = CASE WHEN excluded.sourceTitle != '' THEN excluded.sourceTitle ELSE news_deep_reasoning_analysis.sourceTitle END,
|
|
79
|
-
sessionId = CASE WHEN excluded.sessionId != '' THEN excluded.sessionId ELSE news_deep_reasoning_analysis.sessionId END,
|
|
80
|
-
status = excluded.status,
|
|
81
|
-
content = excluded.content,
|
|
82
|
-
updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')
|
|
83
131
|
`).run(id, args.sourceId, args.sourceTitle, userId, args.market, sessionId, args.status, args.content);
|
|
84
132
|
return db.prepare(`
|
|
85
133
|
SELECT id, sourceId, 'deduction' AS analysisType, sourceTitle, market, sessionId, status, content, createdAt, updatedAt
|
|
86
134
|
FROM news_deep_reasoning_analysis
|
|
87
|
-
WHERE
|
|
88
|
-
`).get(
|
|
135
|
+
WHERE id = ?
|
|
136
|
+
`).get(id);
|
|
89
137
|
}
|
|
90
138
|
export const deepReasoningTools = {
|
|
91
139
|
query_deep_reasoning_history: {
|
|
@@ -161,10 +209,10 @@ export const deepReasoningTools = {
|
|
|
161
209
|
const row = db.prepare(`
|
|
162
210
|
SELECT id, sourceId, sourceTitle, market, sessionId, status, createdAt, updatedAt
|
|
163
211
|
FROM news_deep_reasoning_analysis
|
|
164
|
-
WHERE
|
|
212
|
+
WHERE sessionId = ? AND sourceId = ?
|
|
165
213
|
ORDER BY updatedAt DESC, createdAt DESC
|
|
166
214
|
LIMIT 1
|
|
167
|
-
`).get(
|
|
215
|
+
`).get(args.sessionId, args.sourceId);
|
|
168
216
|
return JSON.stringify({ success: true, data: row || null });
|
|
169
217
|
}
|
|
170
218
|
},
|
|
@@ -176,8 +224,7 @@ export const deepReasoningTools = {
|
|
|
176
224
|
registerTool: false,
|
|
177
225
|
async execute(params, ctx) {
|
|
178
226
|
const args = BuildDeepReasoningMessageParamsSchema.parse(params);
|
|
179
|
-
const
|
|
180
|
-
const generating = selectGeneratingDeepReasoning(userId, args.newsId);
|
|
227
|
+
const generating = selectGeneratingDeepReasoning(args.newsId, "CN", args.sessionId);
|
|
181
228
|
if (generating) {
|
|
182
229
|
return JSON.stringify({
|
|
183
230
|
success: true,
|
|
@@ -213,7 +260,7 @@ export const deepReasoningTools = {
|
|
|
213
260
|
const args = SaveDeepReasoningParamsSchema.parse(params);
|
|
214
261
|
const userId = ctx?.userId || "default";
|
|
215
262
|
if (args.status === "generating") {
|
|
216
|
-
const generating = selectGeneratingDeepReasoning(
|
|
263
|
+
const generating = selectGeneratingDeepReasoning(args.sourceId, args.market, args.sessionId);
|
|
217
264
|
if (generating) {
|
|
218
265
|
return JSON.stringify({ success: true, skipped: true, reason: "already_generating", data: generating });
|
|
219
266
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../../src/features/deepReasoning/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAEN,qCAAqC,EACrC,2CAA2C,EAC3C,kCAAkC,EAClC,qCAAqC,EACrC,6BAA6B,EAC7B,MAAM,aAAa,CAAC;AAWrB,MAAM,oBAAoB,GAAG,8BAA8B,CAAC;AAE5D,MAAM,wCAAwC,GAAG;IAChD,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,QAAQ,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,eAAe,CAAC;IACpD,UAAU,EAAE;QACX,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;QAC1D,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;QACpD,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;QACtD,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;KACxD;CACD,CAAC;AAEF,SAAS,YAAY,CAAC,IAAqC;IAC1D,OAAO;QACN,aAAa;QACb,EAAE;QACF,QAAQ,IAAI,CAAC,WAAW,EAAE;QAC1B,EAAE;QACF,OAAO;QACP,IAAI,CAAC,aAAa;KAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAqC;IACvE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;IACvC,MAAM,yBAAyB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;QACtD,QAAQ,EAAE,IAAI,CAAC,MAAM;QACrB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,SAAS;QACT,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,EAAE;KACX,CAAC,CAAC;IACH,MAAM,oBAAoB,GAAG,CAAC,MAA8B,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;QAC/E,QAAQ,EAAE,IAAI,CAAC,MAAM;QACrB,SAAS;QACT,MAAM;QACN,OAAO,EAAE,KAAK;KACd,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,SAAS,CAAC;QACrB,gBAAgB,EAAE;YACjB,uDAAuD,yBAAyB,EAAE,+CAA+C;YACjI,wHAAwH;YACxH,WAAW,oBAAoB,sBAAsB;YACrD,sDAAsD,oBAAoB,CAAC,WAAW,CAAC,yBAAyB;YAChH,sDAAsD,oBAAoB,CAAC,QAAQ,CAAC,oBAAoB;SACxG,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC;YAC1B,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS;SACT,CAAC;QACF,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC;QAC9B,SAAS,EAAE;YACV,SAAS,oBAAoB,iBAAiB;SAC9C,CAAC,IAAI,CAAC,IAAI,CAAC;KACZ,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CAAC,MAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../../src/features/deepReasoning/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAEN,qCAAqC,EACrC,2CAA2C,EAC3C,kCAAkC,EAClC,qCAAqC,EACrC,6BAA6B,EAC7B,MAAM,aAAa,CAAC;AAWrB,MAAM,oBAAoB,GAAG,8BAA8B,CAAC;AAE5D,MAAM,wCAAwC,GAAG;IAChD,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,QAAQ,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,eAAe,CAAC;IACpD,UAAU,EAAE;QACX,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;QAC1D,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;QACpD,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;QACtD,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;KACxD;CACD,CAAC;AAEF,SAAS,YAAY,CAAC,IAAqC;IAC1D,OAAO;QACN,aAAa;QACb,EAAE;QACF,QAAQ,IAAI,CAAC,WAAW,EAAE;QAC1B,EAAE;QACF,OAAO;QACP,IAAI,CAAC,aAAa;KAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAqC;IACvE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;IACvC,MAAM,yBAAyB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;QACtD,QAAQ,EAAE,IAAI,CAAC,MAAM;QACrB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,SAAS;QACT,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,EAAE;KACX,CAAC,CAAC;IACH,MAAM,oBAAoB,GAAG,CAAC,MAA8B,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;QAC/E,QAAQ,EAAE,IAAI,CAAC,MAAM;QACrB,SAAS;QACT,MAAM;QACN,OAAO,EAAE,KAAK;KACd,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,SAAS,CAAC;QACrB,gBAAgB,EAAE;YACjB,uDAAuD,yBAAyB,EAAE,+CAA+C;YACjI,wHAAwH;YACxH,WAAW,oBAAoB,sBAAsB;YACrD,sDAAsD,oBAAoB,CAAC,WAAW,CAAC,yBAAyB;YAChH,sDAAsD,oBAAoB,CAAC,QAAQ,CAAC,oBAAoB;SACxG,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC;YAC1B,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS;SACT,CAAC;QACF,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC;QAC9B,SAAS,EAAE;YACV,SAAS,oBAAoB,iBAAiB;SAC9C,CAAC,IAAI,CAAC,IAAI,CAAC;KACZ,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CAAC,QAAgB,EAAE,MAAc,EAAE,SAAkB;IAC1F,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,mBAAmB,GAAG,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACpD,IAAI,mBAAmB,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;GAM5B,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC;QAC9C,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;IACjC,CAAC;IAED,OAAO,EAAE,CAAC,OAAO,CAAC;;;;;;EAMjB,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,4BAA4B,CAAC,QAAgB,EAAE,MAAc,EAAE,SAAiB;IACxF,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,IAAI,SAAS,EAAE,CAAC;QACf,MAAM,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;GAM5B,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACpC,IAAI,SAAS;YAAE,OAAO,SAAgD,CAAC;IACxE,CAAC;IAED,MAAM,UAAU,GAAG,6BAA6B,CAAC,QAAQ,EAAE,MAAM,CAAoD,CAAC;IACtH,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAElC,OAAO,EAAE,CAAC,OAAO,CAAC;;;;;;EAMjB,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAoD,CAAC;AAC7E,CAAC;AAED,SAAS,uBAAuB,CAC/B,MAAc,EACd,IAOC;IAED,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAG,4BAA4B,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAErF,IAAI,QAAQ,EAAE,CAAC;QACd,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;QAC1E,EAAE,CAAC,OAAO,CAAC;;;;;;;;GAQV,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAElF,OAAO,EAAE,CAAC,OAAO,CAAC;;;;GAIjB,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC;IAED,EAAE,CAAC,OAAO,CAAC;;;EAGV,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAEvG,OAAO,EAAE,CAAC,OAAO,CAAC;;;;EAIjB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACZ,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAgC;IAC9D,4BAA4B,EAAE;QAC7B,IAAI,EAAE,8BAA8B;QACpC,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,0FAA0F;QACvG,UAAU,EAAE,qCAAqC;QACjD,YAAY,EAAE,KAAK;QACnB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;YACxB,MAAM,IAAI,GAAG,qCAAqC,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YACvE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/C,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;IAKvB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9B,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC;;IAE3B,CAAC,CAAC,GAAG,EAAuB,CAAC;YAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC,SAAS,CAAC;gBACrB,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,IAAI;gBACV,UAAU,EAAE;oBACX,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,KAAK;oBACL,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;iBAC5C;aACD,CAAC,CAAC;QACJ,CAAC;KACD;IACD,yBAAyB,EAAE;QAC1B,IAAI,EAAE,2BAA2B;QACjC,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,oDAAoD;QACjE,UAAU,EAAE,kCAAkC;QAC9C,YAAY,EAAE,KAAK;QACnB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;YACxB,MAAM,IAAI,GAAG,kCAAkC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC9D,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;KAMtB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;YAC7D,CAAC;YACD,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;IAMtB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;KACD;IACD,oCAAoC,EAAE;QACrC,IAAI,EAAE,sCAAsC;QAC5C,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,qDAAqD;QAClE,UAAU,EAAE,2CAA2C;QACvD,YAAY,EAAE,KAAK;QACnB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;YACxB,MAAM,IAAI,GAAG,2CAA2C,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACvE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;IAMtB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;KACD;IACD,4BAA4B,EAAE;QAC7B,IAAI,EAAE,8BAA8B;QACpC,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,+EAA+E;QAC5F,UAAU,EAAE,wCAAwC;QACpD,YAAY,EAAE,KAAK;QACnB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;YACxB,MAAM,IAAI,GAAG,qCAAqC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACjE,MAAM,UAAU,GAAG,6BAA6B,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACpF,IAAI,UAAU,EAAE,CAAC;gBAChB,OAAO,IAAI,CAAC,SAAS,CAAC;oBACrB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,oBAAoB;oBAC5B,IAAI,EAAE,UAAU;iBAChB,CAAC,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC,SAAS,CAAC;gBACrB,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACL,OAAO;oBACP,OAAO;oBACP,QAAQ,EAAE,IAAI,CAAC,MAAM;oBACrB,UAAU,EAAE;wBACX,QAAQ,EAAE,IAAI,CAAC,MAAM;wBACrB,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;qBAC/B;oBACD,KAAK,EAAE,oBAAoB;iBAC3B;aACD,CAAC,CAAC;QACJ,CAAC;KACD;IACD,oCAAoC,EAAE;QACrC,IAAI,EAAE,sCAAsC;QAC5C,WAAW,EAAE,0KAA0K;QACvL,UAAU,EAAE,6BAA6B;QACzC,YAAY,EAAE,IAAI;QAClB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;YACxB,MAAM,IAAI,GAAG,6BAA6B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,GAAG,EAAE,MAAM,IAAI,SAAS,CAAC;YACxC,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;gBAClC,MAAM,UAAU,GAAG,6BAA6B,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC7F,IAAI,UAAU,EAAE,CAAC;oBAChB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;gBACzG,CAAC;YACF,CAAC;YACD,MAAM,IAAI,GAAG,uBAAuB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;KACD;CACD,CAAC"}
|
|
@@ -56,35 +56,83 @@ function buildInformationVerificationMessage(args) {
|
|
|
56
56
|
].join("\n")
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
|
-
function selectGeneratingInformationVerification(
|
|
59
|
+
function selectGeneratingInformationVerification(sourceId, sessionId) {
|
|
60
60
|
const db = getDB();
|
|
61
|
+
const normalizedSessionId = sessionId?.trim() || "";
|
|
62
|
+
if (normalizedSessionId) {
|
|
63
|
+
const bySession = db.prepare(`
|
|
64
|
+
SELECT id, sourceId, sourceTitle, sessionId, status, content, createdAt, updatedAt
|
|
65
|
+
FROM news_fact_check_analysis
|
|
66
|
+
WHERE sourceId = ? AND sessionId = ? AND status = 'generating'
|
|
67
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
68
|
+
LIMIT 1
|
|
69
|
+
`).get(sourceId, normalizedSessionId);
|
|
70
|
+
if (bySession)
|
|
71
|
+
return bySession;
|
|
72
|
+
}
|
|
61
73
|
return db.prepare(`
|
|
62
74
|
SELECT id, sourceId, sourceTitle, sessionId, status, content, createdAt, updatedAt
|
|
63
75
|
FROM news_fact_check_analysis
|
|
64
|
-
WHERE
|
|
76
|
+
WHERE sourceId = ? AND status = 'generating'
|
|
65
77
|
ORDER BY updatedAt DESC, createdAt DESC
|
|
66
78
|
LIMIT 1
|
|
67
|
-
`).get(
|
|
79
|
+
`).get(sourceId);
|
|
80
|
+
}
|
|
81
|
+
function selectInformationVerificationForUpdate(sourceId, sessionId) {
|
|
82
|
+
const db = getDB();
|
|
83
|
+
if (sessionId) {
|
|
84
|
+
const bySession = db.prepare(`
|
|
85
|
+
SELECT id, sourceId, sourceTitle, sessionId, status, content, createdAt, updatedAt
|
|
86
|
+
FROM news_fact_check_analysis
|
|
87
|
+
WHERE sourceId = ? AND sessionId = ?
|
|
88
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
89
|
+
LIMIT 1
|
|
90
|
+
`).get(sourceId, sessionId);
|
|
91
|
+
if (bySession)
|
|
92
|
+
return bySession;
|
|
93
|
+
}
|
|
94
|
+
const generating = selectGeneratingInformationVerification(sourceId);
|
|
95
|
+
if (generating)
|
|
96
|
+
return generating;
|
|
97
|
+
return db.prepare(`
|
|
98
|
+
SELECT id, sourceId, sourceTitle, sessionId, status, content, createdAt, updatedAt
|
|
99
|
+
FROM news_fact_check_analysis
|
|
100
|
+
WHERE sourceId = ?
|
|
101
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
102
|
+
LIMIT 1
|
|
103
|
+
`).get(sourceId);
|
|
68
104
|
}
|
|
69
105
|
function saveInformationVerificationRecord(userId, args) {
|
|
70
106
|
const db = getDB();
|
|
71
107
|
const id = randomUUID();
|
|
72
108
|
const sessionId = args.sessionId?.trim() || "";
|
|
109
|
+
const existing = selectInformationVerificationForUpdate(args.sourceId, sessionId);
|
|
110
|
+
if (existing) {
|
|
111
|
+
const sourceTitle = args.sourceTitle.trim() || existing.sourceTitle || "";
|
|
112
|
+
db.prepare(`
|
|
113
|
+
UPDATE news_fact_check_analysis
|
|
114
|
+
SET sourceTitle = ?,
|
|
115
|
+
sessionId = CASE WHEN ? != '' THEN ? ELSE sessionId END,
|
|
116
|
+
status = ?,
|
|
117
|
+
content = ?,
|
|
118
|
+
updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')
|
|
119
|
+
WHERE id = ?
|
|
120
|
+
`).run(sourceTitle, sessionId, sessionId, args.status, args.content, existing.id);
|
|
121
|
+
return db.prepare(`
|
|
122
|
+
SELECT id, sourceId, 'verification' AS analysisType, sourceTitle, sessionId, status, content, createdAt, updatedAt
|
|
123
|
+
FROM news_fact_check_analysis
|
|
124
|
+
WHERE id = ?
|
|
125
|
+
`).get(existing.id);
|
|
126
|
+
}
|
|
73
127
|
db.prepare(`
|
|
74
128
|
INSERT INTO news_fact_check_analysis (id, sourceId, sourceTitle, userId, sessionId, status, content)
|
|
75
129
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
76
|
-
ON CONFLICT(sourceId, userId) DO UPDATE SET
|
|
77
|
-
sourceTitle = CASE WHEN excluded.sourceTitle != '' THEN excluded.sourceTitle ELSE news_fact_check_analysis.sourceTitle END,
|
|
78
|
-
sessionId = CASE WHEN excluded.sessionId != '' THEN excluded.sessionId ELSE news_fact_check_analysis.sessionId END,
|
|
79
|
-
status = excluded.status,
|
|
80
|
-
content = excluded.content,
|
|
81
|
-
updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')
|
|
82
130
|
`).run(id, args.sourceId, args.sourceTitle, userId, sessionId, args.status, args.content);
|
|
83
131
|
return db.prepare(`
|
|
84
132
|
SELECT id, sourceId, 'verification' AS analysisType, sourceTitle, sessionId, status, content, createdAt, updatedAt
|
|
85
133
|
FROM news_fact_check_analysis
|
|
86
|
-
WHERE
|
|
87
|
-
`).get(
|
|
134
|
+
WHERE id = ?
|
|
135
|
+
`).get(id);
|
|
88
136
|
}
|
|
89
137
|
export const informationVerificationTools = {
|
|
90
138
|
query_information_verification_history: {
|
|
@@ -160,10 +208,10 @@ export const informationVerificationTools = {
|
|
|
160
208
|
const row = db.prepare(`
|
|
161
209
|
SELECT id, sourceId, sourceTitle, sessionId, status, createdAt, updatedAt
|
|
162
210
|
FROM news_fact_check_analysis
|
|
163
|
-
WHERE
|
|
211
|
+
WHERE sessionId = ? AND sourceId = ?
|
|
164
212
|
ORDER BY updatedAt DESC, createdAt DESC
|
|
165
213
|
LIMIT 1
|
|
166
|
-
`).get(
|
|
214
|
+
`).get(args.sessionId, args.sourceId);
|
|
167
215
|
return JSON.stringify({ success: true, data: row || null });
|
|
168
216
|
}
|
|
169
217
|
},
|
|
@@ -175,8 +223,7 @@ export const informationVerificationTools = {
|
|
|
175
223
|
registerTool: false,
|
|
176
224
|
async execute(params, ctx) {
|
|
177
225
|
const args = BuildInformationVerificationMessageParamsSchema.parse(params);
|
|
178
|
-
const
|
|
179
|
-
const generating = selectGeneratingInformationVerification(userId, args.newsId);
|
|
226
|
+
const generating = selectGeneratingInformationVerification(args.newsId, args.sessionId);
|
|
180
227
|
if (generating) {
|
|
181
228
|
return JSON.stringify({
|
|
182
229
|
success: true,
|
|
@@ -212,7 +259,7 @@ export const informationVerificationTools = {
|
|
|
212
259
|
const args = SaveInformationVerificationParamsSchema.parse(params);
|
|
213
260
|
const userId = ctx?.userId || "default";
|
|
214
261
|
if (args.status === "generating") {
|
|
215
|
-
const generating = selectGeneratingInformationVerification(
|
|
262
|
+
const generating = selectGeneratingInformationVerification(args.sourceId, args.sessionId);
|
|
216
263
|
if (generating) {
|
|
217
264
|
return JSON.stringify({ success: true, skipped: true, reason: "already_generating", data: generating });
|
|
218
265
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../../src/features/informationVerification/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAEN,+CAA+C,EAC/C,qDAAqD,EACrD,4CAA4C,EAC5C,+CAA+C,EAC/C,uCAAuC,EACvC,MAAM,aAAa,CAAC;AAWrB,MAAM,8BAA8B,GAAG,mCAAmC,CAAC;AAE3E,MAAM,kDAAkD,GAAG;IAC1D,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,QAAQ,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,eAAe,CAAC;IACpD,UAAU,EAAE;QACX,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE;QAC1D,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;QACpD,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;QACtD,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;KACxD;CACD,CAAC;AAEF,SAAS,YAAY,CAAC,IAA+C;IACpE,OAAO;QACN,aAAa;QACb,EAAE;QACF,QAAQ,IAAI,CAAC,WAAW,EAAE;QAC1B,EAAE;QACF,OAAO;QACP,IAAI,CAAC,aAAa;KAClB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,CAAC;AAED,SAAS,mCAAmC,CAAC,IAA+C;IAC3F,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;IACvC,MAAM,yBAAyB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;QACtD,QAAQ,EAAE,IAAI,CAAC,MAAM;QACrB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,SAAS;QACT,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,EAAE;KACX,CAAC,CAAC;IACH,MAAM,oBAAoB,GAAG,CAAC,MAA8B,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;QAC/E,QAAQ,EAAE,IAAI,CAAC,MAAM;QACrB,SAAS;QACT,MAAM;QACN,OAAO,EAAE,KAAK;KACd,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,SAAS,CAAC;QACrB,gBAAgB,EAAE;YACjB,gDAAgD,yBAAyB,EAAE,+CAA+C;YAC1H,WAAW,8BAA8B,wBAAwB;YACjE,+CAA+C,oBAAoB,CAAC,WAAW,CAAC,uBAAuB;YACvG,+CAA+C,oBAAoB,CAAC,QAAQ,CAAC,oBAAoB;SACjG,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC;YAC1B,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,SAAS;SACT,CAAC;QACF,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC;QAC9B,SAAS,EAAE;YACV,SAAS,8BAA8B,iBAAiB;SACxD,CAAC,IAAI,CAAC,IAAI,CAAC;KACZ,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,uCAAuC,CAAC,
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../../src/features/informationVerification/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -82,14 +82,40 @@ function selectLatestStockAnalysis(db, stock_code, market) {
|
|
|
82
82
|
LIMIT 1
|
|
83
83
|
`).get(stock_code, market);
|
|
84
84
|
}
|
|
85
|
-
function selectLatestGeneratingStockAnalysis(db,
|
|
85
|
+
function selectLatestGeneratingStockAnalysis(db, stock_code, market, sessionId) {
|
|
86
|
+
const normalizedSessionId = sessionId?.trim() || "";
|
|
87
|
+
if (normalizedSessionId) {
|
|
88
|
+
const bySession = db.prepare(`
|
|
89
|
+
SELECT id, stock_code, stock_name, market, sessionId, status, content, createdAt, updatedAt
|
|
90
|
+
FROM stock_ai_analysis
|
|
91
|
+
WHERE stock_code = ? AND market = ? AND sessionId = ? AND status = 'generating'
|
|
92
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
93
|
+
LIMIT 1
|
|
94
|
+
`).get(stock_code, market, normalizedSessionId);
|
|
95
|
+
if (bySession)
|
|
96
|
+
return bySession;
|
|
97
|
+
}
|
|
86
98
|
return db.prepare(`
|
|
87
99
|
SELECT id, stock_code, stock_name, market, sessionId, status, content, createdAt, updatedAt
|
|
88
100
|
FROM stock_ai_analysis
|
|
89
|
-
WHERE
|
|
101
|
+
WHERE stock_code = ? AND market = ? AND status = 'generating'
|
|
90
102
|
ORDER BY updatedAt DESC, createdAt DESC
|
|
91
103
|
LIMIT 1
|
|
92
|
-
`).get(
|
|
104
|
+
`).get(stock_code, market);
|
|
105
|
+
}
|
|
106
|
+
function selectStockAnalysisForUpdate(db, stock_code, market, sessionId) {
|
|
107
|
+
if (sessionId) {
|
|
108
|
+
const bySession = db.prepare(`
|
|
109
|
+
SELECT id, stock_code, stock_name, market, sessionId, status, content, createdAt, updatedAt
|
|
110
|
+
FROM stock_ai_analysis
|
|
111
|
+
WHERE stock_code = ? AND market = ? AND sessionId = ?
|
|
112
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
113
|
+
LIMIT 1
|
|
114
|
+
`).get(stock_code, market, sessionId);
|
|
115
|
+
if (bySession)
|
|
116
|
+
return bySession;
|
|
117
|
+
}
|
|
118
|
+
return selectLatestGeneratingStockAnalysis(db, stock_code, market);
|
|
93
119
|
}
|
|
94
120
|
function selectStockAnalysisDetail(db, id) {
|
|
95
121
|
return db.prepare(`
|
|
@@ -100,16 +126,16 @@ function selectStockAnalysisDetail(db, id) {
|
|
|
100
126
|
LIMIT 1
|
|
101
127
|
`).get(id);
|
|
102
128
|
}
|
|
103
|
-
function selectStockAnalysisDetailBySession(db,
|
|
129
|
+
function selectStockAnalysisDetailBySession(db, sessionId, stock_code) {
|
|
104
130
|
return db.prepare(`
|
|
105
131
|
SELECT id, stock_code, stock_name, market, sessionId, status, createdAt, updatedAt
|
|
106
132
|
FROM stock_ai_analysis
|
|
107
|
-
WHERE
|
|
133
|
+
WHERE sessionId = ? AND stock_code = ?
|
|
108
134
|
ORDER BY updatedAt DESC, createdAt DESC
|
|
109
135
|
LIMIT 1
|
|
110
|
-
`).get(
|
|
136
|
+
`).get(sessionId, stock_code);
|
|
111
137
|
}
|
|
112
|
-
function queryStockAnalysisStocks(db,
|
|
138
|
+
function queryStockAnalysisStocks(db, market, page, pageSize) {
|
|
113
139
|
const offset = (page - 1) * pageSize;
|
|
114
140
|
const rows = db.prepare(`
|
|
115
141
|
WITH grouped AS (
|
|
@@ -119,7 +145,7 @@ function queryStockAnalysisStocks(db, userId, market, page, pageSize) {
|
|
|
119
145
|
COUNT(*) AS analysisCount,
|
|
120
146
|
MAX(updatedAt || '|' || createdAt || '|' || id) AS latestKey
|
|
121
147
|
FROM stock_ai_analysis
|
|
122
|
-
WHERE
|
|
148
|
+
WHERE market = ?
|
|
123
149
|
GROUP BY stock_code, market
|
|
124
150
|
)
|
|
125
151
|
SELECT
|
|
@@ -136,19 +162,18 @@ function queryStockAnalysisStocks(db, userId, market, page, pageSize) {
|
|
|
136
162
|
ON a.stock_code = g.stock_code
|
|
137
163
|
AND a.market = g.market
|
|
138
164
|
AND (a.updatedAt || '|' || a.createdAt || '|' || a.id) = g.latestKey
|
|
139
|
-
WHERE a.userId = ?
|
|
140
165
|
ORDER BY a.updatedAt DESC, a.createdAt DESC
|
|
141
166
|
LIMIT ? OFFSET ?
|
|
142
|
-
`).all(
|
|
167
|
+
`).all(market, pageSize, offset);
|
|
143
168
|
const countRow = db.prepare(`
|
|
144
169
|
SELECT COUNT(*) AS total
|
|
145
170
|
FROM (
|
|
146
171
|
SELECT 1
|
|
147
172
|
FROM stock_ai_analysis
|
|
148
|
-
WHERE
|
|
173
|
+
WHERE market = ?
|
|
149
174
|
GROUP BY stock_code, market
|
|
150
175
|
)
|
|
151
|
-
`).get(
|
|
176
|
+
`).get(market);
|
|
152
177
|
return { rows, total: countRow.total || 0 };
|
|
153
178
|
}
|
|
154
179
|
export function saveStockAiAnalysisRecord(db, userId, args) {
|
|
@@ -158,18 +183,18 @@ export function saveStockAiAnalysisRecord(db, userId, args) {
|
|
|
158
183
|
const sessionId = args.sessionId?.trim() || "";
|
|
159
184
|
const content = status === "completed" ? ensureChartPlaceholdersInBody(args.content) : args.content.trim();
|
|
160
185
|
const id = randomUUID();
|
|
161
|
-
const
|
|
186
|
+
const existing = status === "generating"
|
|
162
187
|
? undefined
|
|
163
|
-
:
|
|
164
|
-
if (
|
|
188
|
+
: selectStockAnalysisForUpdate(db, stock_code, args.market, sessionId);
|
|
189
|
+
if (existing) {
|
|
165
190
|
db.prepare(`
|
|
166
191
|
UPDATE stock_ai_analysis
|
|
167
192
|
SET status = ?,
|
|
168
193
|
content = ?,
|
|
169
194
|
updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')
|
|
170
|
-
WHERE id = ?
|
|
171
|
-
`).run(status, content,
|
|
172
|
-
return selectStockAnalysisDetail(db,
|
|
195
|
+
WHERE id = ?
|
|
196
|
+
`).run(status, content, existing.id);
|
|
197
|
+
return selectStockAnalysisDetail(db, existing.id);
|
|
173
198
|
}
|
|
174
199
|
db.prepare(`
|
|
175
200
|
INSERT INTO stock_ai_analysis (id, userId, stock_code, stock_name, market, sessionId, status, content)
|
|
@@ -178,30 +203,30 @@ export function saveStockAiAnalysisRecord(db, userId, args) {
|
|
|
178
203
|
return db.prepare(`
|
|
179
204
|
SELECT id, stock_code, stock_name, market, sessionId, status, content, createdAt, updatedAt
|
|
180
205
|
FROM stock_ai_analysis
|
|
181
|
-
WHERE
|
|
182
|
-
`).get(
|
|
206
|
+
WHERE id = ?
|
|
207
|
+
`).get(id);
|
|
183
208
|
}
|
|
184
209
|
function tableForArticleAnalysis(analysisType) {
|
|
185
210
|
return analysisType === "verification" ? "news_fact_check_analysis" : "news_deep_reasoning_analysis";
|
|
186
211
|
}
|
|
187
|
-
function selectLatestArticleAnalysis(db,
|
|
212
|
+
function selectLatestArticleAnalysis(db, sourceId, analysisType, market = "CN") {
|
|
188
213
|
const table = tableForArticleAnalysis(analysisType);
|
|
189
214
|
if (analysisType === "deduction") {
|
|
190
215
|
return db.prepare(`
|
|
191
216
|
SELECT id, sourceId, ? AS analysisType, sourceTitle, market, sessionId, status, content, createdAt, updatedAt
|
|
192
217
|
FROM ${table}
|
|
193
|
-
WHERE
|
|
218
|
+
WHERE sourceId = ? AND market = ?
|
|
194
219
|
ORDER BY updatedAt DESC, createdAt DESC
|
|
195
220
|
LIMIT 1
|
|
196
|
-
`).get(analysisType,
|
|
221
|
+
`).get(analysisType, sourceId, market);
|
|
197
222
|
}
|
|
198
223
|
return db.prepare(`
|
|
199
224
|
SELECT id, sourceId, ? AS analysisType, sourceTitle, sessionId, status, content, createdAt, updatedAt
|
|
200
225
|
FROM ${table}
|
|
201
|
-
WHERE
|
|
226
|
+
WHERE sourceId = ?
|
|
202
227
|
ORDER BY updatedAt DESC, createdAt DESC
|
|
203
228
|
LIMIT 1
|
|
204
|
-
`).get(analysisType,
|
|
229
|
+
`).get(analysisType, sourceId);
|
|
205
230
|
}
|
|
206
231
|
export const stockAnalysisTools = {
|
|
207
232
|
get_stock_ai_analysis: {
|
|
@@ -225,8 +250,8 @@ export const stockAnalysisTools = {
|
|
|
225
250
|
const args = QueryStockAiAnalysisHistoryParamsSchema.parse(params ?? {});
|
|
226
251
|
const db = getDB();
|
|
227
252
|
const offset = (args.page - 1) * args.pageSize;
|
|
228
|
-
const conditions = ["
|
|
229
|
-
const queryParams = [
|
|
253
|
+
const conditions = ["market = ?"];
|
|
254
|
+
const queryParams = [args.market];
|
|
230
255
|
if (args.stock_code) {
|
|
231
256
|
conditions.push("stock_code = ?");
|
|
232
257
|
queryParams.push(normalizeStockCode(args.stock_code));
|
|
@@ -258,13 +283,13 @@ export const stockAnalysisTools = {
|
|
|
258
283
|
},
|
|
259
284
|
query_stock_ai_analysis_stocks: {
|
|
260
285
|
name: "query_stock_ai_analysis_stocks",
|
|
261
|
-
description: "
|
|
286
|
+
description: "分页查询所有已经产生过个股 AI 分析记录的股票列表。按股票代码和市场去重,返回每只股票最近一次分析记录 ID、最近状态、最近更新时间和累计分析次数;不返回分析正文 content。",
|
|
262
287
|
parameters: QueryStockAiAnalysisStocksParamsSchema,
|
|
263
288
|
registerTool: false,
|
|
264
289
|
async execute(params, ctx) {
|
|
265
290
|
const args = QueryStockAiAnalysisStocksParamsSchema.parse(params ?? {});
|
|
266
291
|
const db = getDB();
|
|
267
|
-
const { rows, total } = queryStockAnalysisStocks(db,
|
|
292
|
+
const { rows, total } = queryStockAnalysisStocks(db, args.market, args.page, args.pageSize);
|
|
268
293
|
return JSON.stringify({
|
|
269
294
|
success: true,
|
|
270
295
|
data: rows,
|
|
@@ -297,7 +322,7 @@ export const stockAnalysisTools = {
|
|
|
297
322
|
async execute(params, ctx) {
|
|
298
323
|
const args = GetStockAiAnalysisDetailBySessionParamsSchema.parse(params);
|
|
299
324
|
const db = getDB();
|
|
300
|
-
const data = selectStockAnalysisDetailBySession(db,
|
|
325
|
+
const data = selectStockAnalysisDetailBySession(db, args.sessionId, normalizeStockCode(args.stock_code));
|
|
301
326
|
return JSON.stringify({ success: true, data: data || null });
|
|
302
327
|
}
|
|
303
328
|
},
|
|
@@ -310,9 +335,8 @@ export const stockAnalysisTools = {
|
|
|
310
335
|
async execute(params, ctx) {
|
|
311
336
|
const args = BuildStockAiAnalysisMessageParamsSchema.parse(params);
|
|
312
337
|
const db = getDB();
|
|
313
|
-
const userId = resolveToolUserId(ctx);
|
|
314
338
|
const stock_code = normalizeStockCode(args.stock_code);
|
|
315
|
-
const generating = selectLatestGeneratingStockAnalysis(db,
|
|
339
|
+
const generating = selectLatestGeneratingStockAnalysis(db, stock_code, args.market, args.sessionId);
|
|
316
340
|
if (generating) {
|
|
317
341
|
return JSON.stringify({
|
|
318
342
|
success: true,
|
|
@@ -351,7 +375,7 @@ export const stockAnalysisTools = {
|
|
|
351
375
|
const userId = resolveToolUserId(ctx);
|
|
352
376
|
if (args.status === "generating") {
|
|
353
377
|
const stock_code = normalizeStockCode(args.stock_code);
|
|
354
|
-
const generating = selectLatestGeneratingStockAnalysis(db,
|
|
378
|
+
const generating = selectLatestGeneratingStockAnalysis(db, stock_code, args.market, args.sessionId);
|
|
355
379
|
if (generating) {
|
|
356
380
|
return JSON.stringify({ success: true, skipped: true, reason: "already_generating", data: generating });
|
|
357
381
|
}
|
|
@@ -368,7 +392,7 @@ export const stockAnalysisTools = {
|
|
|
368
392
|
async execute(params, ctx) {
|
|
369
393
|
const args = GetArticleAiAnalysisParamsSchema.parse(params);
|
|
370
394
|
const db = getDB();
|
|
371
|
-
const data = selectLatestArticleAnalysis(db,
|
|
395
|
+
const data = selectLatestArticleAnalysis(db, args.sourceId, args.analysisType, args.market);
|
|
372
396
|
return JSON.stringify({ success: true, data: data || null });
|
|
373
397
|
}
|
|
374
398
|
},
|
|
@@ -380,25 +404,24 @@ export const stockAnalysisTools = {
|
|
|
380
404
|
async execute(params, ctx) {
|
|
381
405
|
const args = QueryArticleAiAnalysisHistoryParamsSchema.parse(params ?? {});
|
|
382
406
|
const db = getDB();
|
|
383
|
-
const userId = resolveToolUserId(ctx);
|
|
384
407
|
const table = tableForArticleAnalysis(args.analysisType);
|
|
385
408
|
const offset = (args.page - 1) * args.pageSize;
|
|
386
409
|
const marketCondition = args.analysisType === "deduction" ? " AND market = ?" : "";
|
|
387
410
|
const queryParams = args.analysisType === "deduction"
|
|
388
|
-
? [args.analysisType,
|
|
389
|
-
: [args.analysisType,
|
|
411
|
+
? [args.analysisType, args.market, args.pageSize, offset]
|
|
412
|
+
: [args.analysisType, args.pageSize, offset];
|
|
390
413
|
const rows = db.prepare(`
|
|
391
414
|
SELECT id, sourceId, ? AS analysisType, sourceTitle, ${args.analysisType === "deduction" ? "market," : ""} sessionId, status, createdAt, updatedAt
|
|
392
415
|
FROM ${table}
|
|
393
|
-
WHERE
|
|
416
|
+
WHERE 1 = 1${marketCondition}
|
|
394
417
|
ORDER BY updatedAt DESC, createdAt DESC
|
|
395
418
|
LIMIT ? OFFSET ?
|
|
396
419
|
`).all(...queryParams);
|
|
397
|
-
const countParams = args.analysisType === "deduction" ? [
|
|
420
|
+
const countParams = args.analysisType === "deduction" ? [args.market] : [];
|
|
398
421
|
const countRow = db.prepare(`
|
|
399
422
|
SELECT COUNT(*) AS total
|
|
400
423
|
FROM ${table}
|
|
401
|
-
WHERE
|
|
424
|
+
WHERE 1 = 1${marketCondition}
|
|
402
425
|
`).get(...countParams);
|
|
403
426
|
const total = countRow.total || 0;
|
|
404
427
|
return JSON.stringify({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../../src/features/stockAnalysis/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AACzF,OAAO,EAGN,uCAAuC,EACvC,gCAAgC,EAChC,6CAA6C,EAC7C,oCAAoC,EACpC,8BAA8B,EAC9B,yCAAyC,EACzC,sCAAsC,EACtC,uCAAuC,EACvC,+BAA+B,EAI/B,MAAM,aAAa,CAAC;AAWrB,MAAM,uBAAuB,GAAG,yBAAyB,CAAC;AAE1D,MAAM,0CAA0C,GAAG;IAClD,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,QAAQ,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;IACtC,UAAU,EAAE;QACX,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;QACnD,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;QACnD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;QACrD,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE;KACxD;CACD,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,UAAkB;IACpD,OAAO,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAwB;IAClD,OAAO,GAAG,EAAE,MAAM,IAAI,SAAS,CAAC;AACjC,CAAC;AAED,SAAS,2BAA2B,CAAC,IAAuC;IAC3E,OAAO;QACN,OAAO,IAAI,CAAC,UAAU,IAAI;QAC1B,EAAE;QACF,QAAQ,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;QAC7C,QAAQ,IAAI,CAAC,UAAU,EAAE;QACzB,MAAM,IAAI,CAAC,MAAM,EAAE;KACnB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,CAAC;AAED,SAAS,2BAA2B,CAAC,IAAuC;IAC3E,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;IACvC,MAAM,yBAAyB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;QACtD,UAAU;QACV,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,SAAS;QACT,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,EAAE;KACX,CAAC,CAAC;IACH,MAAM,oBAAoB,GAAG,CAAC,MAA8B,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;QAC/E,UAAU;QACV,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,SAAS;QACT,MAAM;QACN,OAAO,EAAE,KAAK;KACd,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,SAAS,CAAC;QACrB,gBAAgB,EAAE;YACjB,yCAAyC,yBAAyB,EAAE,+CAA+C;YACnH,WAAW,uBAAuB,sBAAsB;YACxD,wCAAwC,oBAAoB,CAAC,WAAW,CAAC,uBAAuB;YAChG,wCAAwC,oBAAoB,CAAC,QAAQ,CAAC,oBAAoB;YAC1F,oCAAoC;SACpC,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC;YAC1B,UAAU;YACV,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS;YACT,QAAQ,EAAE,MAAM;SAChB,CAAC;QACF,SAAS,EAAE,IAAI,CAAC,MAAM;QACtB,aAAa,EAAE,UAAU;QACzB,aAAa,EAAE,IAAI,CAAC,UAAU;QAC9B,UAAU,EAAE,2BAA2B,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC;QAChE,SAAS,EAAE;YACV,SAAS,uBAAuB,iBAAiB;YACjD,qBAAqB;SACrB,CAAC,IAAI,CAAC,IAAI,CAAC;KACZ,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CACjC,EAA4B,EAC5B,UAAkB,EAClB,MAAc;IAEd,OAAO,EAAE,CAAC,OAAO,CAAC;;;;;;EAMjB,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAgC,CAAC;AAC3D,CAAC;AAED,SAAS,mCAAmC,CAC3C,EAA4B,EAC5B,MAAc,EACd,UAAkB,EAClB,MAAc;IAEd,OAAO,EAAE,CAAC,OAAO,CAAC;;;;;;EAMjB,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAgC,CAAC;AACnE,CAAC;AAED,SAAS,yBAAyB,CACjC,EAA4B,EAC5B,EAAU;IAEV,OAAO,EAAE,CAAC,OAAO,CAAC;;;;;;EAMjB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAgC,CAAC;AAC3C,CAAC;AAED,SAAS,kCAAkC,CAC1C,EAA4B,EAC5B,MAAc,EACd,SAAiB,EACjB,UAAkB;IAElB,OAAO,EAAE,CAAC,OAAO,CAAC;;;;;;EAMjB,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAA8C,CAAC;AACpF,CAAC;AAED,SAAS,wBAAwB,CAChC,EAA4B,EAC5B,MAAc,EACd,MAAc,EACd,IAAY,EACZ,QAAgB;IAEhB,MAAM,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;IACrC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BvB,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAkC,CAAC;IAClF,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;EAQ3B,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAsB,CAAC;IAC5C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,yBAAyB,CACxC,EAA4B,EAC5B,MAAc,EACd,IAOC;IAED,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC;IAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,UAAU,CAAC;IACzD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC/C,MAAM,OAAO,GAAG,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC3G,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IAExB,MAAM,UAAU,GAAG,MAAM,KAAK,YAAY;QACzC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,mCAAmC,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5E,IAAI,UAAU,EAAE,CAAC;QAChB,EAAE,CAAC,OAAO,CAAC;;;;;;GAMV,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC/C,OAAO,yBAAyB,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,CAAoB,CAAC;IACxE,CAAC;IAED,EAAE,CAAC,OAAO,CAAC;;;EAGV,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAEpF,OAAO,EAAE,CAAC,OAAO,CAAC;;;;EAIjB,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAoB,CAAC;AACvC,CAAC;AAED,SAAS,uBAAuB,CAAC,YAA+C;IAC/E,OAAO,YAAY,KAAK,cAAc,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,8BAA8B,CAAC;AACtG,CAAC;AAED,SAAS,2BAA2B,CACnC,EAA4B,EAC5B,MAAc,EACd,QAAgB,EAChB,YAA+C,EAC/C,SAAiB,IAAI;IAErB,MAAM,KAAK,GAAG,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACpD,IAAI,YAAY,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,EAAE,CAAC,OAAO,CAAC;;UAEV,KAAK;;;;GAIZ,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAkC,CAAC;IACjF,CAAC;IACD,OAAO,EAAE,CAAC,OAAO,CAAC;;SAEV,KAAK;;;;EAIZ,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAkC,CAAC;AACzE,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAgC;IAC9D,qBAAqB,EAAE;QACtB,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,8DAA8D;QAC3E,UAAU,EAAE,8BAA8B;QAC1C,YAAY,EAAE,KAAK;QACnB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;YACxB,MAAM,IAAI,GAAG,8BAA8B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC1D,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,yBAAyB,CAAC,EAAE,EAAE,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7F,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC;KACD;IACD,+BAA+B,EAAE;QAChC,IAAI,EAAE,iCAAiC;QACvC,WAAW,EAAE,oFAAoF;QACjG,UAAU,EAAE,uCAAuC;QACnD,YAAY,EAAE,KAAK;QACnB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;YACxB,MAAM,IAAI,GAAG,uCAAuC,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YACzE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/C,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YAChD,MAAM,WAAW,GAAc,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACrE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACrB,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAClC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACvD,CAAC;YACD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;YAGf,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;;;IAGhC,CAAC,CAAC,GAAG,CAAC,GAAG,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC;;;YAGnB,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC;IAChC,CAAC,CAAC,GAAG,CAAC,GAAG,WAAW,CAAsB,CAAC;YAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;YAElC,OAAO,IAAI,CAAC,SAAS,CAAC;gBACrB,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,IAAI;gBACV,UAAU,EAAE;oBACX,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,KAAK;oBACL,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;iBAC5C;aACD,CAAC,CAAC;QACJ,CAAC;KACD;IACD,8BAA8B,EAAE;QAC/B,IAAI,EAAE,gCAAgC;QACtC,WAAW,EAAE,iGAAiG;QAC9G,UAAU,EAAE,sCAAsC;QAClD,YAAY,EAAE,KAAK;QACnB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;YACxB,MAAM,IAAI,GAAG,sCAAsC,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YACxE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;YACnB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,wBAAwB,CAAC,EAAE,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpH,OAAO,IAAI,CAAC,SAAS,CAAC;gBACrB,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,IAAI;gBACV,UAAU,EAAE;oBACX,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,KAAK;oBACL,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;iBAC5C;aACD,CAAC,CAAC;QACJ,CAAC;KACD;IACD,4BAA4B,EAAE;QAC7B,IAAI,EAAE,8BAA8B;QACpC,WAAW,EAAE,mEAAmE;QAChF,UAAU,EAAE,oCAAoC;QAChD,YAAY,EAAE,KAAK;QACnB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;YACxB,MAAM,IAAI,GAAG,oCAAoC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAChE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,yBAAyB,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC;KACD;IACD,uCAAuC,EAAE;QACxC,IAAI,EAAE,yCAAyC;QAC/C,WAAW,EAAE,mDAAmD;QAChE,UAAU,EAAE,6CAA6C;QACzD,YAAY,EAAE,KAAK;QACnB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;YACxB,MAAM,IAAI,GAAG,6CAA6C,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACzE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,kCAAkC,CAC9C,EAAE,EACF,iBAAiB,CAAC,GAAG,CAAC,EACtB,IAAI,CAAC,SAAS,EACd,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CACnC,CAAC;YACF,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC;KACD;IACD,+BAA+B,EAAE;QAChC,IAAI,EAAE,iCAAiC;QACvC,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,gFAAgF;QAC7F,UAAU,EAAE,0CAA0C;QACtD,YAAY,EAAE,KAAK;QACnB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;YACxB,MAAM,IAAI,GAAG,uCAAuC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACvD,MAAM,UAAU,GAAG,mCAAmC,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5F,IAAI,UAAU,EAAE,CAAC;gBAChB,OAAO,IAAI,CAAC,SAAS,CAAC;oBACrB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,oBAAoB;oBAC5B,IAAI,EAAE,UAAU;iBAChB,CAAC,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,GAAG,2BAA2B,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YACrE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpC,OAAO,IAAI,CAAC,SAAS,CAAC;gBACrB,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE;oBACL,OAAO;oBACP,OAAO;oBACP,UAAU;oBACV,UAAU,EAAE;wBACX,UAAU;wBACV,UAAU,EAAE,IAAI,CAAC,UAAU;wBAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;wBACnB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE;qBAC/B;oBACD,KAAK,EAAE,uBAAuB;iBAC9B;aACD,CAAC,CAAC;QACJ,CAAC;KACD;IACD,sBAAsB,EAAE;QACvB,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EACV,+JAA+J;QAChK,UAAU,EAAE,+BAA+B;QAC3C,YAAY,EAAE,IAAI;QAClB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;YACxB,MAAM,IAAI,GAAG,+BAA+B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC3D,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;gBAClC,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACvD,MAAM,UAAU,GAAG,mCAAmC,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC5F,IAAI,UAAU,EAAE,CAAC;oBAChB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;gBACzG,CAAC;YACF,CAAC;YACD,MAAM,IAAI,GAAG,yBAAyB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YACzD,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;KACD;IACD,uBAAuB,EAAE;QACxB,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EAAE,+EAA+E;QAC5F,UAAU,EAAE,gCAAgC;QAC5C,YAAY,EAAE,KAAK;QACnB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;YACxB,MAAM,IAAI,GAAG,gCAAgC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC5D,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,2BAA2B,CAAC,EAAE,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACpH,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC;KACD;IACD,iCAAiC,EAAE;QAClC,IAAI,EAAE,mCAAmC;QACzC,WAAW,EAAE,wFAAwF;QACrG,UAAU,EAAE,yCAAyC;QACrD,YAAY,EAAE,KAAK;QACnB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;YACxB,MAAM,IAAI,GAAG,yCAAyC,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YAC3E,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,KAAK,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;YACnF,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,KAAK,WAAW;gBACpD,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;gBACjE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACtD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;4DACiC,IAAI,CAAC,YAAY,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;WACnG,KAAK;sBACM,eAAe;;;IAGjC,CAAC,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;YACvB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACzF,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC;;WAEpB,KAAK;sBACM,eAAe;IACjC,CAAC,CAAC,GAAG,CAAC,GAAG,WAAW,CAAsB,CAAC;YAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;YAElC,OAAO,IAAI,CAAC,SAAS,CAAC;gBACrB,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,IAAI;gBACV,UAAU,EAAE;oBACX,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,KAAK;oBACL,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;iBAC5C;aACD,CAAC,CAAC;QACJ,CAAC;KACD;CACD,CAAC"}
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../../src/features/stockAnalysis/tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -78,15 +78,52 @@ function buildDeepReasoningMessage(args: BuildDeepReasoningMessageParams): strin
|
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
function selectGeneratingDeepReasoning(
|
|
81
|
+
function selectGeneratingDeepReasoning(sourceId: string, market: string, sessionId?: string) {
|
|
82
82
|
const db = getDB();
|
|
83
|
+
const normalizedSessionId = sessionId?.trim() || "";
|
|
84
|
+
if (normalizedSessionId) {
|
|
85
|
+
const bySession = db.prepare(`
|
|
86
|
+
SELECT id, sourceId, sourceTitle, market, sessionId, status, content, createdAt, updatedAt
|
|
87
|
+
FROM news_deep_reasoning_analysis
|
|
88
|
+
WHERE sourceId = ? AND market = ? AND sessionId = ? AND status = 'generating'
|
|
89
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
90
|
+
LIMIT 1
|
|
91
|
+
`).get(sourceId, market, normalizedSessionId);
|
|
92
|
+
if (bySession) return bySession;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return db.prepare(`
|
|
96
|
+
SELECT id, sourceId, sourceTitle, market, sessionId, status, content, createdAt, updatedAt
|
|
97
|
+
FROM news_deep_reasoning_analysis
|
|
98
|
+
WHERE sourceId = ? AND market = ? AND status = 'generating'
|
|
99
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
100
|
+
LIMIT 1
|
|
101
|
+
`).get(sourceId, market);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function selectDeepReasoningForUpdate(sourceId: string, market: string, sessionId: string) {
|
|
105
|
+
const db = getDB();
|
|
106
|
+
if (sessionId) {
|
|
107
|
+
const bySession = db.prepare(`
|
|
108
|
+
SELECT id, sourceId, sourceTitle, market, sessionId, status, content, createdAt, updatedAt
|
|
109
|
+
FROM news_deep_reasoning_analysis
|
|
110
|
+
WHERE sourceId = ? AND market = ? AND sessionId = ?
|
|
111
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
112
|
+
LIMIT 1
|
|
113
|
+
`).get(sourceId, market, sessionId);
|
|
114
|
+
if (bySession) return bySession as { id: string; sourceTitle: string };
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const generating = selectGeneratingDeepReasoning(sourceId, market) as { id: string; sourceTitle: string } | undefined;
|
|
118
|
+
if (generating) return generating;
|
|
119
|
+
|
|
83
120
|
return db.prepare(`
|
|
84
|
-
SELECT id, sourceId, sourceTitle, sessionId, status, content, createdAt, updatedAt
|
|
121
|
+
SELECT id, sourceId, sourceTitle, market, sessionId, status, content, createdAt, updatedAt
|
|
85
122
|
FROM news_deep_reasoning_analysis
|
|
86
|
-
WHERE
|
|
123
|
+
WHERE sourceId = ? AND market = ?
|
|
87
124
|
ORDER BY updatedAt DESC, createdAt DESC
|
|
88
125
|
LIMIT 1
|
|
89
|
-
`).get(
|
|
126
|
+
`).get(sourceId, market) as { id: string; sourceTitle: string } | undefined;
|
|
90
127
|
}
|
|
91
128
|
|
|
92
129
|
function saveDeepReasoningRecord(
|
|
@@ -103,23 +140,37 @@ function saveDeepReasoningRecord(
|
|
|
103
140
|
const db = getDB();
|
|
104
141
|
const id = randomUUID();
|
|
105
142
|
const sessionId = args.sessionId?.trim() || "";
|
|
143
|
+
const existing = selectDeepReasoningForUpdate(args.sourceId, args.market, sessionId);
|
|
144
|
+
|
|
145
|
+
if (existing) {
|
|
146
|
+
const sourceTitle = args.sourceTitle.trim() || existing.sourceTitle || "";
|
|
147
|
+
db.prepare(`
|
|
148
|
+
UPDATE news_deep_reasoning_analysis
|
|
149
|
+
SET sourceTitle = ?,
|
|
150
|
+
sessionId = CASE WHEN ? != '' THEN ? ELSE sessionId END,
|
|
151
|
+
status = ?,
|
|
152
|
+
content = ?,
|
|
153
|
+
updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')
|
|
154
|
+
WHERE id = ?
|
|
155
|
+
`).run(sourceTitle, sessionId, sessionId, args.status, args.content, existing.id);
|
|
156
|
+
|
|
157
|
+
return db.prepare(`
|
|
158
|
+
SELECT id, sourceId, 'deduction' AS analysisType, sourceTitle, market, sessionId, status, content, createdAt, updatedAt
|
|
159
|
+
FROM news_deep_reasoning_analysis
|
|
160
|
+
WHERE id = ?
|
|
161
|
+
`).get(existing.id);
|
|
162
|
+
}
|
|
106
163
|
|
|
107
164
|
db.prepare(`
|
|
108
165
|
INSERT INTO news_deep_reasoning_analysis (id, sourceId, sourceTitle, userId, market, sessionId, status, content)
|
|
109
166
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
110
|
-
ON CONFLICT(sourceId, userId, market) DO UPDATE SET
|
|
111
|
-
sourceTitle = CASE WHEN excluded.sourceTitle != '' THEN excluded.sourceTitle ELSE news_deep_reasoning_analysis.sourceTitle END,
|
|
112
|
-
sessionId = CASE WHEN excluded.sessionId != '' THEN excluded.sessionId ELSE news_deep_reasoning_analysis.sessionId END,
|
|
113
|
-
status = excluded.status,
|
|
114
|
-
content = excluded.content,
|
|
115
|
-
updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')
|
|
116
167
|
`).run(id, args.sourceId, args.sourceTitle, userId, args.market, sessionId, args.status, args.content);
|
|
117
168
|
|
|
118
169
|
return db.prepare(`
|
|
119
170
|
SELECT id, sourceId, 'deduction' AS analysisType, sourceTitle, market, sessionId, status, content, createdAt, updatedAt
|
|
120
171
|
FROM news_deep_reasoning_analysis
|
|
121
|
-
WHERE
|
|
122
|
-
`).get(
|
|
172
|
+
WHERE id = ?
|
|
173
|
+
`).get(id);
|
|
123
174
|
}
|
|
124
175
|
|
|
125
176
|
export const deepReasoningTools: Record<string, RuntimeTool> = {
|
|
@@ -196,10 +247,10 @@ export const deepReasoningTools: Record<string, RuntimeTool> = {
|
|
|
196
247
|
const row = db.prepare(`
|
|
197
248
|
SELECT id, sourceId, sourceTitle, market, sessionId, status, createdAt, updatedAt
|
|
198
249
|
FROM news_deep_reasoning_analysis
|
|
199
|
-
WHERE
|
|
250
|
+
WHERE sessionId = ? AND sourceId = ?
|
|
200
251
|
ORDER BY updatedAt DESC, createdAt DESC
|
|
201
252
|
LIMIT 1
|
|
202
|
-
`).get(
|
|
253
|
+
`).get(args.sessionId, args.sourceId);
|
|
203
254
|
return JSON.stringify({ success: true, data: row || null });
|
|
204
255
|
}
|
|
205
256
|
},
|
|
@@ -211,8 +262,7 @@ export const deepReasoningTools: Record<string, RuntimeTool> = {
|
|
|
211
262
|
registerTool: false,
|
|
212
263
|
async execute(params, ctx) {
|
|
213
264
|
const args = BuildDeepReasoningMessageParamsSchema.parse(params);
|
|
214
|
-
const
|
|
215
|
-
const generating = selectGeneratingDeepReasoning(userId, args.newsId);
|
|
265
|
+
const generating = selectGeneratingDeepReasoning(args.newsId, "CN", args.sessionId);
|
|
216
266
|
if (generating) {
|
|
217
267
|
return JSON.stringify({
|
|
218
268
|
success: true,
|
|
@@ -248,7 +298,7 @@ export const deepReasoningTools: Record<string, RuntimeTool> = {
|
|
|
248
298
|
const args = SaveDeepReasoningParamsSchema.parse(params);
|
|
249
299
|
const userId = ctx?.userId || "default";
|
|
250
300
|
if (args.status === "generating") {
|
|
251
|
-
const generating = selectGeneratingDeepReasoning(
|
|
301
|
+
const generating = selectGeneratingDeepReasoning(args.sourceId, args.market, args.sessionId);
|
|
252
302
|
if (generating) {
|
|
253
303
|
return JSON.stringify({ success: true, skipped: true, reason: "already_generating", data: generating });
|
|
254
304
|
}
|
|
@@ -77,15 +77,52 @@ function buildInformationVerificationMessage(args: BuildInformationVerificationM
|
|
|
77
77
|
});
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
function selectGeneratingInformationVerification(
|
|
80
|
+
function selectGeneratingInformationVerification(sourceId: string, sessionId?: string) {
|
|
81
81
|
const db = getDB();
|
|
82
|
+
const normalizedSessionId = sessionId?.trim() || "";
|
|
83
|
+
if (normalizedSessionId) {
|
|
84
|
+
const bySession = db.prepare(`
|
|
85
|
+
SELECT id, sourceId, sourceTitle, sessionId, status, content, createdAt, updatedAt
|
|
86
|
+
FROM news_fact_check_analysis
|
|
87
|
+
WHERE sourceId = ? AND sessionId = ? AND status = 'generating'
|
|
88
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
89
|
+
LIMIT 1
|
|
90
|
+
`).get(sourceId, normalizedSessionId);
|
|
91
|
+
if (bySession) return bySession;
|
|
92
|
+
}
|
|
93
|
+
|
|
82
94
|
return db.prepare(`
|
|
83
95
|
SELECT id, sourceId, sourceTitle, sessionId, status, content, createdAt, updatedAt
|
|
84
96
|
FROM news_fact_check_analysis
|
|
85
|
-
WHERE
|
|
97
|
+
WHERE sourceId = ? AND status = 'generating'
|
|
86
98
|
ORDER BY updatedAt DESC, createdAt DESC
|
|
87
99
|
LIMIT 1
|
|
88
|
-
`).get(
|
|
100
|
+
`).get(sourceId);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function selectInformationVerificationForUpdate(sourceId: string, sessionId: string) {
|
|
104
|
+
const db = getDB();
|
|
105
|
+
if (sessionId) {
|
|
106
|
+
const bySession = db.prepare(`
|
|
107
|
+
SELECT id, sourceId, sourceTitle, sessionId, status, content, createdAt, updatedAt
|
|
108
|
+
FROM news_fact_check_analysis
|
|
109
|
+
WHERE sourceId = ? AND sessionId = ?
|
|
110
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
111
|
+
LIMIT 1
|
|
112
|
+
`).get(sourceId, sessionId);
|
|
113
|
+
if (bySession) return bySession as { id: string; sourceTitle: string };
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const generating = selectGeneratingInformationVerification(sourceId) as { id: string; sourceTitle: string } | undefined;
|
|
117
|
+
if (generating) return generating;
|
|
118
|
+
|
|
119
|
+
return db.prepare(`
|
|
120
|
+
SELECT id, sourceId, sourceTitle, sessionId, status, content, createdAt, updatedAt
|
|
121
|
+
FROM news_fact_check_analysis
|
|
122
|
+
WHERE sourceId = ?
|
|
123
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
124
|
+
LIMIT 1
|
|
125
|
+
`).get(sourceId) as { id: string; sourceTitle: string } | undefined;
|
|
89
126
|
}
|
|
90
127
|
|
|
91
128
|
function saveInformationVerificationRecord(
|
|
@@ -101,23 +138,37 @@ function saveInformationVerificationRecord(
|
|
|
101
138
|
const db = getDB();
|
|
102
139
|
const id = randomUUID();
|
|
103
140
|
const sessionId = args.sessionId?.trim() || "";
|
|
141
|
+
const existing = selectInformationVerificationForUpdate(args.sourceId, sessionId);
|
|
142
|
+
|
|
143
|
+
if (existing) {
|
|
144
|
+
const sourceTitle = args.sourceTitle.trim() || existing.sourceTitle || "";
|
|
145
|
+
db.prepare(`
|
|
146
|
+
UPDATE news_fact_check_analysis
|
|
147
|
+
SET sourceTitle = ?,
|
|
148
|
+
sessionId = CASE WHEN ? != '' THEN ? ELSE sessionId END,
|
|
149
|
+
status = ?,
|
|
150
|
+
content = ?,
|
|
151
|
+
updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')
|
|
152
|
+
WHERE id = ?
|
|
153
|
+
`).run(sourceTitle, sessionId, sessionId, args.status, args.content, existing.id);
|
|
154
|
+
|
|
155
|
+
return db.prepare(`
|
|
156
|
+
SELECT id, sourceId, 'verification' AS analysisType, sourceTitle, sessionId, status, content, createdAt, updatedAt
|
|
157
|
+
FROM news_fact_check_analysis
|
|
158
|
+
WHERE id = ?
|
|
159
|
+
`).get(existing.id);
|
|
160
|
+
}
|
|
104
161
|
|
|
105
162
|
db.prepare(`
|
|
106
163
|
INSERT INTO news_fact_check_analysis (id, sourceId, sourceTitle, userId, sessionId, status, content)
|
|
107
164
|
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
108
|
-
ON CONFLICT(sourceId, userId) DO UPDATE SET
|
|
109
|
-
sourceTitle = CASE WHEN excluded.sourceTitle != '' THEN excluded.sourceTitle ELSE news_fact_check_analysis.sourceTitle END,
|
|
110
|
-
sessionId = CASE WHEN excluded.sessionId != '' THEN excluded.sessionId ELSE news_fact_check_analysis.sessionId END,
|
|
111
|
-
status = excluded.status,
|
|
112
|
-
content = excluded.content,
|
|
113
|
-
updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')
|
|
114
165
|
`).run(id, args.sourceId, args.sourceTitle, userId, sessionId, args.status, args.content);
|
|
115
166
|
|
|
116
167
|
return db.prepare(`
|
|
117
168
|
SELECT id, sourceId, 'verification' AS analysisType, sourceTitle, sessionId, status, content, createdAt, updatedAt
|
|
118
169
|
FROM news_fact_check_analysis
|
|
119
|
-
WHERE
|
|
120
|
-
`).get(
|
|
170
|
+
WHERE id = ?
|
|
171
|
+
`).get(id);
|
|
121
172
|
}
|
|
122
173
|
|
|
123
174
|
export const informationVerificationTools: Record<string, RuntimeTool> = {
|
|
@@ -194,10 +245,10 @@ export const informationVerificationTools: Record<string, RuntimeTool> = {
|
|
|
194
245
|
const row = db.prepare(`
|
|
195
246
|
SELECT id, sourceId, sourceTitle, sessionId, status, createdAt, updatedAt
|
|
196
247
|
FROM news_fact_check_analysis
|
|
197
|
-
WHERE
|
|
248
|
+
WHERE sessionId = ? AND sourceId = ?
|
|
198
249
|
ORDER BY updatedAt DESC, createdAt DESC
|
|
199
250
|
LIMIT 1
|
|
200
|
-
`).get(
|
|
251
|
+
`).get(args.sessionId, args.sourceId);
|
|
201
252
|
return JSON.stringify({ success: true, data: row || null });
|
|
202
253
|
}
|
|
203
254
|
},
|
|
@@ -209,8 +260,7 @@ export const informationVerificationTools: Record<string, RuntimeTool> = {
|
|
|
209
260
|
registerTool: false,
|
|
210
261
|
async execute(params, ctx) {
|
|
211
262
|
const args = BuildInformationVerificationMessageParamsSchema.parse(params);
|
|
212
|
-
const
|
|
213
|
-
const generating = selectGeneratingInformationVerification(userId, args.newsId);
|
|
263
|
+
const generating = selectGeneratingInformationVerification(args.newsId, args.sessionId);
|
|
214
264
|
if (generating) {
|
|
215
265
|
return JSON.stringify({
|
|
216
266
|
success: true,
|
|
@@ -246,7 +296,7 @@ export const informationVerificationTools: Record<string, RuntimeTool> = {
|
|
|
246
296
|
const args = SaveInformationVerificationParamsSchema.parse(params);
|
|
247
297
|
const userId = ctx?.userId || "default";
|
|
248
298
|
if (args.status === "generating") {
|
|
249
|
-
const generating = selectGeneratingInformationVerification(
|
|
299
|
+
const generating = selectGeneratingInformationVerification(args.sourceId, args.sessionId);
|
|
250
300
|
if (generating) {
|
|
251
301
|
return JSON.stringify({ success: true, skipped: true, reason: "already_generating", data: generating });
|
|
252
302
|
}
|
|
@@ -120,17 +120,49 @@ function selectLatestStockAnalysis(
|
|
|
120
120
|
|
|
121
121
|
function selectLatestGeneratingStockAnalysis(
|
|
122
122
|
db: ReturnType<typeof getDB>,
|
|
123
|
-
userId: string,
|
|
124
123
|
stock_code: string,
|
|
125
|
-
market: string
|
|
124
|
+
market: string,
|
|
125
|
+
sessionId?: string
|
|
126
126
|
): StockAiAnalysis | undefined {
|
|
127
|
+
const normalizedSessionId = sessionId?.trim() || "";
|
|
128
|
+
if (normalizedSessionId) {
|
|
129
|
+
const bySession = db.prepare(`
|
|
130
|
+
SELECT id, stock_code, stock_name, market, sessionId, status, content, createdAt, updatedAt
|
|
131
|
+
FROM stock_ai_analysis
|
|
132
|
+
WHERE stock_code = ? AND market = ? AND sessionId = ? AND status = 'generating'
|
|
133
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
134
|
+
LIMIT 1
|
|
135
|
+
`).get(stock_code, market, normalizedSessionId) as StockAiAnalysis | undefined;
|
|
136
|
+
if (bySession) return bySession;
|
|
137
|
+
}
|
|
138
|
+
|
|
127
139
|
return db.prepare(`
|
|
128
140
|
SELECT id, stock_code, stock_name, market, sessionId, status, content, createdAt, updatedAt
|
|
129
141
|
FROM stock_ai_analysis
|
|
130
|
-
WHERE
|
|
142
|
+
WHERE stock_code = ? AND market = ? AND status = 'generating'
|
|
131
143
|
ORDER BY updatedAt DESC, createdAt DESC
|
|
132
144
|
LIMIT 1
|
|
133
|
-
`).get(
|
|
145
|
+
`).get(stock_code, market) as StockAiAnalysis | undefined;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function selectStockAnalysisForUpdate(
|
|
149
|
+
db: ReturnType<typeof getDB>,
|
|
150
|
+
stock_code: string,
|
|
151
|
+
market: string,
|
|
152
|
+
sessionId: string
|
|
153
|
+
): StockAiAnalysis | undefined {
|
|
154
|
+
if (sessionId) {
|
|
155
|
+
const bySession = db.prepare(`
|
|
156
|
+
SELECT id, stock_code, stock_name, market, sessionId, status, content, createdAt, updatedAt
|
|
157
|
+
FROM stock_ai_analysis
|
|
158
|
+
WHERE stock_code = ? AND market = ? AND sessionId = ?
|
|
159
|
+
ORDER BY updatedAt DESC, createdAt DESC
|
|
160
|
+
LIMIT 1
|
|
161
|
+
`).get(stock_code, market, sessionId) as StockAiAnalysis | undefined;
|
|
162
|
+
if (bySession) return bySession;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return selectLatestGeneratingStockAnalysis(db, stock_code, market);
|
|
134
166
|
}
|
|
135
167
|
|
|
136
168
|
function selectStockAnalysisDetail(
|
|
@@ -148,22 +180,20 @@ function selectStockAnalysisDetail(
|
|
|
148
180
|
|
|
149
181
|
function selectStockAnalysisDetailBySession(
|
|
150
182
|
db: ReturnType<typeof getDB>,
|
|
151
|
-
userId: string,
|
|
152
183
|
sessionId: string,
|
|
153
184
|
stock_code: string
|
|
154
185
|
): StockAiAnalysisWithoutContent | undefined {
|
|
155
186
|
return db.prepare(`
|
|
156
187
|
SELECT id, stock_code, stock_name, market, sessionId, status, createdAt, updatedAt
|
|
157
188
|
FROM stock_ai_analysis
|
|
158
|
-
WHERE
|
|
189
|
+
WHERE sessionId = ? AND stock_code = ?
|
|
159
190
|
ORDER BY updatedAt DESC, createdAt DESC
|
|
160
191
|
LIMIT 1
|
|
161
|
-
`).get(
|
|
192
|
+
`).get(sessionId, stock_code) as StockAiAnalysisWithoutContent | undefined;
|
|
162
193
|
}
|
|
163
194
|
|
|
164
195
|
function queryStockAnalysisStocks(
|
|
165
196
|
db: ReturnType<typeof getDB>,
|
|
166
|
-
userId: string,
|
|
167
197
|
market: string,
|
|
168
198
|
page: number,
|
|
169
199
|
pageSize: number
|
|
@@ -177,7 +207,7 @@ function queryStockAnalysisStocks(
|
|
|
177
207
|
COUNT(*) AS analysisCount,
|
|
178
208
|
MAX(updatedAt || '|' || createdAt || '|' || id) AS latestKey
|
|
179
209
|
FROM stock_ai_analysis
|
|
180
|
-
WHERE
|
|
210
|
+
WHERE market = ?
|
|
181
211
|
GROUP BY stock_code, market
|
|
182
212
|
)
|
|
183
213
|
SELECT
|
|
@@ -194,19 +224,18 @@ function queryStockAnalysisStocks(
|
|
|
194
224
|
ON a.stock_code = g.stock_code
|
|
195
225
|
AND a.market = g.market
|
|
196
226
|
AND (a.updatedAt || '|' || a.createdAt || '|' || a.id) = g.latestKey
|
|
197
|
-
WHERE a.userId = ?
|
|
198
227
|
ORDER BY a.updatedAt DESC, a.createdAt DESC
|
|
199
228
|
LIMIT ? OFFSET ?
|
|
200
|
-
`).all(
|
|
229
|
+
`).all(market, pageSize, offset) as StockAiAnalysisStockSummary[];
|
|
201
230
|
const countRow = db.prepare(`
|
|
202
231
|
SELECT COUNT(*) AS total
|
|
203
232
|
FROM (
|
|
204
233
|
SELECT 1
|
|
205
234
|
FROM stock_ai_analysis
|
|
206
|
-
WHERE
|
|
235
|
+
WHERE market = ?
|
|
207
236
|
GROUP BY stock_code, market
|
|
208
237
|
)
|
|
209
|
-
`).get(
|
|
238
|
+
`).get(market) as { total: number };
|
|
210
239
|
return { rows, total: countRow.total || 0 };
|
|
211
240
|
}
|
|
212
241
|
|
|
@@ -229,18 +258,18 @@ export function saveStockAiAnalysisRecord(
|
|
|
229
258
|
const content = status === "completed" ? ensureChartPlaceholdersInBody(args.content) : args.content.trim();
|
|
230
259
|
const id = randomUUID();
|
|
231
260
|
|
|
232
|
-
const
|
|
261
|
+
const existing = status === "generating"
|
|
233
262
|
? undefined
|
|
234
|
-
:
|
|
235
|
-
if (
|
|
263
|
+
: selectStockAnalysisForUpdate(db, stock_code, args.market, sessionId);
|
|
264
|
+
if (existing) {
|
|
236
265
|
db.prepare(`
|
|
237
266
|
UPDATE stock_ai_analysis
|
|
238
267
|
SET status = ?,
|
|
239
268
|
content = ?,
|
|
240
269
|
updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')
|
|
241
|
-
WHERE id = ?
|
|
242
|
-
`).run(status, content,
|
|
243
|
-
return selectStockAnalysisDetail(db,
|
|
270
|
+
WHERE id = ?
|
|
271
|
+
`).run(status, content, existing.id);
|
|
272
|
+
return selectStockAnalysisDetail(db, existing.id) as StockAiAnalysis;
|
|
244
273
|
}
|
|
245
274
|
|
|
246
275
|
db.prepare(`
|
|
@@ -251,8 +280,8 @@ export function saveStockAiAnalysisRecord(
|
|
|
251
280
|
return db.prepare(`
|
|
252
281
|
SELECT id, stock_code, stock_name, market, sessionId, status, content, createdAt, updatedAt
|
|
253
282
|
FROM stock_ai_analysis
|
|
254
|
-
WHERE
|
|
255
|
-
`).get(
|
|
283
|
+
WHERE id = ?
|
|
284
|
+
`).get(id) as StockAiAnalysis;
|
|
256
285
|
}
|
|
257
286
|
|
|
258
287
|
function tableForArticleAnalysis(analysisType: ArticleAiAnalysis["analysisType"]): string {
|
|
@@ -261,7 +290,6 @@ function tableForArticleAnalysis(analysisType: ArticleAiAnalysis["analysisType"]
|
|
|
261
290
|
|
|
262
291
|
function selectLatestArticleAnalysis(
|
|
263
292
|
db: ReturnType<typeof getDB>,
|
|
264
|
-
userId: string,
|
|
265
293
|
sourceId: string,
|
|
266
294
|
analysisType: ArticleAiAnalysis["analysisType"],
|
|
267
295
|
market: string = "CN"
|
|
@@ -271,18 +299,18 @@ function selectLatestArticleAnalysis(
|
|
|
271
299
|
return db.prepare(`
|
|
272
300
|
SELECT id, sourceId, ? AS analysisType, sourceTitle, market, sessionId, status, content, createdAt, updatedAt
|
|
273
301
|
FROM ${table}
|
|
274
|
-
WHERE
|
|
302
|
+
WHERE sourceId = ? AND market = ?
|
|
275
303
|
ORDER BY updatedAt DESC, createdAt DESC
|
|
276
304
|
LIMIT 1
|
|
277
|
-
`).get(analysisType,
|
|
305
|
+
`).get(analysisType, sourceId, market) as ArticleAiAnalysis | undefined;
|
|
278
306
|
}
|
|
279
307
|
return db.prepare(`
|
|
280
308
|
SELECT id, sourceId, ? AS analysisType, sourceTitle, sessionId, status, content, createdAt, updatedAt
|
|
281
309
|
FROM ${table}
|
|
282
|
-
WHERE
|
|
310
|
+
WHERE sourceId = ?
|
|
283
311
|
ORDER BY updatedAt DESC, createdAt DESC
|
|
284
312
|
LIMIT 1
|
|
285
|
-
`).get(analysisType,
|
|
313
|
+
`).get(analysisType, sourceId) as ArticleAiAnalysis | undefined;
|
|
286
314
|
}
|
|
287
315
|
|
|
288
316
|
export const stockAnalysisTools: Record<string, RuntimeTool> = {
|
|
@@ -307,8 +335,8 @@ export const stockAnalysisTools: Record<string, RuntimeTool> = {
|
|
|
307
335
|
const args = QueryStockAiAnalysisHistoryParamsSchema.parse(params ?? {});
|
|
308
336
|
const db = getDB();
|
|
309
337
|
const offset = (args.page - 1) * args.pageSize;
|
|
310
|
-
const conditions = ["
|
|
311
|
-
const queryParams: unknown[] = [
|
|
338
|
+
const conditions = ["market = ?"];
|
|
339
|
+
const queryParams: unknown[] = [args.market];
|
|
312
340
|
if (args.stock_code) {
|
|
313
341
|
conditions.push("stock_code = ?");
|
|
314
342
|
queryParams.push(normalizeStockCode(args.stock_code));
|
|
@@ -341,13 +369,13 @@ export const stockAnalysisTools: Record<string, RuntimeTool> = {
|
|
|
341
369
|
},
|
|
342
370
|
query_stock_ai_analysis_stocks: {
|
|
343
371
|
name: "query_stock_ai_analysis_stocks",
|
|
344
|
-
description: "
|
|
372
|
+
description: "分页查询所有已经产生过个股 AI 分析记录的股票列表。按股票代码和市场去重,返回每只股票最近一次分析记录 ID、最近状态、最近更新时间和累计分析次数;不返回分析正文 content。",
|
|
345
373
|
parameters: QueryStockAiAnalysisStocksParamsSchema,
|
|
346
374
|
registerTool: false,
|
|
347
375
|
async execute(params, ctx) {
|
|
348
376
|
const args = QueryStockAiAnalysisStocksParamsSchema.parse(params ?? {});
|
|
349
377
|
const db = getDB();
|
|
350
|
-
const { rows, total } = queryStockAnalysisStocks(db,
|
|
378
|
+
const { rows, total } = queryStockAnalysisStocks(db, args.market, args.page, args.pageSize);
|
|
351
379
|
return JSON.stringify({
|
|
352
380
|
success: true,
|
|
353
381
|
data: rows,
|
|
@@ -382,7 +410,6 @@ export const stockAnalysisTools: Record<string, RuntimeTool> = {
|
|
|
382
410
|
const db = getDB();
|
|
383
411
|
const data = selectStockAnalysisDetailBySession(
|
|
384
412
|
db,
|
|
385
|
-
resolveToolUserId(ctx),
|
|
386
413
|
args.sessionId,
|
|
387
414
|
normalizeStockCode(args.stock_code)
|
|
388
415
|
);
|
|
@@ -398,9 +425,8 @@ export const stockAnalysisTools: Record<string, RuntimeTool> = {
|
|
|
398
425
|
async execute(params, ctx) {
|
|
399
426
|
const args = BuildStockAiAnalysisMessageParamsSchema.parse(params);
|
|
400
427
|
const db = getDB();
|
|
401
|
-
const userId = resolveToolUserId(ctx);
|
|
402
428
|
const stock_code = normalizeStockCode(args.stock_code);
|
|
403
|
-
const generating = selectLatestGeneratingStockAnalysis(db,
|
|
429
|
+
const generating = selectLatestGeneratingStockAnalysis(db, stock_code, args.market, args.sessionId);
|
|
404
430
|
if (generating) {
|
|
405
431
|
return JSON.stringify({
|
|
406
432
|
success: true,
|
|
@@ -440,7 +466,7 @@ export const stockAnalysisTools: Record<string, RuntimeTool> = {
|
|
|
440
466
|
const userId = resolveToolUserId(ctx);
|
|
441
467
|
if (args.status === "generating") {
|
|
442
468
|
const stock_code = normalizeStockCode(args.stock_code);
|
|
443
|
-
const generating = selectLatestGeneratingStockAnalysis(db,
|
|
469
|
+
const generating = selectLatestGeneratingStockAnalysis(db, stock_code, args.market, args.sessionId);
|
|
444
470
|
if (generating) {
|
|
445
471
|
return JSON.stringify({ success: true, skipped: true, reason: "already_generating", data: generating });
|
|
446
472
|
}
|
|
@@ -457,7 +483,7 @@ export const stockAnalysisTools: Record<string, RuntimeTool> = {
|
|
|
457
483
|
async execute(params, ctx) {
|
|
458
484
|
const args = GetArticleAiAnalysisParamsSchema.parse(params);
|
|
459
485
|
const db = getDB();
|
|
460
|
-
const data = selectLatestArticleAnalysis(db,
|
|
486
|
+
const data = selectLatestArticleAnalysis(db, args.sourceId, args.analysisType, args.market);
|
|
461
487
|
return JSON.stringify({ success: true, data: data || null });
|
|
462
488
|
}
|
|
463
489
|
},
|
|
@@ -469,25 +495,24 @@ export const stockAnalysisTools: Record<string, RuntimeTool> = {
|
|
|
469
495
|
async execute(params, ctx) {
|
|
470
496
|
const args = QueryArticleAiAnalysisHistoryParamsSchema.parse(params ?? {});
|
|
471
497
|
const db = getDB();
|
|
472
|
-
const userId = resolveToolUserId(ctx);
|
|
473
498
|
const table = tableForArticleAnalysis(args.analysisType);
|
|
474
499
|
const offset = (args.page - 1) * args.pageSize;
|
|
475
500
|
const marketCondition = args.analysisType === "deduction" ? " AND market = ?" : "";
|
|
476
501
|
const queryParams = args.analysisType === "deduction"
|
|
477
|
-
? [args.analysisType,
|
|
478
|
-
: [args.analysisType,
|
|
502
|
+
? [args.analysisType, args.market, args.pageSize, offset]
|
|
503
|
+
: [args.analysisType, args.pageSize, offset];
|
|
479
504
|
const rows = db.prepare(`
|
|
480
505
|
SELECT id, sourceId, ? AS analysisType, sourceTitle, ${args.analysisType === "deduction" ? "market," : ""} sessionId, status, createdAt, updatedAt
|
|
481
506
|
FROM ${table}
|
|
482
|
-
WHERE
|
|
507
|
+
WHERE 1 = 1${marketCondition}
|
|
483
508
|
ORDER BY updatedAt DESC, createdAt DESC
|
|
484
509
|
LIMIT ? OFFSET ?
|
|
485
510
|
`).all(...queryParams);
|
|
486
|
-
const countParams = args.analysisType === "deduction" ? [
|
|
511
|
+
const countParams = args.analysisType === "deduction" ? [args.market] : [];
|
|
487
512
|
const countRow = db.prepare(`
|
|
488
513
|
SELECT COUNT(*) AS total
|
|
489
514
|
FROM ${table}
|
|
490
|
-
WHERE
|
|
515
|
+
WHERE 1 = 1${marketCondition}
|
|
491
516
|
`).get(...countParams) as { total: number };
|
|
492
517
|
const total = countRow.total || 0;
|
|
493
518
|
|