89 lines
4.1 KiB
Go
89 lines
4.1 KiB
Go
package models
|
|
|
|
import (
|
|
"encoding/json"
|
|
"time"
|
|
)
|
|
|
|
// Task is a scheduled or one-shot job that creates a service channel
|
|
// and runs a completion (prompt task) or instantiates a workflow.
|
|
type Task struct {
|
|
ID string `json:"id" db:"id"`
|
|
OwnerID string `json:"owner_id" db:"owner_id"`
|
|
TeamID *string `json:"team_id,omitempty" db:"team_id"`
|
|
Name string `json:"name" db:"name"`
|
|
Description string `json:"description" db:"description"`
|
|
Scope string `json:"scope" db:"scope"` // personal | team | global
|
|
|
|
// What to run
|
|
TaskType string `json:"task_type" db:"task_type"` // prompt | workflow
|
|
PersonaID *string `json:"persona_id,omitempty" db:"persona_id"`
|
|
ModelID string `json:"model_id" db:"model_id"`
|
|
SystemPrompt string `json:"system_prompt" db:"system_prompt"`
|
|
UserPrompt string `json:"user_prompt" db:"user_prompt"`
|
|
WorkflowID *string `json:"workflow_id,omitempty" db:"workflow_id"`
|
|
ToolGrants json.RawMessage `json:"tool_grants,omitempty" db:"tool_grants"`
|
|
|
|
// Schedule
|
|
Schedule string `json:"schedule" db:"schedule"` // cron expression or "once"
|
|
Timezone string `json:"timezone" db:"timezone"`
|
|
IsActive bool `json:"is_active" db:"is_active"`
|
|
|
|
// Execution policy
|
|
MaxTokens int `json:"max_tokens" db:"max_tokens"`
|
|
MaxToolCalls int `json:"max_tool_calls" db:"max_tool_calls"`
|
|
MaxWallClock int `json:"max_wall_clock" db:"max_wall_clock"` // seconds
|
|
OutputMode string `json:"output_mode" db:"output_mode"` // channel | note | webhook
|
|
OutputChannelID *string `json:"output_channel_id,omitempty" db:"output_channel_id"`
|
|
WebhookURL string `json:"webhook_url" db:"webhook_url"`
|
|
|
|
// Provider routing
|
|
ProviderConfigID *string `json:"provider_config_id,omitempty" db:"provider_config_id"`
|
|
|
|
// Notifications
|
|
NotifyOnComplete bool `json:"notify_on_complete" db:"notify_on_complete"`
|
|
NotifyOnFailure bool `json:"notify_on_failure" db:"notify_on_failure"`
|
|
|
|
// Bookkeeping
|
|
LastRunAt *time.Time `json:"last_run_at,omitempty" db:"last_run_at"`
|
|
NextRunAt *time.Time `json:"next_run_at,omitempty" db:"next_run_at"`
|
|
RunCount int `json:"run_count" db:"run_count"`
|
|
CreatedAt time.Time `json:"created_at" db:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
|
|
}
|
|
|
|
// TaskPatch contains optional fields for updating a task.
|
|
type TaskPatch struct {
|
|
Name *string `json:"name,omitempty"`
|
|
Description *string `json:"description,omitempty"`
|
|
PersonaID *string `json:"persona_id,omitempty"`
|
|
ModelID *string `json:"model_id,omitempty"`
|
|
SystemPrompt *string `json:"system_prompt,omitempty"`
|
|
UserPrompt *string `json:"user_prompt,omitempty"`
|
|
Schedule *string `json:"schedule,omitempty"`
|
|
Timezone *string `json:"timezone,omitempty"`
|
|
IsActive *bool `json:"is_active,omitempty"`
|
|
MaxTokens *int `json:"max_tokens,omitempty"`
|
|
MaxToolCalls *int `json:"max_tool_calls,omitempty"`
|
|
MaxWallClock *int `json:"max_wall_clock,omitempty"`
|
|
OutputMode *string `json:"output_mode,omitempty"`
|
|
WebhookURL *string `json:"webhook_url,omitempty"`
|
|
ToolGrants *json.RawMessage `json:"tool_grants,omitempty"`
|
|
NotifyOnComplete *bool `json:"notify_on_complete,omitempty"`
|
|
NotifyOnFailure *bool `json:"notify_on_failure,omitempty"`
|
|
}
|
|
|
|
// TaskRun records a single execution of a task.
|
|
type TaskRun struct {
|
|
ID string `json:"id" db:"id"`
|
|
TaskID string `json:"task_id" db:"task_id"`
|
|
ChannelID *string `json:"channel_id,omitempty" db:"channel_id"`
|
|
Status string `json:"status" db:"status"` // running | completed | failed | budget_exceeded | cancelled
|
|
StartedAt time.Time `json:"started_at" db:"started_at"`
|
|
CompletedAt *time.Time `json:"completed_at,omitempty" db:"completed_at"`
|
|
TokensUsed int `json:"tokens_used" db:"tokens_used"`
|
|
ToolCalls int `json:"tool_calls" db:"tool_calls"`
|
|
WallClock int `json:"wall_clock" db:"wall_clock"` // seconds
|
|
Error string `json:"error,omitempty" db:"error"`
|
|
}
|