@hedgehog-finance/hedgehog-plugin 1.0.28 → 1.0.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +23 -1
- package/dist/index.js.map +1 -1
- package/dist/src/core/database.js +20 -2
- package/dist/src/core/database.js.map +1 -1
- package/dist/src/dailyMorningBriefingCron.js +5 -6
- package/dist/src/dailyMorningBriefingCron.js.map +1 -1
- package/dist/src/features/dailyMorningBriefing/tools.d.ts +4 -1
- package/dist/src/features/dailyMorningBriefing/tools.js +240 -23
- package/dist/src/features/dailyMorningBriefing/tools.js.map +1 -1
- package/dist/src/features/index.d.ts +4 -1
- package/index.ts +31 -1
- package/openclaw.plugin.json +1 -0
- package/package.json +3 -2
- package/src/core/database.ts +20 -2
- package/src/dailyMorningBriefingCron.ts +5 -6
- package/src/features/dailyMorningBriefing/tools.ts +285 -29
- package/src/features/index.ts +1 -1
package/dist/index.js
CHANGED
|
@@ -7,10 +7,32 @@ import { getDB } from "./src/core/database.js";
|
|
|
7
7
|
import { logger } from "./src/core/logger.js";
|
|
8
8
|
import { registerDailyMorningBriefingCron } from "./src/dailyMorningBriefingCron.js";
|
|
9
9
|
const registeredToolApis = new WeakSet();
|
|
10
|
+
const registeredToolContextApis = new WeakSet();
|
|
11
|
+
const toolExecutionContexts = new Map();
|
|
12
|
+
function registerToolContextCapture(api) {
|
|
13
|
+
if (registeredToolContextApis.has(api))
|
|
14
|
+
return;
|
|
15
|
+
registeredToolContextApis.add(api);
|
|
16
|
+
api.on("before_tool_call", (_event, ctx) => {
|
|
17
|
+
if (!ctx.toolCallId)
|
|
18
|
+
return;
|
|
19
|
+
toolExecutionContexts.set(ctx.toolCallId, {
|
|
20
|
+
agentId: ctx.agentId,
|
|
21
|
+
sessionKey: ctx.sessionKey,
|
|
22
|
+
sessionId: ctx.sessionId,
|
|
23
|
+
runId: ctx.runId
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
api.on("after_tool_call", (event) => {
|
|
27
|
+
if (event.toolCallId)
|
|
28
|
+
toolExecutionContexts.delete(event.toolCallId);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
10
31
|
function registerFeatureTools(api) {
|
|
11
32
|
if (registeredToolApis.has(api))
|
|
12
33
|
return;
|
|
13
34
|
registeredToolApis.add(api);
|
|
35
|
+
registerToolContextCapture(api);
|
|
14
36
|
Object.entries(allFeaturesTools).forEach(([name, tool]) => {
|
|
15
37
|
if (tool.registerTool === false && tool.agentToolTarget !== "main")
|
|
16
38
|
return;
|
|
@@ -20,7 +42,7 @@ function registerFeatureTools(api) {
|
|
|
20
42
|
description: tool.description,
|
|
21
43
|
parameters: tool.parameters,
|
|
22
44
|
async execute(_toolCallId, params) {
|
|
23
|
-
const result = await tool.execute(params);
|
|
45
|
+
const result = await tool.execute(params, toolExecutionContexts.get(_toolCallId));
|
|
24
46
|
const payload = JSON.parse(result);
|
|
25
47
|
if (payload &&
|
|
26
48
|
typeof payload === "object" &&
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,UAAU,EAA6C,MAAM,0BAA0B,CAAC;AACjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,gCAAgC,EAAE,MAAM,mCAAmC,CAAC;AAErF,MAAM,kBAAkB,GAAG,IAAI,OAAO,EAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
|
@@ -267,6 +267,9 @@ function runDailyMorningBriefingMigrations(db) {
|
|
|
267
267
|
const snapshotColumn = tableColumnNames.has("watchlistSnapshot") ? "watchlistSnapshot" : "watchlistSnapshotJson";
|
|
268
268
|
const statusColumn = tableColumnNames.has("status") ? "status" : "'completed'";
|
|
269
269
|
const sessionIdColumn = tableColumnNames.has("sessionId") ? "sessionId" : "''";
|
|
270
|
+
const lastNudgeAtColumn = tableColumnNames.has("lastNudgeAt") ? "lastNudgeAt" : "''";
|
|
271
|
+
const nextRetryAtColumn = tableColumnNames.has("nextRetryAt") ? "nextRetryAt" : "''";
|
|
272
|
+
const attemptCountColumn = tableColumnNames.has("attemptCount") ? "attemptCount" : "0";
|
|
270
273
|
db.exec("BEGIN");
|
|
271
274
|
try {
|
|
272
275
|
db.exec(`
|
|
@@ -279,13 +282,16 @@ function runDailyMorningBriefingMigrations(db) {
|
|
|
279
282
|
content TEXT NOT NULL,
|
|
280
283
|
status TEXT NOT NULL DEFAULT 'completed',
|
|
281
284
|
sessionId TEXT NOT NULL DEFAULT '',
|
|
285
|
+
lastNudgeAt TEXT NOT NULL DEFAULT '',
|
|
286
|
+
nextRetryAt TEXT NOT NULL DEFAULT '',
|
|
287
|
+
attemptCount INTEGER NOT NULL DEFAULT 0,
|
|
282
288
|
watchlistSnapshot TEXT NOT NULL DEFAULT '[]',
|
|
283
289
|
createdAt DATETIME DEFAULT (STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')),
|
|
284
290
|
updatedAt DATETIME DEFAULT (STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW'))
|
|
285
291
|
);
|
|
286
292
|
|
|
287
|
-
INSERT INTO daily_morning_briefings_history (id, market, briefingDate, content, status, sessionId, watchlistSnapshot, createdAt, updatedAt)
|
|
288
|
-
SELECT id, market, briefingDate, content, ${statusColumn}, ${sessionIdColumn}, ${snapshotColumn}, createdAt, updatedAt
|
|
293
|
+
INSERT INTO daily_morning_briefings_history (id, market, briefingDate, content, status, sessionId, lastNudgeAt, nextRetryAt, attemptCount, watchlistSnapshot, createdAt, updatedAt)
|
|
294
|
+
SELECT id, market, briefingDate, content, ${statusColumn}, ${sessionIdColumn}, ${lastNudgeAtColumn}, ${nextRetryAtColumn}, ${attemptCountColumn}, ${snapshotColumn}, createdAt, updatedAt
|
|
289
295
|
FROM daily_morning_briefings;
|
|
290
296
|
|
|
291
297
|
DROP TABLE daily_morning_briefings;
|
|
@@ -316,6 +322,15 @@ function runDailyMorningBriefingSchemaMigrations(db) {
|
|
|
316
322
|
if (!columnNames.has("sessionId")) {
|
|
317
323
|
db.prepare("ALTER TABLE daily_morning_briefings ADD COLUMN sessionId TEXT NOT NULL DEFAULT ''").run();
|
|
318
324
|
}
|
|
325
|
+
if (!columnNames.has("lastNudgeAt")) {
|
|
326
|
+
db.prepare("ALTER TABLE daily_morning_briefings ADD COLUMN lastNudgeAt TEXT NOT NULL DEFAULT ''").run();
|
|
327
|
+
}
|
|
328
|
+
if (!columnNames.has("nextRetryAt")) {
|
|
329
|
+
db.prepare("ALTER TABLE daily_morning_briefings ADD COLUMN nextRetryAt TEXT NOT NULL DEFAULT ''").run();
|
|
330
|
+
}
|
|
331
|
+
if (!columnNames.has("attemptCount")) {
|
|
332
|
+
db.prepare("ALTER TABLE daily_morning_briefings ADD COLUMN attemptCount INTEGER NOT NULL DEFAULT 0").run();
|
|
333
|
+
}
|
|
319
334
|
}
|
|
320
335
|
function runStockAiAnalysisMigrations(db) {
|
|
321
336
|
const tableColumns = db.prepare("PRAGMA table_info(stock_ai_analysis)").all();
|
|
@@ -778,6 +793,9 @@ export function getDB() {
|
|
|
778
793
|
content TEXT NOT NULL,
|
|
779
794
|
status TEXT NOT NULL DEFAULT 'completed',
|
|
780
795
|
sessionId TEXT NOT NULL DEFAULT '',
|
|
796
|
+
lastNudgeAt TEXT NOT NULL DEFAULT '',
|
|
797
|
+
nextRetryAt TEXT NOT NULL DEFAULT '',
|
|
798
|
+
attemptCount INTEGER NOT NULL DEFAULT 0,
|
|
781
799
|
watchlistSnapshot TEXT NOT NULL DEFAULT '[]',
|
|
782
800
|
createdAt DATETIME DEFAULT (STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')),
|
|
783
801
|
updatedAt DATETIME DEFAULT (STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW'))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../../src/core/database.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../../src/core/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,11 +6,10 @@ const DAILY_MORNING_BRIEFING_SESSION_KEY = `cron:${DAILY_MORNING_BRIEFING_CRON_I
|
|
|
6
6
|
const DAILY_MORNING_BRIEFING_SKILL = "hedgehog-daily-morning-briefing";
|
|
7
7
|
const DAILY_MORNING_BRIEFING_MESSAGE = JSON.stringify({
|
|
8
8
|
cw_system_prompt: [
|
|
9
|
-
"
|
|
10
|
-
|
|
11
|
-
"
|
|
12
|
-
|
|
13
|
-
"如果最终内容包含 [图表数据],正文必须已经包含所有对应图表占位符。"
|
|
9
|
+
"必须先调用 dispatch_daily_morning_briefing,参数为 {}。",
|
|
10
|
+
"dispatch_daily_morning_briefing 会负责判断 7:30 前跳过、当天已完成跳过、当天生成中则唤醒当天生成会话、当天未触发则启动当天生成会话。",
|
|
11
|
+
"调用 dispatch_daily_morning_briefing 后必须立即停止,不要直接调用 save_daily_morning_briefing、不要直接触发 skill、不要自行生成早报正文。",
|
|
12
|
+
`真正的每日早报生成会在按日期隔离的会话中触发并使用 ${DAILY_MORNING_BRIEFING_SKILL} skill 完成。`
|
|
14
13
|
].join("\n"),
|
|
15
14
|
cw_market: "CN",
|
|
16
15
|
cw_content: [
|
|
@@ -32,7 +31,7 @@ function buildDailyMorningBriefingCronConfig(existing) {
|
|
|
32
31
|
enabled: true,
|
|
33
32
|
schedule: {
|
|
34
33
|
kind: "cron",
|
|
35
|
-
expr: "30
|
|
34
|
+
expr: "*/30 * * * *",
|
|
36
35
|
...(existingTz ? { tz: existingTz } : {})
|
|
37
36
|
},
|
|
38
37
|
sessionTarget: "isolated",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dailyMorningBriefingCron.js","sourceRoot":"","sources":["../../src/dailyMorningBriefingCron.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,8BAA8B,GAAG,iCAAiC,CAAC;AACzE,MAAM,kCAAkC,GAAG,QAAQ,8BAA8B,EAAE,CAAC;AACpF,MAAM,4BAA4B,GAAG,iCAAiC,CAAC;AACvE,MAAM,8BAA8B,GAAG,IAAI,CAAC,SAAS,CAAC;IACrD,gBAAgB,EAAE;QACjB
|
|
1
|
+
{"version":3,"file":"dailyMorningBriefingCron.js","sourceRoot":"","sources":["../../src/dailyMorningBriefingCron.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,10 @@ interface RuntimeTool {
|
|
|
5
5
|
parameters: unknown;
|
|
6
6
|
registerTool?: boolean;
|
|
7
7
|
execute(params: unknown, ctx?: {
|
|
8
|
-
userId
|
|
8
|
+
userId?: string;
|
|
9
|
+
sessionKey?: string;
|
|
10
|
+
sessionId?: string;
|
|
11
|
+
runId?: string;
|
|
9
12
|
}): Promise<string>;
|
|
10
13
|
}
|
|
11
14
|
export declare const dailyMorningBriefingTools: Record<string, RuntimeTool>;
|
|
@@ -1,7 +1,20 @@
|
|
|
1
1
|
import { getDB } from "../../core/database.js";
|
|
2
|
-
import {
|
|
2
|
+
import { getHedgehogRuntime } from "../../runtime.js";
|
|
3
|
+
import { HEDGEHOG_AGENT_ID } from "../../openclawConstants.js";
|
|
4
|
+
import { CHART_OUTPUT_GUIDANCE, ensureChartPlaceholdersInBody } from "../chartOutput.js";
|
|
3
5
|
import { GetDailyMorningBriefingDetailParamsSchema, QueryDailyMorningBriefingsParamsSchema, SaveDailyMorningBriefingParamsSchema } from "./schema.js";
|
|
4
6
|
const DAILY_MORNING_BRIEFING_MARKET = "CN";
|
|
7
|
+
const DAILY_MORNING_BRIEFING_START_HOUR = 7;
|
|
8
|
+
const DAILY_MORNING_BRIEFING_START_MINUTE = 30;
|
|
9
|
+
const DAILY_MORNING_BRIEFING_CRON_ID = "hedgehog_daily_morning_briefing";
|
|
10
|
+
const DAILY_MORNING_BRIEFING_SKILL = "hedgehog-daily-morning-briefing";
|
|
11
|
+
const DAILY_MORNING_BRIEFING_CONTINUE_MESSAGE = "完成了吗,如果没完成请继续";
|
|
12
|
+
const DAILY_MORNING_BRIEFING_NUDGE_INTERVAL_MS = 30 * 60 * 1000;
|
|
13
|
+
const DAILY_MORNING_BRIEFING_MAX_ATTEMPTS_PER_DAY = 3;
|
|
14
|
+
const DAILY_MORNING_BRIEFING_FAILED_RETRY_COOLDOWNS_MS = [
|
|
15
|
+
30 * 60 * 1000,
|
|
16
|
+
60 * 60 * 1000
|
|
17
|
+
];
|
|
5
18
|
const SaveDailyMorningBriefingAgentToolSchema = {
|
|
6
19
|
type: "object",
|
|
7
20
|
additionalProperties: false,
|
|
@@ -11,6 +24,26 @@ const SaveDailyMorningBriefingAgentToolSchema = {
|
|
|
11
24
|
status: { type: "string", enum: ["generating", "completed", "failed"], description: "保存状态:generating 表示开始生成,completed 表示生成成功,failed 表示生成失败" }
|
|
12
25
|
}
|
|
13
26
|
};
|
|
27
|
+
const DispatchDailyMorningBriefingAgentToolSchema = {
|
|
28
|
+
type: "object",
|
|
29
|
+
additionalProperties: false,
|
|
30
|
+
properties: {}
|
|
31
|
+
};
|
|
32
|
+
const DAILY_MORNING_BRIEFING_GENERATION_MESSAGE = JSON.stringify({
|
|
33
|
+
cw_system_prompt: [
|
|
34
|
+
"开始分析前必须先调用 save_daily_morning_briefing,参数为 {\"status\":\"generating\",\"content\":\"\"};如果返回 skipped=true,必须立即停止,不要继续调用 skill 或生成正文。",
|
|
35
|
+
`必须触发并使用 ${DAILY_MORNING_BRIEFING_SKILL} skill 生成盘前简报。`,
|
|
36
|
+
"生成成功后必须调用 save_daily_morning_briefing,参数为 {\"status\":\"completed\",\"content\":\"...\"},content 传最终完整早报正文。",
|
|
37
|
+
"生成失败后必须调用 save_daily_morning_briefing,参数为 {\"status\":\"failed\",\"content\":\"...\"},content 存放完整错误信息。",
|
|
38
|
+
"如果最终内容包含 [图表数据],正文必须已经包含所有对应图表占位符。"
|
|
39
|
+
].join("\n"),
|
|
40
|
+
cw_market: "CN",
|
|
41
|
+
cw_content: "生成每日早报",
|
|
42
|
+
cw_output: [
|
|
43
|
+
`输出结构以 ${DAILY_MORNING_BRIEFING_SKILL} skill 的交付模板为准。`,
|
|
44
|
+
CHART_OUTPUT_GUIDANCE
|
|
45
|
+
].join("\n")
|
|
46
|
+
});
|
|
14
47
|
function normalizeMarket(market) {
|
|
15
48
|
const raw = market.trim().toUpperCase();
|
|
16
49
|
if (raw === "A股" || raw === "中国股市" || raw === "MARKETS.CN")
|
|
@@ -24,11 +57,48 @@ function getLocalDateString() {
|
|
|
24
57
|
const day = String(now.getDate()).padStart(2, "0");
|
|
25
58
|
return `${year}-${month}-${day}`;
|
|
26
59
|
}
|
|
60
|
+
function getUnixMsFromDbTimestamp(value) {
|
|
61
|
+
if (!value)
|
|
62
|
+
return 0;
|
|
63
|
+
const timestamp = Date.parse(value);
|
|
64
|
+
return Number.isFinite(timestamp) ? timestamp : 0;
|
|
65
|
+
}
|
|
66
|
+
function toDbTimestamp(ms) {
|
|
67
|
+
return new Date(ms).toISOString();
|
|
68
|
+
}
|
|
69
|
+
function getFailedRetryCooldownMs(attemptCount) {
|
|
70
|
+
if (attemptCount >= DAILY_MORNING_BRIEFING_MAX_ATTEMPTS_PER_DAY)
|
|
71
|
+
return undefined;
|
|
72
|
+
return DAILY_MORNING_BRIEFING_FAILED_RETRY_COOLDOWNS_MS[Math.max(0, attemptCount - 1)] ?? DAILY_MORNING_BRIEFING_FAILED_RETRY_COOLDOWNS_MS[DAILY_MORNING_BRIEFING_FAILED_RETRY_COOLDOWNS_MS.length - 1];
|
|
73
|
+
}
|
|
74
|
+
function getNextRetryAtForFailedAttempt(attemptCount, nowMs = Date.now()) {
|
|
75
|
+
const cooldownMs = getFailedRetryCooldownMs(attemptCount);
|
|
76
|
+
return typeof cooldownMs === "number" ? toDbTimestamp(nowMs + cooldownMs) : "";
|
|
77
|
+
}
|
|
78
|
+
function getHalfHourBucket() {
|
|
79
|
+
const now = new Date();
|
|
80
|
+
const year = now.getFullYear();
|
|
81
|
+
const month = String(now.getMonth() + 1).padStart(2, "0");
|
|
82
|
+
const day = String(now.getDate()).padStart(2, "0");
|
|
83
|
+
const hour = String(now.getHours()).padStart(2, "0");
|
|
84
|
+
const minute = now.getMinutes() < 30 ? "00" : "30";
|
|
85
|
+
return `${year}${month}${day}${hour}${minute}`;
|
|
86
|
+
}
|
|
87
|
+
function isBeforeDailyMorningBriefingStart() {
|
|
88
|
+
const now = new Date();
|
|
89
|
+
const currentMinutes = now.getHours() * 60 + now.getMinutes();
|
|
90
|
+
const startMinutes = DAILY_MORNING_BRIEFING_START_HOUR * 60 + DAILY_MORNING_BRIEFING_START_MINUTE;
|
|
91
|
+
return currentMinutes < startMinutes;
|
|
92
|
+
}
|
|
27
93
|
function buildDailyMorningBriefingId(market, briefingDate) {
|
|
28
94
|
return `daily_morning_briefing_${market}_${briefingDate}`;
|
|
29
95
|
}
|
|
30
96
|
function buildDailyMorningBriefingSessionId(market, briefingDate) {
|
|
31
|
-
return `
|
|
97
|
+
return `agent:${HEDGEHOG_AGENT_ID}:cron:${DAILY_MORNING_BRIEFING_CRON_ID}:${market}:${briefingDate}`;
|
|
98
|
+
}
|
|
99
|
+
function buildDailyMorningBriefingAttemptSessionId(market, briefingDate, attemptCount) {
|
|
100
|
+
const base = buildDailyMorningBriefingSessionId(market, briefingDate);
|
|
101
|
+
return attemptCount > 1 ? `${base}:attempt:${attemptCount}` : base;
|
|
32
102
|
}
|
|
33
103
|
function selectDailyMorningBriefing(db, id) {
|
|
34
104
|
const row = db.prepare(`
|
|
@@ -65,18 +135,6 @@ function selectExistingActiveDailyMorningBriefing(db, market, briefingDate) {
|
|
|
65
135
|
`).get(market, briefingDate);
|
|
66
136
|
return row ? selectDailyMorningBriefing(db, row.id) : undefined;
|
|
67
137
|
}
|
|
68
|
-
function selectGeneratingDailyMorningBriefing(db, market, briefingDate) {
|
|
69
|
-
const row = db.prepare(`
|
|
70
|
-
SELECT id
|
|
71
|
-
FROM daily_morning_briefings
|
|
72
|
-
WHERE market = ?
|
|
73
|
-
AND briefingDate = ?
|
|
74
|
-
AND status = 'generating'
|
|
75
|
-
ORDER BY updatedAt DESC, createdAt DESC
|
|
76
|
-
LIMIT 1
|
|
77
|
-
`).get(market, briefingDate);
|
|
78
|
-
return row ? selectDailyMorningBriefing(db, row.id) : undefined;
|
|
79
|
-
}
|
|
80
138
|
function mapDailyMorningBriefingRow(row) {
|
|
81
139
|
return {
|
|
82
140
|
id: row.id,
|
|
@@ -118,14 +176,151 @@ function getFullWatchlistSnapshot(db) {
|
|
|
118
176
|
};
|
|
119
177
|
});
|
|
120
178
|
}
|
|
179
|
+
function insertGeneratingDailyMorningBriefing(db, market, briefingDate, id, sessionId, watchlistSnapshot) {
|
|
180
|
+
db.prepare(`
|
|
181
|
+
INSERT INTO daily_morning_briefings (id, market, briefingDate, content, status, sessionId, lastNudgeAt, nextRetryAt, attemptCount, watchlistSnapshot)
|
|
182
|
+
VALUES (?, ?, ?, '', 'generating', ?, '', '', 1, ?)
|
|
183
|
+
`).run(id, market, briefingDate, sessionId, watchlistSnapshot);
|
|
184
|
+
return selectDailyMorningBriefing(db, id);
|
|
185
|
+
}
|
|
186
|
+
function markDailyMorningBriefingFailed(db, id, content) {
|
|
187
|
+
const row = db.prepare(`
|
|
188
|
+
SELECT attemptCount
|
|
189
|
+
FROM daily_morning_briefings
|
|
190
|
+
WHERE id = ?
|
|
191
|
+
`).get(id);
|
|
192
|
+
const attemptCount = Math.max(1, Number(row?.attemptCount) || 1);
|
|
193
|
+
const result = db.prepare(`
|
|
194
|
+
UPDATE daily_morning_briefings
|
|
195
|
+
SET status = 'failed',
|
|
196
|
+
content = ?,
|
|
197
|
+
nextRetryAt = ?,
|
|
198
|
+
updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')
|
|
199
|
+
WHERE id = ?
|
|
200
|
+
`).run(content, getNextRetryAtForFailedAttempt(attemptCount), id);
|
|
201
|
+
return result.changes > 0;
|
|
202
|
+
}
|
|
203
|
+
function claimDailyMorningBriefingDispatch(db, market, briefingDate) {
|
|
204
|
+
if (isBeforeDailyMorningBriefingStart()) {
|
|
205
|
+
return { action: "skip", reason: "before_start_time" };
|
|
206
|
+
}
|
|
207
|
+
const id = buildDailyMorningBriefingId(market, briefingDate);
|
|
208
|
+
const watchlistSnapshot = JSON.stringify(getFullWatchlistSnapshot(db));
|
|
209
|
+
db.exec("BEGIN IMMEDIATE");
|
|
210
|
+
try {
|
|
211
|
+
const existing = db.prepare(`
|
|
212
|
+
SELECT id, market, briefingDate, content, status, sessionId, lastNudgeAt, nextRetryAt, attemptCount, watchlistSnapshot, createdAt, updatedAt
|
|
213
|
+
FROM daily_morning_briefings
|
|
214
|
+
WHERE id = ?
|
|
215
|
+
`).get(id);
|
|
216
|
+
if (existing?.status === "completed") {
|
|
217
|
+
db.exec("COMMIT");
|
|
218
|
+
return { action: "skip", reason: "already_completed", data: mapDailyMorningBriefingRow(existing) };
|
|
219
|
+
}
|
|
220
|
+
if (existing?.status === "generating") {
|
|
221
|
+
const lastNudgeAtMs = getUnixMsFromDbTimestamp(existing.lastNudgeAt);
|
|
222
|
+
if (lastNudgeAtMs > 0 && Date.now() - lastNudgeAtMs < DAILY_MORNING_BRIEFING_NUDGE_INTERVAL_MS) {
|
|
223
|
+
db.exec("COMMIT");
|
|
224
|
+
return { action: "skip", reason: "nudge_throttled", data: mapDailyMorningBriefingRow(existing) };
|
|
225
|
+
}
|
|
226
|
+
db.prepare(`
|
|
227
|
+
UPDATE daily_morning_briefings
|
|
228
|
+
SET lastNudgeAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW'),
|
|
229
|
+
updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')
|
|
230
|
+
WHERE id = ?
|
|
231
|
+
AND status = 'generating'
|
|
232
|
+
`).run(id);
|
|
233
|
+
const data = selectDailyMorningBriefing(db, id);
|
|
234
|
+
db.exec("COMMIT");
|
|
235
|
+
return { action: "continue", data, idempotencyKey: `${id}:continue:${getHalfHourBucket()}` };
|
|
236
|
+
}
|
|
237
|
+
if (existing) {
|
|
238
|
+
const currentAttemptCount = Math.max(0, Number(existing.attemptCount) || 0);
|
|
239
|
+
const nextAttemptCount = currentAttemptCount > 0 ? currentAttemptCount + 1 : 1;
|
|
240
|
+
if (nextAttemptCount > DAILY_MORNING_BRIEFING_MAX_ATTEMPTS_PER_DAY) {
|
|
241
|
+
db.exec("COMMIT");
|
|
242
|
+
return { action: "skip", reason: "max_attempts_reached", data: mapDailyMorningBriefingRow(existing) };
|
|
243
|
+
}
|
|
244
|
+
const nextRetryAtMs = getUnixMsFromDbTimestamp(existing.nextRetryAt);
|
|
245
|
+
if (nextRetryAtMs > Date.now()) {
|
|
246
|
+
db.exec("COMMIT");
|
|
247
|
+
return { action: "skip", reason: "retry_cooling_down", nextRetryAt: existing.nextRetryAt, data: mapDailyMorningBriefingRow(existing) };
|
|
248
|
+
}
|
|
249
|
+
const sessionId = buildDailyMorningBriefingAttemptSessionId(market, briefingDate, nextAttemptCount);
|
|
250
|
+
db.prepare(`
|
|
251
|
+
UPDATE daily_morning_briefings
|
|
252
|
+
SET content = '',
|
|
253
|
+
status = 'generating',
|
|
254
|
+
sessionId = ?,
|
|
255
|
+
lastNudgeAt = '',
|
|
256
|
+
nextRetryAt = '',
|
|
257
|
+
attemptCount = ?,
|
|
258
|
+
watchlistSnapshot = ?,
|
|
259
|
+
updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')
|
|
260
|
+
WHERE id = ?
|
|
261
|
+
AND status != 'completed'
|
|
262
|
+
`).run(sessionId, nextAttemptCount, watchlistSnapshot, id);
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
insertGeneratingDailyMorningBriefing(db, market, briefingDate, id, buildDailyMorningBriefingAttemptSessionId(market, briefingDate, 1), watchlistSnapshot);
|
|
266
|
+
}
|
|
267
|
+
const data = selectDailyMorningBriefing(db, id);
|
|
268
|
+
db.exec("COMMIT");
|
|
269
|
+
return { action: "start", data, idempotencyKey: `${id}:start:${data.sessionId}` };
|
|
270
|
+
}
|
|
271
|
+
catch (e) {
|
|
272
|
+
if (db.inTransaction)
|
|
273
|
+
db.exec("ROLLBACK");
|
|
274
|
+
throw e;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
121
277
|
export const dailyMorningBriefingTools = {
|
|
278
|
+
dispatch_daily_morning_briefing: {
|
|
279
|
+
name: "dispatch_daily_morning_briefing",
|
|
280
|
+
label: "调度每日盘前早报",
|
|
281
|
+
description: "调度每日盘前早报。7:30 前跳过;当天已完成则跳过;当天生成中则向当天生成会话发送“完成了吗,如果没完成请继续”;当天未触发则创建当天生成记录并在按日期隔离的会话中启动早报生成。",
|
|
282
|
+
parameters: DispatchDailyMorningBriefingAgentToolSchema,
|
|
283
|
+
registerTool: true,
|
|
284
|
+
async execute() {
|
|
285
|
+
const db = getDB();
|
|
286
|
+
const market = DAILY_MORNING_BRIEFING_MARKET;
|
|
287
|
+
const briefingDate = getLocalDateString();
|
|
288
|
+
const decision = claimDailyMorningBriefingDispatch(db, market, briefingDate);
|
|
289
|
+
if (decision.action === "skip") {
|
|
290
|
+
return JSON.stringify({ success: true, skipped: true, reason: decision.reason, nextRetryAt: decision.nextRetryAt, data: decision.data });
|
|
291
|
+
}
|
|
292
|
+
const runtime = getHedgehogRuntime();
|
|
293
|
+
if (decision.action === "continue") {
|
|
294
|
+
await runtime.subagent.run({
|
|
295
|
+
sessionKey: decision.data.sessionId,
|
|
296
|
+
message: DAILY_MORNING_BRIEFING_CONTINUE_MESSAGE,
|
|
297
|
+
deliver: false,
|
|
298
|
+
idempotencyKey: decision.idempotencyKey
|
|
299
|
+
});
|
|
300
|
+
return JSON.stringify({ success: true, skipped: true, reason: "already_generating", action: "continued", data: decision.data });
|
|
301
|
+
}
|
|
302
|
+
try {
|
|
303
|
+
await runtime.subagent.run({
|
|
304
|
+
sessionKey: decision.data.sessionId,
|
|
305
|
+
message: DAILY_MORNING_BRIEFING_GENERATION_MESSAGE,
|
|
306
|
+
deliver: false,
|
|
307
|
+
idempotencyKey: decision.idempotencyKey
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
catch (e) {
|
|
311
|
+
markDailyMorningBriefingFailed(db, decision.data.id, e instanceof Error ? e.message : String(e));
|
|
312
|
+
throw e;
|
|
313
|
+
}
|
|
314
|
+
return JSON.stringify({ success: true, action: "started", data: decision.data });
|
|
315
|
+
}
|
|
316
|
+
},
|
|
122
317
|
save_daily_morning_briefing: {
|
|
123
318
|
name: "save_daily_morning_briefing",
|
|
124
319
|
label: "保存每日盘前早报",
|
|
125
320
|
description: "保存每日盘前早报的生成进度和最终结果。生成前必须先以 status=generating、content=\"\" 调用;生成成功后以 status=completed 保存完整正文 content;生成失败后以 status=failed 保存完整错误信息。未传 id 时会自动使用当天固定记录,完成或失败时可直接更新当天早报。",
|
|
126
321
|
parameters: SaveDailyMorningBriefingAgentToolSchema,
|
|
127
322
|
registerTool: true,
|
|
128
|
-
async execute(params) {
|
|
323
|
+
async execute(params, ctx) {
|
|
129
324
|
const args = SaveDailyMorningBriefingParamsSchema.parse(params);
|
|
130
325
|
const db = getDB();
|
|
131
326
|
const market = DAILY_MORNING_BRIEFING_MARKET;
|
|
@@ -136,28 +331,50 @@ export const dailyMorningBriefingTools = {
|
|
|
136
331
|
FROM daily_morning_briefings
|
|
137
332
|
WHERE id = ?
|
|
138
333
|
`).get(id);
|
|
139
|
-
const
|
|
334
|
+
const expectedSessionId = buildDailyMorningBriefingSessionId(market, briefingDate);
|
|
335
|
+
const currentSessionId = ctx?.sessionKey?.trim() || ctx?.sessionId?.trim() || "";
|
|
336
|
+
const sessionId = existing?.sessionId || expectedSessionId;
|
|
140
337
|
if (args.status === "generating") {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
338
|
+
if (isBeforeDailyMorningBriefingStart()) {
|
|
339
|
+
return JSON.stringify({ success: true, skipped: true, reason: "before_start_time" });
|
|
340
|
+
}
|
|
341
|
+
const active = selectExistingActiveDailyMorningBriefing(db, market, briefingDate);
|
|
342
|
+
if (active) {
|
|
343
|
+
if (active.status === "generating" && currentSessionId && active.sessionId === currentSessionId) {
|
|
344
|
+
return JSON.stringify({ success: true, data: active });
|
|
345
|
+
}
|
|
346
|
+
const reason = active.status === "generating" ? "already_generating" : "already_completed";
|
|
347
|
+
return JSON.stringify({ success: true, skipped: true, reason, data: active });
|
|
144
348
|
}
|
|
145
349
|
}
|
|
146
350
|
const watchlistSnapshot = JSON.stringify(getFullWatchlistSnapshot(db));
|
|
147
351
|
const content = args.status === "completed" ? ensureChartPlaceholdersInBody(args.content) : args.content.trim();
|
|
352
|
+
const nextRetryAt = args.status === "failed" ? getNextRetryAtForFailedAttempt(1) : "";
|
|
353
|
+
if (args.status === "failed") {
|
|
354
|
+
const updated = markDailyMorningBriefingFailed(db, id, content);
|
|
355
|
+
if (!updated) {
|
|
356
|
+
db.prepare(`
|
|
357
|
+
INSERT INTO daily_morning_briefings (id, market, briefingDate, content, status, sessionId, nextRetryAt, attemptCount, watchlistSnapshot)
|
|
358
|
+
VALUES (?, ?, ?, ?, 'failed', ?, ?, 1, ?)
|
|
359
|
+
`).run(id, market, briefingDate, content, sessionId, nextRetryAt, watchlistSnapshot);
|
|
360
|
+
}
|
|
361
|
+
return JSON.stringify({ success: true, data: selectDailyMorningBriefing(db, id) });
|
|
362
|
+
}
|
|
148
363
|
const result = db.prepare(`
|
|
149
364
|
UPDATE daily_morning_briefings
|
|
150
365
|
SET content = ?,
|
|
151
366
|
status = ?,
|
|
152
367
|
watchlistSnapshot = ?,
|
|
368
|
+
sessionId = CASE WHEN ? != '' THEN ? ELSE sessionId END,
|
|
369
|
+
nextRetryAt = ?,
|
|
153
370
|
updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')
|
|
154
371
|
WHERE id = ?
|
|
155
|
-
`).run(content, args.status, watchlistSnapshot, id);
|
|
372
|
+
`).run(content, args.status, watchlistSnapshot, sessionId, sessionId, nextRetryAt, id);
|
|
156
373
|
if (result.changes === 0) {
|
|
157
374
|
db.prepare(`
|
|
158
|
-
INSERT INTO daily_morning_briefings (id, market, briefingDate, content, status, sessionId, watchlistSnapshot)
|
|
159
|
-
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
160
|
-
`).run(id, market, briefingDate, content, args.status, sessionId, watchlistSnapshot);
|
|
375
|
+
INSERT INTO daily_morning_briefings (id, market, briefingDate, content, status, sessionId, lastNudgeAt, nextRetryAt, attemptCount, watchlistSnapshot)
|
|
376
|
+
VALUES (?, ?, ?, ?, ?, ?, '', '', ?, ?)
|
|
377
|
+
`).run(id, market, briefingDate, content, args.status, sessionId, args.status === "generating" ? 1 : 0, watchlistSnapshot);
|
|
161
378
|
}
|
|
162
379
|
const data = selectDailyMorningBriefing(db, id);
|
|
163
380
|
return JSON.stringify({ success: true, data });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../../src/features/dailyMorningBriefing/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAEN,yCAAyC,EACzC,sCAAsC,EACtC,oCAAoC,EACpC,MAAM,aAAa,CAAC;AAWrB,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAE3C,MAAM,uCAAuC,GAAG;IAC/C,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;QACX,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0CAA0C,EAAE;QAC/E,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sDAAsD,EAAE;QAChG,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,uDAAuD,EAAE;KAC7I;CACD,CAAC;AAEF,SAAS,eAAe,CAAC,MAAc;IACtC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACxC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IACxE,OAAO,GAAG,IAAI,IAAI,CAAC;AACpB,CAAC;AAED,SAAS,kBAAkB;IAC1B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnD,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,2BAA2B,CAAC,MAAc,EAAE,YAAoB;IACxE,OAAO,0BAA0B,MAAM,IAAI,YAAY,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,kCAAkC,CAAC,MAAc,EAAE,YAAoB;IAC/E,OAAO,0BAA0B,MAAM,IAAI,YAAY,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AACzE,CAAC;AAED,SAAS,0BAA0B,CAClC,EAA4B,EAC5B,EAAU;IAEV,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;;;;EAItB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAkG,CAAC;IAE5G,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAElE,OAAO;QACN,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC;QAC5D,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,SAAS,EAAE,GAAG,CAAC,SAAS;KACxB,CAAC;AACH,CAAC;AAED,SAAS,wCAAwC,CAChD,EAA4B,EAC5B,MAAc,EACd,YAAoB;IAEpB,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;EAWtB,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAA+B,CAAC;IAC3D,OAAO,GAAG,CAAC,CAAC,CAAC,0BAA0B,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC;AAED,SAAS,oCAAoC,CAC5C,EAA4B,EAC5B,MAAc,EACd,YAAoB;IAEpB,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;EAQtB,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAA+B,CAAC;IAC3D,OAAO,GAAG,CAAC,CAAC,CAAC,0BAA0B,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC;AAED,SAAS,0BAA0B,CAAC,GAAoF;IACvH,OAAO;QACN,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC;QAC5D,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,SAAS,EAAE,GAAG,CAAC,SAAS;KACxB,CAAC;AACH,CAAC;AAED,SAAS,8BAA8B,CAAC,GAAgE;IACvG,OAAO,GAAG,CAAC;AACZ,CAAC;AAED,SAAS,wBAAwB,CAAC,EAA4B;IAC7D,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;EAKzB,CAAC,CAAC,GAAG,EAAsJ,CAAC;IAE7J,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACzB,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC;;;;GAI7B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAuB,CAAC;QACvC,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;;;;GAIzB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAuB,CAAC;QAEvC,OAAO;YACN,GAAG,KAAK;YACR,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7C,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;SACrC,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAgC;IACrE,2BAA2B,EAAE;QAC5B,IAAI,EAAE,6BAA6B;QACnC,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,uKAAuK;QACpL,UAAU,EAAE,uCAAuC;QACnD,YAAY,EAAE,IAAI;QAClB,KAAK,CAAC,OAAO,CAAC,MAAM;YACnB,MAAM,IAAI,GAAG,oCAAoC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAChE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,6BAA6B,CAAC;YAC7C,MAAM,YAAY,GAAG,kBAAkB,EAAE,CAAC;YAC1C,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,2BAA2B,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YACxE,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC;;;;IAI3B,CAAC,CAAC,GAAG,CAAC,EAAE,CAAsC,CAAC;YAChD,MAAM,SAAS,GAAG,QAAQ,EAAE,SAAS,IAAI,kCAAkC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAClG,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;gBAClC,MAAM,UAAU,GAAG,oCAAoC,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;gBAClF,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;YAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC;YACvE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,6BAA6B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAEhH,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;IAOzB,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;YACpD,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;gBAC1B,EAAE,CAAC,OAAO,CAAC;;;KAGV,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;YACtF,CAAC;YAED,MAAM,IAAI,GAAG,0BAA0B,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;KACD;IACD,6BAA6B,EAAE;QAC9B,IAAI,EAAE,+BAA+B;QACrC,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,6EAA6E;QAC1F,UAAU,EAAE,sCAAsC;QAClD,YAAY,EAAE,KAAK;QACnB,KAAK,CAAC,OAAO,CAAC,MAAM;YACnB,MAAM,IAAI,GAAG,sCAAsC,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YACxE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/C,MAAM,KAAK,GAAI,EAAE,CAAC,OAAO,CAAC;;;;IAIzB,CAAC,CAAC,GAAG,CAAC,MAAM,CAAuB,CAAC,KAAK,IAAI,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;IAMvB,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAkE,CAAC;YAEvG,OAAO,IAAI,CAAC,SAAS,CAAC;gBACrB,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,8BAA8B,CAAC;gBAC9C,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,iCAAiC,EAAE;QAClC,IAAI,EAAE,mCAAmC;QACzC,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,4GAA4G;QACzH,UAAU,EAAE,yCAAyC;QACrD,YAAY,EAAE,KAAK;QACnB,KAAK,CAAC,OAAO,CAAC,MAAM;YACnB,MAAM,IAAI,GAAG,yCAAyC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACrE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,GAAG,0BAA0B,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;KACD;CACD,CAAC"}
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../../src/features/dailyMorningBriefing/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,10 @@ export interface RuntimeTool {
|
|
|
6
6
|
registerTool?: boolean;
|
|
7
7
|
agentToolTarget?: "main";
|
|
8
8
|
execute(params: unknown, ctx?: {
|
|
9
|
-
userId
|
|
9
|
+
userId?: string;
|
|
10
|
+
sessionKey?: string;
|
|
11
|
+
sessionId?: string;
|
|
12
|
+
runId?: string;
|
|
10
13
|
}): Promise<string>;
|
|
11
14
|
}
|
|
12
15
|
export declare const allFeaturesTools: Record<string, RuntimeTool>;
|
package/index.ts
CHANGED
|
@@ -8,10 +8,40 @@ import { logger } from "./src/core/logger.js";
|
|
|
8
8
|
import { registerDailyMorningBriefingCron } from "./src/dailyMorningBriefingCron.js";
|
|
9
9
|
|
|
10
10
|
const registeredToolApis = new WeakSet<OpenClawPluginApi>();
|
|
11
|
+
const registeredToolContextApis = new WeakSet<OpenClawPluginApi>();
|
|
12
|
+
|
|
13
|
+
type ToolExecutionContext = {
|
|
14
|
+
agentId?: string;
|
|
15
|
+
sessionKey?: string;
|
|
16
|
+
sessionId?: string;
|
|
17
|
+
runId?: string;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const toolExecutionContexts = new Map<string, ToolExecutionContext>();
|
|
21
|
+
|
|
22
|
+
function registerToolContextCapture(api: OpenClawPluginApi): void {
|
|
23
|
+
if (registeredToolContextApis.has(api)) return;
|
|
24
|
+
registeredToolContextApis.add(api);
|
|
25
|
+
|
|
26
|
+
api.on("before_tool_call", (_event, ctx) => {
|
|
27
|
+
if (!ctx.toolCallId) return;
|
|
28
|
+
toolExecutionContexts.set(ctx.toolCallId, {
|
|
29
|
+
agentId: ctx.agentId,
|
|
30
|
+
sessionKey: ctx.sessionKey,
|
|
31
|
+
sessionId: ctx.sessionId,
|
|
32
|
+
runId: ctx.runId
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
api.on("after_tool_call", (event) => {
|
|
37
|
+
if (event.toolCallId) toolExecutionContexts.delete(event.toolCallId);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
11
40
|
|
|
12
41
|
function registerFeatureTools(api: OpenClawPluginApi): void {
|
|
13
42
|
if (registeredToolApis.has(api)) return;
|
|
14
43
|
registeredToolApis.add(api);
|
|
44
|
+
registerToolContextCapture(api);
|
|
15
45
|
|
|
16
46
|
Object.entries(allFeaturesTools).forEach(([name, tool]) => {
|
|
17
47
|
if (tool.registerTool === false && tool.agentToolTarget !== "main") return;
|
|
@@ -21,7 +51,7 @@ function registerFeatureTools(api: OpenClawPluginApi): void {
|
|
|
21
51
|
description: tool.description,
|
|
22
52
|
parameters: tool.parameters as any,
|
|
23
53
|
async execute(_toolCallId, params) {
|
|
24
|
-
const result = await tool.execute(params);
|
|
54
|
+
const result = await tool.execute(params, toolExecutionContexts.get(_toolCallId));
|
|
25
55
|
const payload: unknown = JSON.parse(result);
|
|
26
56
|
if (
|
|
27
57
|
payload &&
|
package/openclaw.plugin.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hedgehog-finance/hedgehog-plugin",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.29",
|
|
4
4
|
"description": "Hedgehog App WebSocket channel and Watchlist Tools for OpenClaw",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bot",
|
|
@@ -47,6 +47,7 @@
|
|
|
47
47
|
"tools": [
|
|
48
48
|
"get_watchlist",
|
|
49
49
|
"get_industry_list",
|
|
50
|
+
"dispatch_daily_morning_briefing",
|
|
50
51
|
"save_daily_morning_briefing",
|
|
51
52
|
"save_stock_ai_analysis",
|
|
52
53
|
"save_information_verification",
|
|
@@ -64,7 +65,7 @@
|
|
|
64
65
|
],
|
|
65
66
|
"setupEntry": "./dist/setup-api.js",
|
|
66
67
|
"install": {
|
|
67
|
-
"npmSpec": "@hedgehog-finance/hedgehog-plugin",
|
|
68
|
+
"npmSpec": "@hedgehog-finance/hedgehog-plugin@latest",
|
|
68
69
|
"defaultChoice": "npm"
|
|
69
70
|
},
|
|
70
71
|
"compat": {
|
package/src/core/database.ts
CHANGED
|
@@ -277,6 +277,9 @@ function runDailyMorningBriefingMigrations(db: DatabaseSync) {
|
|
|
277
277
|
const snapshotColumn = tableColumnNames.has("watchlistSnapshot") ? "watchlistSnapshot" : "watchlistSnapshotJson";
|
|
278
278
|
const statusColumn = tableColumnNames.has("status") ? "status" : "'completed'";
|
|
279
279
|
const sessionIdColumn = tableColumnNames.has("sessionId") ? "sessionId" : "''";
|
|
280
|
+
const lastNudgeAtColumn = tableColumnNames.has("lastNudgeAt") ? "lastNudgeAt" : "''";
|
|
281
|
+
const nextRetryAtColumn = tableColumnNames.has("nextRetryAt") ? "nextRetryAt" : "''";
|
|
282
|
+
const attemptCountColumn = tableColumnNames.has("attemptCount") ? "attemptCount" : "0";
|
|
280
283
|
db.exec("BEGIN");
|
|
281
284
|
try {
|
|
282
285
|
db.exec(`
|
|
@@ -289,13 +292,16 @@ function runDailyMorningBriefingMigrations(db: DatabaseSync) {
|
|
|
289
292
|
content TEXT NOT NULL,
|
|
290
293
|
status TEXT NOT NULL DEFAULT 'completed',
|
|
291
294
|
sessionId TEXT NOT NULL DEFAULT '',
|
|
295
|
+
lastNudgeAt TEXT NOT NULL DEFAULT '',
|
|
296
|
+
nextRetryAt TEXT NOT NULL DEFAULT '',
|
|
297
|
+
attemptCount INTEGER NOT NULL DEFAULT 0,
|
|
292
298
|
watchlistSnapshot TEXT NOT NULL DEFAULT '[]',
|
|
293
299
|
createdAt DATETIME DEFAULT (STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')),
|
|
294
300
|
updatedAt DATETIME DEFAULT (STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW'))
|
|
295
301
|
);
|
|
296
302
|
|
|
297
|
-
INSERT INTO daily_morning_briefings_history (id, market, briefingDate, content, status, sessionId, watchlistSnapshot, createdAt, updatedAt)
|
|
298
|
-
SELECT id, market, briefingDate, content, ${statusColumn}, ${sessionIdColumn}, ${snapshotColumn}, createdAt, updatedAt
|
|
303
|
+
INSERT INTO daily_morning_briefings_history (id, market, briefingDate, content, status, sessionId, lastNudgeAt, nextRetryAt, attemptCount, watchlistSnapshot, createdAt, updatedAt)
|
|
304
|
+
SELECT id, market, briefingDate, content, ${statusColumn}, ${sessionIdColumn}, ${lastNudgeAtColumn}, ${nextRetryAtColumn}, ${attemptCountColumn}, ${snapshotColumn}, createdAt, updatedAt
|
|
299
305
|
FROM daily_morning_briefings;
|
|
300
306
|
|
|
301
307
|
DROP TABLE daily_morning_briefings;
|
|
@@ -324,6 +330,15 @@ function runDailyMorningBriefingSchemaMigrations(db: DatabaseSync) {
|
|
|
324
330
|
if (!columnNames.has("sessionId")) {
|
|
325
331
|
db.prepare("ALTER TABLE daily_morning_briefings ADD COLUMN sessionId TEXT NOT NULL DEFAULT ''").run();
|
|
326
332
|
}
|
|
333
|
+
if (!columnNames.has("lastNudgeAt")) {
|
|
334
|
+
db.prepare("ALTER TABLE daily_morning_briefings ADD COLUMN lastNudgeAt TEXT NOT NULL DEFAULT ''").run();
|
|
335
|
+
}
|
|
336
|
+
if (!columnNames.has("nextRetryAt")) {
|
|
337
|
+
db.prepare("ALTER TABLE daily_morning_briefings ADD COLUMN nextRetryAt TEXT NOT NULL DEFAULT ''").run();
|
|
338
|
+
}
|
|
339
|
+
if (!columnNames.has("attemptCount")) {
|
|
340
|
+
db.prepare("ALTER TABLE daily_morning_briefings ADD COLUMN attemptCount INTEGER NOT NULL DEFAULT 0").run();
|
|
341
|
+
}
|
|
327
342
|
}
|
|
328
343
|
|
|
329
344
|
function runStockAiAnalysisMigrations(db: DatabaseSync) {
|
|
@@ -788,6 +803,9 @@ export function getDB(): DatabaseSync {
|
|
|
788
803
|
content TEXT NOT NULL,
|
|
789
804
|
status TEXT NOT NULL DEFAULT 'completed',
|
|
790
805
|
sessionId TEXT NOT NULL DEFAULT '',
|
|
806
|
+
lastNudgeAt TEXT NOT NULL DEFAULT '',
|
|
807
|
+
nextRetryAt TEXT NOT NULL DEFAULT '',
|
|
808
|
+
attemptCount INTEGER NOT NULL DEFAULT 0,
|
|
791
809
|
watchlistSnapshot TEXT NOT NULL DEFAULT '[]',
|
|
792
810
|
createdAt DATETIME DEFAULT (STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')),
|
|
793
811
|
updatedAt DATETIME DEFAULT (STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW'))
|
|
@@ -8,11 +8,10 @@ const DAILY_MORNING_BRIEFING_SESSION_KEY = `cron:${DAILY_MORNING_BRIEFING_CRON_I
|
|
|
8
8
|
const DAILY_MORNING_BRIEFING_SKILL = "hedgehog-daily-morning-briefing";
|
|
9
9
|
const DAILY_MORNING_BRIEFING_MESSAGE = JSON.stringify({
|
|
10
10
|
cw_system_prompt: [
|
|
11
|
-
"
|
|
12
|
-
|
|
13
|
-
"
|
|
14
|
-
|
|
15
|
-
"如果最终内容包含 [图表数据],正文必须已经包含所有对应图表占位符。"
|
|
11
|
+
"必须先调用 dispatch_daily_morning_briefing,参数为 {}。",
|
|
12
|
+
"dispatch_daily_morning_briefing 会负责判断 7:30 前跳过、当天已完成跳过、当天生成中则唤醒当天生成会话、当天未触发则启动当天生成会话。",
|
|
13
|
+
"调用 dispatch_daily_morning_briefing 后必须立即停止,不要直接调用 save_daily_morning_briefing、不要直接触发 skill、不要自行生成早报正文。",
|
|
14
|
+
`真正的每日早报生成会在按日期隔离的会话中触发并使用 ${DAILY_MORNING_BRIEFING_SKILL} skill 完成。`
|
|
16
15
|
].join("\n"),
|
|
17
16
|
cw_market: "CN",
|
|
18
17
|
cw_content: [
|
|
@@ -76,7 +75,7 @@ function buildDailyMorningBriefingCronConfig(existing?: CronJobLike): DailyMorni
|
|
|
76
75
|
enabled: true,
|
|
77
76
|
schedule: {
|
|
78
77
|
kind: "cron",
|
|
79
|
-
expr: "30
|
|
78
|
+
expr: "*/30 * * * *",
|
|
80
79
|
...(existingTz ? { tz: existingTz } : {})
|
|
81
80
|
},
|
|
82
81
|
sessionTarget: "isolated",
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { getDB } from "../../core/database.js";
|
|
2
|
-
import {
|
|
2
|
+
import { getHedgehogRuntime } from "../../runtime.js";
|
|
3
|
+
import { HEDGEHOG_AGENT_ID } from "../../openclawConstants.js";
|
|
4
|
+
import { CHART_OUTPUT_GUIDANCE, ensureChartPlaceholdersInBody } from "../chartOutput.js";
|
|
3
5
|
import {
|
|
4
6
|
DailyMorningBriefing,
|
|
5
7
|
GetDailyMorningBriefingDetailParamsSchema,
|
|
@@ -13,10 +15,21 @@ interface RuntimeTool {
|
|
|
13
15
|
description: string;
|
|
14
16
|
parameters: unknown;
|
|
15
17
|
registerTool?: boolean;
|
|
16
|
-
execute(params: unknown, ctx?: { userId
|
|
18
|
+
execute(params: unknown, ctx?: { userId?: string; sessionKey?: string; sessionId?: string; runId?: string }): Promise<string>;
|
|
17
19
|
}
|
|
18
20
|
|
|
19
21
|
const DAILY_MORNING_BRIEFING_MARKET = "CN";
|
|
22
|
+
const DAILY_MORNING_BRIEFING_START_HOUR = 7;
|
|
23
|
+
const DAILY_MORNING_BRIEFING_START_MINUTE = 30;
|
|
24
|
+
const DAILY_MORNING_BRIEFING_CRON_ID = "hedgehog_daily_morning_briefing";
|
|
25
|
+
const DAILY_MORNING_BRIEFING_SKILL = "hedgehog-daily-morning-briefing";
|
|
26
|
+
const DAILY_MORNING_BRIEFING_CONTINUE_MESSAGE = "完成了吗,如果没完成请继续";
|
|
27
|
+
const DAILY_MORNING_BRIEFING_NUDGE_INTERVAL_MS = 30 * 60 * 1000;
|
|
28
|
+
const DAILY_MORNING_BRIEFING_MAX_ATTEMPTS_PER_DAY = 3;
|
|
29
|
+
const DAILY_MORNING_BRIEFING_FAILED_RETRY_COOLDOWNS_MS = [
|
|
30
|
+
30 * 60 * 1000,
|
|
31
|
+
60 * 60 * 1000
|
|
32
|
+
];
|
|
20
33
|
|
|
21
34
|
const SaveDailyMorningBriefingAgentToolSchema = {
|
|
22
35
|
type: "object",
|
|
@@ -28,6 +41,28 @@ const SaveDailyMorningBriefingAgentToolSchema = {
|
|
|
28
41
|
}
|
|
29
42
|
};
|
|
30
43
|
|
|
44
|
+
const DispatchDailyMorningBriefingAgentToolSchema = {
|
|
45
|
+
type: "object",
|
|
46
|
+
additionalProperties: false,
|
|
47
|
+
properties: {}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const DAILY_MORNING_BRIEFING_GENERATION_MESSAGE = JSON.stringify({
|
|
51
|
+
cw_system_prompt: [
|
|
52
|
+
"开始分析前必须先调用 save_daily_morning_briefing,参数为 {\"status\":\"generating\",\"content\":\"\"};如果返回 skipped=true,必须立即停止,不要继续调用 skill 或生成正文。",
|
|
53
|
+
`必须触发并使用 ${DAILY_MORNING_BRIEFING_SKILL} skill 生成盘前简报。`,
|
|
54
|
+
"生成成功后必须调用 save_daily_morning_briefing,参数为 {\"status\":\"completed\",\"content\":\"...\"},content 传最终完整早报正文。",
|
|
55
|
+
"生成失败后必须调用 save_daily_morning_briefing,参数为 {\"status\":\"failed\",\"content\":\"...\"},content 存放完整错误信息。",
|
|
56
|
+
"如果最终内容包含 [图表数据],正文必须已经包含所有对应图表占位符。"
|
|
57
|
+
].join("\n"),
|
|
58
|
+
cw_market: "CN",
|
|
59
|
+
cw_content: "生成每日早报",
|
|
60
|
+
cw_output: [
|
|
61
|
+
`输出结构以 ${DAILY_MORNING_BRIEFING_SKILL} skill 的交付模板为准。`,
|
|
62
|
+
CHART_OUTPUT_GUIDANCE
|
|
63
|
+
].join("\n")
|
|
64
|
+
});
|
|
65
|
+
|
|
31
66
|
function normalizeMarket(market: string): string {
|
|
32
67
|
const raw = market.trim().toUpperCase();
|
|
33
68
|
if (raw === "A股" || raw === "中国股市" || raw === "MARKETS.CN") return "CN";
|
|
@@ -42,12 +77,54 @@ function getLocalDateString(): string {
|
|
|
42
77
|
return `${year}-${month}-${day}`;
|
|
43
78
|
}
|
|
44
79
|
|
|
80
|
+
function getUnixMsFromDbTimestamp(value: string | undefined): number {
|
|
81
|
+
if (!value) return 0;
|
|
82
|
+
const timestamp = Date.parse(value);
|
|
83
|
+
return Number.isFinite(timestamp) ? timestamp : 0;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function toDbTimestamp(ms: number): string {
|
|
87
|
+
return new Date(ms).toISOString();
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function getFailedRetryCooldownMs(attemptCount: number): number | undefined {
|
|
91
|
+
if (attemptCount >= DAILY_MORNING_BRIEFING_MAX_ATTEMPTS_PER_DAY) return undefined;
|
|
92
|
+
return DAILY_MORNING_BRIEFING_FAILED_RETRY_COOLDOWNS_MS[Math.max(0, attemptCount - 1)] ?? DAILY_MORNING_BRIEFING_FAILED_RETRY_COOLDOWNS_MS[DAILY_MORNING_BRIEFING_FAILED_RETRY_COOLDOWNS_MS.length - 1];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function getNextRetryAtForFailedAttempt(attemptCount: number, nowMs = Date.now()): string {
|
|
96
|
+
const cooldownMs = getFailedRetryCooldownMs(attemptCount);
|
|
97
|
+
return typeof cooldownMs === "number" ? toDbTimestamp(nowMs + cooldownMs) : "";
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function getHalfHourBucket(): string {
|
|
101
|
+
const now = new Date();
|
|
102
|
+
const year = now.getFullYear();
|
|
103
|
+
const month = String(now.getMonth() + 1).padStart(2, "0");
|
|
104
|
+
const day = String(now.getDate()).padStart(2, "0");
|
|
105
|
+
const hour = String(now.getHours()).padStart(2, "0");
|
|
106
|
+
const minute = now.getMinutes() < 30 ? "00" : "30";
|
|
107
|
+
return `${year}${month}${day}${hour}${minute}`;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function isBeforeDailyMorningBriefingStart(): boolean {
|
|
111
|
+
const now = new Date();
|
|
112
|
+
const currentMinutes = now.getHours() * 60 + now.getMinutes();
|
|
113
|
+
const startMinutes = DAILY_MORNING_BRIEFING_START_HOUR * 60 + DAILY_MORNING_BRIEFING_START_MINUTE;
|
|
114
|
+
return currentMinutes < startMinutes;
|
|
115
|
+
}
|
|
116
|
+
|
|
45
117
|
function buildDailyMorningBriefingId(market: string, briefingDate: string): string {
|
|
46
118
|
return `daily_morning_briefing_${market}_${briefingDate}`;
|
|
47
119
|
}
|
|
48
120
|
|
|
49
121
|
function buildDailyMorningBriefingSessionId(market: string, briefingDate: string): string {
|
|
50
|
-
return `
|
|
122
|
+
return `agent:${HEDGEHOG_AGENT_ID}:cron:${DAILY_MORNING_BRIEFING_CRON_ID}:${market}:${briefingDate}`;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function buildDailyMorningBriefingAttemptSessionId(market: string, briefingDate: string, attemptCount: number): string {
|
|
126
|
+
const base = buildDailyMorningBriefingSessionId(market, briefingDate);
|
|
127
|
+
return attemptCount > 1 ? `${base}:attempt:${attemptCount}` : base;
|
|
51
128
|
}
|
|
52
129
|
|
|
53
130
|
function selectDailyMorningBriefing(
|
|
@@ -95,23 +172,6 @@ function selectExistingActiveDailyMorningBriefing(
|
|
|
95
172
|
return row ? selectDailyMorningBriefing(db, row.id) : undefined;
|
|
96
173
|
}
|
|
97
174
|
|
|
98
|
-
function selectGeneratingDailyMorningBriefing(
|
|
99
|
-
db: ReturnType<typeof getDB>,
|
|
100
|
-
market: string,
|
|
101
|
-
briefingDate: string
|
|
102
|
-
): DailyMorningBriefing | undefined {
|
|
103
|
-
const row = db.prepare(`
|
|
104
|
-
SELECT id
|
|
105
|
-
FROM daily_morning_briefings
|
|
106
|
-
WHERE market = ?
|
|
107
|
-
AND briefingDate = ?
|
|
108
|
-
AND status = 'generating'
|
|
109
|
-
ORDER BY updatedAt DESC, createdAt DESC
|
|
110
|
-
LIMIT 1
|
|
111
|
-
`).get(market, briefingDate) as { id: string } | undefined;
|
|
112
|
-
return row ? selectDailyMorningBriefing(db, row.id) : undefined;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
175
|
function mapDailyMorningBriefingRow(row: Omit<DailyMorningBriefing, "watchlistSnapshot"> & { watchlistSnapshot: string }): DailyMorningBriefing {
|
|
116
176
|
return {
|
|
117
177
|
id: row.id,
|
|
@@ -158,14 +218,187 @@ function getFullWatchlistSnapshot(db: ReturnType<typeof getDB>): unknown[] {
|
|
|
158
218
|
});
|
|
159
219
|
}
|
|
160
220
|
|
|
221
|
+
function insertGeneratingDailyMorningBriefing(
|
|
222
|
+
db: ReturnType<typeof getDB>,
|
|
223
|
+
market: string,
|
|
224
|
+
briefingDate: string,
|
|
225
|
+
id: string,
|
|
226
|
+
sessionId: string,
|
|
227
|
+
watchlistSnapshot: string
|
|
228
|
+
): DailyMorningBriefing {
|
|
229
|
+
db.prepare(`
|
|
230
|
+
INSERT INTO daily_morning_briefings (id, market, briefingDate, content, status, sessionId, lastNudgeAt, nextRetryAt, attemptCount, watchlistSnapshot)
|
|
231
|
+
VALUES (?, ?, ?, '', 'generating', ?, '', '', 1, ?)
|
|
232
|
+
`).run(id, market, briefingDate, sessionId, watchlistSnapshot);
|
|
233
|
+
return selectDailyMorningBriefing(db, id);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
function markDailyMorningBriefingFailed(
|
|
237
|
+
db: ReturnType<typeof getDB>,
|
|
238
|
+
id: string,
|
|
239
|
+
content: string
|
|
240
|
+
): boolean {
|
|
241
|
+
const row = db.prepare(`
|
|
242
|
+
SELECT attemptCount
|
|
243
|
+
FROM daily_morning_briefings
|
|
244
|
+
WHERE id = ?
|
|
245
|
+
`).get(id) as { attemptCount: number } | undefined;
|
|
246
|
+
const attemptCount = Math.max(1, Number(row?.attemptCount) || 1);
|
|
247
|
+
const result = db.prepare(`
|
|
248
|
+
UPDATE daily_morning_briefings
|
|
249
|
+
SET status = 'failed',
|
|
250
|
+
content = ?,
|
|
251
|
+
nextRetryAt = ?,
|
|
252
|
+
updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')
|
|
253
|
+
WHERE id = ?
|
|
254
|
+
`).run(content, getNextRetryAtForFailedAttempt(attemptCount), id);
|
|
255
|
+
return result.changes > 0;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
type DailyMorningBriefingDispatchDecision =
|
|
259
|
+
| { action: "skip"; reason: "before_start_time" | "already_completed" | "nudge_throttled" | "retry_cooling_down" | "max_attempts_reached"; data?: DailyMorningBriefing; nextRetryAt?: string }
|
|
260
|
+
| { action: "continue"; data: DailyMorningBriefing; idempotencyKey: string }
|
|
261
|
+
| { action: "start"; data: DailyMorningBriefing; idempotencyKey: string };
|
|
262
|
+
|
|
263
|
+
function claimDailyMorningBriefingDispatch(
|
|
264
|
+
db: ReturnType<typeof getDB>,
|
|
265
|
+
market: string,
|
|
266
|
+
briefingDate: string
|
|
267
|
+
): DailyMorningBriefingDispatchDecision {
|
|
268
|
+
if (isBeforeDailyMorningBriefingStart()) {
|
|
269
|
+
return { action: "skip", reason: "before_start_time" };
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
const id = buildDailyMorningBriefingId(market, briefingDate);
|
|
273
|
+
const watchlistSnapshot = JSON.stringify(getFullWatchlistSnapshot(db));
|
|
274
|
+
|
|
275
|
+
db.exec("BEGIN IMMEDIATE");
|
|
276
|
+
try {
|
|
277
|
+
const existing = db.prepare(`
|
|
278
|
+
SELECT id, market, briefingDate, content, status, sessionId, lastNudgeAt, nextRetryAt, attemptCount, watchlistSnapshot, createdAt, updatedAt
|
|
279
|
+
FROM daily_morning_briefings
|
|
280
|
+
WHERE id = ?
|
|
281
|
+
`).get(id) as (Omit<DailyMorningBriefing, "watchlistSnapshot"> & { lastNudgeAt: string; nextRetryAt: string; attemptCount: number; watchlistSnapshot: string }) | undefined;
|
|
282
|
+
|
|
283
|
+
if (existing?.status === "completed") {
|
|
284
|
+
db.exec("COMMIT");
|
|
285
|
+
return { action: "skip", reason: "already_completed", data: mapDailyMorningBriefingRow(existing) };
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
if (existing?.status === "generating") {
|
|
289
|
+
const lastNudgeAtMs = getUnixMsFromDbTimestamp(existing.lastNudgeAt);
|
|
290
|
+
if (lastNudgeAtMs > 0 && Date.now() - lastNudgeAtMs < DAILY_MORNING_BRIEFING_NUDGE_INTERVAL_MS) {
|
|
291
|
+
db.exec("COMMIT");
|
|
292
|
+
return { action: "skip", reason: "nudge_throttled", data: mapDailyMorningBriefingRow(existing) };
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
db.prepare(`
|
|
296
|
+
UPDATE daily_morning_briefings
|
|
297
|
+
SET lastNudgeAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW'),
|
|
298
|
+
updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')
|
|
299
|
+
WHERE id = ?
|
|
300
|
+
AND status = 'generating'
|
|
301
|
+
`).run(id);
|
|
302
|
+
const data = selectDailyMorningBriefing(db, id);
|
|
303
|
+
db.exec("COMMIT");
|
|
304
|
+
return { action: "continue", data, idempotencyKey: `${id}:continue:${getHalfHourBucket()}` };
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
if (existing) {
|
|
308
|
+
const currentAttemptCount = Math.max(0, Number(existing.attemptCount) || 0);
|
|
309
|
+
const nextAttemptCount = currentAttemptCount > 0 ? currentAttemptCount + 1 : 1;
|
|
310
|
+
if (nextAttemptCount > DAILY_MORNING_BRIEFING_MAX_ATTEMPTS_PER_DAY) {
|
|
311
|
+
db.exec("COMMIT");
|
|
312
|
+
return { action: "skip", reason: "max_attempts_reached", data: mapDailyMorningBriefingRow(existing) };
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
const nextRetryAtMs = getUnixMsFromDbTimestamp(existing.nextRetryAt);
|
|
316
|
+
if (nextRetryAtMs > Date.now()) {
|
|
317
|
+
db.exec("COMMIT");
|
|
318
|
+
return { action: "skip", reason: "retry_cooling_down", nextRetryAt: existing.nextRetryAt, data: mapDailyMorningBriefingRow(existing) };
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
const sessionId = buildDailyMorningBriefingAttemptSessionId(market, briefingDate, nextAttemptCount);
|
|
322
|
+
db.prepare(`
|
|
323
|
+
UPDATE daily_morning_briefings
|
|
324
|
+
SET content = '',
|
|
325
|
+
status = 'generating',
|
|
326
|
+
sessionId = ?,
|
|
327
|
+
lastNudgeAt = '',
|
|
328
|
+
nextRetryAt = '',
|
|
329
|
+
attemptCount = ?,
|
|
330
|
+
watchlistSnapshot = ?,
|
|
331
|
+
updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')
|
|
332
|
+
WHERE id = ?
|
|
333
|
+
AND status != 'completed'
|
|
334
|
+
`).run(sessionId, nextAttemptCount, watchlistSnapshot, id);
|
|
335
|
+
} else {
|
|
336
|
+
insertGeneratingDailyMorningBriefing(
|
|
337
|
+
db,
|
|
338
|
+
market,
|
|
339
|
+
briefingDate,
|
|
340
|
+
id,
|
|
341
|
+
buildDailyMorningBriefingAttemptSessionId(market, briefingDate, 1),
|
|
342
|
+
watchlistSnapshot
|
|
343
|
+
);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
const data = selectDailyMorningBriefing(db, id);
|
|
347
|
+
db.exec("COMMIT");
|
|
348
|
+
return { action: "start", data, idempotencyKey: `${id}:start:${data.sessionId}` };
|
|
349
|
+
} catch (e) {
|
|
350
|
+
if (db.inTransaction) db.exec("ROLLBACK");
|
|
351
|
+
throw e;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
161
355
|
export const dailyMorningBriefingTools: Record<string, RuntimeTool> = {
|
|
356
|
+
dispatch_daily_morning_briefing: {
|
|
357
|
+
name: "dispatch_daily_morning_briefing",
|
|
358
|
+
label: "调度每日盘前早报",
|
|
359
|
+
description: "调度每日盘前早报。7:30 前跳过;当天已完成则跳过;当天生成中则向当天生成会话发送“完成了吗,如果没完成请继续”;当天未触发则创建当天生成记录并在按日期隔离的会话中启动早报生成。",
|
|
360
|
+
parameters: DispatchDailyMorningBriefingAgentToolSchema,
|
|
361
|
+
registerTool: true,
|
|
362
|
+
async execute() {
|
|
363
|
+
const db = getDB();
|
|
364
|
+
const market = DAILY_MORNING_BRIEFING_MARKET;
|
|
365
|
+
const briefingDate = getLocalDateString();
|
|
366
|
+
const decision = claimDailyMorningBriefingDispatch(db, market, briefingDate);
|
|
367
|
+
if (decision.action === "skip") {
|
|
368
|
+
return JSON.stringify({ success: true, skipped: true, reason: decision.reason, nextRetryAt: decision.nextRetryAt, data: decision.data });
|
|
369
|
+
}
|
|
370
|
+
const runtime = getHedgehogRuntime();
|
|
371
|
+
if (decision.action === "continue") {
|
|
372
|
+
await runtime.subagent.run({
|
|
373
|
+
sessionKey: decision.data.sessionId,
|
|
374
|
+
message: DAILY_MORNING_BRIEFING_CONTINUE_MESSAGE,
|
|
375
|
+
deliver: false,
|
|
376
|
+
idempotencyKey: decision.idempotencyKey
|
|
377
|
+
});
|
|
378
|
+
return JSON.stringify({ success: true, skipped: true, reason: "already_generating", action: "continued", data: decision.data });
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
try {
|
|
382
|
+
await runtime.subagent.run({
|
|
383
|
+
sessionKey: decision.data.sessionId,
|
|
384
|
+
message: DAILY_MORNING_BRIEFING_GENERATION_MESSAGE,
|
|
385
|
+
deliver: false,
|
|
386
|
+
idempotencyKey: decision.idempotencyKey
|
|
387
|
+
});
|
|
388
|
+
} catch (e) {
|
|
389
|
+
markDailyMorningBriefingFailed(db, decision.data.id, e instanceof Error ? e.message : String(e));
|
|
390
|
+
throw e;
|
|
391
|
+
}
|
|
392
|
+
return JSON.stringify({ success: true, action: "started", data: decision.data });
|
|
393
|
+
}
|
|
394
|
+
},
|
|
162
395
|
save_daily_morning_briefing: {
|
|
163
396
|
name: "save_daily_morning_briefing",
|
|
164
397
|
label: "保存每日盘前早报",
|
|
165
398
|
description: "保存每日盘前早报的生成进度和最终结果。生成前必须先以 status=generating、content=\"\" 调用;生成成功后以 status=completed 保存完整正文 content;生成失败后以 status=failed 保存完整错误信息。未传 id 时会自动使用当天固定记录,完成或失败时可直接更新当天早报。",
|
|
166
399
|
parameters: SaveDailyMorningBriefingAgentToolSchema,
|
|
167
400
|
registerTool: true,
|
|
168
|
-
async execute(params) {
|
|
401
|
+
async execute(params, ctx) {
|
|
169
402
|
const args = SaveDailyMorningBriefingParamsSchema.parse(params);
|
|
170
403
|
const db = getDB();
|
|
171
404
|
const market = DAILY_MORNING_BRIEFING_MARKET;
|
|
@@ -176,30 +409,53 @@ export const dailyMorningBriefingTools: Record<string, RuntimeTool> = {
|
|
|
176
409
|
FROM daily_morning_briefings
|
|
177
410
|
WHERE id = ?
|
|
178
411
|
`).get(id) as { sessionId: string } | undefined;
|
|
179
|
-
const
|
|
412
|
+
const expectedSessionId = buildDailyMorningBriefingSessionId(market, briefingDate);
|
|
413
|
+
const currentSessionId = ctx?.sessionKey?.trim() || ctx?.sessionId?.trim() || "";
|
|
414
|
+
const sessionId = existing?.sessionId || expectedSessionId;
|
|
180
415
|
if (args.status === "generating") {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
416
|
+
if (isBeforeDailyMorningBriefingStart()) {
|
|
417
|
+
return JSON.stringify({ success: true, skipped: true, reason: "before_start_time" });
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
const active = selectExistingActiveDailyMorningBriefing(db, market, briefingDate);
|
|
421
|
+
if (active) {
|
|
422
|
+
if (active.status === "generating" && currentSessionId && active.sessionId === currentSessionId) {
|
|
423
|
+
return JSON.stringify({ success: true, data: active });
|
|
424
|
+
}
|
|
425
|
+
const reason = active.status === "generating" ? "already_generating" : "already_completed";
|
|
426
|
+
return JSON.stringify({ success: true, skipped: true, reason, data: active });
|
|
184
427
|
}
|
|
185
428
|
}
|
|
186
429
|
|
|
187
430
|
const watchlistSnapshot = JSON.stringify(getFullWatchlistSnapshot(db));
|
|
188
431
|
const content = args.status === "completed" ? ensureChartPlaceholdersInBody(args.content) : args.content.trim();
|
|
432
|
+
const nextRetryAt = args.status === "failed" ? getNextRetryAtForFailedAttempt(1) : "";
|
|
433
|
+
if (args.status === "failed") {
|
|
434
|
+
const updated = markDailyMorningBriefingFailed(db, id, content);
|
|
435
|
+
if (!updated) {
|
|
436
|
+
db.prepare(`
|
|
437
|
+
INSERT INTO daily_morning_briefings (id, market, briefingDate, content, status, sessionId, nextRetryAt, attemptCount, watchlistSnapshot)
|
|
438
|
+
VALUES (?, ?, ?, ?, 'failed', ?, ?, 1, ?)
|
|
439
|
+
`).run(id, market, briefingDate, content, sessionId, nextRetryAt, watchlistSnapshot);
|
|
440
|
+
}
|
|
441
|
+
return JSON.stringify({ success: true, data: selectDailyMorningBriefing(db, id) });
|
|
442
|
+
}
|
|
189
443
|
|
|
190
444
|
const result = db.prepare(`
|
|
191
445
|
UPDATE daily_morning_briefings
|
|
192
446
|
SET content = ?,
|
|
193
447
|
status = ?,
|
|
194
448
|
watchlistSnapshot = ?,
|
|
449
|
+
sessionId = CASE WHEN ? != '' THEN ? ELSE sessionId END,
|
|
450
|
+
nextRetryAt = ?,
|
|
195
451
|
updatedAt = STRFTIME('%Y-%m-%dT%H:%M:%fZ', 'NOW')
|
|
196
452
|
WHERE id = ?
|
|
197
|
-
`).run(content, args.status, watchlistSnapshot, id);
|
|
453
|
+
`).run(content, args.status, watchlistSnapshot, sessionId, sessionId, nextRetryAt, id);
|
|
198
454
|
if (result.changes === 0) {
|
|
199
455
|
db.prepare(`
|
|
200
|
-
INSERT INTO daily_morning_briefings (id, market, briefingDate, content, status, sessionId, watchlistSnapshot)
|
|
201
|
-
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
202
|
-
`).run(id, market, briefingDate, content, args.status, sessionId, watchlistSnapshot);
|
|
456
|
+
INSERT INTO daily_morning_briefings (id, market, briefingDate, content, status, sessionId, lastNudgeAt, nextRetryAt, attemptCount, watchlistSnapshot)
|
|
457
|
+
VALUES (?, ?, ?, ?, ?, ?, '', '', ?, ?)
|
|
458
|
+
`).run(id, market, briefingDate, content, args.status, sessionId, args.status === "generating" ? 1 : 0, watchlistSnapshot);
|
|
203
459
|
}
|
|
204
460
|
|
|
205
461
|
const data = selectDailyMorningBriefing(db, id);
|
package/src/features/index.ts
CHANGED
|
@@ -15,7 +15,7 @@ export interface RuntimeTool {
|
|
|
15
15
|
parameters: unknown;
|
|
16
16
|
registerTool?: boolean;
|
|
17
17
|
agentToolTarget?: "main";
|
|
18
|
-
execute(params: unknown, ctx?: { userId
|
|
18
|
+
execute(params: unknown, ctx?: { userId?: string; sessionKey?: string; sessionId?: string; runId?: string }): Promise<string>;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
export const allFeaturesTools: Record<string, RuntimeTool> = {
|