Перейти до основного вмісту

API запланованих завдань

@grant CAT.agent.task

API запланованих завдань дозволяє скрипту створювати заплановані завдання на основі cron-виразів, з двома режимами виконання.

Режими виконання

Внутрішній режим

Обробляється автоматично системою Agent:

  • Автоматично створює або відновлює розмову, коли спрацьовує cron-розклад
  • Надсилає налаштований prompt до LLM
  • Можна вказати модель і Skill
  • Історія виконання та використання токенів записуються автоматично

Режим подій

Обробляється самим скриптом:

  • Сповіщення про подію надсилається скрипту, коли спрацьовує cron-розклад
  • Скрипт прослуховує подію через addListener
  • Логіка обробки повністю власна

create — створення завдання

const task = await CAT.agent.task.create(options);

Параметри (AgentTaskCreateOptions):

ПараметрТипОбов'язковийОпис
namestringТакНазва завдання
crontabstringТакСтандартний cron-вираз (5 полів: хвилина година день місяць день тижня)
mode"internal" | "event"ТакРежим виконання
enabledbooleanНіЧи ввімкнене, за замовчуванням true
notifybooleanНіЧи надсилати браузерне сповіщення під час спрацювання
promptstringНіПідказка для внутрішнього режиму
modelIdstringНіID моделі для використання у внутрішньому режимі
skillsstring[]НіSkill для завантаження у внутрішньому режимі
maxIterationsnumberНіМаксимальна кількість раундів викликів інструментів для внутрішнього режиму, за замовчуванням 10

Повертає AgentTask:

ПолеТипОпис
idstringID завдання
namestringНазва завдання
crontabstringCron-вираз
modestringРежим виконання
enabledbooleanЧи ввімкнене
notifybooleanЧи надсилаються сповіщення
nextruntimenumberЧас наступного запуску
lastruntimenumberЧас останнього запуску
conversationIdstringID пов'язаної розмови у внутрішньому режимі (за бажанням)
lastRunStatus"success" | "error"Статус останнього запуску
lastRunErrorstringПовідомлення про помилку останнього запуску
createtimenumberЧас створення

Приклади cron-виразів:

ВиразОпис
* * * * *Щохвилини
0 9 * * *Щодня о 09:00
0 */2 * * *Кожні 2 години
30 8 * * 1-5У робочі дні о 08:30
0 0 1 * *00:00 1-го числа кожного місяця

list — список усіх завдань

const tasks = await CAT.agent.task.list();

Повертає всі завдання, створені поточним скриптом.

get — отримати деталі завдання

const task = await CAT.agent.task.get(taskId);

Повертає undefined, якщо завдання не існує.

update — оновити завдання

const task = await CAT.agent.task.update(taskId, partial);

Поля, які можна оновити:

await CAT.agent.task.update(task.id, {
name: "New name",
crontab: "0 10 * * *",
enabled: false,
prompt: "New prompt",
notify: true
});

Після оновлення nextruntime автоматично перераховується.

remove — видалити завдання

const success = await CAT.agent.task.remove(taskId);

runNow — запустити негайно

await CAT.agent.task.runNow(taskId);

Запускає завдання один раз негайно, без очікування cron-розкладу (неблокуючий, працює у фоновому режимі).

addListener — прослуховування спрацювання завдання

const listenerId = await CAT.agent.task.addListener(taskId, callback);

Використовується лише для завдань у режимі подій. Зворотний виклик запускається, коли спрацьовує cron-розклад.

Параметр зворотного виклику (AgentTaskTrigger):

ПолеТипОпис
taskIdstringID завдання
namestringНазва завдання
crontabstringCron-вираз
triggeredAtnumberЧас спрацювання

removeListener — видалити прослуховувач

await CAT.agent.task.removeListener(listenerId);

Повні приклади

Внутрішній режим — AI запускає автоматично

// ==UserScript==
// @name Scheduled news digest
// @match *://*/*
// @grant CAT.agent.task
// ==/UserScript==

const task = await CAT.agent.task.create({
name: "Daily news digest",
crontab: "0 9 * * *", // Щодня о 9
mode: "internal",
prompt: "Please search today's tech news and save a short summary to OPFS",
skills: ["web-search"],
maxIterations: 10,
notify: true
});

console.log("Task created, next run:", new Date(task.nextruntime));

Режим подій — скрипт обробляє сам

// ==UserScript==
// @name Scheduled data collection
// @match *://*/*
// @grant CAT.agent.task
// @grant CAT.agent.dom
// ==/UserScript==

const task = await CAT.agent.task.create({
name: "Stock data collection",
crontab: "*/30 9-15 * * 1-5", // Кожні 30 хвилин, 9-15 у робочі дні
mode: "event",
enabled: true,
notify: false
});

await CAT.agent.task.addListener(task.id, async (trigger) => {
console.log(`Task triggered: ${trigger.name} at ${new Date(trigger.triggeredAt)}`);

// Власна логіка збору
await CAT.agent.dom.navigate("https://finance.example.com/stock");
const content = await CAT.agent.dom.readPage({ selector: ".stock-table" });

// Обробка даних...
console.log("Collection complete");
});