@zhin.js/plugin-lottery 1.1.9 → 1.1.11

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 (93) hide show
  1. package/README.md +8 -0
  2. package/commands/lottery/[[game]]/index.js +5 -4
  3. package/commands/lottery/[[game]]/index.ts +5 -4
  4. package/commands/lottery-backtest/[[game]]/index.js +9 -4
  5. package/commands/lottery-backtest/[[game]]/index.ts +8 -4
  6. package/commands/lottery-history/[game]/index.js +6 -4
  7. package/commands/lottery-history/[game]/index.ts +6 -4
  8. package/commands/lottery-stats/[game]/index.js +11 -6
  9. package/commands/lottery-stats/[game]/index.ts +11 -5
  10. package/commands/lottery-today/index.js +8 -4
  11. package/commands/lottery-today/index.ts +8 -3
  12. package/commands/lottery-train/[[game]]/index.js +4 -3
  13. package/commands/lottery-train/[[game]]/index.ts +4 -3
  14. package/lib/command-helpers.d.ts +2 -1
  15. package/lib/command-helpers.d.ts.map +1 -1
  16. package/lib/command-helpers.js +2 -1
  17. package/lib/command-helpers.js.map +1 -1
  18. package/lib/evaluate/backtest.d.ts +3 -2
  19. package/lib/evaluate/backtest.d.ts.map +1 -1
  20. package/lib/evaluate/backtest.js +12 -11
  21. package/lib/evaluate/backtest.js.map +1 -1
  22. package/lib/evaluate/tracker.d.ts +2 -1
  23. package/lib/evaluate/tracker.d.ts.map +1 -1
  24. package/lib/evaluate/tracker.js +9 -8
  25. package/lib/evaluate/tracker.js.map +1 -1
  26. package/lib/evaluate/train-weights.d.ts +3 -2
  27. package/lib/evaluate/train-weights.d.ts.map +1 -1
  28. package/lib/evaluate/train-weights.js +12 -11
  29. package/lib/evaluate/train-weights.js.map +1 -1
  30. package/lib/games/kl8-groups.d.ts +2 -0
  31. package/lib/games/kl8-groups.d.ts.map +1 -1
  32. package/lib/games/kl8-groups.js +2 -1
  33. package/lib/games/kl8-groups.js.map +1 -1
  34. package/lib/i18n.d.ts +2 -0
  35. package/lib/i18n.d.ts.map +1 -0
  36. package/lib/i18n.js +222 -0
  37. package/lib/i18n.js.map +1 -0
  38. package/lib/lottery-tool-handlers.d.ts +4 -3
  39. package/lib/lottery-tool-handlers.d.ts.map +1 -1
  40. package/lib/lottery-tool-handlers.js +12 -7
  41. package/lib/lottery-tool-handlers.js.map +1 -1
  42. package/lib/pipeline.d.ts +3 -1
  43. package/lib/pipeline.d.ts.map +1 -1
  44. package/lib/pipeline.js +9 -7
  45. package/lib/pipeline.js.map +1 -1
  46. package/lib/recommend/game-pick.d.ts +4 -2
  47. package/lib/recommend/game-pick.d.ts.map +1 -1
  48. package/lib/recommend/game-pick.js +39 -28
  49. package/lib/recommend/game-pick.js.map +1 -1
  50. package/lib/recommend/report.d.ts +4 -2
  51. package/lib/recommend/report.d.ts.map +1 -1
  52. package/lib/recommend/report.js +17 -10
  53. package/lib/recommend/report.js.map +1 -1
  54. package/lib/runtime-state.d.ts +2 -0
  55. package/lib/runtime-state.d.ts.map +1 -1
  56. package/lib/runtime-state.js.map +1 -1
  57. package/lib/stats/pro-analysis.d.ts +3 -2
  58. package/lib/stats/pro-analysis.d.ts.map +1 -1
  59. package/lib/stats/pro-analysis.js +10 -9
  60. package/lib/stats/pro-analysis.js.map +1 -1
  61. package/lib/sync/run-sync.d.ts +2 -1
  62. package/lib/sync/run-sync.d.ts.map +1 -1
  63. package/lib/sync/run-sync.js +4 -3
  64. package/lib/sync/run-sync.js.map +1 -1
  65. package/lib/types.d.ts +2 -0
  66. package/lib/types.d.ts.map +1 -1
  67. package/lib/types.js.map +1 -1
  68. package/package.json +8 -8
  69. package/plugin.js +4 -0
  70. package/skills/lottery/tools/compute-recommend/index.js +1 -1
  71. package/skills/lottery/tools/compute-recommend/index.ts +1 -1
  72. package/skills/lottery/tools/history/index.js +2 -1
  73. package/skills/lottery/tools/history/index.ts +2 -1
  74. package/skills/lottery/tools/save-prediction/index.js +1 -1
  75. package/skills/lottery/tools/save-prediction/index.ts +1 -1
  76. package/skills/lottery/tools/stats-snapshot/index.js +1 -1
  77. package/skills/lottery/tools/stats-snapshot/index.ts +1 -1
  78. package/skills/lottery/tools/sync/index.js +1 -1
  79. package/skills/lottery/tools/sync/index.ts +1 -0
  80. package/src/command-helpers.ts +3 -0
  81. package/src/evaluate/backtest.ts +13 -11
  82. package/src/evaluate/tracker.ts +10 -8
  83. package/src/evaluate/train-weights.ts +13 -11
  84. package/src/games/kl8-groups.ts +4 -1
  85. package/src/i18n.ts +222 -0
  86. package/src/lottery-tool-handlers.ts +12 -7
  87. package/src/pipeline.ts +10 -7
  88. package/src/recommend/game-pick.ts +40 -28
  89. package/src/recommend/report.ts +18 -8
  90. package/src/runtime-state.ts +2 -0
  91. package/src/stats/pro-analysis.ts +11 -7
  92. package/src/sync/run-sync.ts +5 -2
  93. package/src/types.ts +2 -0
@@ -1 +1 @@
1
- {"version":3,"file":"pro-analysis.js","sourceRoot":"","sources":["../../src/stats/pro-analysis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pro-analysis.js","sourceRoot":"","sources":["../../src/stats/pro-analysis.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
+ import type { Locale } from 'zhin.js/i18n';
1
2
  import type { GameId, NormalizedDraw } from '../types.js';
2
3
  import { type LotteryDb } from '../db.js';
3
- export declare function runDataSync(getDb: () => LotteryDb | null, enabledGames: () => GameId[], historyLimit: number, gameId?: GameId): Promise<{
4
+ export declare function runDataSync(getDb: () => LotteryDb | null, enabledGames: () => GameId[], historyLimit: number, gameId?: GameId, locale?: Locale): Promise<{
4
5
  text: string;
5
6
  newSummary: string;
6
7
  inserted: NormalizedDraw[];
@@ -1 +1 @@
1
- {"version":3,"file":"run-sync.d.ts","sourceRoot":"","sources":["../../src/sync/run-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAEpD,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,SAAS,GAAG,IAAI,EAC7B,YAAY,EAAE,MAAM,MAAM,EAAE,EAC5B,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,cAAc,EAAE,CAAA;CAAE,CAAC,CAwB3E"}
1
+ {"version":3,"file":"run-sync.d.ts","sourceRoot":"","sources":["../../src/sync/run-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAEpD,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,SAAS,GAAG,IAAI,EAC7B,YAAY,EAAE,MAAM,MAAM,EAAE,EAC5B,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,cAAc,EAAE,CAAA;CAAE,CAAC,CAwB3E"}
@@ -1,8 +1,9 @@
1
+ import { messages as t } from '../i18n.js';
1
2
  import { syncGame } from '../db.js';
2
- export async function runDataSync(getDb, enabledGames, historyLimit, gameId) {
3
+ export async function runDataSync(getDb, enabledGames, historyLimit, gameId, locale) {
3
4
  const db = getDb();
4
5
  if (!db)
5
- return { text: 'db not ready', newSummary: '', inserted: [] };
6
+ return { text: t(locale, 'dbNotReady'), newSummary: '', inserted: [] };
6
7
  const ids = gameId ? [gameId] : enabledGames();
7
8
  const parts = [];
8
9
  const newParts = [];
@@ -21,7 +22,7 @@ export async function runDataSync(getDb, enabledGames, historyLimit, gameId) {
21
22
  }
22
23
  }
23
24
  return {
24
- text: `sync ${parts.join(', ')}`,
25
+ text: t(locale, 'syncResult', { result: parts.join(', ') }),
25
26
  newSummary: newParts.join('; '),
26
27
  inserted,
27
28
  };
@@ -1 +1 @@
1
- {"version":3,"file":"run-sync.js","sourceRoot":"","sources":["../../src/sync/run-sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAkB,MAAM,UAAU,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,KAA6B,EAC7B,YAA4B,EAC5B,YAAoB,EACpB,MAAe;IAEf,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACvE,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAqB,EAAE,CAAC;IACtC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;YACtE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,KAAK,EAAE,CAAC,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YACtB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO;QACL,IAAI,EAAE,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAChC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,QAAQ;KACT,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"run-sync.js","sourceRoot":"","sources":["../../src/sync/run-sync.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,CAAC,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAAE,QAAQ,EAAkB,MAAM,UAAU,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,KAA6B,EAC7B,YAA4B,EAC5B,YAAoB,EACpB,MAAe,EACf,MAAe;IAEf,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAChF,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAqB,EAAE,CAAC;IACtC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,MAAM,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;YACtE,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,KAAK,EAAE,CAAC,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YACtB,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IACD,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/B,QAAQ;KACT,CAAC;AACJ,CAAC"}
package/lib/types.d.ts CHANGED
@@ -46,6 +46,7 @@ export interface StatsSnapshot {
46
46
  accuracy?: AccuracySnapshot;
47
47
  }
48
48
  export interface GamePick {
49
+ locale?: import('zhin.js/i18n').Locale;
49
50
  gameId: GameId;
50
51
  label: string;
51
52
  numbers: DrawNumbers;
@@ -69,6 +70,7 @@ export interface HitSummary {
69
70
  detail: string;
70
71
  }
71
72
  export interface DailyReport {
73
+ locale?: import('zhin.js/i18n').Locale;
72
74
  date: string;
73
75
  picks: GamePick[];
74
76
  disclaimer: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/lib/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AA8FA,MAAM,CAAC,MAAM,UAAU,GACrB,6CAA6C,CAAC;AAEhD,MAAM,CAAC,MAAM,eAAe,GAAiB,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAgGA,MAAM,CAAC,MAAM,UAAU,GACrB,6CAA6C,CAAC;AAEhD,MAAM,CAAC,MAAM,eAAe,GAAiB,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhin.js/plugin-lottery",
3
- "version": "1.1.9",
3
+ "version": "1.1.11",
4
4
  "description": "Multi-game lottery analysis for Zhin.js (Plugin Runtime)",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -43,19 +43,19 @@
43
43
  "license": "MIT",
44
44
  "dependencies": {
45
45
  "zod": "^4.4.3",
46
- "@zhin.js/tool": "1.1.9",
47
- "@zhin.js/skill": "1.1.9"
46
+ "@zhin.js/tool": "1.1.11",
47
+ "@zhin.js/skill": "1.1.10"
48
48
  },
49
49
  "devDependencies": {
50
50
  "typescript": "^6.0.3",
51
51
  "vitest": "^4.1.10",
52
- "@zhin.js/agent": "1.1.40",
53
- "zhin.js": "1.1.15"
52
+ "@zhin.js/agent": "1.1.43",
53
+ "zhin.js": "1.1.17"
54
54
  },
55
55
  "peerDependencies": {
56
- "@zhin.js/agent": "^1.1.40",
57
- "@zhin.js/command": "^1.1.10",
58
- "zhin.js": "^1.1.15"
56
+ "@zhin.js/agent": "^1.1.43",
57
+ "@zhin.js/command": "^1.1.11",
58
+ "zhin.js": "^1.1.17"
59
59
  },
60
60
  "peerDependenciesMeta": {
61
61
  "@zhin.js/agent": {
package/plugin.js CHANGED
@@ -1,4 +1,5 @@
1
1
  // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ import { projectLocaleToken, resolveLocale } from 'zhin.js/i18n';
2
3
  import { definePlugin, databaseHostToken, outboundHostToken, scheduleHostToken, } from 'zhin.js';
3
4
  import { lotteryEnabledGames, lotteryKl8, resolveLotteryConfig, } from "./lib/config.js";
4
5
  import { defineLotteryTables } from "./lib/db.js";
@@ -18,6 +19,7 @@ export default definePlugin({
18
19
  },
19
20
  async setup(context) {
20
21
  const config = resolveLotteryConfig(context.config.get());
22
+ const locale = resolveLocale(context.resources.use(projectLocaleToken));
21
23
  // host 与 memory 模型表面结构兼容(where 均返回 PromiseLike),可直接互换。
22
24
  const db = (() => {
23
25
  if (context.resources.has(databaseHostToken)) {
@@ -50,6 +52,7 @@ export default definePlugin({
50
52
  };
51
53
  }
52
54
  context.resources.provide(lotteryRuntimeToken, Object.freeze({
55
+ locale,
53
56
  db,
54
57
  config: Object.freeze({ ...config }),
55
58
  enabledGames: Object.freeze([...lotteryEnabledGames(config)]),
@@ -65,6 +68,7 @@ export default definePlugin({
65
68
  description: 'Daily lottery pipeline',
66
69
  async execute() {
67
70
  await runLotteryPipeline({
71
+ locale,
68
72
  db,
69
73
  enabledGames: () => lotteryEnabledGames(config),
70
74
  historyLimit: config.historyLimit,
@@ -7,6 +7,6 @@ export default defineAgentTool({
7
7
  description: 'Compute lottery recommendation numbers via F/O/T stats engine',
8
8
  inputSchema: z.object({ game: z.string().min(1) }),
9
9
  async execute({ game }, context) {
10
- return handleComputeRecommend(context.use(lotteryRuntimeToken), game);
10
+ return handleComputeRecommend(context.use(lotteryRuntimeToken), game, context.locale);
11
11
  },
12
12
  });
@@ -7,6 +7,6 @@ export default defineAgentTool<{ game: string }>({
7
7
  description: 'Compute lottery recommendation numbers via F/O/T stats engine',
8
8
  inputSchema: z.object({ game: z.string().min(1) }),
9
9
  async execute({ game }, context) {
10
- return handleComputeRecommend(context.use(lotteryRuntimeToken), game);
10
+ return handleComputeRecommend(context.use(lotteryRuntimeToken), game, context.locale);
11
11
  },
12
12
  });
@@ -1,4 +1,5 @@
1
1
  // Generated by build-plugin-runtime-entries.mjs. Do not edit.
2
+ import { messages as t } from "../../../../lib/i18n.js";
2
3
  import { defineAgentTool } from '@zhin.js/tool';
3
4
  import { z } from 'zod';
4
5
  import { parseGameId } from "../../../../lib/games/registry.js";
@@ -11,7 +12,7 @@ export default defineAgentTool({
11
12
  const runtime = context.use(lotteryRuntimeToken);
12
13
  const gid = parseGameId(game);
13
14
  if (!gid)
14
- return 'invalid game';
15
+ return t(context.locale, 'invalidGame');
15
16
  const lim = Math.min(30, count || 10);
16
17
  return JSON.stringify(await loadDraws(runtime.db, gid, lim));
17
18
  },
@@ -1,3 +1,4 @@
1
+ import { messages as t } from '../../../../src/i18n.js';
1
2
  import { defineAgentTool } from '@zhin.js/tool';
2
3
  import { z } from 'zod';
3
4
  import { parseGameId } from '../../../../src/games/registry.js';
@@ -10,7 +11,7 @@ export default defineAgentTool<{ game: string; count?: number }>({
10
11
  async execute({ game, count }, context) {
11
12
  const runtime = context.use(lotteryRuntimeToken);
12
13
  const gid = parseGameId(game);
13
- if (!gid) return 'invalid game';
14
+ if (!gid) return t(context.locale, 'invalidGame');
14
15
  const lim = Math.min(30, count || 10);
15
16
  return JSON.stringify(await loadDraws(runtime.db, gid, lim));
16
17
  },
@@ -7,6 +7,6 @@ export default defineAgentTool({
7
7
  description: 'Save a pending lottery prediction',
8
8
  inputSchema: z.object({ game: z.string().min(1), numbers_json: z.string().min(1) }),
9
9
  async execute({ game, numbers_json }, context) {
10
- return handleSavePrediction(context.use(lotteryRuntimeToken), game, numbers_json);
10
+ return handleSavePrediction(context.use(lotteryRuntimeToken), game, numbers_json, context.locale);
11
11
  },
12
12
  });
@@ -7,6 +7,6 @@ export default defineAgentTool<{ game: string; numbers_json: string }>({
7
7
  description: 'Save a pending lottery prediction',
8
8
  inputSchema: z.object({ game: z.string().min(1), numbers_json: z.string().min(1) }),
9
9
  async execute({ game, numbers_json }, context) {
10
- return handleSavePrediction(context.use(lotteryRuntimeToken), game, numbers_json);
10
+ return handleSavePrediction(context.use(lotteryRuntimeToken), game, numbers_json, context.locale);
11
11
  },
12
12
  });
@@ -7,6 +7,6 @@ export default defineAgentTool({
7
7
  description: 'Get stats snapshot for a lottery game',
8
8
  inputSchema: z.object({ game: z.string().min(1) }),
9
9
  async execute({ game }, context) {
10
- return handleStatsSnapshot(context.use(lotteryRuntimeToken), game);
10
+ return handleStatsSnapshot(context.use(lotteryRuntimeToken), game, context.locale);
11
11
  },
12
12
  });
@@ -7,6 +7,6 @@ export default defineAgentTool<{ game: string }>({
7
7
  description: 'Get stats snapshot for a lottery game',
8
8
  inputSchema: z.object({ game: z.string().min(1) }),
9
9
  async execute({ game }, context) {
10
- return handleStatsSnapshot(context.use(lotteryRuntimeToken), game);
10
+ return handleStatsSnapshot(context.use(lotteryRuntimeToken), game, context.locale);
11
11
  },
12
12
  });
@@ -10,7 +10,7 @@ export default defineAgentTool({
10
10
  async execute({ game }, context) {
11
11
  const runtime = context.use(lotteryRuntimeToken);
12
12
  const gid = parseGameId(game ?? '');
13
- const result = await runDataSync(() => runtime.db, () => [...runtime.enabledGames], runtime.config.historyLimit, gid ?? undefined);
13
+ const result = await runDataSync(() => runtime.db, () => [...runtime.enabledGames], runtime.config.historyLimit, gid ?? undefined, context.locale);
14
14
  return JSON.stringify({ result });
15
15
  },
16
16
  });
@@ -15,6 +15,7 @@ export default defineAgentTool<{ game?: string }>({
15
15
  () => [...runtime.enabledGames],
16
16
  runtime.config.historyLimit,
17
17
  gid ?? undefined,
18
+ context.locale,
18
19
  );
19
20
  return JSON.stringify({ result });
20
21
  },
@@ -1,3 +1,4 @@
1
+ import type { Locale } from 'zhin.js/i18n';
1
2
  import {
2
3
  lotteryEnabledGames,
3
4
  lotteryKl8,
@@ -10,9 +11,11 @@ import { formatPipelineReply, runLotteryPipeline, type PipelineDeps } from './pi
10
11
  export function buildPipelineDeps(
11
12
  raw: Partial<LotteryConfig> | undefined,
12
13
  db: LotteryDb,
14
+ locale?: Locale,
13
15
  ): PipelineDeps {
14
16
  const config = resolveLotteryConfig(raw);
15
17
  return {
18
+ locale,
16
19
  db,
17
20
  enabledGames: () => lotteryEnabledGames(config),
18
21
  historyLimit: config.historyLimit,
@@ -1,3 +1,5 @@
1
+ import type { Locale } from 'zhin.js/i18n';
2
+ import { messages as t } from '../i18n.js';
1
3
  import type { GameId } from '../types.js';
2
4
  import { loadDraws, type LotteryDb } from '../db.js';
3
5
 
@@ -102,24 +104,24 @@ function signedPct(delta: number): string {
102
104
  return v >= 0 ? `+${v.toFixed(1)}` : v.toFixed(1);
103
105
  }
104
106
 
105
- export function formatBacktestLine(s: BacktestSummary): string {
107
+ export function formatBacktestLine(s: BacktestSummary, locale?: Locale): string {
106
108
  const w = formatWeights(s.finalWeights);
107
109
  return [
108
- `${s.gameId}: 调优 ${pct(s.adaptiveAvgHitRate)}%`,
109
- `固定 ${pct(s.fixedAvgHitRate)}%`,
110
- `随机 ${pct(s.randomAvgHitRate)}%`,
111
- `(Δ调优-随机 ${signedPct(s.adaptiveVsRandom)}%, n=${s.periods}, 热身${s.warmupPeriods}期)`,
112
- `终权重 ${w}`,
110
+ t(locale, 'backtestAdaptive', { game: s.gameId, rate: pct(s.adaptiveAvgHitRate) }),
111
+ t(locale, 'backtestFixed', { rate: pct(s.fixedAvgHitRate) }),
112
+ t(locale, 'backtestRandom', { rate: pct(s.randomAvgHitRate) }),
113
+ t(locale, 'backtestDelta', { delta: signedPct(s.adaptiveVsRandom), count: s.periods, warmup: s.warmupPeriods }),
114
+ t(locale, 'finalWeights', { weights: w }),
113
115
  ].join(' / ');
114
116
  }
115
117
 
116
- export function formatBacktestSection(summaries: BacktestSummary[]): string {
118
+ export function formatBacktestSection(summaries: BacktestSummary[], locale?: Locale): string {
117
119
  if (!summaries.length) return '';
118
120
  const lines = [
119
- '【回测可信度】近 N 期 walk-forward 抽样(全量训练请用 lottery-train)',
120
- ...summaries.map(formatBacktestLine),
121
- '说明:Δ 接近 0 为正常;终权重见 lottery_model_weights。',
122
- '推荐时若近端调优输给随机,将自动回退默认 F40/O35/T25(见【权重保护】)。',
121
+ t(locale, 'backtestTitle'),
122
+ ...summaries.map(summary => formatBacktestLine(summary, locale)),
123
+ t(locale, 'backtestNote'),
124
+ t(locale, 'backtestFallback'),
123
125
  ];
124
126
  return lines.join('\n');
125
127
  }
@@ -1,3 +1,5 @@
1
+ import type { Locale } from 'zhin.js/i18n';
2
+ import { messages as t } from '../i18n.js';
1
3
  import { DEFAULT_WEIGHTS, type DrawNumbers, type GameId, type GamePick, type HitSummary, type NormalizedDraw, type ScoreWeights, type AccuracySnapshot } from '../types.js';
2
4
 
3
5
  import { loadDraws, parseStoredJson, type LotteryDb } from '../db.js';
@@ -267,12 +269,12 @@ export async function loadAgentMemory(db: LotteryDb, gameId?: string, limit = 20
267
269
  .slice(0, limit);
268
270
  }
269
271
 
270
- export async function formatReviewReport(db: LotteryDb, gameId?: GameId): Promise<string> {
272
+ export async function formatReviewReport(db: LotteryDb, gameId?: GameId, locale?: Locale): Promise<string> {
271
273
  const predModel = db.models.get(PREDICTIONS_TABLE);
272
274
  const memModel = db.models.get(MEMORY_TABLE);
273
- if (!predModel) return '数据库未就绪';
275
+ if (!predModel) return t(locale, 'dbNotReady');
274
276
  const games: GameId[] = gameId ? [gameId] : ['kl8', 'ssq', 'dlt', 'fc3d', 'pl3', 'pl5'];
275
- const lines = ['【彩票推荐复盘】', ''];
277
+ const lines = [t(locale, 'reviewTitle'), ''];
276
278
  for (const gid of games) {
277
279
  const weights = await loadGameWeights(db, gid);
278
280
  const snap = await loadAccuracySnapshot(db, gid);
@@ -285,15 +287,15 @@ export async function formatReviewReport(db: LotteryDb, gameId?: GameId): Promis
285
287
  const recent = [...preds]
286
288
  .sort((a, b) => (b.evaluated_at ?? '').localeCompare(a.evaluated_at ?? ''))
287
289
  .slice(0, 5);
288
- lines.push(`■ ${gid} 模型 ${formatWeights(weights)}`);
290
+ lines.push(t(locale, 'reviewModel', { game: gid, weights: formatWeights(weights) }));
289
291
  if (snap) {
290
- lines.push(` 累计 ${snap.evalCount} 期 平均命中 ${(snap.avgHitRate * 100).toFixed(1)}%`);
292
+ lines.push(t(locale, 'reviewRate', { count: snap.evalCount, rate: (snap.avgHitRate * 100).toFixed(1) }));
291
293
  } else {
292
- lines.push(' 尚无复盘数据');
294
+ lines.push(t(locale, 'reviewEmpty'));
293
295
  }
294
296
  for (const p of recent) {
295
297
  const h = parseStoredJson<HitSummary>(p.hit_summary, { total: 0, hits: 0, rate: 0, detail: '-' });
296
- lines.push(` 第${p.actual_issue}期 ${h.detail} (${(h.rate * 100).toFixed(0)}%)`);
298
+ lines.push(t(locale, 'reviewDraw', { issue: p.actual_issue, detail: h.detail, rate: (h.rate * 100).toFixed(0) }));
297
299
  if (p.analysis?.trim()) lines.push(` ${p.analysis.trim()}`);
298
300
  }
299
301
  lines.push('');
@@ -301,7 +303,7 @@ export async function formatReviewReport(db: LotteryDb, gameId?: GameId): Promis
301
303
  if (memModel) {
302
304
  const mem = await loadAgentMemory(db, gameId, 5);
303
305
  if (mem.length) {
304
- lines.push('【Agent 记忆】');
306
+ lines.push(t(locale, 'agentMemory'));
305
307
  for (const m of mem as Array<{ game_id?: string; content?: string; memory_type?: string }>) {
306
308
  lines.push(`- [${m.game_id || 'global'}/${m.memory_type}] ${m.content}`);
307
309
  }
@@ -1,3 +1,5 @@
1
+ import type { Locale } from 'zhin.js/i18n';
2
+ import { messages as t } from '../i18n.js';
1
3
  import { DEFAULT_WEIGHTS, type GameId, type ScoreWeights } from '../types.js';
2
4
 
3
5
  import { loadDraws, type LotteryDb } from '../db.js';
@@ -110,25 +112,25 @@ function signedPct(delta: number): string {
110
112
  return v >= 0 ? `+${v.toFixed(1)}` : v.toFixed(1);
111
113
  }
112
114
 
113
- export function formatTrainLine(r: TrainWeightsResult): string {
115
+ export function formatTrainLine(r: TrainWeightsResult, locale?: Locale): string {
114
116
  const init = formatWeights(r.initialWeights);
115
117
  const fin = formatWeights(r.finalWeights);
116
- const fallback = r.holdoutFallbackApplied ? ' [holdout→默认]' : '';
118
+ const fallback = r.holdoutFallbackApplied ? t(locale, 'trainFallback') : '';
117
119
  return [
118
- `${r.gameId}: 训练${r.trainSteps}期 (${r.firstScoredIssue}→${r.lastScoredIssue})${fallback}`,
119
- `命中 调优${pct(r.adaptiveAvgHitRate)}% / 固定${pct(r.fixedAvgHitRate)}% / 随机${pct(r.randomAvgHitRate)}%`,
120
- `Δ调优-随机 ${signedPct(r.adaptiveVsRandom)}%`,
121
- `权重 ${init} → ${fin}`,
120
+ t(locale, 'trainGame', { game: r.gameId, steps: r.trainSteps, first: r.firstScoredIssue, last: r.lastScoredIssue, fallback }),
121
+ t(locale, 'trainHit', { adaptive: pct(r.adaptiveAvgHitRate), fixed: pct(r.fixedAvgHitRate), random: pct(r.randomAvgHitRate) }),
122
+ t(locale, 'trainDelta', { delta: signedPct(r.adaptiveVsRandom) }),
123
+ t(locale, 'trainWeights', { initial: init, final: fin }),
122
124
  ].join('\n ');
123
125
  }
124
126
 
125
- export function formatTrainReport(results: TrainWeightsResult[]): string {
126
- if (!results.length) return '训练失败:历史数据不足,请先同步开奖。';
127
+ export function formatTrainReport(results: TrainWeightsResult[], locale?: Locale): string {
128
+ if (!results.length) return t(locale, 'trainEmpty');
127
129
  const lines = [
128
- '【权重训练】全历史 walk-forward:预测→比对→调权,已写入 lottery_model_weights',
129
- ...results.map(formatTrainLine),
130
+ t(locale, 'trainTitle'),
131
+ ...results.map(result => formatTrainLine(result, locale)),
130
132
  '',
131
- '说明:训练≠保证未来更准;终权重供后续 lottery 推荐使用。',
133
+ t(locale, 'trainNote'),
132
134
  ];
133
135
  return lines.join('\n');
134
136
  }
@@ -1,3 +1,5 @@
1
+ import { resolveLocale, type Locale } from 'zhin.js/i18n';
2
+ import { messages as t } from '../i18n.js';
1
3
  import { DEFAULT_WEIGHTS, type DrawNumbers, type Kl8GroupStrategy, type Kl8PickGroup, type NormalizedDraw, type ScoreWeights } from '../types.js';
2
4
 
3
5
  import { pickTopUnique, scorePool, type PoolScore } from '../stats/engine.js';
@@ -70,6 +72,7 @@ export function recommendKl8Groups(
70
72
  strategies: Kl8GroupStrategy[];
71
73
  tieSeed: string;
72
74
  baseWeights: ScoreWeights;
75
+ locale?: Locale;
73
76
  },
74
77
  ): RecommendKl8GroupsResult {
75
78
  const rows = poolDraws(draws, (n) => n.main ?? []);
@@ -86,7 +89,7 @@ export function recommendKl8Groups(
86
89
  groups.push({
87
90
  index: i + 1,
88
91
  strategy,
89
- label: KL8_STRATEGY_LABELS[strategy],
92
+ label: t(options.locale, `strategy.${strategy}`),
90
93
  numbers: main,
91
94
  weights,
92
95
  });