automation

package
v0.6.97 Latest Latest
Warning

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

Go to latest
Published: May 5, 2026 License: MIT Imports: 23 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrGoalNotFound = errors.New("goal not found")
)
View Source
var (
	ErrTaskNotFound = errors.New("automation task not found")
)

Functions

func NextRunAt

func NextRunAt(from time.Time, schedule Schedule) time.Time

func SetGoalTemplates added in v0.6.95

func SetGoalTemplates(start, cont, timeout string)

func ValidateGoal added in v0.6.95

func ValidateGoal(goal GoalTask) error

func ValidateTask

func ValidateTask(task Task) error

Types

type Actor

type Actor struct {
	UserID string `json:"user_id,omitempty"`
	OpenID string `json:"open_id,omitempty"`
	Name   string `json:"name,omitempty"`
}

func (Actor) PreferredID

func (a Actor) PreferredID() string

type Engine

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

func NewEngine

func NewEngine(store *Store, sender Sender) *Engine

func (*Engine) ExecuteGoal added in v0.6.95

func (e *Engine) ExecuteGoal(ctx context.Context, scope Scope) error

func (*Engine) RegisterSystemTask

func (e *Engine) RegisterSystemTask(name string, interval time.Duration, run SystemTaskFunc) error

func (*Engine) Run

func (e *Engine) Run(ctx context.Context)

func (*Engine) RunWatchdogOnce added in v0.6.76

func (e *Engine) RunWatchdogOnce(ctx context.Context)

func (*Engine) SetLLMRunner

func (e *Engine) SetLLMRunner(runner LLMRunner)

func (*Engine) SetRunEnv

func (e *Engine) SetRunEnv(env map[string]string)

func (*Engine) SetSessionActivityChecker added in v0.6.62

func (e *Engine) SetSessionActivityChecker(checker SessionActivityChecker)

func (*Engine) SetUserTaskCompletionHook added in v0.6.0

func (e *Engine) SetUserTaskCompletionHook(hook UserTaskCompletionHook)

func (*Engine) SetUserTaskTimeout

func (e *Engine) SetUserTaskTimeout(timeout time.Duration)

type GoalStatus added in v0.6.95

type GoalStatus string
const (
	GoalStatusActive   GoalStatus = "active"
	GoalStatusPaused   GoalStatus = "paused"
	GoalStatusComplete GoalStatus = "complete"
	GoalStatusTimeout  GoalStatus = "timeout"
)

func (GoalStatus) IsTerminal added in v0.6.95

func (s GoalStatus) IsTerminal() bool

type GoalTask added in v0.6.95

type GoalTask struct {
	ID         string     `json:"id"`
	Objective  string     `json:"objective"`
	Status     GoalStatus `json:"status"`
	DeadlineAt time.Time  `json:"deadline_at"`
	ThreadID   string     `json:"thread_id,omitempty"`

	Scope      Scope  `json:"scope"`
	Route      Route  `json:"route"`
	Creator    Actor  `json:"creator"`
	SessionKey string `json:"session_key,omitempty"`

	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`
	Revision  int64     `json:"revision"`
}

func NormalizeGoal added in v0.6.95

func NormalizeGoal(goal GoalTask) GoalTask

type LLMRunner

type LLMRunner interface {
	Run(ctx context.Context, req llm.RunRequest) (llm.RunResult, error)
}

type ManageMode

type ManageMode string
const (
	ManageModeCreatorOnly ManageMode = "creator_only"
	ManageModeScopeAll    ManageMode = "scope_all"
)

type Route

type Route struct {
	ReceiveIDType string `json:"receive_id_type"`
	ReceiveID     string `json:"receive_id"`
}

type Schedule

type Schedule struct {
	EverySeconds int    `json:"every_seconds,omitempty"`
	CronExpr     string `json:"cron_expr,omitempty"`
}

type Scope

type Scope struct {
	Kind ScopeKind `json:"kind"`
	ID   string    `json:"id"`
}

type ScopeKind

type ScopeKind string
const (
	ScopeKindUser ScopeKind = "user"
	ScopeKindChat ScopeKind = "chat"
)

type Sender added in v0.3.20

type Sender = messaging.AutomationSender

type SessionActivityChecker added in v0.6.62

type SessionActivityChecker interface {
	IsSessionActive(sessionKey string) bool
}

SessionActivityChecker checks whether a session is currently processing a user message. The automation engine uses this to skip task execution when the target session is busy, avoiding interruption of user conversations.

type SessionActivityGate added in v0.6.80

type SessionActivityGate interface {
	SessionActivityChecker
	TryAcquireSession(sessionKey string, cancel context.CancelCauseFunc) bool
	ReleaseSession(sessionKey string)
}

SessionActivityGate extends SessionActivityChecker with the ability to register an automation task run as an active session entry, so that:

  • subsequent IsSessionActive checks (including from other ticks) see the session as busy
  • incoming user messages can interrupt the task via the provided cancel function (using the same version-based interruption mechanism used for user-initiated LLM runs)

type Snapshot

type Snapshot struct {
	Version int    `json:"version"`
	Tasks   []Task `json:"tasks"`
}

type Store

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

func NewStore

func NewStore(path string) *Store

func (*Store) ClaimDueTasks

func (s *Store) ClaimDueTasks(at time.Time, limit int) ([]Task, error)

func (*Store) CreateTask

func (s *Store) CreateTask(task Task) (Task, error)

func (*Store) DeleteGoal added in v0.6.95

func (s *Store) DeleteGoal(scope Scope) error

func (*Store) GetGoal added in v0.6.95

func (s *Store) GetGoal(scope Scope) (GoalTask, error)

func (*Store) GetTask

func (s *Store) GetTask(taskID string) (Task, error)

func (*Store) ListTasks

func (s *Store) ListTasks(scope Scope, statusFilter string, limit int) ([]Task, error)

func (*Store) PatchGoal added in v0.6.95

func (s *Store) PatchGoal(scope Scope, mutate func(goal *GoalTask) error) (GoalTask, error)

func (*Store) PatchTask

func (s *Store) PatchTask(taskID string, mutate func(task *Task) error) (Task, error)

func (*Store) Path

func (s *Store) Path() string

func (*Store) RecordTaskResult

func (s *Store) RecordTaskResult(taskID string, at time.Time, runErr error) error

func (*Store) RecordTaskResumeThreadID added in v0.6.48

func (s *Store) RecordTaskResumeThreadID(taskID, nextThreadID string) error

func (*Store) RecordTaskSourceMessageID added in v0.6.49

func (s *Store) RecordTaskSourceMessageID(taskID, messageID string) error

func (*Store) ReplaceGoal added in v0.6.95

func (s *Store) ReplaceGoal(goal GoalTask) (GoalTask, error)

func (*Store) ResetRunningTasks

func (s *Store) ResetRunningTasks() error

func (*Store) ScanWatchdogAlerts added in v0.6.76

func (s *Store) ScanWatchdogAlerts(at time.Time, overdueGrace, runningGrace time.Duration) ([]TaskWatchdogAlert, error)

func (*Store) UnclaimTask added in v0.6.62

func (s *Store) UnclaimTask(taskID string) error

type SystemTaskFunc

type SystemTaskFunc func(ctx context.Context)

type Task

type Task struct {
	ID       string   `json:"id"`
	Title    string   `json:"title,omitempty"`
	Prompt   string   `json:"prompt"`
	Fresh    bool     `json:"fresh,omitempty"`
	Schedule Schedule `json:"schedule"`

	Scope           Scope      `json:"scope"`
	Route           Route      `json:"route"`
	Creator         Actor      `json:"creator"`
	ManageMode      ManageMode `json:"manage_mode"`
	SessionKey      string     `json:"session_key,omitempty"`
	ResumeThreadID  string     `json:"resume_thread_id,omitempty"`
	SourceMessageID string     `json:"source_message_id,omitempty"`

	Status              TaskStatus `json:"status"`
	MaxRuns             int        `json:"max_runs,omitempty"`
	RunCount            int        `json:"run_count,omitempty"`
	CreatedAt           time.Time  `json:"created_at"`
	UpdatedAt           time.Time  `json:"updated_at"`
	NextRunAt           time.Time  `json:"next_run_at"`
	LastRunAt           time.Time  `json:"last_run_at,omitempty"`
	DeletedAt           time.Time  `json:"deleted_at,omitempty"`
	Running             bool       `json:"running,omitempty"`
	LastResult          string     `json:"last_result,omitempty"`
	ConsecutiveFailures int        `json:"consecutive_failures,omitempty"`
	Revision            int64      `json:"revision"`
}

func NormalizeTask

func NormalizeTask(task Task) Task

type TaskStatus

type TaskStatus string
const (
	TaskStatusActive  TaskStatus = "active"
	TaskStatusPaused  TaskStatus = "paused"
	TaskStatusDeleted TaskStatus = "deleted"
)

func ParseStatusFilter

func ParseStatusFilter(raw string) (TaskStatus, bool, error)

type TaskWatchdogAlert added in v0.6.76

type TaskWatchdogAlert struct {
	Kind       TaskWatchdogAlertKind
	Task       Task
	OverdueBy  time.Duration
	RunningFor time.Duration
}

type TaskWatchdogAlertKind added in v0.6.76

type TaskWatchdogAlertKind string
const (
	TaskWatchdogAlertOverdue TaskWatchdogAlertKind = "overdue"
	TaskWatchdogAlertStuck   TaskWatchdogAlertKind = "stuck"
)

type UserTaskCompletionHook added in v0.6.0

type UserTaskCompletionHook func(task Task, err error)

Jump to

Keyboard shortcuts

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