@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 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":"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"}
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;AAC5D,MAAM,yBAAyB,GAAG,IAAI,OAAO,EAAqB,CAAC;AASnE,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAgC,CAAC;AAEtE,SAAS,0BAA0B,CAAC,GAAsB;IACzD,IAAI,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO;IAC/C,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEnC,GAAG,CAAC,EAAE,CAAC,kBAAkB,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QAC1C,IAAI,CAAC,GAAG,CAAC,UAAU;YAAE,OAAO;QAC5B,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE;YACzC,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,KAAK,EAAE,GAAG,CAAC,KAAK;SAChB,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE;QACnC,IAAI,KAAK,CAAC,UAAU;YAAE,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAsB;IACnD,IAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,OAAO;IACxC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAEhC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;QACzD,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,IAAI,IAAI,CAAC,eAAe,KAAK,MAAM;YAAE,OAAO;QAC3E,MAAM,YAAY,GAAiB;YAClC,IAAI;YACJ,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW;YACrC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAiB;YAClC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM;gBAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;gBAClF,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC5C,IACC,OAAO;oBACP,OAAO,OAAO,KAAK,QAAQ;oBAC3B,SAAS,IAAI,OAAO;oBACpB,OAAO,CAAC,OAAO,KAAK,KAAK,EACxB,CAAC;oBACF,MAAM,KAAK,GAAG,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;oBAC7D,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC;gBACvE,CAAC;gBACD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;YAC5B,CAAC;SACD,CAAC;QACF,GAAG,CAAC,YAAY,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB;IAC1B,IAAI,CAAC;QACJ,KAAK,EAAE,CAAC;IACT,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,wCAAwC,CAAC,CAAC;IACjE,CAAC;AACF,CAAC;AAED,eAAe,wBAAwB,CAAC;IACvC,EAAE,EAAE,kBAAkB;IACtB,IAAI,EAAE,uCAAuC;IAC7C,WAAW,EAAE,6DAA6D;IAC1E,MAAM,EAAE,qBAAqB;IAC7B,UAAU,CAAC,OAAO;QACjB,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC5B,kBAAkB,EAAE,CAAC;IACtB,CAAC;IACD,mBAAmB,CAAC,GAAG;QACtB,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IACD,YAAY,CAAC,GAAG;QACf,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAChC,kBAAkB,EAAE,CAAC;QACrB,gCAAgC,CAAC,GAAG,CAAC,CAAC;QACtC,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;CACD,CAAC,CAAC"}
@@ -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":"AAAA,aAAa;AACb,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACjG,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,IAAI,GAAG,GAAQ,IAAI,CAAC;AACpB,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAE9B,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB,SAAS,aAAa,CAAC,UAA8B,MAAM;IAC1D,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO;IAChC,IAAI,CAAC;QACJ,MAAM,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACpE,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,aAAa,IAAI,OAAO,KAAK,CAAC,CAAC;QAC9F,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;QACrC,MAAM,WAAW,GAAG,KAAK;aACvB,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aAC5E,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE;YAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YACzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;QAC7D,CAAC,CAAC,CAAC;QACJ,IAAI,WAAW,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;YACtC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;YAC7E,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;gBACrC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;QACF,CAAC;IACF,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;IACjD,CAAC;AACF,CAAC;AAED,SAAS,mBAAmB;IAC3B,MAAM,kBAAkB,GAAG,GAAG,EAAE;QAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,cAAc,GAAG,IAAI,IAAI,CAC9B,GAAG,CAAC,WAAW,EAAE,EACjB,GAAG,CAAC,QAAQ,EAAE,EACd,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,EACjB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CACV,CAAC;QACF,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;QACzD,UAAU,CAAC,GAAG,EAAE;YACf,aAAa,CAAC,MAAM,CAAC,CAAC;YACtB,kBAAkB,EAAE,CAAC;QACtB,CAAC,EAAE,OAAO,CAAC,CAAC;IACb,CAAC,CAAC;IACF,kBAAkB,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,0BAA0B,CAAC,UAAkB,EAAE,QAAgB;IACvE,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3D,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IACD,QAAQ,QAAQ,EAAE,CAAC;QAClB,KAAK,KAAK;YACT,OAAO,GAAG,IAAI,KAAK,CAAC;QACrB,KAAK,MAAM;YACV,OAAO,GAAG,IAAI,KAAK,CAAC;QACrB,KAAK,MAAM;YACV,OAAO,GAAG,IAAI,KAAK,CAAC;QACrB;YACC,OAAO,IAAI,CAAC;IACd,CAAC;AACF,CAAC;AAED,SAAS,4BAA4B,CAAC,EAAgB;IACrD,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,CAAC;IAC1C,MAAM,gBAAgB,GAAG,OAAO,GAAG,MAAM,CAAC;IAC1C,MAAM,MAAM,GAAG,CAAC,WAAW,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,mBAAmB,CAAC,CAAC;IAEzG,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC,GAAG,EAAwB,CAAC;QACtF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,IAAI,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACzE,EAAE,CAAC,OAAO,CAAC,eAAe,KAAK,kBAAkB,gBAAgB,gBAAgB,CAAC,CAAC,GAAG,EAAE,CAAC;QAC1F,CAAC;QACD,IAAI,WAAW,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACzE,EAAE,CAAC,OAAO,CAAC,eAAe,KAAK,kBAAkB,gBAAgB,gBAAgB,CAAC,CAAC,GAAG,EAAE,CAAC;QAC1F,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,2BAA2B,CAAC,EAAgB;IACpD,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC7B,IAAI,CAAC;QACJ,MAAM,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC;;GAE/B,CAAC,CAAC,GAAG,EAAgD,CAAC;QACvD,MAAM,kBAAkB,GAAG,EAAE,CAAC,OAAO,CAAC;;GAErC,CAAC,CAAC;QACH,MAAM,kBAAkB,GAAG,EAAE,CAAC,OAAO,CAAC;;GAErC,CAAC,CAAC;QACH,MAAM,kBAAkB,GAAG,EAAE,CAAC,OAAO,CAAC;;GAErC,CAAC,CAAC;QACH,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,cAAc,GAAG,0BAA0B,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;YAChF,IAAI,CAAC,cAAc,IAAI,cAAc,KAAK,GAAG,CAAC,UAAU;gBAAE,SAAS;YACnE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtE,IAAI,QAAQ,EAAE,CAAC;gBACd,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACP,kBAAkB,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;YACtE,CAAC;QACF,CAAC;QAED,MAAM,mBAAmB,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;GAKtC,CAAC,CAAC,GAAG,EAAiG,CAAC;QACxG,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,uBAAuB,CAAC;YAC7F,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;YACrE,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;gBACzB,EAAE,CAAC,OAAO,CAAC,UAAU,KAAK,yDAAyD,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBACxH,EAAE,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC7E,CAAC;QACF,CAAC;QAED,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;GAUP,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,IAAI,EAAE,CAAC,aAAa;YAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,CAAC;IACT,CAAC;IAED,EAAE,CAAC,IAAI,CAAC;;;;;;;EAOP,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,gCAAgC,CAAC,EAAgB;IACzD,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC,GAAG,EAAwB,CAAC;IACtG,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEpC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,MAAM,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,cAAc,CAAC;IAClH,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC;IAC9I,MAAM,aAAa,GAAG,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;IAC1F,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC;QAAE,OAAO;IAEpF,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,IAAI,CAAC;QACJ,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;MAaJ,cAAc;MACd,WAAW;MACX,aAAa;;;;GAIhB,CAAC,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,IAAI,EAAE,CAAC,aAAa;YAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,CAAC;IACT,CAAC;AACF,CAAC;AAED,SAAS,sCAAsC,CAAC,EAAgB;IAC/D,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC,GAAG,EAAwB,CAAC;IACxG,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAC1E,EAAE,CAAC,OAAO,CAAC,oFAAoF,CAAC,CAAC,GAAG,EAAE,CAAC;QACvG,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5B,WAAW,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QACxE,EAAE,CAAC,OAAO,CAAC,kFAAkF,CAAC,CAAC,GAAG,EAAE,CAAC;IACtG,CAAC;AACF,CAAC;AAED,SAAS,kCAAkC,CAAC,EAAgB;IAC3D,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,GAAG,EAAwB,CAAC;IACrG,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEpC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,IAAI,CAAC;QACJ,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBP,CAAC,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,IAAI,EAAE,CAAC,aAAa;YAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,CAAC;IACT,CAAC;AACF,CAAC;AAED,SAAS,uBAAuB,CAAC,EAAgB;IAChD,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC,GAAG,EAAwB,CAAC;IACzF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,EAAE,CAAC;QAClF,EAAE,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC,GAAG,EAAE,CAAC;IACzE,CAAC;IACD,MAAM,eAAe,GAAG,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,EAAwB,CAAC;IAClH,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;QAC5F,EAAE,CAAC,OAAO,CAAC,oFAAoF,CAAC,CAAC,GAAG,EAAE,CAAC;IACxG,CAAC;IACD,EAAE,CAAC,IAAI,CAAC,2GAA2G,CAAC,CAAC;AACtH,CAAC;AAED,SAAS,iCAAiC,CAAC,EAAgB;IAC1D,MAAM,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,EAAwB,CAAC;IAC1G,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,EAAwC,CAAC;IACrH,MAAM,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QACrD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACrC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,EAAwB,CAAC;QAC3F,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvD,OAAO,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3G,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,wBAAwB;QAAE,OAAO;IAEtC,MAAM,cAAc,GAAG,gBAAgB,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,uBAAuB,CAAC;IACjH,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC;IAC/E,MAAM,eAAe,GAAG,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/E,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,IAAI,CAAC;QACJ,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;+CAgBqC,YAAY,KAAK,eAAe,KAAK,cAAc;;;;;;GAM/F,CAAC,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,IAAI,EAAE,CAAC,aAAa;YAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,CAAC;IACT,CAAC;AACF,CAAC;AAED,SAAS,uCAAuC,CAAC,EAAgB;IAChE,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC,GAAG,EAAwB,CAAC;IACrG,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,IAAI,WAAW,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACvF,EAAE,CAAC,OAAO,CAAC,8FAA8F,CAAC,CAAC,GAAG,EAAE,CAAC;QACjH,WAAW,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC5C,WAAW,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,OAAO,CAAC,yFAAyF,CAAC,CAAC,GAAG,EAAE,CAAC;IAC7G,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QACnC,EAAE,CAAC,OAAO,CAAC,mFAAmF,CAAC,CAAC,GAAG,EAAE,CAAC;IACvG,CAAC;AACF,CAAC;AAED,SAAS,4BAA4B,CAAC,EAAgB;IACrD,MAAM,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC,GAAG,EAAwB,CAAC;IACpG,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC,GAAG,EAAwC,CAAC;IAC/G,MAAM,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QAChD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACrC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,EAAwB,CAAC;QAC3F,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvD,OAAO,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,mBAAmB;QAAE,OAAO;IACjC,MAAM,eAAe,GAAG,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IAE/E,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,IAAI,CAAC;QACJ,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;wDAiB8C,eAAe;;;;;;GAMpE,CAAC,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,IAAI,EAAE,CAAC,aAAa;YAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,CAAC;IACT,CAAC;AACF,CAAC;AAED,SAAS,kCAAkC,CAAC,EAAgB;IAC3D,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC,GAAG,EAAwB,CAAC;IAC/F,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;QAC7E,EAAE,CAAC,OAAO,CAAC,mFAAmF,CAAC,CAAC,GAAG,EAAE,CAAC;IACvG,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC,EAAE,CAAC;QAChF,EAAE,CAAC,OAAO,CAAC,6EAA6E,CAAC,CAAC,GAAG,EAAE,CAAC;IACjG,CAAC;AACF,CAAC;AAED,SAAS,8BAA8B,CAAC,EAAgB;IACvD,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,GAAG,EAAwB,CAAC;IACjG,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,CAAC;QAChF,OAAO;IACR,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IAExE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,IAAI,CAAC;QACJ,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;0EAkBgE,aAAa;;;;;;;GAOpF,CAAC,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,IAAI,EAAE,CAAC,aAAa;YAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,CAAC;IACT,CAAC;AACF,CAAC;AAED,SAAS,yBAAyB,CAAC,EAAgB;IAClD,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC,GAAG,EAAwB,CAAC;IACjG,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,CAAC;QACjF,OAAO;IACR,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IAExE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,IAAI,CAAC;QACJ,EAAE,CAAC,IAAI,CAAC;;sCAE4B,aAAa;;;;;8CAKL,aAAa;;;;;GAKxD,CAAC,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,IAAI,EAAE,CAAC,aAAa;YAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,CAAC;IACT,CAAC;AACF,CAAC;AAED,SAAS,wCAAwC,CAAC,EAAgB;IACjE,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC,GAAG,EAAwB,CAAC;IACtG,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,IACC,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC1B,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC;QAC7B,OAAO;IAET,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9E,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC;IACxE,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IAExE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,IAAI,CAAC;QACJ,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;0BAkBgB,eAAe,aAAa,aAAa,KAAK,UAAU;;;;;;;GAO/E,CAAC,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,IAAI,EAAE,CAAC,aAAa;YAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,CAAC;IACT,CAAC;AACF,CAAC;AAED,SAAS,4CAA4C,CAAC,EAAgB;IACrE,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,EAAwB,CAAC;IAC1G,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC;QAAE,OAAO;IAExE,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;IAC9E,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IACjE,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC;IACxE,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;IAExE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,IAAI,CAAC;QACJ,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;0BAmBgB,eAAe,aAAa,UAAU,KAAK,aAAa,KAAK,UAAU;;;;;;;GAO9F,CAAC,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,IAAI,EAAE,CAAC,aAAa;YAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,CAAC;IACT,CAAC;AACF,CAAC;AAED,SAAS,0CAA0C,CAAC,EAAgB;IACnE,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,6CAA6C,CAAC,CAAC,GAAG,EAAwB,CAAC;IACtG,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,eAAe,CAAC;QAAE,OAAO;IACrE,EAAE,CAAC,OAAO,CAAC,gEAAgE,CAAC,CAAC,GAAG,EAAE,CAAC;AACpF,CAAC;AAED,SAAS,8CAA8C,CAAC,EAAgB;IACvE,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,iDAAiD,CAAC,CAAC,GAAG,EAAwB,CAAC;IAC1G,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,eAAe,CAAC;QAAE,OAAO;IACrE,EAAE,CAAC,OAAO,CAAC,oEAAoE,CAAC,CAAC,GAAG,EAAE,CAAC;AACxF,CAAC;AAED,SAAS,kCAAkC,CAAC,EAAgB;IAC3D,KAAK,MAAM,KAAK,IAAI,CAAC,0BAA0B,EAAE,8BAA8B,CAAC,EAAE,CAAC;QAClF,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,qBAAqB,KAAK,GAAG,CAAC,CAAC,GAAG,EAAwB,CAAC;QACtF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC,EAAE,CAAC;YAChF,EAAE,CAAC,OAAO,CAAC,eAAe,KAAK,gDAAgD,CAAC,CAAC,GAAG,EAAE,CAAC;QACxF,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,mCAAmC,CAAC,EAAgB;IAC5D,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC,GAAG,EAAwB,CAAC;IAC/F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,EAAE,CAAC,OAAO,CAAC,wDAAwD,CAAC,CAAC,GAAG,EAAE,CAAC;IAC5E,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QACpC,EAAE,CAAC,OAAO,CAAC,8GAA8G,CAAC,CAAC,GAAG,EAAE,CAAC;IAClI,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,EAAE,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAC,GAAG,EAAE,CAAC;IAC3E,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QACrC,EAAE,CAAC,OAAO,CAAC,2DAA2D,CAAC,CAAC,GAAG,EAAE,CAAC;IAC/E,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,OAAO,CAAC,sDAAsD,CAAC,CAAC,GAAG,EAAE,CAAC;IAC1E,CAAC;AACF,CAAC;AAED,MAAM,UAAU,KAAK;IACpB,IAAI,CAAC,GAAG,EAAE,CAAC;QACV,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;QACjC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1C,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACxB,aAAa,CAAC,SAAS,CAAC,CAAC;YACzB,mBAAmB,EAAE,CAAC;YACtB,iBAAiB,GAAG,IAAI,CAAC;QAC1B,CAAC;QAED,GAAG,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;QAC/B,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACtC,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACxC,4BAA4B,CAAC,GAAG,CAAC,CAAC;QAElC,GAAG,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4LR,CAAC,CAAC;QAEH,sCAAsC,CAAC,GAAG,CAAC,CAAC;QAC5C,gCAAgC,CAAC,GAAG,CAAC,CAAC;QACtC,sCAAsC,CAAC,GAAG,CAAC,CAAC;QAC5C,kCAAkC,CAAC,GAAG,CAAC,CAAC;QACxC,2BAA2B,CAAC,GAAG,CAAC,CAAC;QACjC,uBAAuB,CAAC,GAAG,CAAC,CAAC;QAC7B,4BAA4B,CAAC,GAAG,CAAC,CAAC;QAClC,kCAAkC,CAAC,GAAG,CAAC,CAAC;QACxC,8BAA8B,CAAC,GAAG,CAAC,CAAC;QACpC,wCAAwC,CAAC,GAAG,CAAC,CAAC;QAC9C,4CAA4C,CAAC,GAAG,CAAC,CAAC;QAClD,yBAAyB,CAAC,GAAG,CAAC,CAAC;QAC/B,kCAAkC,CAAC,GAAG,CAAC,CAAC;QACxC,iCAAiC,CAAC,GAAG,CAAC,CAAC;QACvC,uCAAuC,CAAC,GAAG,CAAC,CAAC;QAC7C,0CAA0C,CAAC,GAAG,CAAC,CAAC;QAChD,8CAA8C,CAAC,GAAG,CAAC,CAAC;QACpD,mCAAmC,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC"}
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
- "开始分析前必须先调用 save_daily_morning_briefing,参数为 {\"status\":\"generating\",\"content\":\"\"};如果返回 skipped=true,必须立即停止,不要继续调用 skill 或生成正文。",
10
- `必须触发并使用 ${DAILY_MORNING_BRIEFING_SKILL} skill 生成盘前简报。`,
11
- "生成成功后必须调用 save_daily_morning_briefing,参数为 {\"status\":\"completed\",\"content\":\"...\"},content 传最终完整早报正文。",
12
- "生成失败后必须调用 save_daily_morning_briefing,参数为 {\"status\":\"failed\",\"content\":\"...\"},content 存放完整错误信息。",
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 7 * * *",
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":"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"}
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: string;
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 { ensureChartPlaceholdersInBody } from "../chartOutput.js";
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 `daily_morning_briefing_${market}_${briefingDate}_${Date.now()}`;
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 sessionId = existing?.sessionId || buildDailyMorningBriefingSessionId(market, briefingDate);
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
- const generating = selectGeneratingDailyMorningBriefing(db, market, briefingDate);
142
- if (generating) {
143
- return JSON.stringify({ success: true, skipped: true, reason: "already_generating", data: generating });
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":"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"}
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: string;
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 &&
@@ -10,6 +10,7 @@
10
10
  "tools": [
11
11
  "get_watchlist",
12
12
  "get_industry_list",
13
+ "dispatch_daily_morning_briefing",
13
14
  "save_daily_morning_briefing",
14
15
  "save_stock_ai_analysis",
15
16
  "save_information_verification",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hedgehog-finance/hedgehog-plugin",
3
- "version": "1.0.28",
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": {
@@ -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
- "开始分析前必须先调用 save_daily_morning_briefing,参数为 {\"status\":\"generating\",\"content\":\"\"};如果返回 skipped=true,必须立即停止,不要继续调用 skill 或生成正文。",
12
- `必须触发并使用 ${DAILY_MORNING_BRIEFING_SKILL} skill 生成盘前简报。`,
13
- "生成成功后必须调用 save_daily_morning_briefing,参数为 {\"status\":\"completed\",\"content\":\"...\"},content 传最终完整早报正文。",
14
- "生成失败后必须调用 save_daily_morning_briefing,参数为 {\"status\":\"failed\",\"content\":\"...\"},content 存放完整错误信息。",
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 7 * * *",
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 { ensureChartPlaceholdersInBody } from "../chartOutput.js";
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: string }): Promise<string>;
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 `daily_morning_briefing_${market}_${briefingDate}_${Date.now()}`;
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 sessionId = existing?.sessionId || buildDailyMorningBriefingSessionId(market, briefingDate);
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
- const generating = selectGeneratingDailyMorningBriefing(db, market, briefingDate);
182
- if (generating) {
183
- return JSON.stringify({ success: true, skipped: true, reason: "already_generating", data: generating });
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);
@@ -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: string }): Promise<string>;
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> = {