feat: 新增定时任务功能

This commit is contained in:
duanshuwen
2026-04-11 23:17:54 +08:00
parent 37ed157e4a
commit 67808a459e
25 changed files with 4149 additions and 22 deletions

View File

@@ -21,5 +21,6 @@ export const NAMESPACES = [
'component',
'models',
'skills',
'cron',
] as const;
export type Namespace = (typeof NAMESPACES)[number];

View File

@@ -0,0 +1,97 @@
{
"title": "Scheduled Tasks",
"subtitle": "Automate AI workflows with scheduled tasks",
"newTask": "New Task",
"refresh": "Refresh",
"stats": {
"total": "Total Tasks",
"active": "Active",
"paused": "Paused",
"failed": "Failed"
},
"empty": {
"title": "No scheduled tasks",
"description": "Create scheduled tasks to automate AI workflows. Tasks can send messages, run queries, or perform actions at specified times.",
"create": "Create Your First Task"
},
"card": {
"runNow": "Run Now",
"deleteConfirm": "Are you sure you want to delete this task?",
"last": "Last",
"next": "Next"
},
"dialog": {
"createTitle": "Create Task",
"editTitle": "Edit Task",
"description": "Schedule an automated AI task",
"taskName": "Task Name",
"taskNamePlaceholder": "e.g., Morning briefing",
"message": "Message / Prompt",
"messagePlaceholder": "What should the AI do? e.g., Give me a summary of today's news and weather",
"schedule": "Schedule",
"cronPlaceholder": "Cron expression (e.g., 0 9 * * *)",
"usePresets": "Use presets",
"useCustomCron": "Use custom cron",
"deliveryTitle": "Delivery",
"deliveryDescription": "Choose whether this task stays in the app or is pushed to an external channel.",
"deliveryModeNone": "In app only",
"deliveryModeNoneDesc": "Run the task and keep the result in the app.",
"deliveryModeAnnounce": "External channel",
"deliveryModeAnnounceDesc": "Send the final result through a configured channel.",
"deliveryChannel": "Channel",
"channelUnsupportedTag": "Unsupported",
"deliveryAccount": "Sending Account",
"selectDeliveryAccount": "Select an account",
"deliveryAccountDesc": "Uses the same configured account list shown on the Channels page.",
"selectChannel": "Select a channel",
"deliveryChannelUnsupported": "{{channel}} does not currently support scheduled outbound delivery.",
"deliveryDefaultAccountHint": "Uses the channel's default account: {{account}}",
"deliveryTarget": "Recipient / Target",
"selectDeliveryTarget": "Select a delivery target",
"loadingTargets": "Loading targets...",
"currentTarget": "Current target",
"noDeliveryTargets": "No delivery targets are available for the selected {{channel}} account.",
"deliveryTargetDescAuto": "Select from targets discovered for the chosen channel account.",
"enableImmediately": "Enable immediately",
"enableImmediatelyDesc": "Start running this task after creation",
"saveChanges": "Save Changes"
},
"presets": {
"everyMinute": "Every minute",
"every5Min": "Every 5 minutes",
"every15Min": "Every 15 minutes",
"everyHour": "Every hour",
"daily9am": "Daily at 9am",
"daily6pm": "Daily at 6pm",
"weeklyMon": "Weekly (Mon 9am)",
"monthly1st": "Monthly (1st at 9am)"
},
"toast": {
"created": "Task created",
"updated": "Task updated",
"enabled": "Task enabled",
"paused": "Task paused",
"deleted": "Task deleted",
"triggered": "Task triggered successfully",
"failedTrigger": "Failed to trigger task: {{error}}",
"failedUpdate": "Failed to update task",
"failedDelete": "Failed to delete task",
"nameRequired": "Please enter a task name",
"messageRequired": "Please enter a message",
"channelRequired": "Please select a channel",
"deliveryChannelUnsupported": "{{channel}} does not support scheduled delivery yet",
"deliveryTargetRequired": "Please enter a delivery target",
"scheduleRequired": "Please select or enter a schedule"
},
"schedule": {
"everySeconds": "Every {{count}}s",
"everyMinutes": "Every {{count}} minutes",
"everyHours": "Every {{count}} hours",
"everyDays": "Every {{count}} days",
"onceAt": "Once at {{time}}",
"weeklyAt": "Weekly on {{day}} at {{time}}",
"monthlyAtDay": "Monthly on day {{day}} at {{time}}",
"dailyAt": "Daily at {{time}}",
"unknown": "Unknown"
}
}

View File

@@ -0,0 +1,94 @@
{
"title": "定期タスク",
"subtitle": "定期タスクでAIワークフローを自動化",
"newTask": "新規タスク",
"refresh": "更新",
"stats": {
"total": "タスク合計",
"active": "有効",
"paused": "停止中",
"failed": "失敗"
},
"empty": {
"title": "定期タスクがありません",
"description": "定期タスクを作成してAIワークフローを自動化します。指定した時間にメッセージ送信、クエリ実行、アクション実行が可能です。",
"create": "最初のタスクを作成"
},
"card": {
"runNow": "今すぐ実行",
"deleteConfirm": "このタスクを削除してもよろしいですか?",
"last": "前回",
"next": "次回"
},
"dialog": {
"createTitle": "タスク作成",
"editTitle": "タスク編集",
"description": "自動化AIタスクをスケジュール",
"taskName": "タスク名",
"taskNamePlaceholder": "例:朝のブリーフィング",
"message": "メッセージ / プロンプト",
"messagePlaceholder": "AIに何をさせますか 例:今日のニュースと天気のまとめを作成",
"schedule": "スケジュール",
"cronPlaceholder": "Cron式0 9 * * *",
"usePresets": "プリセットを使用",
"useCustomCron": "カスタムCronを使用",
"deliveryTitle": "配信設定",
"deliveryDescription": "結果をアプリ内だけに残すか、外部チャンネルへ送信するかを選びます。",
"deliveryModeNone": "アプリ内のみ",
"deliveryModeNoneDesc": "タスクを実行し、結果はアプリ内だけに残します。",
"deliveryModeAnnounce": "外部チャンネル",
"deliveryModeAnnounceDesc": "最終結果を設定済みチャンネルへ送信します。",
"deliveryChannel": "チャンネル",
"deliveryAccount": "送信アカウント",
"selectDeliveryAccount": "アカウントを選択",
"deliveryAccountDesc": "Channels ページと同じ設定済みアカウント一覧を使います。",
"selectChannel": "チャンネルを選択",
"deliveryDefaultAccountHint": "このチャンネルの既定アカウントを使います: {{account}}",
"deliveryTarget": "送信先",
"selectDeliveryTarget": "送信先を選択",
"loadingTargets": "送信先を読み込み中...",
"currentTarget": "現在の送信先",
"noDeliveryTargets": "この {{channel}} アカウントでは選択可能な送信先が見つかりませんでした。",
"deliveryTargetDescAuto": "選択したチャンネルアカウントで見つかった送信先から選べます。",
"enableImmediately": "すぐに有効化",
"enableImmediatelyDesc": "作成後すぐにこのタスクを実行開始",
"saveChanges": "変更を保存"
},
"presets": {
"everyMinute": "毎分",
"every5Min": "5分ごと",
"every15Min": "15分ごと",
"everyHour": "1時間ごと",
"daily9am": "毎日 午前9時",
"daily6pm": "毎日 午後6時",
"weeklyMon": "毎週 (月曜 午前9時)",
"monthly1st": "毎月 (1日 午前9時)"
},
"toast": {
"created": "タスクを作成しました",
"updated": "タスクを更新しました",
"enabled": "タスクを有効にしました",
"paused": "タスクを停止しました",
"deleted": "タスクを削除しました",
"triggered": "タスクを正常にトリガーしました",
"failedTrigger": "タスクの実行に失敗しました: {{error}}",
"failedUpdate": "タスクの更新に失敗しました",
"failedDelete": "タスクの削除に失敗しました",
"nameRequired": "タスク名を入力してください",
"messageRequired": "メッセージを入力してください",
"channelRequired": "チャンネルを選択してください",
"deliveryTargetRequired": "送信先を入力してください",
"scheduleRequired": "スケジュールを選択または入力してください"
},
"schedule": {
"everySeconds": "{{count}}秒ごと",
"everyMinutes": "{{count}}分ごと",
"everyHours": "{{count}}時間ごと",
"everyDays": "{{count}}日ごと",
"onceAt": "{{time}} に1回実行",
"weeklyAt": "毎週 {{day}} {{time}}",
"monthlyAtDay": "毎月 {{day}}日 {{time}}",
"dailyAt": "毎日 {{time}}",
"unknown": "不明"
}
}

View File

@@ -0,0 +1,97 @@
{
"title": "定时任务",
"subtitle": "通过定时任务自动化 AI 工作流",
"newTask": "新建任务",
"refresh": "刷新",
"stats": {
"total": "任务总数",
"active": "运行中",
"paused": "已暂停",
"failed": "失败"
},
"empty": {
"title": "暂无定时任务",
"description": "创建定时任务以自动化 AI 工作流。任务可以在指定时间发送消息、运行查询或执行操作。",
"create": "创建第一个任务"
},
"card": {
"runNow": "立即运行",
"deleteConfirm": "确定要删除此任务吗?",
"last": "上次运行",
"next": "下次运行"
},
"dialog": {
"createTitle": "创建任务",
"editTitle": "编辑任务",
"description": "安排自动化的 AI 任务",
"taskName": "任务名称",
"taskNamePlaceholder": "例如:早间简报",
"message": "消息 / 提示词",
"messagePlaceholder": "AI 应该做什么?例如:给我一份今天的新闻和天气摘要",
"schedule": "调度计划",
"cronPlaceholder": "Cron 表达式 (例如0 9 * * *)",
"usePresets": "使用预设",
"useCustomCron": "使用自定义 Cron",
"deliveryTitle": "投递设置",
"deliveryDescription": "选择仅在应用内保留结果,或把最终结果推送到外部通道。",
"deliveryModeNone": "仅应用内",
"deliveryModeNoneDesc": "任务照常运行,结果只保留在应用内。",
"deliveryModeAnnounce": "发送到外部通道",
"deliveryModeAnnounceDesc": "将最终结果投递到已配置的消息通道。",
"deliveryChannel": "通道",
"channelUnsupportedTag": "暂不支持",
"deliveryAccount": "发送账号",
"selectDeliveryAccount": "选择账号",
"deliveryAccountDesc": "这里直接复用 Channels 页面里的已配置账号列表。",
"selectChannel": "选择通道",
"deliveryChannelUnsupported": "{{channel}} 通道当前不支持定时任务主动投递。",
"deliveryDefaultAccountHint": "将使用该通道当前的默认账号:{{account}}",
"deliveryTarget": "接收目标",
"selectDeliveryTarget": "选择接收目标",
"loadingTargets": "正在加载目标...",
"currentTarget": "当前目标",
"noDeliveryTargets": "当前 {{channel}} 账号暂无可选投递目标。",
"deliveryTargetDescAuto": "这里会展示该通道账号下已发现的可投递目标。",
"enableImmediately": "立即启用",
"enableImmediatelyDesc": "创建后立即开始运行此任务",
"saveChanges": "保存更改"
},
"presets": {
"everyMinute": "每分钟",
"every5Min": "每 5 分钟",
"every15Min": "每 15 分钟",
"everyHour": "每小时",
"daily9am": "每天上午 9 点",
"daily6pm": "每天下午 6 点",
"weeklyMon": "每周 (周一上午 9 点)",
"monthly1st": "每月 (1号上午 9 点)"
},
"toast": {
"created": "任务已创建",
"updated": "任务已更新",
"enabled": "任务已启用",
"paused": "任务已暂停",
"deleted": "任务已删除",
"triggered": "任务已成功触发",
"failedTrigger": "触发任务失败: {{error}}",
"failedUpdate": "更新任务失败",
"failedDelete": "删除任务失败",
"nameRequired": "请输入任务名称",
"messageRequired": "请输入消息",
"channelRequired": "请选择通道",
"deliveryChannelUnsupported": "{{channel}} 暂不支持定时任务投递",
"deliveryTargetRequired": "请输入投递目标",
"scheduleRequired": "请选择或输入调度计划"
},
"schedule": {
"everySeconds": "每 {{count}} 秒",
"everyMinutes": "每 {{count}} 分钟",
"everyHours": "每 {{count}} 小时",
"everyDays": "每 {{count}} 天",
"onceAt": "执行一次,时间:{{time}}",
"weeklyAt": "每周 {{day}} {{time}}",
"monthlyAtDay": "每月 {{day}} 日 {{time}}",
"dailyAt": "每天 {{time}}",
"unknown": "未知"
}
}