@zhin.js/core 1.0.37 → 1.0.39

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 (204) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +57 -3
  3. package/lib/adapter.d.ts +11 -0
  4. package/lib/adapter.d.ts.map +1 -1
  5. package/lib/adapter.js +61 -0
  6. package/lib/adapter.js.map +1 -1
  7. package/lib/ai/index.d.ts +3 -39
  8. package/lib/ai/index.d.ts.map +1 -1
  9. package/lib/ai/index.js +2 -44
  10. package/lib/ai/index.js.map +1 -1
  11. package/lib/ai/providers/anthropic.d.ts.map +1 -1
  12. package/lib/ai/providers/anthropic.js +2 -0
  13. package/lib/ai/providers/anthropic.js.map +1 -1
  14. package/lib/ai/providers/openai.d.ts.map +1 -1
  15. package/lib/ai/providers/openai.js +8 -0
  16. package/lib/ai/providers/openai.js.map +1 -1
  17. package/lib/ai/types.d.ts +5 -3
  18. package/lib/ai/types.d.ts.map +1 -1
  19. package/lib/built/ai-trigger.js.map +1 -1
  20. package/lib/built/common-adapter-tools.d.ts +55 -0
  21. package/lib/built/common-adapter-tools.d.ts.map +1 -0
  22. package/lib/built/common-adapter-tools.js +158 -0
  23. package/lib/built/common-adapter-tools.js.map +1 -0
  24. package/lib/built/dispatcher.d.ts.map +1 -1
  25. package/lib/built/dispatcher.js +50 -46
  26. package/lib/built/dispatcher.js.map +1 -1
  27. package/lib/built/skill.d.ts.map +1 -1
  28. package/lib/built/skill.js +0 -1
  29. package/lib/built/skill.js.map +1 -1
  30. package/lib/built/tool.d.ts +3 -3
  31. package/lib/built/tool.d.ts.map +1 -1
  32. package/lib/built/tool.js.map +1 -1
  33. package/lib/feature.d.ts +16 -1
  34. package/lib/feature.d.ts.map +1 -1
  35. package/lib/feature.js +41 -2
  36. package/lib/feature.js.map +1 -1
  37. package/lib/index.d.ts +1 -0
  38. package/lib/index.d.ts.map +1 -1
  39. package/lib/index.js +2 -0
  40. package/lib/index.js.map +1 -1
  41. package/lib/plugin.d.ts +38 -1
  42. package/lib/plugin.d.ts.map +1 -1
  43. package/lib/plugin.js +73 -22
  44. package/lib/plugin.js.map +1 -1
  45. package/lib/scheduler/scheduler.js +1 -1
  46. package/lib/scheduler/scheduler.js.map +1 -1
  47. package/lib/types.d.ts +43 -28
  48. package/lib/types.d.ts.map +1 -1
  49. package/lib/utils.d.ts +12 -3
  50. package/lib/utils.d.ts.map +1 -1
  51. package/lib/utils.js +64 -54
  52. package/lib/utils.js.map +1 -1
  53. package/package.json +5 -5
  54. package/src/adapter.ts +85 -5
  55. package/src/ai/index.ts +8 -186
  56. package/src/ai/providers/anthropic.ts +1 -0
  57. package/src/ai/providers/openai.ts +5 -1
  58. package/src/ai/types.ts +6 -4
  59. package/src/built/ai-trigger.ts +2 -2
  60. package/src/built/common-adapter-tools.ts +207 -0
  61. package/src/built/dispatcher.ts +51 -52
  62. package/src/built/skill.ts +3 -4
  63. package/src/built/tool.ts +3 -3
  64. package/src/feature.ts +45 -2
  65. package/src/index.ts +2 -0
  66. package/src/plugin.ts +92 -31
  67. package/src/scheduler/scheduler.ts +1 -1
  68. package/src/types.ts +39 -28
  69. package/src/utils.ts +63 -52
  70. package/tests/ai/setup.ts +2 -2
  71. package/tests/utils.test.ts +1 -3
  72. package/lib/ai/agent.d.ts +0 -130
  73. package/lib/ai/agent.d.ts.map +0 -1
  74. package/lib/ai/agent.js +0 -702
  75. package/lib/ai/agent.js.map +0 -1
  76. package/lib/ai/bootstrap.d.ts +0 -91
  77. package/lib/ai/bootstrap.d.ts.map +0 -1
  78. package/lib/ai/bootstrap.js +0 -243
  79. package/lib/ai/bootstrap.js.map +0 -1
  80. package/lib/ai/builtin-tools.d.ts +0 -59
  81. package/lib/ai/builtin-tools.d.ts.map +0 -1
  82. package/lib/ai/builtin-tools.js +0 -777
  83. package/lib/ai/builtin-tools.js.map +0 -1
  84. package/lib/ai/compaction.d.ts +0 -132
  85. package/lib/ai/compaction.d.ts.map +0 -1
  86. package/lib/ai/compaction.js +0 -370
  87. package/lib/ai/compaction.js.map +0 -1
  88. package/lib/ai/context-manager.d.ts +0 -213
  89. package/lib/ai/context-manager.d.ts.map +0 -1
  90. package/lib/ai/context-manager.js +0 -313
  91. package/lib/ai/context-manager.js.map +0 -1
  92. package/lib/ai/conversation-memory.d.ts +0 -181
  93. package/lib/ai/conversation-memory.d.ts.map +0 -1
  94. package/lib/ai/conversation-memory.js +0 -581
  95. package/lib/ai/conversation-memory.js.map +0 -1
  96. package/lib/ai/cron-engine.d.ts +0 -92
  97. package/lib/ai/cron-engine.d.ts.map +0 -1
  98. package/lib/ai/cron-engine.js +0 -278
  99. package/lib/ai/cron-engine.js.map +0 -1
  100. package/lib/ai/follow-up.d.ts +0 -131
  101. package/lib/ai/follow-up.d.ts.map +0 -1
  102. package/lib/ai/follow-up.js +0 -265
  103. package/lib/ai/follow-up.js.map +0 -1
  104. package/lib/ai/hooks.d.ts +0 -143
  105. package/lib/ai/hooks.d.ts.map +0 -1
  106. package/lib/ai/hooks.js +0 -108
  107. package/lib/ai/hooks.js.map +0 -1
  108. package/lib/ai/init.d.ts +0 -30
  109. package/lib/ai/init.d.ts.map +0 -1
  110. package/lib/ai/init.js +0 -686
  111. package/lib/ai/init.js.map +0 -1
  112. package/lib/ai/output.d.ts +0 -93
  113. package/lib/ai/output.d.ts.map +0 -1
  114. package/lib/ai/output.js +0 -176
  115. package/lib/ai/output.js.map +0 -1
  116. package/lib/ai/rate-limiter.d.ts +0 -38
  117. package/lib/ai/rate-limiter.d.ts.map +0 -1
  118. package/lib/ai/rate-limiter.js +0 -86
  119. package/lib/ai/rate-limiter.js.map +0 -1
  120. package/lib/ai/service.d.ts +0 -88
  121. package/lib/ai/service.d.ts.map +0 -1
  122. package/lib/ai/service.js +0 -285
  123. package/lib/ai/service.js.map +0 -1
  124. package/lib/ai/session.d.ts +0 -186
  125. package/lib/ai/session.d.ts.map +0 -1
  126. package/lib/ai/session.js +0 -443
  127. package/lib/ai/session.js.map +0 -1
  128. package/lib/ai/subagent.d.ts +0 -50
  129. package/lib/ai/subagent.d.ts.map +0 -1
  130. package/lib/ai/subagent.js +0 -144
  131. package/lib/ai/subagent.js.map +0 -1
  132. package/lib/ai/tone-detector.d.ts +0 -19
  133. package/lib/ai/tone-detector.d.ts.map +0 -1
  134. package/lib/ai/tone-detector.js +0 -72
  135. package/lib/ai/tone-detector.js.map +0 -1
  136. package/lib/ai/tools.d.ts +0 -45
  137. package/lib/ai/tools.d.ts.map +0 -1
  138. package/lib/ai/tools.js +0 -206
  139. package/lib/ai/tools.js.map +0 -1
  140. package/lib/ai/user-profile.d.ts +0 -56
  141. package/lib/ai/user-profile.d.ts.map +0 -1
  142. package/lib/ai/user-profile.js +0 -130
  143. package/lib/ai/user-profile.js.map +0 -1
  144. package/lib/ai/zhin-agent/builtin-tools.d.ts +0 -17
  145. package/lib/ai/zhin-agent/builtin-tools.d.ts.map +0 -1
  146. package/lib/ai/zhin-agent/builtin-tools.js +0 -220
  147. package/lib/ai/zhin-agent/builtin-tools.js.map +0 -1
  148. package/lib/ai/zhin-agent/config.d.ts +0 -54
  149. package/lib/ai/zhin-agent/config.d.ts.map +0 -1
  150. package/lib/ai/zhin-agent/config.js +0 -76
  151. package/lib/ai/zhin-agent/config.js.map +0 -1
  152. package/lib/ai/zhin-agent/exec-policy.d.ts +0 -20
  153. package/lib/ai/zhin-agent/exec-policy.d.ts.map +0 -1
  154. package/lib/ai/zhin-agent/exec-policy.js +0 -71
  155. package/lib/ai/zhin-agent/exec-policy.js.map +0 -1
  156. package/lib/ai/zhin-agent/index.d.ts +0 -70
  157. package/lib/ai/zhin-agent/index.d.ts.map +0 -1
  158. package/lib/ai/zhin-agent/index.js +0 -404
  159. package/lib/ai/zhin-agent/index.js.map +0 -1
  160. package/lib/ai/zhin-agent/prompt.d.ts +0 -21
  161. package/lib/ai/zhin-agent/prompt.d.ts.map +0 -1
  162. package/lib/ai/zhin-agent/prompt.js +0 -111
  163. package/lib/ai/zhin-agent/prompt.js.map +0 -1
  164. package/lib/ai/zhin-agent/tool-collector.d.ts +0 -22
  165. package/lib/ai/zhin-agent/tool-collector.d.ts.map +0 -1
  166. package/lib/ai/zhin-agent/tool-collector.js +0 -218
  167. package/lib/ai/zhin-agent/tool-collector.js.map +0 -1
  168. package/src/ai/agent.ts +0 -831
  169. package/src/ai/bootstrap.ts +0 -309
  170. package/src/ai/builtin-tools.ts +0 -849
  171. package/src/ai/compaction.ts +0 -529
  172. package/src/ai/context-manager.ts +0 -440
  173. package/src/ai/conversation-memory.ts +0 -774
  174. package/src/ai/cron-engine.ts +0 -337
  175. package/src/ai/follow-up.ts +0 -357
  176. package/src/ai/hooks.ts +0 -223
  177. package/src/ai/init.ts +0 -762
  178. package/src/ai/output.ts +0 -261
  179. package/src/ai/rate-limiter.ts +0 -129
  180. package/src/ai/service.ts +0 -331
  181. package/src/ai/session.ts +0 -544
  182. package/src/ai/subagent.ts +0 -209
  183. package/src/ai/tone-detector.ts +0 -89
  184. package/src/ai/tools.ts +0 -218
  185. package/src/ai/user-profile.ts +0 -181
  186. package/src/ai/zhin-agent/builtin-tools.ts +0 -247
  187. package/src/ai/zhin-agent/config.ts +0 -113
  188. package/src/ai/zhin-agent/exec-policy.ts +0 -78
  189. package/src/ai/zhin-agent/index.ts +0 -512
  190. package/src/ai/zhin-agent/prompt.ts +0 -131
  191. package/src/ai/zhin-agent/tool-collector.ts +0 -243
  192. package/tests/ai/agent.test.ts +0 -614
  193. package/tests/ai/context-manager.test.ts +0 -413
  194. package/tests/ai/conversation-memory.test.ts +0 -128
  195. package/tests/ai/follow-up.test.ts +0 -175
  196. package/tests/ai/integration.test.ts +0 -584
  197. package/tests/ai/output.test.ts +0 -128
  198. package/tests/ai/rate-limiter.test.ts +0 -108
  199. package/tests/ai/session.test.ts +0 -375
  200. package/tests/ai/subagent.test.ts +0 -270
  201. package/tests/ai/tone-detector.test.ts +0 -80
  202. package/tests/ai/tools-builtin.test.ts +0 -346
  203. package/tests/ai/user-profile.test.ts +0 -73
  204. package/tests/ai/zhin-agent.test.ts +0 -177
@@ -1,92 +0,0 @@
1
- /**
2
- * 持久化定时任务
3
- *
4
- * 将定时任务持久化到 data/cron-jobs.json,进程重启后自动加载;
5
- * 触发时以 prompt 调用 ZhinAgent,实现「到点执行 AI 任务」。
6
- *
7
- * - 存储:id, cronExpression, prompt, label?, enabled, createdAt
8
- * - 启动时:读取文件 → 为每条启用的任务创建 Cron → 注册到 CronFeature
9
- * - CLI / AI 工具:可对持久化任务做 list / add / remove / pause / resume(AI 侧立即生效)
10
- */
11
- import { Cron } from '../cron.js';
12
- import { ZhinTool } from '../built/tool.js';
13
- export declare const CRON_JOBS_FILENAME = "cron-jobs.json";
14
- export interface CronJobRecord {
15
- id: string;
16
- /** Cron 表达式,5 字段:分 时 日 月 周 */
17
- cronExpression: string;
18
- /** 触发时发给 AI 的 prompt */
19
- prompt: string;
20
- /** 可选标签,便于识别 */
21
- label?: string;
22
- /** 是否启用(暂停的任务不加载) */
23
- enabled: boolean;
24
- createdAt: number;
25
- }
26
- export declare function getCronJobsFilePath(dataDir: string): string;
27
- export declare function readCronJobsFile(dataDir: string): Promise<CronJobRecord[]>;
28
- export declare function writeCronJobsFile(dataDir: string, jobs: CronJobRecord[]): Promise<void>;
29
- export type CronRunner = (prompt: string, jobId: string) => void | Promise<void>;
30
- export type AddCronFn = (cron: Cron) => () => void;
31
- export interface PersistentCronEngineOptions {
32
- dataDir: string;
33
- addCron: AddCronFn;
34
- runner: CronRunner;
35
- }
36
- export declare class PersistentCronEngine {
37
- private options;
38
- /** jobId -> dispose */
39
- private disposes;
40
- constructor(options: PersistentCronEngineOptions);
41
- getDataDir(): string;
42
- /**
43
- * 从文件加载任务并注册到 CronFeature;仅加载 enabled 的任务。
44
- */
45
- load(): void;
46
- private registerOne;
47
- /**
48
- * 列出所有持久化任务(从文件读取)
49
- */
50
- listJobs(): Promise<CronJobRecord[]>;
51
- /**
52
- * 添加持久化任务并立即生效
53
- */
54
- addJob(record: Omit<CronJobRecord, 'createdAt'> & {
55
- createdAt?: number;
56
- }): Promise<CronJobRecord>;
57
- /**
58
- * 删除持久化任务并立即生效
59
- */
60
- removeJob(id: string): Promise<boolean>;
61
- /**
62
- * 暂停任务(不删除,停止调度)
63
- */
64
- pauseJob(id: string): Promise<boolean>;
65
- /**
66
- * 恢复已暂停的任务
67
- */
68
- resumeJob(id: string): Promise<boolean>;
69
- /**
70
- * 卸载所有由本引擎注册的定时任务(用于 dispose)
71
- */
72
- unload(): void;
73
- }
74
- /**
75
- * 生成唯一 ID(用于 CLI / AI 添加时)
76
- */
77
- export declare function generateCronJobId(): string;
78
- export interface CronManager {
79
- cronFeature: {
80
- getStatus(): Array<{
81
- expression: string;
82
- running: boolean;
83
- nextExecution: Date | null;
84
- plugin: string;
85
- }>;
86
- };
87
- engine: PersistentCronEngine | null;
88
- }
89
- export declare function setCronManager(m: CronManager | null): void;
90
- export declare function getCronManager(): CronManager | null;
91
- export declare function createCronTools(): ZhinTool[];
92
- //# sourceMappingURL=cron-engine.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cron-engine.d.ts","sourceRoot":"","sources":["../../src/ai/cron-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAQ5C,eAAO,MAAM,kBAAkB,mBAAmB,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,8BAA8B;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAYhF;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAI7F;AAMD,MAAM,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEjF,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,IAAI,CAAC;AAEnD,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,OAAO,CAA8B;IAC7C,uBAAuB;IACvB,OAAO,CAAC,QAAQ,CAAiC;gBAErC,OAAO,EAAE,2BAA2B;IAIhD,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,IAAI,IAAI,IAAI;IAeZ,OAAO,CAAC,WAAW;IAkBnB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAI1C;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAevG;;OAEG;IACG,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAa7C;;OAEG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAc5C;;OAEG;IACG,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAU7C;;OAEG;IACH,MAAM,IAAI,IAAI;CAQf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAMD,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE;QAAE,SAAS,IAAI,KAAK,CAAC;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,OAAO,CAAC;YAAC,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAC1H,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACrC;AAID,wBAAgB,cAAc,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAE1D;AAED,wBAAgB,cAAc,IAAI,WAAW,GAAG,IAAI,CAEnD;AAMD,wBAAgB,eAAe,IAAI,QAAQ,EAAE,CAiG5C"}
@@ -1,278 +0,0 @@
1
- /**
2
- * 持久化定时任务
3
- *
4
- * 将定时任务持久化到 data/cron-jobs.json,进程重启后自动加载;
5
- * 触发时以 prompt 调用 ZhinAgent,实现「到点执行 AI 任务」。
6
- *
7
- * - 存储:id, cronExpression, prompt, label?, enabled, createdAt
8
- * - 启动时:读取文件 → 为每条启用的任务创建 Cron → 注册到 CronFeature
9
- * - CLI / AI 工具:可对持久化任务做 list / add / remove / pause / resume(AI 侧立即生效)
10
- */
11
- import * as fs from 'fs';
12
- import * as path from 'path';
13
- import { Cron } from '../cron.js';
14
- import { Logger } from '@zhin.js/logger';
15
- import { ZhinTool } from '../built/tool.js';
16
- const logger = new Logger(null, 'cron-engine');
17
- // ─────────────────────────────────────────────────────────────────────────────
18
- // 类型与存储路径
19
- // ─────────────────────────────────────────────────────────────────────────────
20
- export const CRON_JOBS_FILENAME = 'cron-jobs.json';
21
- export function getCronJobsFilePath(dataDir) {
22
- return path.join(dataDir, CRON_JOBS_FILENAME);
23
- }
24
- export async function readCronJobsFile(dataDir) {
25
- const filePath = getCronJobsFilePath(dataDir);
26
- try {
27
- const raw = await fs.promises.readFile(filePath, 'utf-8');
28
- const data = JSON.parse(raw);
29
- if (!Array.isArray(data))
30
- return [];
31
- return data;
32
- }
33
- catch (e) {
34
- if (e?.code === 'ENOENT')
35
- return [];
36
- logger.warn('读取定时任务文件失败: ' + (e?.message || String(e)));
37
- return [];
38
- }
39
- }
40
- export async function writeCronJobsFile(dataDir, jobs) {
41
- const filePath = getCronJobsFilePath(dataDir);
42
- await fs.promises.mkdir(path.dirname(filePath), { recursive: true });
43
- await fs.promises.writeFile(filePath, JSON.stringify(jobs, null, 2), 'utf-8');
44
- }
45
- export class PersistentCronEngine {
46
- options;
47
- /** jobId -> dispose */
48
- disposes = new Map();
49
- constructor(options) {
50
- this.options = options;
51
- }
52
- getDataDir() {
53
- return this.options.dataDir;
54
- }
55
- /**
56
- * 从文件加载任务并注册到 CronFeature;仅加载 enabled 的任务。
57
- */
58
- load() {
59
- const { dataDir, addCron, runner } = this.options;
60
- readCronJobsFile(dataDir).then((jobs) => {
61
- for (const job of jobs) {
62
- if (!job.enabled)
63
- continue;
64
- this.registerOne(job, addCron, runner);
65
- }
66
- if (jobs.filter((j) => j.enabled).length > 0) {
67
- logger.info(`已加载 ${this.disposes.size} 个持久化定时任务`);
68
- }
69
- }).catch((e) => {
70
- logger.warn('加载持久化定时任务失败: ' + (e?.message || String(e)));
71
- });
72
- }
73
- registerOne(job, addCron, runner) {
74
- const { prompt, id: jobId, cronExpression } = job;
75
- try {
76
- const cron = new Cron(cronExpression, async () => {
77
- await runner(prompt, jobId);
78
- });
79
- cron.id = jobId;
80
- const dispose = addCron(cron);
81
- this.disposes.set(jobId, dispose);
82
- }
83
- catch (e) {
84
- logger.warn(`定时任务加载失败 [${jobId}]: ${e?.message || String(e)}`);
85
- }
86
- }
87
- /**
88
- * 列出所有持久化任务(从文件读取)
89
- */
90
- async listJobs() {
91
- return readCronJobsFile(this.options.dataDir);
92
- }
93
- /**
94
- * 添加持久化任务并立即生效
95
- */
96
- async addJob(record) {
97
- const jobs = await readCronJobsFile(this.options.dataDir);
98
- const full = {
99
- ...record,
100
- createdAt: record.createdAt ?? Date.now(),
101
- enabled: record.enabled ?? true,
102
- };
103
- jobs.push(full);
104
- await writeCronJobsFile(this.options.dataDir, jobs);
105
- if (full.enabled) {
106
- this.registerOne(full, this.options.addCron, this.options.runner);
107
- }
108
- return full;
109
- }
110
- /**
111
- * 删除持久化任务并立即生效
112
- */
113
- async removeJob(id) {
114
- const jobs = await readCronJobsFile(this.options.dataDir);
115
- const next = jobs.filter((j) => j.id !== id);
116
- if (next.length === jobs.length)
117
- return false;
118
- await writeCronJobsFile(this.options.dataDir, next);
119
- const dispose = this.disposes.get(id);
120
- if (dispose) {
121
- dispose();
122
- this.disposes.delete(id);
123
- }
124
- return true;
125
- }
126
- /**
127
- * 暂停任务(不删除,停止调度)
128
- */
129
- async pauseJob(id) {
130
- const jobs = await readCronJobsFile(this.options.dataDir);
131
- const j = jobs.find((x) => x.id === id);
132
- if (!j)
133
- return false;
134
- j.enabled = false;
135
- await writeCronJobsFile(this.options.dataDir, jobs);
136
- const dispose = this.disposes.get(id);
137
- if (dispose) {
138
- dispose();
139
- this.disposes.delete(id);
140
- }
141
- return true;
142
- }
143
- /**
144
- * 恢复已暂停的任务
145
- */
146
- async resumeJob(id) {
147
- const jobs = await readCronJobsFile(this.options.dataDir);
148
- const j = jobs.find((x) => x.id === id);
149
- if (!j)
150
- return false;
151
- j.enabled = true;
152
- await writeCronJobsFile(this.options.dataDir, jobs);
153
- this.registerOne(j, this.options.addCron, this.options.runner);
154
- return true;
155
- }
156
- /**
157
- * 卸载所有由本引擎注册的定时任务(用于 dispose)
158
- */
159
- unload() {
160
- for (const dispose of this.disposes.values()) {
161
- try {
162
- dispose();
163
- }
164
- catch (_) { }
165
- }
166
- this.disposes.clear();
167
- }
168
- }
169
- /**
170
- * 生成唯一 ID(用于 CLI / AI 添加时)
171
- */
172
- export function generateCronJobId() {
173
- return `cron_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
174
- }
175
- let cronManager = null;
176
- export function setCronManager(m) {
177
- cronManager = m;
178
- }
179
- export function getCronManager() {
180
- return cronManager;
181
- }
182
- // ─────────────────────────────────────────────────────────────────────────────
183
- // AI 可调用的定时任务管理工具
184
- // ─────────────────────────────────────────────────────────────────────────────
185
- export function createCronTools() {
186
- const listTool = new ZhinTool('cron_list')
187
- .desc('列出所有定时任务:包括插件注册的内存任务与持久化任务(持久化任务有 id,可用于 cron_remove/cron_pause/cron_resume)')
188
- .keyword('定时任务', 'cron', '计划任务', '任务列表')
189
- .tag('cron', 'schedule')
190
- .execute(async () => {
191
- const m = getCronManager();
192
- if (!m) {
193
- return { error: '定时任务服务不可用' };
194
- }
195
- const memory = m.cronFeature.getStatus().map((s) => ({
196
- type: 'memory',
197
- expression: s.expression,
198
- running: s.running,
199
- nextExecution: s.nextExecution?.toISOString() ?? null,
200
- plugin: s.plugin,
201
- }));
202
- const persistent = m.engine
203
- ? (await m.engine.listJobs()).map((j) => ({
204
- type: 'persistent',
205
- id: j.id,
206
- cronExpression: j.cronExpression,
207
- prompt: j.prompt,
208
- label: j.label,
209
- enabled: j.enabled,
210
- createdAt: j.createdAt,
211
- }))
212
- : [];
213
- return { memory, persistent };
214
- });
215
- const addTool = new ZhinTool('cron_add')
216
- .desc('添加一条持久化定时任务:到点由 AI 执行指定 prompt,重启后仍保留')
217
- .keyword('添加定时', '新建定时任务', 'cron add')
218
- .tag('cron', 'schedule')
219
- .param('cron_expression', { type: 'string', description: 'Cron 表达式,如 "0 9 * * *" 表示每天 9:00' }, true)
220
- .param('prompt', { type: 'string', description: '到点触发时发给 AI 的提示词' }, true)
221
- .param('label', { type: 'string', description: '可选标签,便于识别' })
222
- .execute(async (args) => {
223
- const m = getCronManager();
224
- if (!m?.engine) {
225
- return { error: '持久化定时任务引擎不可用' };
226
- }
227
- const id = generateCronJobId();
228
- const job = await m.engine.addJob({
229
- id,
230
- cronExpression: args.cron_expression,
231
- prompt: args.prompt,
232
- label: args.label,
233
- enabled: true,
234
- });
235
- return { success: true, id: job.id, message: '已添加并立即生效' };
236
- });
237
- const removeTool = new ZhinTool('cron_remove')
238
- .desc('按 id 删除一条持久化定时任务')
239
- .keyword('删除定时', '取消定时', 'cron remove')
240
- .tag('cron', 'schedule')
241
- .param('id', { type: 'string', description: '任务 ID(cron_list 中 persistent 的 id)' }, true)
242
- .execute(async (args) => {
243
- const m = getCronManager();
244
- if (!m?.engine) {
245
- return { error: '持久化定时任务引擎不可用' };
246
- }
247
- const ok = await m.engine.removeJob(args.id);
248
- return ok ? { success: true, message: '已删除' } : { error: '未找到该任务' };
249
- });
250
- const pauseTool = new ZhinTool('cron_pause')
251
- .desc('暂停一条持久化定时任务(不删除,可 cron_resume 恢复)')
252
- .keyword('暂停定时', 'cron pause')
253
- .tag('cron', 'schedule')
254
- .param('id', { type: 'string', description: '任务 ID' }, true)
255
- .execute(async (args) => {
256
- const m = getCronManager();
257
- if (!m?.engine) {
258
- return { error: '持久化定时任务引擎不可用' };
259
- }
260
- const ok = await m.engine.pauseJob(args.id);
261
- return ok ? { success: true, message: '已暂停' } : { error: '未找到该任务' };
262
- });
263
- const resumeTool = new ZhinTool('cron_resume')
264
- .desc('恢复已暂停的持久化定时任务')
265
- .keyword('恢复定时', 'cron resume')
266
- .tag('cron', 'schedule')
267
- .param('id', { type: 'string', description: '任务 ID' }, true)
268
- .execute(async (args) => {
269
- const m = getCronManager();
270
- if (!m?.engine) {
271
- return { error: '持久化定时任务引擎不可用' };
272
- }
273
- const ok = await m.engine.resumeJob(args.id);
274
- return ok ? { success: true, message: '已恢复' } : { error: '未找到该任务' };
275
- });
276
- return [listTool, addTool, removeTool, pauseTool, resumeTool];
277
- }
278
- //# sourceMappingURL=cron-engine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cron-engine.js","sourceRoot":"","sources":["../../src/ai/cron-engine.ts"],"names":[],"mappings":"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"}
@@ -1,131 +0,0 @@
1
- /**
2
- * FollowUpStore — 定时跟进任务的持久化存储
3
- *
4
- * 解决纯 setTimeout 重启即丢失的问题:
5
- * 1. 创建任务时同步写入数据库
6
- * 2. 执行完成 / 过期后从数据库中删除
7
- * 3. 机器人启动时从数据库加载所有未完成任务,重新挂定时器
8
- * 4. 同一会话创建新任务时,自动取消旧的 pending 任务(防止重复提醒)
9
- *
10
- * ai_followups 表:
11
- * ┌──────────────────────────────────────────────────────────────────┐
12
- * │ id (PK) | session_id | platform | sender_id | scene_id │
13
- * │ | message | fire_at | created_at | status │
14
- * └──────────────────────────────────────────────────────────────────┘
15
- */
16
- export declare const AI_FOLLOWUP_MODEL: {
17
- session_id: {
18
- type: "text";
19
- nullable: boolean;
20
- };
21
- platform: {
22
- type: "text";
23
- nullable: boolean;
24
- };
25
- bot_id: {
26
- type: "text";
27
- nullable: boolean;
28
- };
29
- sender_id: {
30
- type: "text";
31
- nullable: boolean;
32
- };
33
- scene_id: {
34
- type: "text";
35
- nullable: boolean;
36
- };
37
- scene_type: {
38
- type: "text";
39
- nullable: boolean;
40
- };
41
- message: {
42
- type: "text";
43
- nullable: boolean;
44
- };
45
- /** 触发时间戳 (ms) */
46
- fire_at: {
47
- type: "integer";
48
- nullable: boolean;
49
- };
50
- created_at: {
51
- type: "integer";
52
- default: number;
53
- };
54
- /** pending | fired | cancelled */
55
- status: {
56
- type: "text";
57
- default: string;
58
- };
59
- };
60
- export interface FollowUpRecord {
61
- id?: number;
62
- session_id: string;
63
- platform: string;
64
- bot_id: string;
65
- sender_id: string;
66
- scene_id: string;
67
- scene_type: string;
68
- message: string;
69
- fire_at: number;
70
- created_at: number;
71
- status: string;
72
- }
73
- /**
74
- * 数据库模型接口(与 RelatedModel 的链式查询 API 对齐)
75
- */
76
- interface DbModel {
77
- select(...fields: string[]): any;
78
- create(data: Record<string, any>): Promise<any>;
79
- update(data: Partial<any>): any;
80
- delete(condition: Record<string, any>): any;
81
- }
82
- /**
83
- * 发送提醒的回调函数
84
- *
85
- * 由 ZhinAgent 在 init 阶段注入,负责把提醒消息发到正确的会话。
86
- */
87
- export type FollowUpSender = (record: FollowUpRecord) => Promise<void>;
88
- export declare class FollowUpManager {
89
- private store;
90
- /** 内存中活跃的定时器: recordId → timer */
91
- private timers;
92
- private sender;
93
- constructor();
94
- /** 注入消息发送回调 */
95
- setSender(sender: FollowUpSender): void;
96
- /** 升级到数据库存储 */
97
- upgradeToDatabase(model: DbModel): void;
98
- /**
99
- * 创建一个跟进任务
100
- *
101
- * 重要:同一会话的旧 pending 任务会被自动取消,防止重复提醒。
102
- *
103
- * @returns 人类可读的确认文本
104
- */
105
- schedule(params: {
106
- sessionId: string;
107
- platform: string;
108
- botId: string;
109
- senderId: string;
110
- sceneId: string;
111
- sceneType: string;
112
- message: string;
113
- delayMinutes: number;
114
- }): Promise<string>;
115
- /**
116
- * 取消指定会话的所有 pending 任务
117
- */
118
- cancelBySession(sessionId: string): Promise<number>;
119
- /**
120
- * 启动时从数据库恢复所有未完成的跟进任务
121
- */
122
- restore(): Promise<number>;
123
- /**
124
- * 为一条记录挂定时器
125
- */
126
- private scheduleTimer;
127
- private scheduleTimerWithDelay;
128
- dispose(): void;
129
- }
130
- export {};
131
- //# sourceMappingURL=follow-up.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"follow-up.d.ts","sourceRoot":"","sources":["../../src/ai/follow-up.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAUH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAQ5B,iBAAiB;;;;;;;;;IAGjB,kCAAkC;;;;;CAEnC,CAAC;AAMF,MAAM,WAAW,cAAc;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,UAAU,OAAO;IACf,MAAM,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IACjC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAChC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;CAC7C;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAuFvE,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAiB;IAC9B,kCAAkC;IAClC,OAAO,CAAC,MAAM,CAAyD;IACvE,OAAO,CAAC,MAAM,CAA+B;;IAM7C,eAAe;IACf,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAIvC,eAAe;IACf,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAOvC;;;;;;OAMG;IACG,QAAQ,CAAC,MAAM,EAAE;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,MAAM,CAAC;IA4DnB;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAoBzD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IA4BhC;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,sBAAsB;IA6B9B,OAAO,IAAI,IAAI;CAOhB"}