botmux 2.2.7 → 2.3.1

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 (121) hide show
  1. package/README.en.md +63 -13
  2. package/README.md +52 -14
  3. package/dist/adapters/backend/tmux-backend.d.ts +8 -0
  4. package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
  5. package/dist/adapters/backend/tmux-backend.js +18 -0
  6. package/dist/adapters/backend/tmux-backend.js.map +1 -1
  7. package/dist/adapters/cli/aiden.d.ts.map +1 -1
  8. package/dist/adapters/cli/aiden.js +0 -40
  9. package/dist/adapters/cli/aiden.js.map +1 -1
  10. package/dist/adapters/cli/claude-code.d.ts.map +1 -1
  11. package/dist/adapters/cli/claude-code.js +21 -67
  12. package/dist/adapters/cli/claude-code.js.map +1 -1
  13. package/dist/adapters/cli/coco.d.ts.map +1 -1
  14. package/dist/adapters/cli/coco.js +0 -33
  15. package/dist/adapters/cli/coco.js.map +1 -1
  16. package/dist/adapters/cli/codex.d.ts.map +1 -1
  17. package/dist/adapters/cli/codex.js +0 -27
  18. package/dist/adapters/cli/codex.js.map +1 -1
  19. package/dist/adapters/cli/gemini.d.ts.map +1 -1
  20. package/dist/adapters/cli/gemini.js +1 -29
  21. package/dist/adapters/cli/gemini.js.map +1 -1
  22. package/dist/adapters/cli/opencode.d.ts.map +1 -1
  23. package/dist/adapters/cli/opencode.js +1 -44
  24. package/dist/adapters/cli/opencode.js.map +1 -1
  25. package/dist/adapters/cli/types.d.ts +11 -8
  26. package/dist/adapters/cli/types.d.ts.map +1 -1
  27. package/dist/cli.js +737 -16
  28. package/dist/cli.js.map +1 -1
  29. package/dist/config.d.ts +16 -0
  30. package/dist/config.d.ts.map +1 -1
  31. package/dist/config.js +30 -0
  32. package/dist/config.js.map +1 -1
  33. package/dist/core/command-handler.d.ts.map +1 -1
  34. package/dist/core/command-handler.js +8 -4
  35. package/dist/core/command-handler.js.map +1 -1
  36. package/dist/core/scheduler.d.ts +38 -16
  37. package/dist/core/scheduler.d.ts.map +1 -1
  38. package/dist/core/scheduler.js +335 -149
  39. package/dist/core/scheduler.js.map +1 -1
  40. package/dist/core/session-manager.d.ts +6 -0
  41. package/dist/core/session-manager.d.ts.map +1 -1
  42. package/dist/core/session-manager.js +105 -16
  43. package/dist/core/session-manager.js.map +1 -1
  44. package/dist/core/types.d.ts +26 -4
  45. package/dist/core/types.d.ts.map +1 -1
  46. package/dist/core/types.js +6 -0
  47. package/dist/core/types.js.map +1 -1
  48. package/dist/core/worker-pool.d.ts +15 -3
  49. package/dist/core/worker-pool.d.ts.map +1 -1
  50. package/dist/core/worker-pool.js +233 -31
  51. package/dist/core/worker-pool.js.map +1 -1
  52. package/dist/daemon.d.ts.map +1 -1
  53. package/dist/daemon.js +49 -10
  54. package/dist/daemon.js.map +1 -1
  55. package/dist/im/lark/card-builder.d.ts +29 -1
  56. package/dist/im/lark/card-builder.d.ts.map +1 -1
  57. package/dist/im/lark/card-builder.js +241 -55
  58. package/dist/im/lark/card-builder.js.map +1 -1
  59. package/dist/im/lark/card-handler.d.ts +1 -0
  60. package/dist/im/lark/card-handler.d.ts.map +1 -1
  61. package/dist/im/lark/card-handler.js +195 -40
  62. package/dist/im/lark/card-handler.js.map +1 -1
  63. package/dist/services/schedule-store.d.ts +20 -3
  64. package/dist/services/schedule-store.d.ts.map +1 -1
  65. package/dist/services/schedule-store.js +140 -16
  66. package/dist/services/schedule-store.js.map +1 -1
  67. package/dist/skills/definitions.d.ts +17 -0
  68. package/dist/skills/definitions.d.ts.map +1 -0
  69. package/dist/skills/definitions.js +254 -0
  70. package/dist/skills/definitions.js.map +1 -0
  71. package/dist/skills/installer.d.ts +9 -0
  72. package/dist/skills/installer.d.ts.map +1 -0
  73. package/dist/skills/installer.js +42 -0
  74. package/dist/skills/installer.js.map +1 -0
  75. package/dist/types.d.ts +84 -7
  76. package/dist/types.d.ts.map +1 -1
  77. package/dist/types.js +1 -5
  78. package/dist/types.js.map +1 -1
  79. package/dist/utils/lark-upload.d.ts +2 -0
  80. package/dist/utils/lark-upload.d.ts.map +1 -0
  81. package/dist/utils/lark-upload.js +27 -0
  82. package/dist/utils/lark-upload.js.map +1 -0
  83. package/dist/utils/screen-analyzer.d.ts +67 -0
  84. package/dist/utils/screen-analyzer.d.ts.map +1 -0
  85. package/dist/utils/screen-analyzer.js +279 -0
  86. package/dist/utils/screen-analyzer.js.map +1 -0
  87. package/dist/utils/screenshot-renderer.d.ts +11 -0
  88. package/dist/utils/screenshot-renderer.d.ts.map +1 -0
  89. package/dist/utils/screenshot-renderer.js +225 -0
  90. package/dist/utils/screenshot-renderer.js.map +1 -0
  91. package/dist/utils/terminal-renderer.d.ts +30 -0
  92. package/dist/utils/terminal-renderer.d.ts.map +1 -1
  93. package/dist/utils/terminal-renderer.js +25 -0
  94. package/dist/utils/terminal-renderer.js.map +1 -1
  95. package/dist/worker.js +372 -14
  96. package/dist/worker.js.map +1 -1
  97. package/package.json +2 -5
  98. package/dist/index.d.ts +0 -3
  99. package/dist/index.d.ts.map +0 -1
  100. package/dist/index.js +0 -16
  101. package/dist/index.js.map +0 -1
  102. package/dist/server.d.ts +0 -3
  103. package/dist/server.d.ts.map +0 -1
  104. package/dist/server.js +0 -133
  105. package/dist/server.js.map +0 -1
  106. package/dist/tools/get-thread-messages.d.ts +0 -26
  107. package/dist/tools/get-thread-messages.d.ts.map +0 -1
  108. package/dist/tools/get-thread-messages.js +0 -38
  109. package/dist/tools/get-thread-messages.js.map +0 -1
  110. package/dist/tools/index.d.ts +0 -9
  111. package/dist/tools/index.d.ts.map +0 -1
  112. package/dist/tools/index.js +0 -10
  113. package/dist/tools/index.js.map +0 -1
  114. package/dist/tools/list-bots.d.ts +0 -40
  115. package/dist/tools/list-bots.d.ts.map +0 -1
  116. package/dist/tools/list-bots.js +0 -77
  117. package/dist/tools/list-bots.js.map +0 -1
  118. package/dist/tools/send-to-thread.d.ts +0 -46
  119. package/dist/tools/send-to-thread.d.ts.map +0 -1
  120. package/dist/tools/send-to-thread.js +0 -275
  121. package/dist/tools/send-to-thread.js.map +0 -1
@@ -1,196 +1,382 @@
1
1
  import { Cron } from 'croner';
2
2
  import * as scheduleStore from '../services/schedule-store.js';
3
3
  import { logger } from '../utils/logger.js';
4
- // ─── Active cron instances ──────────────────────────────────────────────────
5
- const cronJobs = new Map();
6
4
  // Callback set by daemon to execute a scheduled task
7
5
  let executeCallback = null;
6
+ let tickTimer = null;
7
+ /** Owner-filter state — each daemon process runs its own scheduler but only
8
+ * executes tasks whose larkAppId matches. Legacy tasks without a larkAppId
9
+ * fall through to the "primary" daemon (bot-0), matching pre-refactor behavior. */
10
+ let ownerAppId = null;
11
+ let ownerIsPrimary = false;
12
+ const TICK_INTERVAL_MS = 30_000; // poll every 30s
13
+ const ONESHOT_GRACE_SECONDS = 120; // one-shots fire even if <2min late
14
+ const MIN_GRACE_SECONDS = 120; // catch-up window lower bound
15
+ const MAX_GRACE_SECONDS = 2 * 60 * 60; // catch-up window upper bound (2h)
8
16
  export function setExecuteCallback(cb) {
9
17
  executeCallback = cb;
10
18
  }
11
- // ─── Natural language → cron parser ─────────────────────────────────────────
12
- const WEEKDAY_MAP = {
13
- '一': 1, '二': 2, '三': 3, '四': 4, '五': 5, '六': 6, '日': 0, '天': 0,
14
- '周一': 1, '周二': 2, '周三': 3, '周四': 4, '周五': 5, '周六': 6, '周日': 0,
15
- };
16
19
  /**
17
- * Parse natural language schedule expression into cron + prompt.
20
+ * Bind the scheduler to a specific bot (larkAppId). In multi-bot setups every
21
+ * daemon process runs its own scheduler; this filter prevents double-execution
22
+ * by ensuring each task is only handled by the daemon whose bot is actually
23
+ * a member of the task's origin chat.
18
24
  *
19
- * Examples:
20
- * "每日17:50给我帮我看看AI新闻" → { cron: "50 17 * * *", prompt: "帮我看看AI新闻" }
21
- * "每天9:00 检查服务状态" → { cron: "0 9 * * *", prompt: "检查服务状态" }
22
- * "每周一10:30 生成周报" → { cron: "30 10 * * 1", prompt: "生成周报" }
23
- * "工作日每天9:00 检查邮件" → { cron: "0 9 * * 1-5", prompt: "检查邮件" }
24
- * "每小时 检查服务" → { cron: "0 * * * *", prompt: "检查服务" }
25
- * "每30分钟 ping" → { cron: "*\/30 * * * *", prompt: "ping" }
26
- * "每月1号9:00 生成月报" → { cron: "0 9 1 * *", prompt: "生成月报" }
25
+ * @param larkAppId — this daemon's bot app id
26
+ * @param isPrimary true only for bot-0; legacy tasks without larkAppId are
27
+ * routed here as a compatibility fallback
27
28
  */
28
- export function parseNaturalSchedule(input) {
29
- let rest = input.trim();
30
- let cron = '';
31
- let type = 'cron';
32
- // Helper: parse time like "17:50", "17:50", "9点", "9点30", "17点30分"
33
- function parseTime(s) {
34
- // HH:MM or HH:MM
35
- let tm = s.match(/^(\d{1,2})[:::](\d{2})\s*(.*)/s);
36
- if (tm)
37
- return { hour: parseInt(tm[1]), minute: parseInt(tm[2]), rest: tm[3] };
38
- // X点Y分 or X点Y
39
- tm = s.match(/^(\d{1,2})点(\d{1,2})分?\s*(.*)/s);
40
- if (tm)
41
- return { hour: parseInt(tm[1]), minute: parseInt(tm[2]), rest: tm[3] };
42
- // X点 (whole hour)
43
- tm = s.match(/^(\d{1,2})点\s*(.*)/s);
44
- if (tm)
45
- return { hour: parseInt(tm[1]), minute: 0, rest: tm[2] };
46
- return null;
29
+ export function setOwnerFilter(larkAppId, isPrimary) {
30
+ ownerAppId = larkAppId;
31
+ ownerIsPrimary = isPrimary;
32
+ }
33
+ function taskBelongsToThisDaemon(task) {
34
+ if (ownerAppId === null)
35
+ return true; // filter not configured — act like legacy (run all)
36
+ if (task.larkAppId)
37
+ return task.larkAppId === ownerAppId;
38
+ // No larkAppId on task (legacy) only the primary (bot-0) handles it.
39
+ return ownerIsPrimary;
40
+ }
41
+ // ─── Chinese NL parsing (schedule portion only, returns ParsedSchedule) ─────
42
+ const WEEKDAY_MAP = {
43
+ '一': 1, '二': 2, '三': 3, '四': 4, '五': 5, '六': 6, '日': 0, '天': 0,
44
+ };
45
+ function parseTimeHM(s) {
46
+ let m = s.match(/^(\d{1,2})[:::](\d{2})\s*(.*)/s);
47
+ if (m)
48
+ return { hour: parseInt(m[1]), minute: parseInt(m[2]), rest: m[3] };
49
+ m = s.match(/^(\d{1,2})点(\d{1,2})分?\s*(.*)/s);
50
+ if (m)
51
+ return { hour: parseInt(m[1]), minute: parseInt(m[2]), rest: m[3] };
52
+ m = s.match(/^(\d{1,2})点\s*(.*)/s);
53
+ if (m)
54
+ return { hour: parseInt(m[1]), minute: 0, rest: m[2] };
55
+ return null;
56
+ }
57
+ /** Parse Chinese NL → { parsed, rest } where rest is the remaining text after schedule. */
58
+ function parseChineseSchedule(input) {
59
+ const s = input.trim();
60
+ // 工作日每天 HH:MM
61
+ let m = s.match(/^(?:每个?工作日|工作日每[天日])\s*(.*)/);
62
+ if (m) {
63
+ const t = parseTimeHM(m[1]);
64
+ if (t)
65
+ return { parsed: cronPS(`${t.minute} ${t.hour} * * 1-5`, `工作日 ${t.hour}:${String(t.minute).padStart(2, '0')}`), rest: t.rest };
66
+ }
67
+ // 每天/每日 HH:MM
68
+ m = s.match(/^每[天日]\s*(.*)/);
69
+ if (m) {
70
+ const t = parseTimeHM(m[1]);
71
+ if (t)
72
+ return { parsed: cronPS(`${t.minute} ${t.hour} * * *`, `每天 ${t.hour}:${String(t.minute).padStart(2, '0')}`), rest: t.rest };
73
+ }
74
+ // 每周X HH:MM
75
+ m = s.match(/^每周([一二三四五六日天])\s*(.*)/);
76
+ if (m) {
77
+ const day = WEEKDAY_MAP[m[1]] ?? 1;
78
+ const t = parseTimeHM(m[2]);
79
+ if (t)
80
+ return { parsed: cronPS(`${t.minute} ${t.hour} * * ${day}`, `每周${m[1]} ${t.hour}:${String(t.minute).padStart(2, '0')}`), rest: t.rest };
81
+ }
82
+ // 每月X号 HH:MM
83
+ m = s.match(/^每月(\d{1,2})[号日]\s*(.*)/);
84
+ if (m) {
85
+ const dom = parseInt(m[1]);
86
+ const t = parseTimeHM(m[2]);
87
+ if (t)
88
+ return { parsed: cronPS(`${t.minute} ${t.hour} ${dom} * *`, `每月${dom}号 ${t.hour}:${String(t.minute).padStart(2, '0')}`), rest: t.rest };
47
89
  }
48
- // Pattern: 工作日/每个工作日 HH:MM
49
- let m = rest.match(/^(?:每个?工作日|工作日每[天日])\s*(.*)/);
90
+ // 每N小时 keep as cron to preserve wall-clock alignment ("0 */N * * *")
91
+ m = s.match(/^每(\d+)小时\s*(.*)/);
50
92
  if (m) {
51
- const t = parseTime(m[1]);
93
+ const h = parseInt(m[1]);
94
+ const expr = h === 1 ? '0 * * * *' : `0 */${h} * * *`;
95
+ return { parsed: cronPS(expr, `每 ${h} 小时`), rest: m[2] };
96
+ }
97
+ // 每小时
98
+ m = s.match(/^每小时\s*(.*)/);
99
+ if (m)
100
+ return { parsed: cronPS('0 * * * *', '每小时'), rest: m[1] };
101
+ // 每N分钟 — keep as cron for wall-clock alignment ("*/N * * * *")
102
+ m = s.match(/^每(\d+)分钟\s*(.*)/);
103
+ if (m) {
104
+ const min = parseInt(m[1]);
105
+ return { parsed: cronPS(`*/${min} * * * *`, `每 ${min} 分钟`), rest: m[2] };
106
+ }
107
+ // N分钟后
108
+ m = s.match(/^(\d+)\s*分钟后\s*(.*)/);
109
+ if (m) {
110
+ const min = parseInt(m[1]);
111
+ const runAt = new Date(Date.now() + min * 60_000).toISOString();
112
+ return { parsed: { kind: 'once', runAt, display: `${min} 分钟后` }, rest: m[2] };
113
+ }
114
+ // N小时后
115
+ m = s.match(/^(\d+)\s*小时后\s*(.*)/);
116
+ if (m) {
117
+ const h = parseInt(m[1]);
118
+ const runAt = new Date(Date.now() + h * 3600_000).toISOString();
119
+ return { parsed: { kind: 'once', runAt, display: `${h} 小时后` }, rest: m[2] };
120
+ }
121
+ // 明天 HH:MM
122
+ m = s.match(/^明天\s*(.*)/);
123
+ if (m) {
124
+ const t = parseTimeHM(m[1]);
52
125
  if (t) {
53
- cron = `${t.minute} ${t.hour} * * 1-5`;
54
- rest = t.rest;
126
+ const d = new Date();
127
+ d.setDate(d.getDate() + 1);
128
+ d.setHours(t.hour, t.minute, 0, 0);
129
+ return { parsed: { kind: 'once', runAt: d.toISOString(), display: `明天 ${t.hour}:${String(t.minute).padStart(2, '0')}` }, rest: t.rest };
55
130
  }
56
131
  }
57
- // Pattern: 每日/每天 HH:MM
58
- if (!cron) {
59
- m = rest.match(/^每[天日]\s*(.*)/);
60
- if (m) {
61
- const t = parseTime(m[1]);
62
- if (t) {
63
- cron = `${t.minute} ${t.hour} * * *`;
64
- rest = t.rest;
65
- }
66
- }
132
+ return null;
133
+ }
134
+ function cronPS(expr, display) {
135
+ return { kind: 'cron', expr, display };
136
+ }
137
+ // ─── Public parser: arbitrary schedule string → ParsedSchedule ──────────────
138
+ /**
139
+ * Parse a bare schedule string (no prompt). Supports:
140
+ * - Chinese NL: "每日17:50" / "每周一10:00" / "30分钟后" / "明天9:00"
141
+ * - English duration: "30m", "2h", "1d" (one-shot from now)
142
+ * - English interval: "every 30m", "every 2h"
143
+ * - Cron expression: "0 9 * * *" (5 space-separated fields)
144
+ * - ISO timestamp: "2026-05-01T10:00:00" (one-shot at time)
145
+ */
146
+ export function parseSchedule(input) {
147
+ const s = input.trim();
148
+ if (!s)
149
+ throw new Error('empty schedule');
150
+ // Chinese NL (match only the schedule portion — prompt is separate)
151
+ const zh = parseChineseSchedule(s);
152
+ if (zh && !zh.rest.trim())
153
+ return zh.parsed;
154
+ if (zh && zh.rest.trim()) {
155
+ // Caller passed "每日17:50" without prompt — rest should be empty for bare parse
156
+ return zh.parsed;
67
157
  }
68
- // Pattern: 每周X HH:MM
69
- if (!cron) {
70
- m = rest.match(/^每周([一二三四五六日天])\s*(.*)/);
71
- if (m) {
72
- const day = WEEKDAY_MAP[m[1]] ?? 1;
73
- const t = parseTime(m[2]);
74
- if (t) {
75
- cron = `${t.minute} ${t.hour} * * ${day}`;
76
- rest = t.rest;
77
- }
78
- }
158
+ // "every Xm/h/d"
159
+ let m = s.match(/^every\s+(\d+)\s*(m|min|mins|minute|minutes|h|hr|hrs|hour|hours|d|day|days)$/i);
160
+ if (m) {
161
+ const minutes = durationToMinutes(m[1], m[2]);
162
+ return { kind: 'interval', minutes, display: `every ${minutes}m` };
79
163
  }
80
- // Pattern: 每月X号 HH:MM
81
- if (!cron) {
82
- m = rest.match(/^每月(\d{1,2})[号日]\s*(.*)/);
83
- if (m) {
84
- const dayOfMonth = parseInt(m[1]);
85
- const t = parseTime(m[2]);
86
- if (t) {
87
- cron = `${t.minute} ${t.hour} ${dayOfMonth} * *`;
88
- rest = t.rest;
89
- }
164
+ // Cron (5 fields, all cron chars)
165
+ const parts = s.split(/\s+/);
166
+ if (parts.length === 5 && parts.every(p => /^[\d*\-,/]+$/.test(p))) {
167
+ try {
168
+ new Cron(s);
169
+ return { kind: 'cron', expr: s, display: s };
90
170
  }
91
- }
92
- // Pattern: 每N小时
93
- if (!cron) {
94
- m = rest.match(/^每(\d+)小时\s*(.*)/);
95
- if (m) {
96
- const hours = parseInt(m[1]);
97
- cron = hours === 1 ? '0 * * * *' : `0 */${hours} * * *`;
98
- rest = m[2];
171
+ catch (err) {
172
+ throw new Error(`invalid cron expression '${s}': ${err.message}`);
99
173
  }
100
174
  }
101
- // Pattern: 每小时
102
- if (!cron) {
103
- m = rest.match(/^每小时\s*(.*)/);
104
- if (m) {
105
- cron = '0 * * * *';
106
- rest = m[1];
175
+ // ISO timestamp
176
+ if (/^\d{4}-\d{2}-\d{2}(T| |$)/.test(s)) {
177
+ const dt = new Date(s);
178
+ if (!isNaN(dt.getTime())) {
179
+ return { kind: 'once', runAt: dt.toISOString(), display: `once at ${dt.toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' })}` };
107
180
  }
108
181
  }
109
- // Pattern: 每N分钟
110
- if (!cron) {
111
- m = rest.match(/^每(\d+)分钟\s*(.*)/);
112
- if (m) {
113
- cron = `*/${parseInt(m[1])} * * * *`;
114
- rest = m[2];
115
- }
182
+ // English duration "30m" / "2h" / "1d"
183
+ m = s.match(/^(\d+)\s*(m|min|mins|minute|minutes|h|hr|hrs|hour|hours|d|day|days)$/i);
184
+ if (m) {
185
+ const minutes = durationToMinutes(m[1], m[2]);
186
+ const runAt = new Date(Date.now() + minutes * 60_000).toISOString();
187
+ return { kind: 'once', runAt, display: `once in ${s}` };
116
188
  }
117
- if (!cron)
189
+ throw new Error(`invalid schedule '${input}'. Use '30m' / 'every 2h' / '0 9 * * *' / '2026-05-01T10:00' / 每日17:50`);
190
+ }
191
+ function durationToMinutes(numStr, unit) {
192
+ const u = unit[0].toLowerCase();
193
+ const mult = u === 'm' ? 1 : u === 'h' ? 60 : u === 'd' ? 1440 : NaN;
194
+ if (isNaN(mult))
195
+ throw new Error(`unknown duration unit: ${unit}`);
196
+ return parseInt(numStr) * mult;
197
+ }
198
+ /**
199
+ * Parse a natural-language /schedule command, splitting the schedule portion
200
+ * from the prompt (the task instruction). Used by the /schedule command
201
+ * handler where user types e.g. "/schedule 每日17:50 帮我看看AI新闻".
202
+ */
203
+ export function parseNaturalSchedule(input) {
204
+ const zh = parseChineseSchedule(input.trim());
205
+ if (!zh)
118
206
  return null;
119
- // Clean prompt: remove leading connectors like "给我" "帮我" etc.
120
- let prompt = rest.replace(/^[给帮]我\s*/, '').trim();
121
- // Remove surrounding quotes
207
+ // Clean prompt: remove leading connectors and quotes
208
+ let prompt = zh.rest.replace(/^[给帮]我\s*/, '').trim();
122
209
  prompt = prompt.replace(/^["'"「](.+?)["'"」]$/, '$1').trim();
123
210
  if (!prompt)
124
211
  return null;
125
- // Auto-generate name from prompt (first 20 chars)
126
212
  const name = prompt.length > 20 ? prompt.substring(0, 20) + '...' : prompt;
127
- return { cron, type, prompt, name };
128
- }
129
- // ─── Cron management ────────────────────────────────────────────────────────
130
- function scheduleCronJob(task) {
131
- // Stop existing job if any
132
- stopCronJob(task.id);
133
- if (!task.enabled)
134
- return;
135
- try {
136
- const job = new Cron(task.schedule, { timezone: 'Asia/Shanghai' }, async () => {
137
- logger.info(`[scheduler] Task "${task.name}" (${task.id}) triggered`);
138
- scheduleStore.updateTask(task.id, { lastRunAt: new Date().toISOString() });
139
- if (executeCallback) {
140
- try {
141
- await executeCallback(task);
142
- }
143
- catch (err) {
144
- logger.error(`[scheduler] Failed to execute task "${task.name}": ${err.message}`);
145
- }
146
- }
147
- });
148
- cronJobs.set(task.id, job);
149
- const next = job.nextRun();
150
- logger.info(`[scheduler] Scheduled "${task.name}" (${task.id}): ${task.schedule}, next run: ${next?.toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' }) ?? 'N/A'}`);
213
+ return { parsed: zh.parsed, prompt, name };
214
+ }
215
+ // ─── next-run computation ───────────────────────────────────────────────────
216
+ /** Compute the next run time for a parsed schedule. Returns ISO string, or null if exhausted. */
217
+ export function computeNextRun(parsed, lastRunAt) {
218
+ const now = Date.now();
219
+ if (parsed.kind === 'once') {
220
+ if (lastRunAt)
221
+ return null; // one-shot has already run
222
+ if (!parsed.runAt)
223
+ return null;
224
+ const runAtMs = new Date(parsed.runAt).getTime();
225
+ // Allow ONESHOT_GRACE_SECONDS for late firing
226
+ if (runAtMs >= now - ONESHOT_GRACE_SECONDS * 1000)
227
+ return parsed.runAt;
228
+ return null;
229
+ }
230
+ if (parsed.kind === 'interval') {
231
+ if (!parsed.minutes)
232
+ return null;
233
+ const base = lastRunAt ? new Date(lastRunAt).getTime() : now;
234
+ return new Date(base + parsed.minutes * 60_000).toISOString();
235
+ }
236
+ if (parsed.kind === 'cron') {
237
+ if (!parsed.expr)
238
+ return null;
239
+ try {
240
+ const job = new Cron(parsed.expr, { timezone: 'Asia/Shanghai' });
241
+ const next = job.nextRun(new Date(now));
242
+ return next ? next.toISOString() : null;
243
+ }
244
+ catch {
245
+ return null;
246
+ }
247
+ }
248
+ return null;
249
+ }
250
+ /** Compute grace window (how late a missed run can be and still catch up) */
251
+ function computeGraceSeconds(parsed) {
252
+ let periodSec;
253
+ if (parsed.kind === 'interval' && parsed.minutes) {
254
+ periodSec = parsed.minutes * 60;
151
255
  }
152
- catch (err) {
153
- logger.error(`[scheduler] Invalid cron expression for task "${task.name}": ${task.schedule} — ${err.message}`);
256
+ else if (parsed.kind === 'cron' && parsed.expr) {
257
+ try {
258
+ const job = new Cron(parsed.expr, { timezone: 'Asia/Shanghai' });
259
+ const first = job.nextRun(new Date());
260
+ const second = first ? job.nextRun(first) : null;
261
+ periodSec = first && second ? (second.getTime() - first.getTime()) / 1000 : MIN_GRACE_SECONDS;
262
+ }
263
+ catch {
264
+ periodSec = MIN_GRACE_SECONDS;
265
+ }
154
266
  }
267
+ else {
268
+ return MIN_GRACE_SECONDS;
269
+ }
270
+ const grace = Math.floor(periodSec / 2);
271
+ return Math.max(MIN_GRACE_SECONDS, Math.min(grace, MAX_GRACE_SECONDS));
155
272
  }
156
- function stopCronJob(taskId) {
157
- const job = cronJobs.get(taskId);
158
- if (job) {
159
- job.stop();
160
- cronJobs.delete(taskId);
273
+ // ─── Tick loop ──────────────────────────────────────────────────────────────
274
+ async function tick() {
275
+ const tasks = scheduleStore.listTasks();
276
+ const now = Date.now();
277
+ for (const task of tasks) {
278
+ if (!task.enabled)
279
+ continue;
280
+ if (!taskBelongsToThisDaemon(task))
281
+ continue;
282
+ let nextRunAt = task.nextRunAt;
283
+ if (!nextRunAt) {
284
+ // Recover: compute from parsed + lastRunAt
285
+ const recovered = computeNextRun(task.parsed, task.lastRunAt);
286
+ if (!recovered)
287
+ continue;
288
+ nextRunAt = recovered;
289
+ scheduleStore.updateTask(task.id, { nextRunAt });
290
+ }
291
+ const nextMs = new Date(nextRunAt).getTime();
292
+ if (nextMs > now)
293
+ continue;
294
+ // Recurring: fast-forward if stale beyond grace window
295
+ if (task.parsed.kind !== 'once') {
296
+ const grace = computeGraceSeconds(task.parsed);
297
+ if ((now - nextMs) / 1000 > grace) {
298
+ const newNext = computeNextRun(task.parsed, new Date(now).toISOString());
299
+ if (newNext) {
300
+ logger.info(`[scheduler] Task "${task.name}" missed window (${Math.round((now - nextMs) / 1000)}s late, grace=${grace}s), fast-forward to ${newNext}`);
301
+ scheduleStore.updateTask(task.id, { nextRunAt: newNext });
302
+ continue;
303
+ }
304
+ }
305
+ }
306
+ // At-most-once: advance next_run BEFORE execution so crash mid-run doesn't re-fire
307
+ if (task.parsed.kind !== 'once') {
308
+ const newNext = computeNextRun(task.parsed, new Date(now).toISOString());
309
+ if (newNext)
310
+ scheduleStore.updateTask(task.id, { nextRunAt: newNext });
311
+ }
312
+ // Execute
313
+ logger.info(`[scheduler] Task "${task.name}" (${task.id}) triggered (kind=${task.parsed.kind})`);
314
+ scheduleStore.updateTask(task.id, { lastRunAt: new Date().toISOString() });
315
+ if (executeCallback) {
316
+ executeCallback(task)
317
+ .then(() => scheduleStore.markRun(task.id, true))
318
+ .catch(err => {
319
+ logger.error(`[scheduler] Task "${task.name}" failed: ${err.message}`);
320
+ scheduleStore.markRun(task.id, false, err.message);
321
+ });
322
+ }
161
323
  }
162
324
  }
163
325
  // ─── Public API ─────────────────────────────────────────────────────────────
164
326
  export function startScheduler() {
165
327
  const tasks = scheduleStore.listTasks();
166
328
  const enabled = tasks.filter(t => t.enabled);
167
- logger.info(`[scheduler] Starting with ${enabled.length}/${tasks.length} enabled tasks`);
329
+ logger.info(`[scheduler] Starting with ${enabled.length}/${tasks.length} enabled tasks (tick every ${TICK_INTERVAL_MS / 1000}s)`);
330
+ // Ensure next_run_at exists for all enabled tasks
168
331
  for (const task of enabled) {
169
- scheduleCronJob(task);
332
+ if (!task.nextRunAt) {
333
+ const next = computeNextRun(task.parsed, task.lastRunAt);
334
+ if (next)
335
+ scheduleStore.updateTask(task.id, { nextRunAt: next });
336
+ }
170
337
  }
338
+ // Run first tick shortly after startup, then on interval
339
+ setTimeout(() => { tick().catch(err => logger.error(`[scheduler] tick error: ${err.message}`)); }, 5000);
340
+ tickTimer = setInterval(() => {
341
+ tick().catch(err => logger.error(`[scheduler] tick error: ${err.message}`));
342
+ }, TICK_INTERVAL_MS);
171
343
  }
172
344
  export function stopScheduler() {
173
- for (const [id] of cronJobs) {
174
- stopCronJob(id);
345
+ if (tickTimer) {
346
+ clearInterval(tickTimer);
347
+ tickTimer = null;
175
348
  }
176
- logger.info('[scheduler] All cron jobs stopped');
349
+ logger.info('[scheduler] Stopped');
177
350
  }
178
351
  export function addTask(params) {
179
- const task = scheduleStore.createTask(params);
180
- scheduleCronJob(task);
352
+ const parsed = params.parsed ?? parseSchedule(params.schedule);
353
+ const nextRunAt = computeNextRun(parsed) ?? undefined;
354
+ const task = scheduleStore.createTask({
355
+ name: params.name,
356
+ schedule: params.schedule,
357
+ parsed,
358
+ prompt: params.prompt,
359
+ workingDir: params.workingDir,
360
+ chatId: params.chatId,
361
+ rootMessageId: params.rootMessageId,
362
+ chatType: params.chatType,
363
+ larkAppId: params.larkAppId,
364
+ nextRunAt,
365
+ repeat: params.repeat,
366
+ deliver: params.deliver ?? 'origin',
367
+ });
368
+ logger.info(`[scheduler] Added task "${task.name}" (${task.id}) — ${parsed.display}, next: ${nextRunAt ?? 'N/A'}`);
181
369
  return task;
182
370
  }
183
371
  export function removeTask(id) {
184
- stopCronJob(id);
185
372
  return scheduleStore.removeTask(id);
186
373
  }
187
374
  export function enableTask(id) {
188
375
  const task = scheduleStore.getTask(id);
189
376
  if (!task)
190
377
  return false;
191
- scheduleStore.updateTask(id, { enabled: true });
192
- task.enabled = true;
193
- scheduleCronJob(task);
378
+ const next = computeNextRun(task.parsed);
379
+ scheduleStore.updateTask(id, { enabled: true, nextRunAt: next ?? undefined });
194
380
  return true;
195
381
  }
196
382
  export function disableTask(id) {
@@ -198,24 +384,24 @@ export function disableTask(id) {
198
384
  if (!task)
199
385
  return false;
200
386
  scheduleStore.updateTask(id, { enabled: false });
201
- stopCronJob(id);
202
387
  return true;
203
388
  }
204
389
  export function runTaskNow(id) {
205
390
  const task = scheduleStore.getTask(id);
206
391
  if (!task)
207
392
  return false;
208
- logger.info(`[scheduler] Manual run of task "${task.name}" (${task.id})`);
209
- scheduleStore.updateTask(id, { lastRunAt: new Date().toISOString() });
210
- if (executeCallback) {
211
- executeCallback(task).catch(err => {
212
- logger.error(`[scheduler] Manual run failed for "${task.name}": ${err.message}`);
213
- });
214
- }
393
+ // Ask the owning daemon to execute ASAP by advancing nextRunAt. Its tick
394
+ // (< 30s) will pick it up. Previously we invoked executeCallback inline,
395
+ // which was wrong in multi-bot setups — the callback on this daemon may
396
+ // not even be the right bot for this task.
397
+ logger.info(`[scheduler] Marked "${task.name}" (${task.id}) for immediate run`);
398
+ scheduleStore.updateTask(id, { nextRunAt: new Date().toISOString() });
215
399
  return true;
216
400
  }
217
401
  export function getNextRun(id) {
218
- const job = cronJobs.get(id);
219
- return job?.nextRun() ?? null;
402
+ const task = scheduleStore.getTask(id);
403
+ if (!task?.nextRunAt)
404
+ return null;
405
+ return new Date(task.nextRunAt);
220
406
  }
221
407
  //# sourceMappingURL=scheduler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/core/scheduler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/core/scheduler.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,12 @@ export declare function buildFollowUpContent(content: string, sessionId: string,
38
38
  cliId?: CliId;
39
39
  cliPathOverride?: string;
40
40
  }): string;
41
+ /**
42
+ * Copy current streaming-card fields from `ds` into the persisted Session and save.
43
+ * Lets the existing card be PATCHed on next screen_update after a daemon restart,
44
+ * instead of a fresh card being POSTed.
45
+ */
46
+ export declare function persistStreamCardState(ds: DaemonSession): void;
41
47
  export declare function restoreActiveSessions(activeSessions: Map<string, DaemonSession>): void;
42
48
  export declare function executeScheduledTask(task: ScheduledTask, activeSessions: Map<string, DaemonSession>, refreshCliVersion: (...args: any[]) => boolean): Promise<void>;
43
49
  //# sourceMappingURL=session-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,oBAAoB,CAAC,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,CAQ/D;AAED,wBAAgB,iBAAiB,CAAC,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,CAO5D;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,EAAE,CA2B/D;AAID,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAAE,WAAW,EAAE,cAAc,EAAE,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAoB1K;AAID;;8EAE8E;AAC9E,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAiBvE;AAED,wBAAgB,qBAAqB,CAAC,WAAW,CAAC,EAAE,cAAc,EAAE,GAAG,MAAM,CAI5E;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,KAAK,EACZ,eAAe,CAAC,EAAE,MAAM,EACxB,WAAW,CAAC,EAAE,cAAc,EAAE,EAC9B,QAAQ,CAAC,EAAE,WAAW,EAAE,EACxB,aAAa,CAAC,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EAC5E,SAAS,CAAC,EAAE,MAAM,EAAE,GACnB,MAAM,CAiDR;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GAClI,MAAM,CA0BR;AAID,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,IAAI,CAqFtF;AAID,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,aAAa,EACnB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC1C,iBAAiB,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,GAC7C,OAAO,CAAC,IAAI,CAAC,CAyCf"}
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/core/session-manager.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,oBAAoB,CAAC,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,CAQ/D;AAED,wBAAgB,iBAAiB,CAAC,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,CAO5D;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,EAAE,CAAC,EAAE,aAAa,GAAG,MAAM,EAAE,CA2B/D;AAID,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAAE,WAAW,EAAE,cAAc,EAAE,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAoB1K;AAID;;8EAE8E;AAC9E,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAiBvE;AAED,wBAAgB,qBAAqB,CAAC,WAAW,CAAC,EAAE,cAAc,EAAE,GAAG,MAAM,CAI5E;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,KAAK,EACZ,eAAe,CAAC,EAAE,MAAM,EACxB,WAAW,CAAC,EAAE,cAAc,EAAE,EAC9B,QAAQ,CAAC,EAAE,WAAW,EAAE,EACxB,aAAa,CAAC,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EAC5E,SAAS,CAAC,EAAE,MAAM,EAAE,GACnB,MAAM,CAiDR;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GAClI,MAAM,CAoCR;AAOD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI,CAmB9D;AAID,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,IAAI,CAoGtF;AAID,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,aAAa,EACnB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAC1C,iBAAiB,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,GAC7C,OAAO,CAAC,IAAI,CAAC,CAkFf"}