@hedgehog-finance/hedgehog-plugin 1.0.21 → 1.0.23

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