cron

package
v0.6.0 Latest Latest
Warning

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

Go to latest
Published: Mar 13, 2026 License: MIT Imports: 15 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"
)

Variables

This section is empty.

Functions

This section is empty.

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 CronTool

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

CronTool exposes cron management as an agent tool.

func NewTool

func NewTool(service *Service) *CronTool

NewTool creates a CronTool backed by the given service.

func (*CronTool) Definition

func (t *CronTool) Definition() toolspec.Definition

Definition returns the tool definition for the LLM.

func (*CronTool) Execute

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

Execute runs the cron tool action.

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"`
	Name        string    `json:"name"`
	Schedule    Schedule  `json:"schedule"`
	Message     string    `json:"message"`
	SessionMode string    `json:"session_mode"` // "reuse" (default) or "new"
	Enabled     bool      `json:"enabled"`
	CreatedAt   time.Time `json:"created_at"`
}

Job is the persisted job definition.

func (Job) SessionID

func (j Job) SessionID() string

SessionID returns the session identifier for this job execution. 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)

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 Service

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

Service manages cron jobs backed by gocron/v2 with JSON persistence.

func New

func New(dataPath string) (*Service, error)

New creates a cron service. Call Start to load persisted jobs and begin scheduling.

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) 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 channel.Notifier)

SetHeartbeat configures the heartbeat on the cron service.

func (*Service) SetOnJob

func (s *Service) SetOnJob(fn OnJobFunc)

SetOnJob sets the callback invoked when a job fires.

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 cron 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.

type TaskFunc

type TaskFunc func(ctx context.Context)

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

Jump to

Keyboard shortcuts

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