@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.
@@ -57,35 +57,83 @@ function buildDeepReasoningMessage(args) {
57
57
  ].join("\n")
58
58
  });
59
59
  }
60
- function selectGeneratingDeepReasoning(userId, sourceId) {
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 userId = ? AND sourceId = ? AND status = 'generating'
101
+ WHERE sourceId = ? AND market = ?
66
102
  ORDER BY updatedAt DESC, createdAt DESC
67
103
  LIMIT 1
68
- `).get(userId, sourceId);
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 userId = ? AND sourceId = ? AND market = ?
88
- `).get(userId, args.sourceId, args.market);
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 userId = ? AND sessionId = ? AND sourceId = ?
212
+ WHERE sessionId = ? AND sourceId = ?
165
213
  ORDER BY updatedAt DESC, createdAt DESC
166
214
  LIMIT 1
167
- `).get(ctx?.userId || "default", args.sessionId, args.sourceId);
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 userId = ctx?.userId || "default";
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(userId, args.sourceId);
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":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../../src/features/deepReasoning/tools.ts"],"names":[],"mappings":"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"}
@@ -56,35 +56,83 @@ function buildInformationVerificationMessage(args) {
56
56
  ].join("\n")
57
57
  });
58
58
  }
59
- function selectGeneratingInformationVerification(userId, sourceId) {
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 userId = ? AND sourceId = ? AND status = 'generating'
76
+ WHERE sourceId = ? AND status = 'generating'
65
77
  ORDER BY updatedAt DESC, createdAt DESC
66
78
  LIMIT 1
67
- `).get(userId, sourceId);
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 userId = ? AND sourceId = ?
87
- `).get(userId, args.sourceId);
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 userId = ? AND sessionId = ? AND sourceId = ?
211
+ WHERE sessionId = ? AND sourceId = ?
164
212
  ORDER BY updatedAt DESC, createdAt DESC
165
213
  LIMIT 1
166
- `).get(ctx?.userId || "default", args.sessionId, args.sourceId);
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 userId = ctx?.userId || "default";
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(userId, args.sourceId);
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":"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"}
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, userId, stock_code, market) {
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 userId = ? AND stock_code = ? AND market = ? AND status = 'generating'
101
+ WHERE stock_code = ? AND market = ? AND status = 'generating'
90
102
  ORDER BY updatedAt DESC, createdAt DESC
91
103
  LIMIT 1
92
- `).get(userId, stock_code, market);
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, userId, sessionId, stock_code) {
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 userId = ? AND sessionId = ? AND stock_code = ?
133
+ WHERE sessionId = ? AND stock_code = ?
108
134
  ORDER BY updatedAt DESC, createdAt DESC
109
135
  LIMIT 1
110
- `).get(userId, sessionId, stock_code);
136
+ `).get(sessionId, stock_code);
111
137
  }
112
- function queryStockAnalysisStocks(db, userId, market, page, pageSize) {
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 userId = ? AND market = ?
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(userId, market, userId, pageSize, offset);
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 userId = ? AND market = ?
173
+ WHERE market = ?
149
174
  GROUP BY stock_code, market
150
175
  )
151
- `).get(userId, market);
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 generating = status === "generating"
186
+ const existing = status === "generating"
162
187
  ? undefined
163
- : selectLatestGeneratingStockAnalysis(db, userId, stock_code, args.market);
164
- if (generating) {
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 = ? AND userId = ?
171
- `).run(status, content, generating.id, userId);
172
- return selectStockAnalysisDetail(db, generating.id);
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 userId = ? AND id = ?
182
- `).get(userId, id);
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, userId, sourceId, analysisType, market = "CN") {
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 userId = ? AND sourceId = ? AND market = ?
218
+ WHERE sourceId = ? AND market = ?
194
219
  ORDER BY updatedAt DESC, createdAt DESC
195
220
  LIMIT 1
196
- `).get(analysisType, userId, sourceId, market);
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 userId = ? AND sourceId = ?
226
+ WHERE sourceId = ?
202
227
  ORDER BY updatedAt DESC, createdAt DESC
203
228
  LIMIT 1
204
- `).get(analysisType, userId, sourceId);
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 = ["userId = ?", "market = ?"];
229
- const queryParams = [resolveToolUserId(ctx), args.market];
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: "分页查询当前用户所有已经产生过个股 AI 分析记录的股票列表。按股票代码和市场去重,返回每只股票最近一次分析记录 ID、最近状态、最近更新时间和累计分析次数;不返回分析正文 content。",
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, resolveToolUserId(ctx), args.market, args.page, args.pageSize);
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, resolveToolUserId(ctx), args.sessionId, normalizeStockCode(args.stock_code));
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, userId, stock_code, args.market);
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, userId, stock_code, args.market);
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, resolveToolUserId(ctx), args.sourceId, args.analysisType, args.market);
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, userId, args.market, args.pageSize, offset]
389
- : [args.analysisType, userId, args.pageSize, offset];
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 userId = ?${marketCondition}
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" ? [userId, args.market] : [userId];
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 userId = ?${marketCondition}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hedgehog-finance/hedgehog-plugin",
3
- "version": "1.0.27",
3
+ "version": "1.0.28",
4
4
  "description": "Hedgehog App WebSocket channel and Watchlist Tools for OpenClaw",
5
5
  "keywords": [
6
6
  "bot",
@@ -78,15 +78,52 @@ function buildDeepReasoningMessage(args: BuildDeepReasoningMessageParams): strin
78
78
  });
79
79
  }
80
80
 
81
- function selectGeneratingDeepReasoning(userId: string, sourceId: string) {
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 userId = ? AND sourceId = ? AND status = 'generating'
123
+ WHERE sourceId = ? AND market = ?
87
124
  ORDER BY updatedAt DESC, createdAt DESC
88
125
  LIMIT 1
89
- `).get(userId, sourceId);
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 userId = ? AND sourceId = ? AND market = ?
122
- `).get(userId, args.sourceId, args.market);
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 userId = ? AND sessionId = ? AND sourceId = ?
250
+ WHERE sessionId = ? AND sourceId = ?
200
251
  ORDER BY updatedAt DESC, createdAt DESC
201
252
  LIMIT 1
202
- `).get(ctx?.userId || "default", args.sessionId, args.sourceId);
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 userId = ctx?.userId || "default";
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(userId, args.sourceId);
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(userId: string, sourceId: string) {
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 userId = ? AND sourceId = ? AND status = 'generating'
97
+ WHERE sourceId = ? AND status = 'generating'
86
98
  ORDER BY updatedAt DESC, createdAt DESC
87
99
  LIMIT 1
88
- `).get(userId, sourceId);
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 userId = ? AND sourceId = ?
120
- `).get(userId, args.sourceId);
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 userId = ? AND sessionId = ? AND sourceId = ?
248
+ WHERE sessionId = ? AND sourceId = ?
198
249
  ORDER BY updatedAt DESC, createdAt DESC
199
250
  LIMIT 1
200
- `).get(ctx?.userId || "default", args.sessionId, args.sourceId);
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 userId = ctx?.userId || "default";
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(userId, args.sourceId);
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 userId = ? AND stock_code = ? AND market = ? AND status = 'generating'
142
+ WHERE stock_code = ? AND market = ? AND status = 'generating'
131
143
  ORDER BY updatedAt DESC, createdAt DESC
132
144
  LIMIT 1
133
- `).get(userId, stock_code, market) as StockAiAnalysis | undefined;
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 userId = ? AND sessionId = ? AND stock_code = ?
189
+ WHERE sessionId = ? AND stock_code = ?
159
190
  ORDER BY updatedAt DESC, createdAt DESC
160
191
  LIMIT 1
161
- `).get(userId, sessionId, stock_code) as StockAiAnalysisWithoutContent | undefined;
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 userId = ? AND market = ?
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(userId, market, userId, pageSize, offset) as StockAiAnalysisStockSummary[];
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 userId = ? AND market = ?
235
+ WHERE market = ?
207
236
  GROUP BY stock_code, market
208
237
  )
209
- `).get(userId, market) as { total: number };
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 generating = status === "generating"
261
+ const existing = status === "generating"
233
262
  ? undefined
234
- : selectLatestGeneratingStockAnalysis(db, userId, stock_code, args.market);
235
- if (generating) {
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 = ? AND userId = ?
242
- `).run(status, content, generating.id, userId);
243
- return selectStockAnalysisDetail(db, generating.id) as StockAiAnalysis;
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 userId = ? AND id = ?
255
- `).get(userId, id) as StockAiAnalysis;
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 userId = ? AND sourceId = ? AND market = ?
302
+ WHERE sourceId = ? AND market = ?
275
303
  ORDER BY updatedAt DESC, createdAt DESC
276
304
  LIMIT 1
277
- `).get(analysisType, userId, sourceId, market) as ArticleAiAnalysis | undefined;
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 userId = ? AND sourceId = ?
310
+ WHERE sourceId = ?
283
311
  ORDER BY updatedAt DESC, createdAt DESC
284
312
  LIMIT 1
285
- `).get(analysisType, userId, sourceId) as ArticleAiAnalysis | undefined;
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 = ["userId = ?", "market = ?"];
311
- const queryParams: unknown[] = [resolveToolUserId(ctx), args.market];
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: "分页查询当前用户所有已经产生过个股 AI 分析记录的股票列表。按股票代码和市场去重,返回每只股票最近一次分析记录 ID、最近状态、最近更新时间和累计分析次数;不返回分析正文 content。",
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, resolveToolUserId(ctx), args.market, args.page, args.pageSize);
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, userId, stock_code, args.market);
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, userId, stock_code, args.market);
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, resolveToolUserId(ctx), args.sourceId, args.analysisType, args.market);
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, userId, args.market, args.pageSize, offset]
478
- : [args.analysisType, userId, args.pageSize, offset];
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 userId = ?${marketCondition}
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" ? [userId, args.market] : [userId];
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 userId = ?${marketCondition}
515
+ WHERE 1 = 1${marketCondition}
491
516
  `).get(...countParams) as { total: number };
492
517
  const total = countRow.total || 0;
493
518