Built-ins

task Plugin

task 定义、task actions,以及归属于 plugin 实例的 cron trigger runtime

task Plugin

task 是任务运行时 plugin。

它主要持有:

  • task 相关 actions
  • task system text
  • 每个 plugin 实例一套 cron trigger engine

主要形状

  • lifecycle
  • actions
  • system

它主要解决什么问题

当你需要这些能力时,应该关注 task

  • task 定义和变更
  • cron 触发的 task 执行
  • task 变更后的 scheduler reload

用户怎么使用

当你需要一条可复用的任务定义时,使用 downcity task

downcity task list
downcity task create --title "daily-summary" --description "Send a daily summary" --when "0 9 * * *" --session-id <sessionId>
downcity task run daily-summary --reason "manual check"
downcity task update daily-summary --status paused
downcity task enable daily-summary
downcity task disable daily-summary
downcity task delete daily-summary

如果只是一次性的延迟动作,用 downcity chat send --delay/--time,或者给其他 plugin action 加 --delay/--time。如果这件事应该长期存在、可编辑、可手动重跑,再使用 downcity task

SDK 装配

TaskPlugin 在任务管理和 script task 场景可以无参使用;agent task 还需要宿主提供运行时模型解析函数。cron 默认采用当前运行机器的本机时区:

import { TaskPlugin } from "@downcity/plugins";

const plugin = new TaskPlugin({
  timezone: "Asia/Shanghai",
  resolve_session_model: async (session_id) =>
    await host_model_runtime.resolve(session_id),
});

timezone 主要影响 cron 表达式。time:<ISO8601-with-timezone> 这种一次性任务以 ISO 字符串自身的时区 offset 为准。

SDK action 用法

await agent.plugins.runAction({
  plugin: "task",
  action: "run",
  payload: {
    title: "daily-summary",
    reason: "manual check",
  },
});

action 名称是 listcreaterundeleteupdatestatusenabledisable

关键语义

  • 长期 cron runtime 归属于 plugin 实例
  • cron 时区来自 constructor timezone,默认本机时区
  • resolve_session_model 只返回运行时模型实例,TaskPlugin 不从 AgentContext 读取模型 ID
  • create / update / delete / status 变更后会触发 scheduler reload
  • task 运行中锁归属于 plugin 实例,reload 时也会保持同一 task 串行执行
  • plugin 也支持 reload / reschedule 这类 lifecycle command

公开性说明

TaskPlugin@downcity/plugins 包根导出。它可以在 SDK 中直接装配,但更常见的使用路径仍然是 agent runtime 与 downcity task

相关文档