پرش به مطلب اصلی

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 استاندارد (۵ فیلد: دقیقه ساعت روز ماه روز هفته)
mode"internal" | "event"بلهحالت اجرا
enabledbooleanخیرآیا فعال است، پیش‌فرض true
notifybooleanخیرآیا هنگام فعال شدن اعلان مرورگر ارسال شود
promptstringخیرPrompt برای حالت داخلی
modelIdstringخیرشناسه مدل برای استفاده در حالت داخلی
skillsstring[]خیرSkillها برای بارگذاری در حالت داخلی
maxIterationsnumberخیرحداکثر دور فراخوانی ابزار برای حالت داخلی، پیش‌فرض 10

بازگشت AgentTask:

فیلدنوعتوضیحات
idstringشناسه کار
namestringنام کار
crontabstringعبارت Cron
modestringحالت اجرا
enabledbooleanآیا فعال است
notifybooleanآیا اعلان‌ها ارسال می‌شوند
nextruntimenumberزمان‌سنج اجرای بعدی
lastruntimenumberزمان‌سنج آخرین اجرا
conversationIdstringشناسه گفتگوی مرتبط در حالت داخلی (اختیاری)
lastRunStatus"success" | "error"وضعیت آخرین اجرا
lastRunErrorstringپیام خطای آخرین اجرا
createtimenumberزمان‌سنج ایجاد

مثال‌های عبارت Cron:

عبارتتوضیحات
* * * * *هر دقیقه
0 9 * * *هر روز ساعت 09:00
0 */2 * * *هر ۲ ساعت
30 8 * * 1-5روزهای هفته ساعت 08:30
0 0 1 * *00:00 روز اول هر ماه

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: "نام جدید",
crontab: "0 10 * * *",
enabled: false,
prompt: "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):

فیلدنوعتوضیحات
taskIdstringشناسه کار
namestringنام کار
crontabstringعبارت Cron
triggeredAtnumberزمان‌سنج فعال‌سازی

removeListener — حذف یک شنونده

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

مثال‌های کامل

حالت داخلی — هوش مصنوعی آن را به طور خودکار اجرا می‌کند

// ==UserScript==
// @name خلاصه اخبار زمان‌بندی‌شده
// @match *://*/*
// @grant CAT.agent.task
// ==/UserScript==

const task = await CAT.agent.task.create({
name: "خلاصه اخبار روزانه",
crontab: "0 9 * * *", // هر روز ساعت 9
mode: "internal",
prompt: "لطفاً اخبار فناوری امروز را جستجو کنید و یک خلاصه کوتاه در OPFS ذخیره کنید",
skills: ["web-search"],
maxIterations: 10,
notify: true
});

console.log("کار ایجاد شد، اجرای بعدی:", new Date(task.nextruntime));

حالت رویداد — اسکریپت خودش آن را مدیریت می‌کند

// ==UserScript==
// @name جمع‌آوری داده زمان‌بندی‌شده
// @match *://*/*
// @grant CAT.agent.task
// @grant CAT.agent.dom
// ==/UserScript==

const task = await CAT.agent.task.create({
name: "جمع‌آوری داده سهام",
crontab: "*/30 9-15 * * 1-5", // هر ۳۰ دقیقه، 9-15 در روزهای هفته
mode: "event",
enabled: true,
notify: false
});

await CAT.agent.task.addListener(task.id, async (trigger) => {
console.log(`کار فعال شد: ${trigger.name} در ${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("جمع‌آوری کامل شد");
});