projectautomation

package
v0.2.2 Latest Latest
Warning

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

Go to latest
Published: Jun 4, 2026 License: MIT Imports: 17 Imported by: 0

Documentation

Index

Constants

View Source
const (
	GovernanceActionKindAutomationRunStart = "automation_run_start"
	GovernanceOutcomeKindAutomationAttempt = "automation_attempt"
)
View Source
const (
	AutomationStatusDraft      = "draft"
	AutomationStatusEnabled    = "enabled"
	AutomationStatusDisabled   = "disabled"
	AutomationStatusRunning    = "running"
	AutomationStatusPaused     = "paused"
	AutomationStatusFailed     = "failed"
	AutomationStatusCancelled  = "cancelled"
	AutomationStatusSuperseded = "superseded"
)
View Source
const (
	RunStatusQueued            = "queued"
	RunStatusClaiming          = "claiming"
	RunStatusStarting          = "starting"
	RunStatusRunning           = "running"
	RunStatusVerifying         = "verifying"
	RunStatusCompleted         = "completed"
	RunStatusFailed            = "failed"
	RunStatusBlocked           = "blocked"
	RunStatusCancelled         = "cancelled"
	RunStatusPolicyDenied      = "policy_denied"
	RunStatusRunnerUnavailable = "runner_unavailable"
	RunStatusTimeout           = "timeout"
)
View Source
const (
	BatchStatusPlanned   = "planned"
	BatchStatusRunning   = "running"
	BatchStatusCompleted = "completed"
	BatchStatusFailed    = "failed"
	BatchStatusBlocked   = "blocked"
	BatchStatusCancelled = "cancelled"
)
View Source
const (
	RunnerKindCodexCLI = "codex_cli"
	RunnerKindManual   = "manual"
)
View Source
const (
	RunnerExecutionInProcess = "in_process"
	RunnerExecutionExternal  = "external"
	RunnerExecutionManaged   = "managed"
)
View Source
const (
	TriggerKindManual    = "manual"
	TriggerKindAutomatic = "automatic"
)
View Source
const (
	AutomationSourceManual   = "manual"
	AutomationSourceWorkflow = "workflow"
)
View Source
const PermissionSnapshotRefPrefix = "permission_snapshot:"

Variables

View Source
var ErrInvalidInput = errors.New("invalid project automation input")

Functions

func DetectCodex

func DetectCodex(binaryPath string) (string, bool)

func RenderCodexTaskPrompt added in v0.2.1

func RenderCodexTaskPrompt(input CodexTaskInput) string

Types

type Automation

type Automation struct {
	ID                    string    `json:"id"`
	ProjectID             string    `json:"project_id"`
	AutomationRef         string    `json:"automation_ref"`
	Title                 string    `json:"title"`
	Purpose               string    `json:"purpose"`
	Status                string    `json:"status"`
	AgentID               string    `json:"agent_id"`
	PlanID                string    `json:"plan_id,omitempty"`
	AllowedTaskRefs       []string  `json:"allowed_task_refs,omitempty"`
	RequiredReviewTaskIDs []string  `json:"required_review_task_ids,omitempty"`
	TriggerKind           string    `json:"trigger_kind"`
	SourceKind            string    `json:"source_kind,omitempty"`
	SchedulePolicy        string    `json:"schedule_policy,omitempty"`
	PermissionRef         string    `json:"permission_ref"`
	CreatedByRunID        string    `json:"created_by_run_id,omitempty"`
	TraceID               string    `json:"trace_id,omitempty"`
	CreatedAt             time.Time `json:"created_at"`
	UpdatedAt             time.Time `json:"updated_at"`
}

type AutomationAgent

type AutomationAgent struct {
	ID              string        `json:"id"`
	DisplayName     string        `json:"display_name"`
	Purpose         string        `json:"purpose"`
	Enabled         bool          `json:"enabled"`
	AllowedSkills   []string      `json:"allowed_skills,omitempty"`
	AllowedTools    []string      `json:"allowed_tools,omitempty"`
	AllowedCommands []CommandSpec `json:"allowed_commands,omitempty"`
	DeniedCommands  []string      `json:"denied_commands,omitempty"`
	WorkspaceMode   string        `json:"workspace_mode"`
	NetworkPolicy   string        `json:"network_policy"`
	SecretPolicy    string        `json:"secret_policy"`
	LogPolicy       string        `json:"log_policy"`
	MaxRuntime      time.Duration `json:"max_runtime"`
	MaxRetries      int           `json:"max_retries"`
}

type AutomationAttempt

type AutomationAttempt struct {
	ID                 string    `json:"id"`
	ProjectID          string    `json:"project_id"`
	AutomationRunID    string    `json:"automation_run_id"`
	AttemptNumber      int       `json:"attempt_number"`
	RunnerKind         string    `json:"runner_kind"`
	CommandRef         string    `json:"command_ref,omitempty"`
	InputSummaryHash   string    `json:"input_summary_hash,omitempty"`
	OutputSummaryHash  string    `json:"output_summary_hash,omitempty"`
	Status             string    `json:"status"`
	FailureCategory    string    `json:"failure_category,omitempty"`
	DurationMS         int64     `json:"duration_ms"`
	VerifierResultRefs []string  `json:"verifier_result_refs,omitempty"`
	EvidenceRefs       []string  `json:"evidence_refs,omitempty"`
	ClaimRefs          []string  `json:"claim_refs,omitempty"`
	KnowledgeRefs      []string  `json:"knowledge_candidate_refs,omitempty"`
	CreatedAt          time.Time `json:"created_at"`
	FinishedAt         time.Time `json:"finished_at,omitempty"`
}

type AutomationFilter

type AutomationFilter struct {
	ProjectID string `json:"project_id,omitempty"`
	Status    string `json:"status,omitempty"`
	AgentID   string `json:"agent_id,omitempty"`
}

type AutomationParallelBatch

type AutomationParallelBatch struct {
	ID                string    `json:"id"`
	ProjectID         string    `json:"project_id"`
	AutomationRunID   string    `json:"automation_run_id"`
	OrchestratorRunID string    `json:"orchestrator_run_id"`
	PlanID            string    `json:"plan_id"`
	TaskIDs           []string  `json:"task_ids"`
	Status            string    `json:"status"`
	SafetyReason      string    `json:"safety_reason"`
	ConflictSummary   string    `json:"conflict_summary,omitempty"`
	CreatedAt         time.Time `json:"created_at"`
	UpdatedAt         time.Time `json:"updated_at"`
}

type AutomationRun

type AutomationRun struct {
	ID                string    `json:"id"`
	ProjectID         string    `json:"project_id"`
	AutomationID      string    `json:"automation_id"`
	AgentID           string    `json:"agent_id"`
	PlanID            string    `json:"plan_id"`
	TaskID            string    `json:"task_id"`
	WorkTaskStatus    string    `json:"work_task_status"`
	Status            string    `json:"status"`
	RunnerKind        string    `json:"runner_kind"`
	AgentRunID        string    `json:"agent_run_id,omitempty"`
	TraceID           string    `json:"trace_id,omitempty"`
	AttemptCount      int       `json:"attempt_count"`
	OrchestratorRunID string    `json:"orchestrator_run_id,omitempty"`
	ParentRunID       string    `json:"parent_run_id,omitempty"`
	WorkerRunIDs      []string  `json:"worker_run_ids,omitempty"`
	ParallelGroupID   string    `json:"parallel_group_id,omitempty"`
	FailureCategory   string    `json:"failure_category,omitempty"`
	SafeSummary       string    `json:"safe_summary,omitempty"`
	StartedAt         time.Time `json:"started_at,omitempty"`
	FinishedAt        time.Time `json:"finished_at,omitempty"`
	CreatedAt         time.Time `json:"created_at"`
	UpdatedAt         time.Time `json:"updated_at"`
}

type ClaimNextRunInput

type ClaimNextRunInput struct {
	ProjectID  string `json:"project_id,omitempty"`
	AgentID    string `json:"agent_id,omitempty"`
	RunnerKind string `json:"runner_kind,omitempty"`
}

type ClaimedRun

type ClaimedRun struct {
	Run        AutomationRun  `json:"run"`
	CodexInput CodexTaskInput `json:"codex_input"`
	TimeoutMS  int64          `json:"timeout_ms"`
}

type CodexCommand

type CodexCommand struct {
	Path      string
	Args      []string
	Env       []string
	StdinFile string
	Timeout   time.Duration
}

func BuildCodexCommand

func BuildCodexCommand(input CodexCommandInput) (CodexCommand, error)

type CodexCommandInput

type CodexCommandInput struct {
	BinaryPath string
	InputPath  string
	Timeout    time.Duration
	EnvAllow   map[string]string
}

type CodexRunResult

type CodexRunResult struct {
	ExitCode        int
	Duration        time.Duration
	TimedOut        bool
	OutputTruncated bool
}

func RunCodexCommand

func RunCodexCommand(ctx context.Context, command CodexCommand, maxOutputBytes int64) (CodexRunResult, error)

type CodexTaskInput

type CodexTaskInput struct {
	SchemaVersion           int      `json:"schema_version"`
	ProjectID               string   `json:"project_id"`
	AutomationRunID         string   `json:"automation_run_id"`
	TraceID                 string   `json:"trace_id,omitempty"`
	PlanID                  string   `json:"plan_id"`
	TaskID                  string   `json:"task_id"`
	TaskRef                 string   `json:"task_ref"`
	Title                   string   `json:"title"`
	Description             string   `json:"description,omitempty"`
	EvidenceNeeded          []string `json:"evidence_needed,omitempty"`
	ContextPackRefs         []string `json:"context_pack_refs,omitempty"`
	LikelyFilesAffected     []string `json:"likely_files_affected,omitempty"`
	VerificationRequirement string   `json:"verification_requirement"`
	ExpectedOutput          string   `json:"expected_output,omitempty"`
	FailureCriteria         string   `json:"failure_criteria,omitempty"`
	ResumeInstructions      string   `json:"resume_instructions,omitempty"`
	RunnerInstructions      []string `json:"runner_instructions"`
}

type CommandSpec

type CommandSpec struct {
	Command string   `json:"command"`
	Args    []string `json:"args,omitempty"`
}

type CompleteAttemptInput

type CompleteAttemptInput struct {
	ProjectID          string   `json:"project_id,omitempty"`
	RunID              string   `json:"run_id"`
	Status             string   `json:"status"`
	FailureCategory    string   `json:"failure_category,omitempty"`
	DurationMS         int64    `json:"duration_ms,omitempty"`
	VerifierResultRefs []string `json:"verifier_result_refs,omitempty"`
	EvidenceRefs       []string `json:"evidence_refs,omitempty"`
	ClaimRefs          []string `json:"claim_refs,omitempty"`
	ReviewRefs         []string `json:"review_result_refs,omitempty"`
	KnowledgeRefs      []string `json:"knowledge_candidate_refs,omitempty"`
}

type ComputeParallelBatchInput

type ComputeParallelBatchInput struct {
	ProjectID         string   `json:"project_id,omitempty"`
	AutomationRunID   string   `json:"automation_run_id,omitempty"`
	OrchestratorRunID string   `json:"orchestrator_run_id,omitempty"`
	PlanID            string   `json:"plan_id,omitempty"`
	TaskIDs           []string `json:"task_ids,omitempty"`
	MaxTasks          int      `json:"max_tasks,omitempty"`
}

type ConfidenceGovernance added in v0.2.0

type ConfidenceGovernance interface {
	RecordConfidenceRef(context.Context, GovernanceConfidenceInput) (string, error)
}

type CreateAutomationInput

type CreateAutomationInput struct {
	ProjectID             string   `json:"project_id,omitempty"`
	AutomationRef         string   `json:"automation_ref"`
	Title                 string   `json:"title"`
	Purpose               string   `json:"purpose"`
	Status                string   `json:"status,omitempty"`
	AgentID               string   `json:"agent_id"`
	PlanID                string   `json:"plan_id,omitempty"`
	AllowedTaskRefs       []string `json:"allowed_task_refs,omitempty"`
	RequiredReviewTaskIDs []string `json:"required_review_task_ids,omitempty"`
	TriggerKind           string   `json:"trigger_kind,omitempty"`
	SchedulePolicy        string   `json:"schedule_policy,omitempty"`
	PermissionRef         string   `json:"permission_ref"`
	SourceKind            string   `json:"source_kind,omitempty"`
	CreatedByRunID        string   `json:"created_by_run_id,omitempty"`
	TraceID               string   `json:"trace_id,omitempty"`
}

type EvidenceGovernance added in v0.2.0

type EvidenceGovernance interface {
	CreateActionRef(context.Context, GovernanceActionInput) (string, error)
	CreateOutcomeRef(context.Context, GovernanceOutcomeInput) (string, error)
}

type Executor added in v0.2.0

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

func NewExecutor added in v0.2.0

func NewExecutor(service *Service, options ExecutorOptions) *Executor

func (*Executor) Start added in v0.2.0

func (executor *Executor) Start(ctx context.Context) error

func (*Executor) Stop added in v0.2.0

func (executor *Executor) Stop(ctx context.Context) error

type ExecutorOptions added in v0.2.0

type ExecutorOptions struct {
	Enabled               bool
	RunnerEnabled         bool
	RunnerExecution       string
	PollInterval          time.Duration
	GlobalWorkerCount     int
	PerProjectWorkerLimit int
	PerAgentWorkerLimit   int
	ProjectIDs            []string
}

type GovernanceActionInput added in v0.2.0

type GovernanceActionInput struct {
	ProjectID    string
	AutomationID string
	RunID        string
	TaskID       string
	ActionKind   string
}

type GovernanceConfidenceInput added in v0.2.0

type GovernanceConfidenceInput struct {
	ProjectID    string
	RunID        string
	TaskID       string
	ClaimRefs    []string
	EvidenceRefs []string
	VerifierRefs []string
	ReviewRefs   []string
	OutcomeRef   string
}

type GovernanceKnowledgeCandidateInput added in v0.2.0

type GovernanceKnowledgeCandidateInput struct {
	ProjectID     string
	RunID         string
	TaskID        string
	ClaimRefs     []string
	EvidenceRefs  []string
	VerifierRefs  []string
	ReviewRefs    []string
	OutcomeRef    string
	ConfidenceRef string
}

type GovernanceOptions added in v0.2.0

type GovernanceOptions struct {
	Evidence   EvidenceGovernance
	Confidence ConfidenceGovernance
	Knowledge  KnowledgeGovernance
}

type GovernanceOutcomeInput added in v0.2.0

type GovernanceOutcomeInput struct {
	ProjectID     string
	AutomationID  string
	RunID         string
	TaskID        string
	AttemptID     string
	Status        string
	DurationMS    int64
	VerifierRefs  []string
	EvidenceRefs  []string
	ClaimRefs     []string
	ReviewRefs    []string
	KnowledgeRefs []string
}

type KnowledgeGovernance added in v0.2.0

type KnowledgeGovernance interface {
	CreateCandidateRef(context.Context, GovernanceKnowledgeCandidateInput) (string, error)
}

type Options

type Options struct {
	Enabled                   bool
	RunnerEnabled             bool
	RequireCodexWhenAvailable bool
	AllowManualRunner         bool
	RunnerExecution           string
	MaxParallelTasks          int
	DefaultMaxRuntime         time.Duration
	CodexBinaryPath           string
	Agents                    []AutomationAgent
	PermissionResolver        PermissionResolver
	Governance                GovernanceOptions
	WorkPlanStatusTrigger     WorkPlanStatusTriggerOptions
}

type PermissionCheckInput added in v0.2.0

type PermissionCheckInput struct {
	ProjectID       string
	AutomationID    string
	AutomationRef   string
	AgentID         string
	PermissionRef   string
	RunnerKind      string
	RunnerExecution string
}

type PermissionResolver added in v0.2.0

type PermissionResolver interface {
	CheckAutomationPermission(context.Context, PermissionCheckInput) (PermissionSnapshotMetadata, error)
}

type PermissionSnapshotMetadata added in v0.2.0

type PermissionSnapshotMetadata struct {
	PermissionRef      string
	AgentID            string
	AllowedRunnerKinds []string
	DeniedCommands     []string
}

type RunFilter

type RunFilter struct {
	ProjectID         string `json:"project_id,omitempty"`
	AutomationID      string `json:"automation_id,omitempty"`
	PlanID            string `json:"plan_id,omitempty"`
	Status            string `json:"status,omitempty"`
	OrchestratorRunID string `json:"orchestrator_run_id,omitempty"`
}

type Service

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

func New

func New(store Store, workTasks WorkTaskAPI, options Options) *Service

func (*Service) CallAutomationTool

func (svc *Service) CallAutomationTool(ctx context.Context, name string, arguments json.RawMessage) (any, error)

func (*Service) ClaimNextRun

func (svc *Service) ClaimNextRun(ctx context.Context, input ClaimNextRunInput) (ClaimedRun, error)

func (*Service) CompleteAttempt

func (svc *Service) CompleteAttempt(ctx context.Context, input CompleteAttemptInput) (AutomationRun, error)

func (*Service) ComputeParallelBatch

func (svc *Service) ComputeParallelBatch(ctx context.Context, input ComputeParallelBatchInput) (AutomationParallelBatch, error)

func (*Service) CreateAutomation

func (svc *Service) CreateAutomation(ctx context.Context, input CreateAutomationInput) (Automation, error)

func (*Service) ExecuteQueuedRun added in v0.2.0

func (svc *Service) ExecuteQueuedRun(ctx context.Context, projectID, runID string) (AutomationRun, error)

func (*Service) GetAutomation

func (svc *Service) GetAutomation(ctx context.Context, projectID, automationID string) (Automation, error)

func (*Service) GetRun

func (svc *Service) GetRun(ctx context.Context, projectID, runID string) (AutomationRun, error)

func (*Service) HandleWorkPlanStatusChanged added in v0.2.1

func (svc *Service) HandleWorkPlanStatusChanged(ctx context.Context, event projectworkplan.WorkPlanStatusChange) error

func (*Service) ListAutomations

func (svc *Service) ListAutomations(ctx context.Context, filter AutomationFilter) ([]Automation, error)

func (*Service) ListRuns

func (svc *Service) ListRuns(ctx context.Context, filter RunFilter) ([]AutomationRun, error)

func (*Service) RunNow

func (svc *Service) RunNow(ctx context.Context, input SubmitRunInput) (AutomationRun, error)

func (*Service) SubmitRun

func (svc *Service) SubmitRun(ctx context.Context, input SubmitRunInput) (AutomationRun, error)

func (*Service) UpdateAutomationStatus added in v0.2.2

func (svc *Service) UpdateAutomationStatus(ctx context.Context, input UpdateAutomationStatusInput) (Automation, error)

type SubmitRunInput

type SubmitRunInput struct {
	ProjectID         string   `json:"project_id,omitempty"`
	AutomationID      string   `json:"automation_id"`
	PlanID            string   `json:"plan_id,omitempty"`
	TaskID            string   `json:"task_id,omitempty"`
	OwnerAgent        string   `json:"owner_agent,omitempty"`
	RunnerKind        string   `json:"runner_kind,omitempty"`
	OrchestratorRunID string   `json:"orchestrator_run_id,omitempty"`
	ParentRunID       string   `json:"parent_run_id,omitempty"`
	EvidenceRefs      []string `json:"evidence_refs,omitempty"`
	VerifierRefs      []string `json:"verifier_result_refs,omitempty"`
	SafeNextAction    string   `json:"safe_next_action,omitempty"`
}

type UpdateAutomationStatusInput added in v0.2.2

type UpdateAutomationStatusInput struct {
	ProjectID    string `json:"project_id,omitempty"`
	AutomationID string `json:"automation_id"`
	Status       string `json:"status"`
	RunID        string `json:"run_id,omitempty"`
	TraceID      string `json:"trace_id,omitempty"`
}

type WorkPlanStatusTriggerOptions added in v0.2.1

type WorkPlanStatusTriggerOptions struct {
	Enabled  bool
	Statuses []string
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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