mirror of
https://github.com/QwenLM/qwen-code.git
synced 2026-04-30 12:40:44 +00:00
feat(cron): add in-session loop scheduling with cron tools
Add session-scoped recurring jobs that fire while you work. Jobs live inside the current Qwen Code process and are gone when you exit. New tools: - cron_create: schedule a prompt to run on a cron expression - cron_list: list active cron jobs - cron_delete: cancel a scheduled job Components: - CronScheduler service for in-process job management - cronParser utility for 5-field cron expressions - /loop skill for natural language scheduling - Non-interactive mode integration to keep process alive Constraints: - Max 50 jobs per session - 3-day expiry for recurring jobs - Jitter to prevent thundering herd - No catch-up for missed fire times Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
parent
070ec5b43e
commit
aa4939111c
17 changed files with 1395 additions and 3 deletions
|
|
@ -1638,6 +1638,32 @@ export const useGeminiStream = (
|
|||
storage,
|
||||
]);
|
||||
|
||||
// ─── Cron scheduler integration ─────────────────────────
|
||||
const cronQueueRef = useRef<string[]>([]);
|
||||
|
||||
// Start the scheduler on mount, stop on unmount
|
||||
useEffect(() => {
|
||||
if (config.isCronDisabled()) return;
|
||||
const scheduler = config.getCronScheduler();
|
||||
scheduler.start((job: { prompt: string }) => {
|
||||
cronQueueRef.current.push(job.prompt);
|
||||
});
|
||||
return () => {
|
||||
scheduler.stop();
|
||||
};
|
||||
}, [config]);
|
||||
|
||||
// When idle, drain the cron queue one prompt at a time
|
||||
useEffect(() => {
|
||||
if (
|
||||
streamingState === StreamingState.Idle &&
|
||||
cronQueueRef.current.length > 0
|
||||
) {
|
||||
const prompt = cronQueueRef.current.shift()!;
|
||||
submitQuery(prompt, SendMessageType.UserQuery);
|
||||
}
|
||||
}, [streamingState, submitQuery]);
|
||||
|
||||
return {
|
||||
streamingState,
|
||||
submitQuery,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue