tellrun 1.3.8 → 2.0.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.
- package/README.md +42 -27
- package/README.zh-CN.md +36 -21
- package/dist/agents/codex-input.js +19 -0
- package/dist/agents/codex-input.js.map +1 -0
- package/dist/agents/codex-interaction.js +34 -27
- package/dist/agents/codex-interaction.js.map +1 -1
- package/dist/agents/codex.js +270 -52
- package/dist/agents/codex.js.map +1 -1
- package/dist/core/cron.js +226 -0
- package/dist/core/cron.js.map +1 -0
- package/dist/core/menus.js +1 -2
- package/dist/core/menus.js.map +1 -1
- package/dist/core/relay.js +198 -52
- package/dist/core/relay.js.map +1 -1
- package/dist/im/telegram-files.js +53 -0
- package/dist/im/telegram-files.js.map +1 -0
- package/dist/im/telegram.js +45 -26
- package/dist/im/telegram.js.map +1 -1
- package/dist/main.js +7 -2
- package/dist/main.js.map +1 -1
- package/dist/storage/attachments.js +129 -0
- package/dist/storage/attachments.js.map +1 -0
- package/dist/storage/schema.js +66 -50
- package/dist/storage/schema.js.map +1 -1
- package/dist/storage/store.js +141 -57
- package/dist/storage/store.js.map +1 -1
- package/docs/architecture.md +48 -20
- package/docs/prd.md +32 -9
- package/package.json +2 -1
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { Cron } from "croner";
|
|
2
|
+
import { activeTaskStatuses } from "../storage/schema.js";
|
|
3
|
+
/** 只使用五段 Cron;Croner 负责校验和时区计算,不创建独立执行定时器。 */
|
|
4
|
+
function nextRun(expression, timezone, after) {
|
|
5
|
+
let cron;
|
|
6
|
+
try {
|
|
7
|
+
if (expression.trim().split(/\s+/).length !== 5)
|
|
8
|
+
return null;
|
|
9
|
+
cron = new Cron(expression, { timezone, mode: "5-part", paused: true });
|
|
10
|
+
return cron.nextRun(new Date(after))?.getTime() ?? null;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
finally {
|
|
16
|
+
cron?.stop();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/** 时间按计划保存的时区展示,避免服务器时区变更后误读旧任务。 */
|
|
20
|
+
function formatTime(timestamp, timezone) {
|
|
21
|
+
if (timestamp === null)
|
|
22
|
+
return "—";
|
|
23
|
+
return new Intl.DateTimeFormat("en-CA", {
|
|
24
|
+
timeZone: timezone,
|
|
25
|
+
year: "numeric",
|
|
26
|
+
month: "2-digit",
|
|
27
|
+
day: "2-digit",
|
|
28
|
+
hour: "2-digit",
|
|
29
|
+
minute: "2-digit",
|
|
30
|
+
hourCycle: "h23",
|
|
31
|
+
}).format(timestamp);
|
|
32
|
+
}
|
|
33
|
+
/** 命令、触发记录和任务创建共用存储事务;计划本身不直接调用 Agent。 */
|
|
34
|
+
export function createCrons(storage) {
|
|
35
|
+
/** 调度只读取当前机器人和授权用户的计划,旧配置的计划不能误触发。 */
|
|
36
|
+
function channelsFor(source) {
|
|
37
|
+
return new Map(storage
|
|
38
|
+
.read()
|
|
39
|
+
.channels.filter((channel) => channel.platform === source.platform &&
|
|
40
|
+
channel.accountId === source.accountId &&
|
|
41
|
+
channel.userId === source.userId)
|
|
42
|
+
.map((channel) => [channel.id, channel]));
|
|
43
|
+
}
|
|
44
|
+
/** 到期时向未来推进;无效计划关闭并通知,避免反复触发或阻塞其他计划。 */
|
|
45
|
+
function advance(cron, now) {
|
|
46
|
+
cron.nextRunAt = nextRun(cron.expression, cron.timezone, now);
|
|
47
|
+
if (cron.nextRunAt !== null)
|
|
48
|
+
return;
|
|
49
|
+
cron.enabled = false;
|
|
50
|
+
cron.pendingAt = null;
|
|
51
|
+
storage.enqueueReply(cron.channelId, `Cron #${cron.id} disabled: invalid expression or timezone, or no future run. Delete and recreate the schedule.`);
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
/** 已接收命令由外层事务去重;参数校验完成后才修改计划。 */
|
|
55
|
+
handleCron(channelId, args, now = Date.now()) {
|
|
56
|
+
const state = storage.read();
|
|
57
|
+
const channel = state.channels.find((item) => item.id === channelId);
|
|
58
|
+
if (!channel?.cwd)
|
|
59
|
+
return "Set a working directory with /cwd first.";
|
|
60
|
+
const cwd = channel.cwd;
|
|
61
|
+
/** 新计划读取创建时的服务器时区,已有计划始终使用保存的时区。 */
|
|
62
|
+
const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
63
|
+
/** 帮助与参数错误共用命令格式,描述可以包含空格和换行。 */
|
|
64
|
+
const usage = [
|
|
65
|
+
"/cron — List all scheduled tasks",
|
|
66
|
+
"/cron add <minute> <hour> <day> <month> <weekday> <task>",
|
|
67
|
+
"/cron del <id> — Delete a schedule",
|
|
68
|
+
"/cron enable <id> — Enable a schedule",
|
|
69
|
+
"/cron disable <id> — Disable a schedule",
|
|
70
|
+
`New schedule timezone: ${timezone} (server timezone)`,
|
|
71
|
+
"Example: /cron add 0 9 * * 1-5 Check the project and report issues",
|
|
72
|
+
].join("\n");
|
|
73
|
+
const input = args.trim();
|
|
74
|
+
const paused = channel.paused
|
|
75
|
+
? "\nChat paused. Send /resume to allow future scheduled runs."
|
|
76
|
+
: "";
|
|
77
|
+
if (!input) {
|
|
78
|
+
const crons = state.crons.filter((cron) => cron.channelId === channelId);
|
|
79
|
+
if (!crons.length)
|
|
80
|
+
return `No scheduled tasks.${paused}\n\n${usage}`;
|
|
81
|
+
return [
|
|
82
|
+
`Scheduled tasks: ${crons.length}${paused}`,
|
|
83
|
+
...crons.map((cron) => {
|
|
84
|
+
const running = state.tasks.find((task) => task.cron?.id === cron.id && activeTaskStatuses.has(task.status));
|
|
85
|
+
const activity = [
|
|
86
|
+
running ? `Active task: #${running.id}` : "",
|
|
87
|
+
cron.pendingAt !== null ? "Pending" : "",
|
|
88
|
+
]
|
|
89
|
+
.filter(Boolean)
|
|
90
|
+
.join(" · ");
|
|
91
|
+
return `#${cron.id} · ${cron.enabled ? "Enabled" : "Disabled"}${activity ? ` · ${activity}` : ""}\n${cron.expression}\nTimezone: ${cron.timezone}\nDirectory: ${cron.cwd}\nTask: ${cron.prompt}\nNext: ${formatTime(cron.nextRunAt, cron.timezone)}`;
|
|
92
|
+
}),
|
|
93
|
+
].join("\n\n");
|
|
94
|
+
}
|
|
95
|
+
const add = input.match(/^add\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+([\s\S]+)$/);
|
|
96
|
+
if (add) {
|
|
97
|
+
const expression = add.slice(1, 6).join(" ");
|
|
98
|
+
const prompt = add[6]?.trim();
|
|
99
|
+
const nextRunAt = nextRun(expression, timezone, now);
|
|
100
|
+
if (!prompt || nextRunAt === null)
|
|
101
|
+
return `Invalid cron expression or no future run. Use five fields.\n\n${usage}`;
|
|
102
|
+
return storage.update(() => {
|
|
103
|
+
const state = storage.read();
|
|
104
|
+
const id = state.nextCronId++;
|
|
105
|
+
state.crons.push({
|
|
106
|
+
id,
|
|
107
|
+
channelId,
|
|
108
|
+
expression,
|
|
109
|
+
timezone,
|
|
110
|
+
prompt,
|
|
111
|
+
cwd,
|
|
112
|
+
model: channel.model,
|
|
113
|
+
reasoningEffort: channel.reasoningEffort,
|
|
114
|
+
permissionMode: channel.permissionMode,
|
|
115
|
+
enabled: true,
|
|
116
|
+
nextRunAt,
|
|
117
|
+
pendingAt: null,
|
|
118
|
+
});
|
|
119
|
+
return `Cron #${id} created (enabled).\n${expression}\nTimezone: ${timezone}\nDirectory: ${cwd}\nTask: ${prompt}\nNext: ${formatTime(nextRunAt, timezone)}${paused}`;
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
const action = input.match(/^(del|enable|disable)\s+([1-9]\d*)$/);
|
|
123
|
+
if (!action || !Number.isSafeInteger(Number(action[2])))
|
|
124
|
+
return usage;
|
|
125
|
+
const cron = state.crons.find((item) => item.id === Number(action[2]) && item.channelId === channelId);
|
|
126
|
+
if (!cron)
|
|
127
|
+
return "Schedule not found. Send /cron to see task IDs.";
|
|
128
|
+
if (action[1] === "enable" && cron.enabled)
|
|
129
|
+
return `Cron #${cron.id} is already enabled.\nNext: ${formatTime(cron.nextRunAt, cron.timezone)} (${cron.timezone})${paused}`;
|
|
130
|
+
const nextRunAt = action[1] === "enable" ? nextRun(cron.expression, cron.timezone, now) : null;
|
|
131
|
+
if (action[1] === "enable" && nextRunAt === null)
|
|
132
|
+
return "No future run could be calculated. Delete and recreate the schedule.";
|
|
133
|
+
return storage.update(() => {
|
|
134
|
+
const state = storage.read();
|
|
135
|
+
const current = state.crons.find((item) => item.id === cron.id);
|
|
136
|
+
if (!current)
|
|
137
|
+
return "Schedule not found.";
|
|
138
|
+
const active = state.tasks.some((task) => task.cron?.id === current.id && activeTaskStatuses.has(task.status));
|
|
139
|
+
if (action[1] === "del")
|
|
140
|
+
state.crons = state.crons.filter((item) => item.id !== current.id);
|
|
141
|
+
else {
|
|
142
|
+
current.enabled = action[1] === "enable";
|
|
143
|
+
current.nextRunAt = nextRunAt;
|
|
144
|
+
current.pendingAt = null;
|
|
145
|
+
}
|
|
146
|
+
return `Cron #${current.id} ${action[1] === "del" ? "deleted" : current.enabled ? "enabled" : "disabled"}.${action[1] === "enable" ? `\nNext: ${formatTime(nextRunAt, current.timezone)} (${current.timezone})${paused}` : active ? "\nThe active task will continue. Use /stop to stop it." : ""}`;
|
|
147
|
+
});
|
|
148
|
+
},
|
|
149
|
+
/** 暂停清空等待触发;恢复时跳过暂停期间到期的次数,不产生过期工作。 */
|
|
150
|
+
resetCronPending(channelId, now = Date.now()) {
|
|
151
|
+
storage.update(() => {
|
|
152
|
+
for (const cron of storage.read().crons) {
|
|
153
|
+
if (cron.channelId !== channelId)
|
|
154
|
+
continue;
|
|
155
|
+
cron.pendingAt = null;
|
|
156
|
+
if (cron.enabled && (cron.nextRunAt === null || cron.nextRunAt <= now))
|
|
157
|
+
advance(cron, now);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
},
|
|
161
|
+
/** 只跳过停机期间错过的触发;停机前已记录的待执行项继续保留。 */
|
|
162
|
+
recoverCrons(source, now = Date.now()) {
|
|
163
|
+
const channels = channelsFor(source);
|
|
164
|
+
const due = storage
|
|
165
|
+
.read()
|
|
166
|
+
.crons.filter((cron) => channels.has(cron.channelId) &&
|
|
167
|
+
((cron.enabled && (cron.nextRunAt === null || cron.nextRunAt <= now)) ||
|
|
168
|
+
(channels.get(cron.channelId)?.paused && cron.pendingAt !== null)));
|
|
169
|
+
if (!due.length)
|
|
170
|
+
return;
|
|
171
|
+
storage.update(() => {
|
|
172
|
+
for (const saved of due) {
|
|
173
|
+
const cron = storage.read().crons.find((item) => item.id === saved.id);
|
|
174
|
+
if (!cron)
|
|
175
|
+
continue;
|
|
176
|
+
if (channels.get(cron.channelId)?.paused)
|
|
177
|
+
cron.pendingAt = null;
|
|
178
|
+
if (cron.enabled && (cron.nextRunAt === null || cron.nextRunAt <= now))
|
|
179
|
+
advance(cron, now);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
},
|
|
183
|
+
/** 触发、下一时刻和执行快照一次落盘;忙时每个计划只保留一次,空闲按时间串行领取。 */
|
|
184
|
+
tickCrons(source, now = Date.now()) {
|
|
185
|
+
const channels = channelsFor(source);
|
|
186
|
+
const crons = storage
|
|
187
|
+
.read()
|
|
188
|
+
.crons.filter((cron) => cron.enabled && channels.has(cron.channelId));
|
|
189
|
+
const busy = storage.read().tasks.some((task) => activeTaskStatuses.has(task.status));
|
|
190
|
+
if (!crons.some((cron) => (cron.nextRunAt !== null && cron.nextRunAt <= now) ||
|
|
191
|
+
(cron.pendingAt !== null && (!busy || channels.get(cron.channelId)?.paused))))
|
|
192
|
+
return;
|
|
193
|
+
storage.update(() => {
|
|
194
|
+
const state = storage.read();
|
|
195
|
+
for (const cron of state.crons) {
|
|
196
|
+
const channel = channels.get(cron.channelId);
|
|
197
|
+
if (!cron.enabled || !channel)
|
|
198
|
+
continue;
|
|
199
|
+
if (channel.paused)
|
|
200
|
+
cron.pendingAt = null;
|
|
201
|
+
if (cron.nextRunAt === null || cron.nextRunAt > now)
|
|
202
|
+
continue;
|
|
203
|
+
if (!channel.paused)
|
|
204
|
+
cron.pendingAt ??= cron.nextRunAt;
|
|
205
|
+
advance(cron, now);
|
|
206
|
+
}
|
|
207
|
+
if (state.tasks.some((task) => activeTaskStatuses.has(task.status)))
|
|
208
|
+
return;
|
|
209
|
+
const cron = state.crons
|
|
210
|
+
.filter((item) => item.enabled &&
|
|
211
|
+
item.pendingAt !== null &&
|
|
212
|
+
channels.has(item.channelId) &&
|
|
213
|
+
!channels.get(item.channelId)?.paused)
|
|
214
|
+
.sort((a, b) => (a.pendingAt ?? 0) - (b.pendingAt ?? 0) || a.id - b.id)[0];
|
|
215
|
+
const channel = cron && state.channels.find((item) => item.id === cron.channelId);
|
|
216
|
+
if (!cron || !channel || cron.pendingAt === null)
|
|
217
|
+
return;
|
|
218
|
+
const scheduledAt = cron.pendingAt;
|
|
219
|
+
cron.pendingAt = null;
|
|
220
|
+
const task = storage.createTask(channel, cron, scheduledAt);
|
|
221
|
+
storage.enqueueReply(channel.id, `Cron #${cron.id} queued task #${task.id}.\nScheduled: ${formatTime(scheduledAt, cron.timezone)} (${cron.timezone})\nDirectory: ${cron.cwd}\nTask: ${cron.prompt}`);
|
|
222
|
+
});
|
|
223
|
+
},
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=cron.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron.js","sourceRoot":"","sources":["../../src/core/cron.ts"],"names":[],"mappings":"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"}
|
package/dist/core/menus.js
CHANGED
|
@@ -46,10 +46,9 @@ export function createMenus(storage) {
|
|
|
46
46
|
.channels.find((channel) => channel.platform === source.platform &&
|
|
47
47
|
channel.accountId === source.accountId &&
|
|
48
48
|
channel.userId === source.userId &&
|
|
49
|
-
channel.cwd &&
|
|
50
49
|
channel.modelMenu?.stage === "loading" &&
|
|
51
50
|
channel.modelMenu.expiresAt > Date.now());
|
|
52
|
-
if (channel?.modelMenu
|
|
51
|
+
if (channel?.modelMenu)
|
|
53
52
|
return { channelId: channel.id, cwd: channel.cwd, id: channel.modelMenu.id };
|
|
54
53
|
},
|
|
55
54
|
/** 新菜单、换目录和过期后丢弃旧查询;失败时保留原模型选择。 */
|
package/dist/core/menus.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menus.js","sourceRoot":"","sources":["../../src/core/menus.ts"],"names":[],"mappings":"AAGA,qCAAqC;AACrC,MAAM,UAAU,WAAW,CAAC,OAQ3B;IACC,sCAAsC;IACtC,SAAS,SAAS,CAChB,SAAiB,EACjB,GAAmC,EACnC,aAAsB;QAEtB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI;YAAE,OAAO;QAC9B,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,OAAO;aAC5B,IAAI,EAAE;aACN,MAAM,CAAC,MAAM,CACZ,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,KAAK,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,EAAE,CAC/E,CAAC;QACJ,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ;YACjC,IAAI,OAAO,CAAC,SAAS,KAAK,aAAa;gBACrC,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,OAAO;QACL,SAAS;QACT,oCAAoC;QACpC,QAAQ,CAAC,SAAiB,EAAE,IAA6B,EAAE,KAAK,GAA2B,EAAE;YAC3F,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;gBAClB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;gBAC9E,IAAI,CAAC,OAAO;oBAAE,OAAO;gBACrB,MAAM,GAAG,GAAG,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,CAAC;gBACpE,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;gBAC1B,MAAM,IAAI,GAAG;oBACX,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;oBACvB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO;oBAC/B,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;oBACtD,QAAQ,EAAE,EAAE;iBACb,CAAC;gBACF,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;oBACrB,OAAO,CAAC,SAAS,GAAG,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;oBAC/D,OAAO;gBACT,CAAC;gBACD,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC9B,OAAO,CAAC,YAAY,CAClB,SAAS,EACT,mCAAmC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,cAAc,CAAC,EAAE,KAAK,IAAI,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,SAAS,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gHAAgH,EACvV,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE,CAC9B,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QACD,4CAA4C;QAC5C,aAAa,CAAC,MAAkE;YAC9E,MAAM,OAAO,GAAG,OAAO;iBACpB,IAAI,EAAE;iBACN,QAAQ,CAAC,IAAI,CACZ,CAAC,OAAO,EAAE,EAAE,CACV,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ;gBACpC,OAAO,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS;gBACtC,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;gBAChC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"menus.js","sourceRoot":"","sources":["../../src/core/menus.ts"],"names":[],"mappings":"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"}
|