@zhin.js/plugin-lottery 1.0.0

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 (289) hide show
  1. package/README.md +114 -0
  2. package/agent/agent.ts +6 -0
  3. package/agent/instructions.md +2 -0
  4. package/agent/schedules/daily_pipeline.ts +34 -0
  5. package/agent/skills/lottery.md +36 -0
  6. package/agent/tools/compute_recommend.ts +11 -0
  7. package/agent/tools/get_model_state.ts +11 -0
  8. package/agent/tools/history.ts +22 -0
  9. package/agent/tools/list_pending.ts +11 -0
  10. package/agent/tools/save_prediction.ts +14 -0
  11. package/agent/tools/stats_snapshot.ts +11 -0
  12. package/agent/tools/sync.ts +18 -0
  13. package/evals/pipeline_smoke.eval.ts +8 -0
  14. package/lib/agent/agent.d.ts +3 -0
  15. package/lib/agent/agent.d.ts.map +1 -0
  16. package/lib/agent/agent.js +6 -0
  17. package/lib/agent/agent.js.map +1 -0
  18. package/lib/agent/prompts.d.ts +11 -0
  19. package/lib/agent/prompts.d.ts.map +1 -0
  20. package/lib/agent/prompts.js +11 -0
  21. package/lib/agent/prompts.js.map +1 -0
  22. package/lib/agent/read-skills.d.ts +3 -0
  23. package/lib/agent/read-skills.d.ts.map +1 -0
  24. package/lib/agent/read-skills.js +25 -0
  25. package/lib/agent/read-skills.js.map +1 -0
  26. package/lib/agent/run-turn.d.ts +14 -0
  27. package/lib/agent/run-turn.d.ts.map +1 -0
  28. package/lib/agent/run-turn.js +47 -0
  29. package/lib/agent/run-turn.js.map +1 -0
  30. package/lib/agent/schedules/daily_pipeline.d.ts +3 -0
  31. package/lib/agent/schedules/daily_pipeline.d.ts.map +1 -0
  32. package/lib/agent/schedules/daily_pipeline.js +36 -0
  33. package/lib/agent/schedules/daily_pipeline.js.map +1 -0
  34. package/lib/agent/tools/compute_recommend.d.ts +5 -0
  35. package/lib/agent/tools/compute_recommend.d.ts.map +1 -0
  36. package/lib/agent/tools/compute_recommend.js +11 -0
  37. package/lib/agent/tools/compute_recommend.js.map +1 -0
  38. package/lib/agent/tools/get_model_state.d.ts +5 -0
  39. package/lib/agent/tools/get_model_state.d.ts.map +1 -0
  40. package/lib/agent/tools/get_model_state.js +11 -0
  41. package/lib/agent/tools/get_model_state.js.map +1 -0
  42. package/lib/agent/tools/history.d.ts +6 -0
  43. package/lib/agent/tools/history.d.ts.map +1 -0
  44. package/lib/agent/tools/history.js +24 -0
  45. package/lib/agent/tools/history.js.map +1 -0
  46. package/lib/agent/tools/list_pending.d.ts +5 -0
  47. package/lib/agent/tools/list_pending.d.ts.map +1 -0
  48. package/lib/agent/tools/list_pending.js +11 -0
  49. package/lib/agent/tools/list_pending.js.map +1 -0
  50. package/lib/agent/tools/save_prediction.d.ts +6 -0
  51. package/lib/agent/tools/save_prediction.d.ts.map +1 -0
  52. package/lib/agent/tools/save_prediction.js +14 -0
  53. package/lib/agent/tools/save_prediction.js.map +1 -0
  54. package/lib/agent/tools/stats_snapshot.d.ts +5 -0
  55. package/lib/agent/tools/stats_snapshot.d.ts.map +1 -0
  56. package/lib/agent/tools/stats_snapshot.js +11 -0
  57. package/lib/agent/tools/stats_snapshot.js.map +1 -0
  58. package/lib/agent/tools/sync.d.ts +5 -0
  59. package/lib/agent/tools/sync.d.ts.map +1 -0
  60. package/lib/agent/tools/sync.js +19 -0
  61. package/lib/agent/tools/sync.js.map +1 -0
  62. package/lib/db.d.ts +33 -0
  63. package/lib/db.d.ts.map +1 -0
  64. package/lib/db.js +108 -0
  65. package/lib/db.js.map +1 -0
  66. package/lib/evals/pipeline_smoke.eval.d.ts +3 -0
  67. package/lib/evals/pipeline_smoke.eval.d.ts.map +1 -0
  68. package/lib/evals/pipeline_smoke.eval.js +8 -0
  69. package/lib/evals/pipeline_smoke.eval.js.map +1 -0
  70. package/lib/evaluate/adaptive-sim.d.ts +31 -0
  71. package/lib/evaluate/adaptive-sim.d.ts.map +1 -0
  72. package/lib/evaluate/adaptive-sim.js +155 -0
  73. package/lib/evaluate/adaptive-sim.js.map +1 -0
  74. package/lib/evaluate/backtest.d.ts +29 -0
  75. package/lib/evaluate/backtest.d.ts.map +1 -0
  76. package/lib/evaluate/backtest.js +87 -0
  77. package/lib/evaluate/backtest.js.map +1 -0
  78. package/lib/evaluate/hit-rate.d.ts +8 -0
  79. package/lib/evaluate/hit-rate.d.ts.map +1 -0
  80. package/lib/evaluate/hit-rate.js +120 -0
  81. package/lib/evaluate/hit-rate.js.map +1 -0
  82. package/lib/evaluate/review-pending.d.ts +13 -0
  83. package/lib/evaluate/review-pending.d.ts.map +1 -0
  84. package/lib/evaluate/review-pending.js +89 -0
  85. package/lib/evaluate/review-pending.js.map +1 -0
  86. package/lib/evaluate/tracker.d.ts +28 -0
  87. package/lib/evaluate/tracker.d.ts.map +1 -0
  88. package/lib/evaluate/tracker.js +265 -0
  89. package/lib/evaluate/tracker.js.map +1 -0
  90. package/lib/evaluate/train-weights.d.ts +28 -0
  91. package/lib/evaluate/train-weights.d.ts.map +1 -0
  92. package/lib/evaluate/train-weights.js +101 -0
  93. package/lib/evaluate/train-weights.js.map +1 -0
  94. package/lib/evaluate/weight-guard.d.ts +15 -0
  95. package/lib/evaluate/weight-guard.d.ts.map +1 -0
  96. package/lib/evaluate/weight-guard.js +46 -0
  97. package/lib/evaluate/weight-guard.js.map +1 -0
  98. package/lib/games/kl8-groups.d.ts +31 -0
  99. package/lib/games/kl8-groups.d.ts.map +1 -0
  100. package/lib/games/kl8-groups.js +62 -0
  101. package/lib/games/kl8-groups.js.map +1 -0
  102. package/lib/games/registry.d.ts +13 -0
  103. package/lib/games/registry.d.ts.map +1 -0
  104. package/lib/games/registry.js +45 -0
  105. package/lib/games/registry.js.map +1 -0
  106. package/lib/index.d.ts +3 -0
  107. package/lib/index.d.ts.map +1 -0
  108. package/lib/index.js +215 -0
  109. package/lib/index.js.map +1 -0
  110. package/lib/pipeline.d.ts +36 -0
  111. package/lib/pipeline.d.ts.map +1 -0
  112. package/lib/pipeline.js +130 -0
  113. package/lib/pipeline.js.map +1 -0
  114. package/lib/push.d.ts +3 -0
  115. package/lib/push.d.ts.map +1 -0
  116. package/lib/push.js +31 -0
  117. package/lib/push.js.map +1 -0
  118. package/lib/recommend/game-pick.d.ts +14 -0
  119. package/lib/recommend/game-pick.d.ts.map +1 -0
  120. package/lib/recommend/game-pick.js +169 -0
  121. package/lib/recommend/game-pick.js.map +1 -0
  122. package/lib/recommend/report.d.ts +22 -0
  123. package/lib/recommend/report.d.ts.map +1 -0
  124. package/lib/recommend/report.js +173 -0
  125. package/lib/recommend/report.js.map +1 -0
  126. package/lib/src/agent/prompts.d.ts +11 -0
  127. package/lib/src/agent/prompts.d.ts.map +1 -0
  128. package/lib/src/agent/prompts.js +11 -0
  129. package/lib/src/agent/prompts.js.map +1 -0
  130. package/lib/src/agent/read-skills.d.ts +3 -0
  131. package/lib/src/agent/read-skills.d.ts.map +1 -0
  132. package/lib/src/agent/read-skills.js +25 -0
  133. package/lib/src/agent/read-skills.js.map +1 -0
  134. package/lib/src/agent/run-turn.d.ts +14 -0
  135. package/lib/src/agent/run-turn.d.ts.map +1 -0
  136. package/lib/src/agent/run-turn.js +47 -0
  137. package/lib/src/agent/run-turn.js.map +1 -0
  138. package/lib/src/db.d.ts +33 -0
  139. package/lib/src/db.d.ts.map +1 -0
  140. package/lib/src/db.js +108 -0
  141. package/lib/src/db.js.map +1 -0
  142. package/lib/src/evaluate/adaptive-sim.d.ts +31 -0
  143. package/lib/src/evaluate/adaptive-sim.d.ts.map +1 -0
  144. package/lib/src/evaluate/adaptive-sim.js +159 -0
  145. package/lib/src/evaluate/adaptive-sim.js.map +1 -0
  146. package/lib/src/evaluate/backtest.d.ts +29 -0
  147. package/lib/src/evaluate/backtest.d.ts.map +1 -0
  148. package/lib/src/evaluate/backtest.js +87 -0
  149. package/lib/src/evaluate/backtest.js.map +1 -0
  150. package/lib/src/evaluate/hit-rate.d.ts +8 -0
  151. package/lib/src/evaluate/hit-rate.d.ts.map +1 -0
  152. package/lib/src/evaluate/hit-rate.js +118 -0
  153. package/lib/src/evaluate/hit-rate.js.map +1 -0
  154. package/lib/src/evaluate/review-pending.d.ts +13 -0
  155. package/lib/src/evaluate/review-pending.d.ts.map +1 -0
  156. package/lib/src/evaluate/review-pending.js +89 -0
  157. package/lib/src/evaluate/review-pending.js.map +1 -0
  158. package/lib/src/evaluate/tracker.d.ts +28 -0
  159. package/lib/src/evaluate/tracker.d.ts.map +1 -0
  160. package/lib/src/evaluate/tracker.js +269 -0
  161. package/lib/src/evaluate/tracker.js.map +1 -0
  162. package/lib/src/evaluate/train-weights.d.ts +28 -0
  163. package/lib/src/evaluate/train-weights.d.ts.map +1 -0
  164. package/lib/src/evaluate/train-weights.js +101 -0
  165. package/lib/src/evaluate/train-weights.js.map +1 -0
  166. package/lib/src/evaluate/weight-guard.d.ts +15 -0
  167. package/lib/src/evaluate/weight-guard.d.ts.map +1 -0
  168. package/lib/src/evaluate/weight-guard.js +46 -0
  169. package/lib/src/evaluate/weight-guard.js.map +1 -0
  170. package/lib/src/games/kl8-groups.d.ts +31 -0
  171. package/lib/src/games/kl8-groups.d.ts.map +1 -0
  172. package/lib/src/games/kl8-groups.js +62 -0
  173. package/lib/src/games/kl8-groups.js.map +1 -0
  174. package/lib/src/games/registry.d.ts +13 -0
  175. package/lib/src/games/registry.d.ts.map +1 -0
  176. package/lib/src/games/registry.js +45 -0
  177. package/lib/src/games/registry.js.map +1 -0
  178. package/lib/src/index.d.ts +3 -0
  179. package/lib/src/index.d.ts.map +1 -0
  180. package/lib/src/index.js +183 -0
  181. package/lib/src/index.js.map +1 -0
  182. package/lib/src/lottery-agent-deps.d.ts +24 -0
  183. package/lib/src/lottery-agent-deps.d.ts.map +1 -0
  184. package/lib/src/lottery-agent-deps.js +10 -0
  185. package/lib/src/lottery-agent-deps.js.map +1 -0
  186. package/lib/src/lottery-tool-handlers.d.ts +17 -0
  187. package/lib/src/lottery-tool-handlers.d.ts.map +1 -0
  188. package/lib/src/lottery-tool-handlers.js +155 -0
  189. package/lib/src/lottery-tool-handlers.js.map +1 -0
  190. package/lib/src/pipeline.d.ts +36 -0
  191. package/lib/src/pipeline.d.ts.map +1 -0
  192. package/lib/src/pipeline.js +130 -0
  193. package/lib/src/pipeline.js.map +1 -0
  194. package/lib/src/push.d.ts +3 -0
  195. package/lib/src/push.d.ts.map +1 -0
  196. package/lib/src/push.js +31 -0
  197. package/lib/src/push.js.map +1 -0
  198. package/lib/src/recommend/game-pick.d.ts +14 -0
  199. package/lib/src/recommend/game-pick.d.ts.map +1 -0
  200. package/lib/src/recommend/game-pick.js +169 -0
  201. package/lib/src/recommend/game-pick.js.map +1 -0
  202. package/lib/src/recommend/report.d.ts +22 -0
  203. package/lib/src/recommend/report.d.ts.map +1 -0
  204. package/lib/src/recommend/report.js +176 -0
  205. package/lib/src/recommend/report.js.map +1 -0
  206. package/lib/src/stats/engine.d.ts +18 -0
  207. package/lib/src/stats/engine.d.ts.map +1 -0
  208. package/lib/src/stats/engine.js +122 -0
  209. package/lib/src/stats/engine.js.map +1 -0
  210. package/lib/src/stats/pro-analysis.d.ts +7 -0
  211. package/lib/src/stats/pro-analysis.d.ts.map +1 -0
  212. package/lib/src/stats/pro-analysis.js +121 -0
  213. package/lib/src/stats/pro-analysis.js.map +1 -0
  214. package/lib/src/stats/weights.d.ts +8 -0
  215. package/lib/src/stats/weights.d.ts.map +1 -0
  216. package/lib/src/stats/weights.js +25 -0
  217. package/lib/src/stats/weights.js.map +1 -0
  218. package/lib/src/sync/fetch-official.d.ts +4 -0
  219. package/lib/src/sync/fetch-official.d.ts.map +1 -0
  220. package/lib/src/sync/fetch-official.js +160 -0
  221. package/lib/src/sync/fetch-official.js.map +1 -0
  222. package/lib/src/sync/run-sync.d.ts +8 -0
  223. package/lib/src/sync/run-sync.d.ts.map +1 -0
  224. package/lib/src/sync/run-sync.js +29 -0
  225. package/lib/src/sync/run-sync.js.map +1 -0
  226. package/lib/src/tools/agent-tools.d.ts +15 -0
  227. package/lib/src/tools/agent-tools.d.ts.map +1 -0
  228. package/lib/src/tools/agent-tools.js +211 -0
  229. package/lib/src/tools/agent-tools.js.map +1 -0
  230. package/lib/src/types.d.ts +84 -0
  231. package/lib/src/types.d.ts.map +1 -0
  232. package/lib/src/types.js +3 -0
  233. package/lib/src/types.js.map +1 -0
  234. package/lib/stats/engine.d.ts +18 -0
  235. package/lib/stats/engine.d.ts.map +1 -0
  236. package/lib/stats/engine.js +122 -0
  237. package/lib/stats/engine.js.map +1 -0
  238. package/lib/stats/pro-analysis.d.ts +7 -0
  239. package/lib/stats/pro-analysis.d.ts.map +1 -0
  240. package/lib/stats/pro-analysis.js +121 -0
  241. package/lib/stats/pro-analysis.js.map +1 -0
  242. package/lib/stats/weights.d.ts +8 -0
  243. package/lib/stats/weights.d.ts.map +1 -0
  244. package/lib/stats/weights.js +25 -0
  245. package/lib/stats/weights.js.map +1 -0
  246. package/lib/sync/fetch-official.d.ts +4 -0
  247. package/lib/sync/fetch-official.d.ts.map +1 -0
  248. package/lib/sync/fetch-official.js +160 -0
  249. package/lib/sync/fetch-official.js.map +1 -0
  250. package/lib/sync/run-sync.d.ts +8 -0
  251. package/lib/sync/run-sync.d.ts.map +1 -0
  252. package/lib/sync/run-sync.js +29 -0
  253. package/lib/sync/run-sync.js.map +1 -0
  254. package/lib/tools/agent-tools.d.ts +15 -0
  255. package/lib/tools/agent-tools.d.ts.map +1 -0
  256. package/lib/tools/agent-tools.js +211 -0
  257. package/lib/tools/agent-tools.js.map +1 -0
  258. package/lib/tsconfig.tsbuildinfo +1 -0
  259. package/lib/types.d.ts +84 -0
  260. package/lib/types.d.ts.map +1 -0
  261. package/lib/types.js +3 -0
  262. package/lib/types.js.map +1 -0
  263. package/package.json +73 -0
  264. package/src/agent/prompts.ts +21 -0
  265. package/src/agent/read-skills.ts +27 -0
  266. package/src/agent/run-turn.ts +74 -0
  267. package/src/db.ts +132 -0
  268. package/src/evaluate/adaptive-sim.ts +210 -0
  269. package/src/evaluate/backtest.ts +128 -0
  270. package/src/evaluate/hit-rate.ts +132 -0
  271. package/src/evaluate/review-pending.ts +120 -0
  272. package/src/evaluate/tracker.ts +311 -0
  273. package/src/evaluate/train-weights.ts +134 -0
  274. package/src/evaluate/weight-guard.ts +68 -0
  275. package/src/games/kl8-groups.ts +98 -0
  276. package/src/games/registry.ts +55 -0
  277. package/src/index.ts +216 -0
  278. package/src/lottery-agent-deps.ts +29 -0
  279. package/src/lottery-tool-handlers.ts +166 -0
  280. package/src/pipeline.ts +206 -0
  281. package/src/push.ts +34 -0
  282. package/src/recommend/game-pick.ts +248 -0
  283. package/src/recommend/report.ts +211 -0
  284. package/src/stats/engine.ts +143 -0
  285. package/src/stats/pro-analysis.ts +136 -0
  286. package/src/stats/weights.ts +29 -0
  287. package/src/sync/fetch-official.ts +185 -0
  288. package/src/sync/run-sync.ts +33 -0
  289. package/src/types.ts +98 -0
package/README.md ADDED
@@ -0,0 +1,114 @@
1
+ # @zhin.js/plugin-lottery
2
+
3
+ 多玩法彩票分析插件:快乐8、双色球、大乐透、福彩3D、排列3、排列5。
4
+
5
+ ## 功能
6
+
7
+ - **单条定时流水线**:同步 → 复盘 → 推荐 → 推送(默认 18:00)
8
+ - 频率 + 遗漏 + 趋势综合统计;开奖后自动调权
9
+ - 按 `games` 配置过滤后推送给各 `endpoint.master`
10
+ - 手动触发:`lottery`(不推送,结果在会话内返回)
11
+
12
+ ## 安装
13
+
14
+ ```bash
15
+ pnpm add @zhin.js/plugin-lottery
16
+ ```
17
+
18
+ ## 流水线
19
+
20
+ ```
21
+ scheduleCron (18:00)
22
+ 1. sync official draws → lottery_draws
23
+ 2. review pending picks vs new issues → tune weights → **lottery_model_weights**
24
+ 3. if no new review: replay history simulation → refresh **lottery_model_weights**
25
+ 4. compute next-period picks (reads weights from DB) → lottery_predictions
26
+ 5. push report to masters (enabled games only)
27
+ ```
28
+
29
+ 权重表 `lottery_model_weights` 每玩法一行,字段 `freq_weight` / `omit_weight` / `trend_weight` + `eval_count` / `avg_hit_rate`:
30
+
31
+ - **有新开奖且复盘命中**:`submitAgentReview` 增量调权并写库
32
+ - **本期未复盘**:用历史 walk-forward 模拟刷新权重后写库(`weightPersistEnabled`)
33
+ - **推荐**:`loadGameWeights` 读库中最新权重算号
34
+
35
+ - **代码层**:官网同步、F/O/T 引擎、复盘调权
36
+ - **Agent 可选**(`agentEnabled`):在日报上附加 AI 解读,不参与主流程编排
37
+
38
+ ## 配置
39
+
40
+ ```yaml
41
+ lottery:
42
+ scheduleCron: "0 0 18 * * *"
43
+ scheduleEnabled: true
44
+ agentEnabled: true
45
+ backtestEnabled: true
46
+ backtestWindow: 50
47
+ backtestRandomTrials: 64
48
+ backtestMinHistory: 30
49
+ pickCount: 5
50
+ historyLimit: 500
51
+ kl8:
52
+ pickCount: 5
53
+ recommendGroups: 3
54
+ groupStrategies:
55
+ - balanced
56
+ - hot
57
+ - cold
58
+ games:
59
+ - kl8
60
+ - ssq
61
+ - dlt
62
+ - fc3d
63
+ - pl3
64
+ - pl5
65
+ ```
66
+
67
+ ## 权重训练(模拟盘)
68
+
69
+ `lottery-train` 对库内**全部历史**做 walk-forward 训练(无需下注):
70
+
71
+ 1. 从默认权重 F40/O35/T25 起(第 `minHistory` 期后才有足够历史预测)
72
+ 2. 每期:用当时权重算号 → 与库中真实开奖比对 → `tuneWeightsFromDraw` 调权
73
+ 3. 直至往期跑完 → 终权重写入 `lottery_model_weights`
74
+
75
+ 日常 `lottery` 在未复盘时会用同一套全量训练刷新权重;`lottery-backtest` 仅抽样近 N 期做报告。
76
+
77
+ ## 快乐8 多组推荐
78
+
79
+ 同一期可输出多行推荐,每组使用不同 F/O/T 策略(均衡 / 热号 / 冷号 / 趋势);**组间号码允许重复**,各组独立取该策略下 Top-N。复盘仍以**组1(均衡)**写入 `lottery_predictions`。
80
+
81
+ ```yaml
82
+ kl8:
83
+ pickCount: 5 # 每组选几个号(选5)
84
+ recommendGroups: 3 # 出几组(1~10)
85
+ groupStrategies:
86
+ - balanced
87
+ - hot
88
+ - cold
89
+ ```
90
+
91
+ ## 回测可信度
92
+
93
+ 每日推荐会自动附带 **walk-forward 逐期模拟**:从默认 F/O/T 权重起,对每一期依次「预测 → 与开奖比对 → 调权」,在无需下注的情况下热身;近 N 期计入评分,并与固定权重、随机基线对比。
94
+
95
+ ```yaml
96
+ backtestAdaptive: true # 逐期调权模拟(默认开)
97
+ weightPersistEnabled: true # 模拟/复盘后写入 lottery_model_weights
98
+ weightHoldoutFallback: true # 近端 holdout 输随机 → 推荐用默认权重
99
+ ```
100
+
101
+ ## Commands
102
+
103
+ | Command | Description |
104
+ |---------|-------------|
105
+ | `lottery [game]` | Manual full pipeline (no push) |
106
+ | `lottery-train [game]` | Full-history weight training (DEFAULT → tune → save DB) |
107
+ | `lottery-backtest [game]` | Walk-forward backtest vs random baseline |
108
+ | `lottery-today` | Today’s published report |
109
+ | `lottery-stats <game>` | Single-game stats snapshot |
110
+ | `lottery-history <game> [count]` | Historical draws |
111
+
112
+ ## 免责声明
113
+
114
+ 本插件推荐仅供参考,不构成投注建议,不保证中奖。请理性购彩。
package/agent/agent.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { defineAgent } from '@zhin.js/agent';
2
+
3
+ export default defineAgent({
4
+ description: 'Multi-game lottery analysis pipeline: sync, review, recommend, publish.',
5
+ keywords: ['lottery', 'caipiao', 'kl8', 'ssq'],
6
+ });
@@ -0,0 +1,2 @@
1
+ You are the lottery plugin agent. Use typed tools for sync, stats, recommendations, and reviews.
2
+ Always include the standard disclaimer in published reports. Prefer exact numbers from tools over guessing.
@@ -0,0 +1,34 @@
1
+ import { defineSchedule } from '@zhin.js/agent/schedules';
2
+ import { formatCompact } from 'zhin.js';
3
+ import { getLotteryAgentDeps } from '../../src/lottery-agent-deps.js';
4
+ import { runLotteryPipeline } from '../../src/pipeline.js';
5
+
6
+ export default defineSchedule({
7
+ cron: '0 0 18 * * *',
8
+ description: 'Daily lottery pipeline: sync → review → recommend → push',
9
+ async execute() {
10
+ const deps = getLotteryAgentDeps();
11
+ if (!deps.scheduleEnabled()) return;
12
+ const db = deps.getDb();
13
+ if (!db) return;
14
+ const cfg = deps.getConfig();
15
+ const result = await runLotteryPipeline({
16
+ getDb: deps.getDb,
17
+ plugin: deps.plugin,
18
+ enabledGames: deps.enabledGames,
19
+ historyLimit: cfg.historyLimit,
20
+ pickCount: cfg.pickCount,
21
+ kl8: cfg.kl8,
22
+ agentEnabled: true,
23
+ backtest: { enabled: true, window: 50, randomTrials: 64, minHistory: 30, adaptive: true },
24
+ weightPersist: true,
25
+ weightHoldoutFallback: true,
26
+ }, { push: deps.pipelinePush });
27
+ deps.plugin.logger?.info?.(formatCompact({
28
+ op: 'lottery-pipeline',
29
+ sync: result.sync,
30
+ review: result.review,
31
+ pushed: result.pushed,
32
+ }));
33
+ },
34
+ });
@@ -0,0 +1,36 @@
1
+ ---
2
+ description: Automated daily pipeline — sync, review, recommend, publish
3
+ tools:
4
+ - lottery_sync
5
+ - lottery_stats_snapshot
6
+ - lottery_compute_recommend
7
+ - lottery_save_prediction
8
+ - lottery_get_model_state
9
+ - lottery_list_pending
10
+ - lottery_history
11
+ ---
12
+
13
+ # Lottery pipeline skill
14
+
15
+ ## Scheduled flow (single cron)
16
+
17
+ The plugin runs one job (default 18:00):
18
+
19
+ 1. **Sync** — pull official draws into `lottery_draws`
20
+ 2. **Review** — match pending predictions to newly synced issues; tune F/O/T weights
21
+ 3. **Recommend** — `lottery_compute_recommend` per enabled game
22
+ 4. **Push** — send report to endpoint masters (cron only)
23
+
24
+ Manual trigger: `lottery [game]`
25
+
26
+ ## Agent role
27
+
28
+ Interactive chat may use `lottery_*` tools — numbers must come from `lottery_compute_recommend`.
29
+
30
+ ## Game ids
31
+
32
+ `kl8` `ssq` `dlt` `fc3d` `pl3` `pl5`
33
+
34
+ ## Disclaimer
35
+
36
+ User-visible output must include: for reference only, not betting advice.
@@ -0,0 +1,11 @@
1
+ import { defineTool } from '@zhin.js/agent/tools';
2
+ import { z } from 'zod';
3
+ import { handleComputeRecommend } from '../../src/lottery-tool-handlers.js';
4
+
5
+ export default defineTool<{ game: string }>({
6
+ description: 'Compute lottery recommendation numbers via F/O/T stats engine',
7
+ inputSchema: z.object({ game: z.string().min(1) }),
8
+ async execute({ game }) {
9
+ return handleComputeRecommend(game);
10
+ },
11
+ });
@@ -0,0 +1,11 @@
1
+ import { defineTool } from '@zhin.js/agent/tools';
2
+ import { z } from 'zod';
3
+ import { handleGetModelState } from '../../src/lottery-tool-handlers.js';
4
+
5
+ export default defineTool<{ game?: string }>({
6
+ description: 'Query model weights and historical hit rate per game',
7
+ inputSchema: z.object({ game: z.string().optional() }),
8
+ async execute({ game }) {
9
+ return handleGetModelState(game);
10
+ },
11
+ });
@@ -0,0 +1,22 @@
1
+ import { defineTool } from '@zhin.js/agent/tools';
2
+ import { z } from 'zod';
3
+ import { parseGameId } from '../../src/games/registry.js';
4
+ import { loadDraws } from '../../src/db.js';
5
+ import { getLotteryAgentDeps } from '../../src/lottery-agent-deps.js';
6
+
7
+ export default defineTool<{ game: string; count?: number }>({
8
+ description: 'Query historical lottery draws',
9
+ inputSchema: z.object({
10
+ game: z.string().min(1),
11
+ count: z.number().optional(),
12
+ }),
13
+ async execute({ game, count }) {
14
+ const deps = getLotteryAgentDeps();
15
+ const gid = parseGameId(game);
16
+ if (!gid) return 'invalid game';
17
+ const db = deps.getDb();
18
+ if (!db) return 'db not ready';
19
+ const lim = Math.min(30, count || 10);
20
+ return JSON.stringify(await loadDraws(db, gid, lim));
21
+ },
22
+ });
@@ -0,0 +1,11 @@
1
+ import { defineTool } from '@zhin.js/agent/tools';
2
+ import { z } from 'zod';
3
+ import { handleListPending } from '../../src/lottery-tool-handlers.js';
4
+
5
+ export default defineTool<{ game?: string }>({
6
+ description: 'List pending lottery predictions awaiting review',
7
+ inputSchema: z.object({ game: z.string().optional() }),
8
+ async execute({ game }) {
9
+ return handleListPending(game);
10
+ },
11
+ });
@@ -0,0 +1,14 @@
1
+ import { defineTool } from '@zhin.js/agent/tools';
2
+ import { z } from 'zod';
3
+ import { handleSavePrediction } from '../../src/lottery-tool-handlers.js';
4
+
5
+ export default defineTool<{ game: string; numbers_json: string }>({
6
+ description: 'Save a pending lottery prediction',
7
+ inputSchema: z.object({
8
+ game: z.string().min(1),
9
+ numbers_json: z.string().min(1),
10
+ }),
11
+ async execute({ game, numbers_json }) {
12
+ return handleSavePrediction(game, numbers_json);
13
+ },
14
+ });
@@ -0,0 +1,11 @@
1
+ import { defineTool } from '@zhin.js/agent/tools';
2
+ import { z } from 'zod';
3
+ import { handleStatsSnapshot } from '../../src/lottery-tool-handlers.js';
4
+
5
+ export default defineTool<{ game: string }>({
6
+ description: 'Get stats snapshot for a lottery game',
7
+ inputSchema: z.object({ game: z.string().min(1) }),
8
+ async execute({ game }) {
9
+ return handleStatsSnapshot(game);
10
+ },
11
+ });
@@ -0,0 +1,18 @@
1
+ import { defineTool } from '@zhin.js/agent/tools';
2
+ import { z } from 'zod';
3
+ import { parseGameId } from '../../src/games/registry.js';
4
+ import { getLotteryAgentDeps } from '../../src/lottery-agent-deps.js';
5
+ import { runDataSync } from '../../src/sync/run-sync.js';
6
+
7
+ export default defineTool<{ game?: string }>({
8
+ description: 'Sync official lottery draws into DB',
9
+ inputSchema: z.object({ game: z.string().optional() }),
10
+ async execute({ game }) {
11
+ const deps = getLotteryAgentDeps();
12
+ const db = deps.getDb();
13
+ if (!db) return 'db not ready';
14
+ const gid = parseGameId(game ?? '');
15
+ const result = await runDataSync(deps.getDb, deps.enabledGames, deps.getConfig().historyLimit, gid ?? undefined);
16
+ return JSON.stringify({ result });
17
+ },
18
+ });
@@ -0,0 +1,8 @@
1
+ import { defineEval } from '@zhin.js/agent/evals';
2
+
3
+ export default defineEval({
4
+ description: 'Smoke: lottery agent surface defines core tools',
5
+ async test(t) {
6
+ t.succeeded();
7
+ },
8
+ });
@@ -0,0 +1,3 @@
1
+ declare const _default: import("@zhin.js/agent").AuthoringAgentDefinition;
2
+ export default _default;
3
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../agent/agent.ts"],"names":[],"mappings":";AAEA,wBAGG"}
@@ -0,0 +1,6 @@
1
+ import { defineAgent } from '@zhin.js/agent';
2
+ export default defineAgent({
3
+ description: 'Multi-game lottery analysis pipeline: sync, review, recommend, publish.',
4
+ keywords: ['lottery', 'caipiao', 'kl8', 'ssq'],
5
+ });
6
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../agent/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,eAAe,WAAW,CAAC;IACzB,WAAW,EAAE,yEAAyE;IACtF,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC;CAC/C,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { GameId } from '../types.js';
2
+ export type LotteryAgentTask = 'daily_pipeline';
3
+ export interface LotteryAgentContext {
4
+ syncSummary?: string;
5
+ newDrawsSummary?: string;
6
+ games?: GameId[];
7
+ push?: boolean;
8
+ }
9
+ /** Prompt when agent is invoked interactively (cron uses code pipeline). */
10
+ export declare function buildDailyPipelinePrompt(ctx: LotteryAgentContext): string;
11
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/agent/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,4EAA4E;AAC5E,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,mBAAmB,GAAG,MAAM,CAQzE"}
@@ -0,0 +1,11 @@
1
+ /** Prompt when agent is invoked interactively (cron uses code pipeline). */
2
+ export function buildDailyPipelinePrompt(ctx) {
3
+ const games = (ctx.games ?? []).join(', ') || 'kl8, ssq, dlt, fc3d, pl3, pl5';
4
+ return [
5
+ '[lottery daily_pipeline]',
6
+ `games: ${games}`,
7
+ 'Steps: lottery_sync → review pending (skip if empty) → lottery_compute_recommend → lottery_publish_report',
8
+ ctx.push ? 'push: true' : 'push: false',
9
+ ].join('\n');
10
+ }
11
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/agent/prompts.ts"],"names":[],"mappings":"AAWA,4EAA4E;AAC5E,MAAM,UAAU,wBAAwB,CAAC,GAAwB;IAC/D,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,+BAA+B,CAAC;IAC9E,OAAO;QACL,0BAA0B;QAC1B,UAAU,KAAK,EAAE;QACjB,2GAA2G;QAC3G,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa;KACxC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function readSkillMarkdown(...parts: string[]): string;
2
+ export declare function buildLotteryAgentSystemPrompt(): string;
3
+ //# sourceMappingURL=read-skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-skills.d.ts","sourceRoot":"","sources":["../../src/agent/read-skills.ts"],"names":[],"mappings":"AAMA,wBAAgB,iBAAiB,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAS5D;AAED,wBAAgB,6BAA6B,IAAI,MAAM,CAStD"}
@@ -0,0 +1,25 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ const PLUGIN_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../..');
5
+ export function readSkillMarkdown(...parts) {
6
+ const chunks = [];
7
+ for (const p of parts) {
8
+ const full = path.join(PLUGIN_ROOT, 'skills', p, 'SKILL.md');
9
+ if (fs.existsSync(full)) {
10
+ chunks.push(fs.readFileSync(full, 'utf8'));
11
+ }
12
+ }
13
+ return chunks.join('\n\n---\n\n');
14
+ }
15
+ export function buildLotteryAgentSystemPrompt() {
16
+ const skills = readSkillMarkdown('lottery');
17
+ return [
18
+ '你是 Zhin 彩票分析 Agent。数据通过 lottery_* 工具查库,算法流程见 skills。',
19
+ '可用 web_search 检索公开分析资料;推荐号码只能来自 lottery_compute_recommend,不得臆造或篡改。',
20
+ '每次任务结束应将洞察写入 lottery_save_memory,形成可累积的专业记忆。',
21
+ '',
22
+ skills || '(skills 未加载,请依赖工具返回的统计数据。)',
23
+ ].join('\n');
24
+ }
25
+ //# sourceMappingURL=read-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-skills.js","sourceRoot":"","sources":["../../src/agent/read-skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAExF,MAAM,UAAU,iBAAiB,CAAC,GAAG,KAAe;IAClD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;QAC7D,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC5C,OAAO;QACL,sDAAsD;QACtD,oEAAoE;QACpE,8CAA8C;QAC9C,EAAE;QACF,MAAM,IAAI,4BAA4B;KACvC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { Plugin } from 'zhin.js';
2
+ import type { LotteryAgentContext, LotteryAgentTask } from './prompts.js';
3
+ export interface RunLotteryAgentOptions {
4
+ task: LotteryAgentTask;
5
+ context?: LotteryAgentContext;
6
+ gameId?: string;
7
+ maxIterations?: number;
8
+ }
9
+ export declare function runLotteryAgentTurn(root: Plugin, options: RunLotteryAgentOptions): Promise<{
10
+ ok: boolean;
11
+ text: string;
12
+ usedAgent: boolean;
13
+ }>;
14
+ //# sourceMappingURL=run-turn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-turn.d.ts","sourceRoot":"","sources":["../../src/agent/run-turn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAqB1E,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAiBD,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CA2B5D"}
@@ -0,0 +1,47 @@
1
+ import { buildDailyPipelinePrompt } from './prompts.js';
2
+ import { buildLotteryAgentSystemPrompt } from './read-skills.js';
3
+ const LOTTERY_TOOL_PREFIX = 'lottery_';
4
+ async function resolveLotteryTools(root) {
5
+ const toolService = root.inject('tool');
6
+ const raw = (toolService?.getAll() ?? []).filter((t) => t.name.startsWith(LOTTERY_TOOL_PREFIX));
7
+ try {
8
+ const agent = await import('zhin.js/agent');
9
+ const normalizeTool = agent.normalizeTool;
10
+ if (typeof normalizeTool === 'function') {
11
+ return raw.map((t) => normalizeTool(t));
12
+ }
13
+ }
14
+ catch {
15
+ /* agent optional */
16
+ }
17
+ return raw;
18
+ }
19
+ export async function runLotteryAgentTurn(root, options) {
20
+ const ai = root.inject('ai');
21
+ if (!ai?.runAgent)
22
+ return { ok: false, text: '', usedAgent: false };
23
+ const providers = ai.listProviders?.() ?? [];
24
+ if (!providers.length && ai.isReady?.() === false) {
25
+ return { ok: false, text: '', usedAgent: false };
26
+ }
27
+ const userPrompt = buildDailyPipelinePrompt(options.context ?? {});
28
+ const lotteryTools = await resolveLotteryTools(root);
29
+ try {
30
+ const result = await ai.runAgent(userPrompt, {
31
+ systemPrompt: buildLotteryAgentSystemPrompt(),
32
+ tools: lotteryTools,
33
+ useBuiltinTools: true,
34
+ collectExternalTools: false,
35
+ maxIterations: options.maxIterations ?? 14,
36
+ });
37
+ return { ok: true, text: result.content?.trim() ?? '', usedAgent: true };
38
+ }
39
+ catch (e) {
40
+ return {
41
+ ok: false,
42
+ text: e instanceof Error ? e.message : String(e),
43
+ usedAgent: true,
44
+ };
45
+ }
46
+ }
47
+ //# sourceMappingURL=run-turn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-turn.js","sourceRoot":"","sources":["../../src/agent/run-turn.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAEjE,MAAM,mBAAmB,GAAG,UAAU,CAAC;AAwBvC,KAAK,UAAU,mBAAmB,CAAC,IAAY;IAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAyC,CAAC;IAChF,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAChG,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAC5C,MAAM,aAAa,GAAI,KAAkD,CAAC,aAAa,CAAC;QACxF,IAAI,OAAO,aAAa,KAAK,UAAU,EAAE,CAAC;YACxC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oBAAoB;IACtB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAAY,EACZ,OAA+B;IAE/B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAA8B,CAAC;IAC1D,IAAI,CAAC,EAAE,EAAE,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACpE,MAAM,SAAS,GAAG,EAAE,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC;IAC7C,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,KAAK,EAAE,CAAC;QAClD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACnD,CAAC;IAED,MAAM,UAAU,GAAG,wBAAwB,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE;YAC3C,YAAY,EAAE,6BAA6B,EAAE;YAC7C,KAAK,EAAE,YAAY;YACnB,eAAe,EAAE,IAAI;YACrB,oBAAoB,EAAE,KAAK;YAC3B,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE;SAC3C,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC3E,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO;YACL,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YAChD,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import("@zhin.js/agent").AuthoringScheduleDefinition;
2
+ export default _default;
3
+ //# sourceMappingURL=daily_pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daily_pipeline.d.ts","sourceRoot":"","sources":["../../../agent/schedules/daily_pipeline.ts"],"names":[],"mappings":";AAKA,wBA4BG"}
@@ -0,0 +1,36 @@
1
+ import { defineSchedule } from '@zhin.js/agent/schedules';
2
+ import { formatCompact } from 'zhin.js';
3
+ import { getLotteryAgentDeps } from '../../src/lottery-agent-deps.js';
4
+ import { runLotteryPipeline } from '../../src/pipeline.js';
5
+ export default defineSchedule({
6
+ cron: '0 0 18 * * *',
7
+ description: 'Daily lottery pipeline: sync → review → recommend → push',
8
+ async execute() {
9
+ const deps = getLotteryAgentDeps();
10
+ if (!deps.scheduleEnabled())
11
+ return;
12
+ const db = deps.getDb();
13
+ if (!db)
14
+ return;
15
+ const cfg = deps.getConfig();
16
+ const result = await runLotteryPipeline({
17
+ getDb: deps.getDb,
18
+ plugin: deps.plugin,
19
+ enabledGames: deps.enabledGames,
20
+ historyLimit: cfg.historyLimit,
21
+ pickCount: cfg.pickCount,
22
+ kl8: cfg.kl8,
23
+ agentEnabled: true,
24
+ backtest: { enabled: true, window: 50, randomTrials: 64, minHistory: 30, adaptive: true },
25
+ weightPersist: true,
26
+ weightHoldoutFallback: true,
27
+ }, { push: deps.pipelinePush });
28
+ deps.plugin.logger?.info?.(formatCompact({
29
+ op: 'lottery-pipeline',
30
+ sync: result.sync,
31
+ review: result.review,
32
+ pushed: result.pushed,
33
+ }));
34
+ },
35
+ });
36
+ //# sourceMappingURL=daily_pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daily_pipeline.js","sourceRoot":"","sources":["../../../agent/schedules/daily_pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,eAAe,cAAc,CAAC;IAC5B,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,0DAA0D;IACvE,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,GAAG,mBAAmB,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YAAE,OAAO;QACpC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;YACtC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,YAAY,EAAE,GAAG,CAAC,YAAY;YAC9B,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;YACzF,aAAa,EAAE,IAAI;YACnB,qBAAqB,EAAE,IAAI;SAC5B,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,aAAa,CAAC;YACvC,EAAE,EAAE,kBAAkB;YACtB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC,CAAC;IACN,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ declare const _default: import("@zhin.js/agent").AuthoringToolDefinition<{
2
+ game: string;
3
+ }>;
4
+ export default _default;
5
+ //# sourceMappingURL=compute_recommend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute_recommend.d.ts","sourceRoot":"","sources":["../../../agent/tools/compute_recommend.ts"],"names":[],"mappings":";UAIkC,MAAM;;AAAxC,wBAMG"}
@@ -0,0 +1,11 @@
1
+ import { defineTool } from '@zhin.js/agent/tools';
2
+ import { z } from 'zod';
3
+ import { handleComputeRecommend } from '../../src/lottery-tool-handlers.js';
4
+ export default defineTool({
5
+ description: 'Compute lottery recommendation numbers via F/O/T stats engine',
6
+ inputSchema: z.object({ game: z.string().min(1) }),
7
+ async execute({ game }) {
8
+ return handleComputeRecommend(game);
9
+ },
10
+ });
11
+ //# sourceMappingURL=compute_recommend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compute_recommend.js","sourceRoot":"","sources":["../../../agent/tools/compute_recommend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,eAAe,UAAU,CAAmB;IAC1C,WAAW,EAAE,+DAA+D;IAC5E,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE;QACpB,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ declare const _default: import("@zhin.js/agent").AuthoringToolDefinition<{
2
+ game?: string;
3
+ }>;
4
+ export default _default;
5
+ //# sourceMappingURL=get_model_state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_model_state.d.ts","sourceRoot":"","sources":["../../../agent/tools/get_model_state.ts"],"names":[],"mappings":";WAImC,MAAM;;AAAzC,wBAMG"}
@@ -0,0 +1,11 @@
1
+ import { defineTool } from '@zhin.js/agent/tools';
2
+ import { z } from 'zod';
3
+ import { handleGetModelState } from '../../src/lottery-tool-handlers.js';
4
+ export default defineTool({
5
+ description: 'Query model weights and historical hit rate per game',
6
+ inputSchema: z.object({ game: z.string().optional() }),
7
+ async execute({ game }) {
8
+ return handleGetModelState(game);
9
+ },
10
+ });
11
+ //# sourceMappingURL=get_model_state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get_model_state.js","sourceRoot":"","sources":["../../../agent/tools/get_model_state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,eAAe,UAAU,CAAoB;IAC3C,WAAW,EAAE,sDAAsD;IACnE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IACtD,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE;QACpB,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ declare const _default: import("@zhin.js/agent").AuthoringToolDefinition<{
2
+ game: string;
3
+ count?: number;
4
+ }>;
5
+ export default _default;
6
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../../agent/tools/history.ts"],"names":[],"mappings":";UAMkC,MAAM;YAAU,MAAM;;AAAxD,wBAeG"}
@@ -0,0 +1,24 @@
1
+ import { defineTool } from '@zhin.js/agent/tools';
2
+ import { z } from 'zod';
3
+ import { parseGameId } from '../../src/games/registry.js';
4
+ import { loadDraws } from '../../src/db.js';
5
+ import { getLotteryAgentDeps } from '../../src/lottery-agent-deps.js';
6
+ export default defineTool({
7
+ description: 'Query historical lottery draws',
8
+ inputSchema: z.object({
9
+ game: z.string().min(1),
10
+ count: z.number().optional(),
11
+ }),
12
+ async execute({ game, count }) {
13
+ const deps = getLotteryAgentDeps();
14
+ const gid = parseGameId(game);
15
+ if (!gid)
16
+ return 'invalid game';
17
+ const db = deps.getDb();
18
+ if (!db)
19
+ return 'db not ready';
20
+ const lim = Math.min(30, count || 10);
21
+ return JSON.stringify(await loadDraws(db, gid, lim));
22
+ },
23
+ });
24
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../../agent/tools/history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,eAAe,UAAU,CAAmC;IAC1D,WAAW,EAAE,gCAAgC;IAC7C,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC7B,CAAC;IACF,KAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;QAC3B,MAAM,IAAI,GAAG,mBAAmB,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG;YAAE,OAAO,cAAc,CAAC;QAChC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,EAAE;YAAE,OAAO,cAAc,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACvD,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ declare const _default: import("@zhin.js/agent").AuthoringToolDefinition<{
2
+ game?: string;
3
+ }>;
4
+ export default _default;
5
+ //# sourceMappingURL=list_pending.d.ts.map