scheduler

package
v0.16.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 24, 2026 License: MIT Imports: 21 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// SessionReuse reuses the same session across job executions (default).
	SessionReuse = "reuse"
	// SessionNew creates a fresh session for each execution.
	SessionNew = "new"
)
View Source
const (
	JobOwnerUser   = "user"
	JobOwnerPlugin = "plugin"
)

Job is the persisted job definition.

Variables

This section is empty.

Functions

func DecodePluginJob added in v0.9.0

func DecodePluginJob(job Job) (pluginID, key, runtimeName, description string, payload map[string]any, ok bool)

DecodePluginJob decodes the legacy reserved-message plugin job envelope. It remains only for migration of pre-schema-hardening scheduler rows.

func IsPluginJob added in v0.9.0

func IsPluginJob(job Job) bool

func SchedulerDefinition added in v0.8.0

func SchedulerDefinition() tools.Definition

SchedulerDefinition returns the tool definition without requiring a live service.

Types

type ChatFunc

type ChatFunc func(ctx context.Context, sessionID, message, model string) <-chan runner.Event

ChatFunc streams runner events for heartbeat decision/execution prompts.

type Decision

type Decision struct {
	Action string `json:"action"`
	Reason string `json:"reason,omitempty"`
}

Decision is the gate-keeper response from the LLM.

type HeartbeatConfig

type HeartbeatConfig struct {
	File      string
	FastModel string
}

HeartbeatConfig holds heartbeat-specific settings.

type Job

type Job struct {
	ID          string         `json:"id"`
	OwnerKind   string         `json:"owner_kind,omitempty"`
	PluginID    string         `json:"plugin_id,omitempty"`
	JobKey      string         `json:"job_key,omitempty"`
	RuntimeName string         `json:"runtime_name,omitempty"`
	Name        string         `json:"name"`
	Description string         `json:"description,omitempty"`
	Schedule    Schedule       `json:"schedule"`
	Message     string         `json:"message,omitempty"`
	Payload     map[string]any `json:"payload,omitempty"`
	SessionMode string         `json:"session_mode"` // "reuse" (default) or "new"
	Enabled     bool           `json:"enabled"`
	AgentID     string         `json:"agent_id,omitempty"` // agent to route to (empty = default)
	UserID      int64          `json:"user_id,omitempty"`  // user context (0 = none)
	CreatedAt   time.Time      `json:"created_at"`
	UpdatedAt   time.Time      `json:"updated_at"`
	LastRunAt   *time.Time     `json:"last_run_at,omitempty"`
	LastError   string         `json:"last_error,omitempty"`
}

func (Job) SessionID

func (j Job) SessionID() string

SessionID returns the session identifier for this job execution. Includes agent_id prefix when set for proper scoping. In "reuse" mode, the ID is stable across executions. In "new" mode, a timestamp suffix ensures each execution gets a fresh session.

type OnJobFunc

type OnJobFunc func(ctx context.Context, job Job) error

OnJobFunc is called when a scheduled job fires.

type Schedule

type Schedule struct {
	Cron  string `json:"cron,omitempty"`  // "0 9 * * 1-5"
	Every string `json:"every,omitempty"` // "30m", "2h"
	At    string `json:"at,omitempty"`    // RFC3339: "2024-01-15T14:30:00+08:00"
}

Schedule defines when a job runs. Exactly one field must be set.

type SchedulerTool

type SchedulerTool struct {
	// contains filtered or unexported fields
}

SchedulerTool exposes scheduler management as an agent tool.

func NewTool

func NewTool(service *Service) *SchedulerTool

NewTool creates a SchedulerTool backed by the given service.

func (*SchedulerTool) Definition

func (t *SchedulerTool) Definition() tools.Definition

Definition returns the tool definition for the LLM.

func (*SchedulerTool) Execute

func (t *SchedulerTool) Execute(ctx context.Context, args map[string]any) (string, error)

Execute runs the scheduler tool action.

type Service

type Service struct {
	// contains filtered or unexported fields
}

Service manages scheduled jobs backed by gocron/v2 with database persistence.

func New

func New(db *sql.DB) (*Service, error)

New creates a scheduler service backed by the given database. Call Start to load persisted jobs and begin scheduling.

func NewFromPath

func NewFromPath(dbPath string) (*Service, error)

NewFromPath creates a scheduler service that opens its own SQLite database at the given path. The database is closed when Stop is called.

func (*Service) AddJob

func (s *Service) AddJob(name, message string, sched Schedule, sessionMode string) (Job, error)

AddJob creates, persists, and schedules a new job. sessionMode controls session reuse: "reuse" (default) or "new".

func (*Service) AddJobForContext added in v0.12.0

func (s *Service) AddJobForContext(ctx context.Context, name, message string, sched Schedule, sessionMode string) (Job, error)

AddJobForContext creates a user-owned job bound to the current execution context. When the caller context carries agent/user scope, scheduled executions inherit it.

func (*Service) AddOnJobListener added in v0.9.0

func (s *Service) AddOnJobListener(fn OnJobFunc)

AddOnJobListener appends an additional callback invoked when a job fires.

func (*Service) AddPluginJob added in v0.9.0

func (s *Service) AddPluginJob(pluginID, key, runtimeName, name, description string, sched Schedule, payload map[string]any) (Job, error)

AddPluginJob creates, persists, and schedules a plugin-owned job.

func (*Service) ListJobs

func (s *Service) ListJobs() []Job

ListJobs returns all jobs.

func (*Service) RemoveJob

func (s *Service) RemoveJob(id string) error

RemoveJob unschedules and removes a job.

func (*Service) ScheduleEvery

func (s *Service) ScheduleEvery(ctx context.Context, every string, fn TaskFunc) error

ScheduleEvery registers a non-persisted recurring task on the existing scheduler.

func (*Service) SetHeartbeat

func (s *Service) SetHeartbeat(cfg HeartbeatConfig, chat ChatFunc, notifier notify.Notifier)

SetHeartbeat configures the heartbeat on the scheduler service.

func (*Service) SetLegacyDataPath

func (s *Service) SetLegacyDataPath(path string)

SetLegacyDataPath sets the directory where the legacy jobs.json file may exist. If set, Start will attempt a one-time migration from file to DB.

func (*Service) SetOnJob

func (s *Service) SetOnJob(fn OnJobFunc)

SetOnJob sets the primary callback invoked when a job fires.

func (*Service) SetUserJobsEnabled added in v0.9.0

func (s *Service) SetUserJobsEnabled(enabled bool)

SetUserJobsEnabled controls whether persisted user-owned scheduler jobs are loaded.

func (*Service) Start

func (s *Service) Start(ctx context.Context) error

Start loads persisted jobs and starts the scheduler.

func (*Service) StartEphemeral

func (s *Service) StartEphemeral(ctx context.Context) error

StartEphemeral starts the shared scheduler without loading persisted jobs. Use this when the scheduler is only needed for internal tasks such as heartbeat.

func (*Service) StartHeartbeat

func (s *Service) StartHeartbeat(ctx context.Context, every string) error

StartHeartbeat schedules the heartbeat poll on the shared scheduler.

func (*Service) Stop

func (s *Service) Stop() error

Stop shuts down the scheduler and closes the database if owned.

type TaskFunc

type TaskFunc func(ctx context.Context)

TaskFunc is a lightweight scheduled callback that is not persisted as a scheduled job.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL