Versions in this module Expand all Collapse all v0 v0.1.5 Feb 22, 2026 v0.1.1 Feb 22, 2026 v0.1.0 Feb 22, 2026 Changes in this version + const EventConditionalRouted + const EventExecutionCancelled + const EventExecutionCompleted + const EventExecutionFailed + const EventExecutionStarted + const EventRetryAttempted + const EventSagaCompensated + const EventSagaCompensating + const EventStepCompensated + const EventStepCompleted + const EventStepFailed + const EventStepInputRecorded + const EventStepOutputRecorded + const EventStepSkipped + const EventStepStarted + var ErrConflict = errors.New("conflict") + var ErrDuplicate = errors.New("duplicate entry") + var ErrForbidden = errors.New("forbidden") + var ErrKeyExpired = fmt.Errorf("api key expired") + var ErrKeyInactive = fmt.Errorf("api key inactive") + var ErrNotFound = errors.New("not found") + var ValidRoles = map[Role]bool + var ValidWorkflowStatuses = map[WorkflowStatus]bool + type APIKey struct + CompanyID uuid.UUID + CreatedAt time.Time + CreatedBy uuid.UUID + ExpiresAt *time.Time + ID uuid.UUID + IsActive bool + KeyHash string + KeyPrefix string + LastUsedAt *time.Time + Name string + OrgID *uuid.UUID + Permissions []string + ProjectID *uuid.UUID + type APIKeyStore interface + Create func(ctx context.Context, key *APIKey) (rawKey string, err error) + Delete func(ctx context.Context, id uuid.UUID) error + Get func(ctx context.Context, id uuid.UUID) (*APIKey, error) + GetByHash func(ctx context.Context, keyHash string) (*APIKey, error) + List func(ctx context.Context, companyID uuid.UUID) ([]*APIKey, error) + UpdateLastUsed func(ctx context.Context, id uuid.UUID) error + Validate func(ctx context.Context, rawKey string) (*APIKey, error) + type AuditEntry struct + Action string + CreatedAt time.Time + Details json.RawMessage + ID int64 + IPAddress string + ResourceID *uuid.UUID + ResourceType string + UserAgent string + UserID *uuid.UUID + type AuditFilter struct + Action string + Pagination Pagination + ResourceID *uuid.UUID + ResourceType string + Since *time.Time + Until *time.Time + UserID *uuid.UUID + type AuditStore interface + Query func(ctx context.Context, f AuditFilter) ([]*AuditEntry, error) + Record func(ctx context.Context, e *AuditEntry) error + type AuthSessionStoreAdapter struct + func NewAuthSessionStoreAdapter(store SessionStore) *AuthSessionStoreAdapter + func (a *AuthSessionStoreAdapter) Cleanup(ctx context.Context) error + func (a *AuthSessionStoreAdapter) Delete(ctx context.Context, sessionID string) error + func (a *AuthSessionStoreAdapter) Get(ctx context.Context, sessionID string) (*auth.Session, error) + func (a *AuthSessionStoreAdapter) Store(ctx context.Context, session *auth.Session) error + type AuthUserStoreAdapter struct + func NewAuthUserStoreAdapter(store UserStore) *AuthUserStoreAdapter + func (a *AuthUserStoreAdapter) CreateUser(ctx context.Context, user *auth.User) error + func (a *AuthUserStoreAdapter) DeleteUser(ctx context.Context, userID string) error + func (a *AuthUserStoreAdapter) GetUser(ctx context.Context, userID string) (*auth.User, error) + func (a *AuthUserStoreAdapter) GetUserByEmail(ctx context.Context, email string) (*auth.User, error) + func (a *AuthUserStoreAdapter) UpdateUser(ctx context.Context, user *auth.User) error + type BackfillMockDiffHandler struct + func NewBackfillMockDiffHandler(backfillStore BackfillStore, mockStore StepMockStore, diffCalc *DiffCalculator, ...) *BackfillMockDiffHandler + func (h *BackfillMockDiffHandler) RegisterRoutes(mux *http.ServeMux) + type BackfillRequest struct + CompletedAt *time.Time + CreatedAt time.Time + EndTime *time.Time + ErrorMsg string + Failed int64 + ID uuid.UUID + PipelineName string + Processed int64 + SourceQuery string + StartTime *time.Time + Status BackfillStatus + TotalEvents int64 + type BackfillStatus string + const BackfillStatusCancelled + const BackfillStatusCompleted + const BackfillStatusFailed + const BackfillStatusPending + const BackfillStatusRunning + type BackfillStore interface + Cancel func(ctx context.Context, id uuid.UUID) error + Create func(ctx context.Context, req *BackfillRequest) error + Get func(ctx context.Context, id uuid.UUID) (*BackfillRequest, error) + List func(ctx context.Context) ([]*BackfillRequest, error) + UpdateProgress func(ctx context.Context, id uuid.UUID, processed, failed int64) error + UpdateStatus func(ctx context.Context, id uuid.UUID, status BackfillStatus, errMsg string) error + type Company struct + CreatedAt time.Time + ID uuid.UUID + Metadata json.RawMessage + Name string + OwnerID uuid.UUID + Slug string + UpdatedAt time.Time + type CompanyFilter struct + OwnerID *uuid.UUID + Pagination Pagination + Slug string + type CompanyStore interface + Create func(ctx context.Context, c *Company) error + Delete func(ctx context.Context, id uuid.UUID) error + Get func(ctx context.Context, id uuid.UUID) (*Company, error) + GetBySlug func(ctx context.Context, slug string) (*Company, error) + List func(ctx context.Context, f CompanyFilter) ([]*Company, error) + ListForUser func(ctx context.Context, userID uuid.UUID) ([]*Company, error) + Update func(ctx context.Context, c *Company) error + type CrossWorkflowLink struct + Config json.RawMessage + CreatedAt time.Time + CreatedBy uuid.UUID + ID uuid.UUID + LinkType string + SourceWorkflowID uuid.UUID + TargetWorkflowID uuid.UUID + type CrossWorkflowLinkFilter struct + LinkType string + Pagination Pagination + SourceWorkflowID *uuid.UUID + TargetWorkflowID *uuid.UUID + type CrossWorkflowLinkStore interface + Create func(ctx context.Context, l *CrossWorkflowLink) error + Delete func(ctx context.Context, id uuid.UUID) error + Get func(ctx context.Context, id uuid.UUID) (*CrossWorkflowLink, error) + List func(ctx context.Context, f CrossWorkflowLinkFilter) ([]*CrossWorkflowLink, error) + type DLQEntry struct + CreatedAt time.Time + ErrorMessage string + ErrorType string + ID uuid.UUID + MaxRetries int + Metadata map[string]any + OriginalEvent json.RawMessage + PipelineName string + ResolvedAt *time.Time + RetryCount int + Status DLQStatus + StepName string + UpdatedAt time.Time + type DLQFilter struct + ErrorType string + Limit int + Offset int + PipelineName string + Status DLQStatus + StepName string + type DLQHandler struct + func NewDLQHandler(store DLQStore, logger *slog.Logger) *DLQHandler + func (h *DLQHandler) RegisterRoutes(mux *http.ServeMux) + type DLQStatus string + const DLQStatusDiscarded + const DLQStatusPending + const DLQStatusResolved + const DLQStatusRetrying + type DLQStore interface + Add func(ctx context.Context, entry *DLQEntry) error + Count func(ctx context.Context, filter DLQFilter) (int64, error) + Discard func(ctx context.Context, id uuid.UUID) error + Get func(ctx context.Context, id uuid.UUID) (*DLQEntry, error) + List func(ctx context.Context, filter DLQFilter) ([]*DLQEntry, error) + Purge func(ctx context.Context, olderThan time.Duration) (int64, error) + Resolve func(ctx context.Context, id uuid.UUID) error + Retry func(ctx context.Context, id uuid.UUID) error + UpdateStatus func(ctx context.Context, id uuid.UUID, status DLQStatus) error + type DiffCalculator struct + func NewDiffCalculator(eventStore EventStore) *DiffCalculator + func (d *DiffCalculator) Compare(ctx context.Context, execA, execB uuid.UUID) (*ExecutionDiff, error) + type DiffSummary struct + AddedSteps int + DiffSteps int + RemovedSteps int + SameSteps int + TotalSteps int + type EventRecorderAdapter struct + func NewEventRecorderAdapter(store EventStore) *EventRecorderAdapter + func (a *EventRecorderAdapter) RecordEvent(ctx context.Context, executionID string, eventType string, data map[string]any) error + type EventStore interface + Append func(ctx context.Context, executionID uuid.UUID, eventType string, ...) error + GetEvents func(ctx context.Context, executionID uuid.UUID) ([]ExecutionEvent, error) + GetTimeline func(ctx context.Context, executionID uuid.UUID) (*MaterializedExecution, error) + ListExecutions func(ctx context.Context, filter ExecutionEventFilter) ([]MaterializedExecution, error) + type ExecutionDiff struct + ExecutionA uuid.UUID + ExecutionB uuid.UUID + StepDiffs []StepDiff + Summary DiffSummary + type ExecutionEvent struct + CreatedAt time.Time + EventData json.RawMessage + EventType string + ExecutionID uuid.UUID + ID uuid.UUID + SequenceNum int64 + type ExecutionEventFilter struct + Limit int + Offset int + Pipeline string + Since *time.Time + Status string + TenantID string + Until *time.Time + type ExecutionFilter struct + Pagination Pagination + Since *time.Time + Status ExecutionStatus + Until *time.Time + WorkflowID *uuid.UUID + type ExecutionLog struct + CreatedAt time.Time + ExecutionID *uuid.UUID + Fields json.RawMessage + ID int64 + Level LogLevel + Message string + ModuleName string + WorkflowID uuid.UUID + type ExecutionStatus string + const ExecutionStatusCancelled + const ExecutionStatusCompleted + const ExecutionStatusFailed + const ExecutionStatusPending + const ExecutionStatusRunning + type ExecutionStep struct + CompletedAt *time.Time + DurationMs *int64 + ErrorMessage string + ExecutionID uuid.UUID + ID uuid.UUID + InputData json.RawMessage + Metadata json.RawMessage + OutputData json.RawMessage + SequenceNum int + StartedAt *time.Time + Status StepStatus + StepName string + StepType string + type ExecutionStore interface + CountByStatus func(ctx context.Context, workflowID uuid.UUID) (map[ExecutionStatus]int, error) + CreateExecution func(ctx context.Context, e *WorkflowExecution) error + CreateStep func(ctx context.Context, s *ExecutionStep) error + GetExecution func(ctx context.Context, id uuid.UUID) (*WorkflowExecution, error) + ListExecutions func(ctx context.Context, f ExecutionFilter) ([]*WorkflowExecution, error) + ListSteps func(ctx context.Context, executionID uuid.UUID) ([]*ExecutionStep, error) + UpdateExecution func(ctx context.Context, e *WorkflowExecution) error + UpdateStep func(ctx context.Context, s *ExecutionStep) error + type FieldChange struct + Path string + ValueA any + ValueB any + func DiffMaps(a, b map[string]any) []FieldChange + type FileInfo struct + ContentType string + IsDir bool + ModTime time.Time + Name string + Path string + Size int64 + type IAMProviderConfig struct + CompanyID uuid.UUID + Config json.RawMessage + CreatedAt time.Time + Enabled bool + ID uuid.UUID + Name string + ProviderType IAMProviderType + UpdatedAt time.Time + type IAMProviderFilter struct + CompanyID *uuid.UUID + Enabled *bool + Pagination Pagination + ProviderType IAMProviderType + type IAMProviderType string + const IAMProviderAWS + const IAMProviderCustom + const IAMProviderKubernetes + const IAMProviderLDAP + const IAMProviderOIDC + const IAMProviderSAML + type IAMRoleMapping struct + CreatedAt time.Time + ExternalIdentifier string + ID uuid.UUID + ProviderID uuid.UUID + ResourceID uuid.UUID + ResourceType string + Role Role + type IAMRoleMappingFilter struct + ExternalIdentifier string + Pagination Pagination + ProviderID *uuid.UUID + ResourceID *uuid.UUID + ResourceType string + type IAMStore interface + CreateMapping func(ctx context.Context, m *IAMRoleMapping) error + CreateProvider func(ctx context.Context, p *IAMProviderConfig) error + DeleteMapping func(ctx context.Context, id uuid.UUID) error + DeleteProvider func(ctx context.Context, id uuid.UUID) error + GetMapping func(ctx context.Context, id uuid.UUID) (*IAMRoleMapping, error) + GetProvider func(ctx context.Context, id uuid.UUID) (*IAMProviderConfig, error) + ListMappings func(ctx context.Context, f IAMRoleMappingFilter) ([]*IAMRoleMapping, error) + ListProviders func(ctx context.Context, f IAMProviderFilter) ([]*IAMProviderConfig, error) + ResolveRole func(ctx context.Context, providerID uuid.UUID, externalID string, ...) (Role, error) + UpdateProvider func(ctx context.Context, p *IAMProviderConfig) error + type IdempotencyRecord struct + CreatedAt time.Time + ExecutionID uuid.UUID + ExpiresAt time.Time + Key string + Result json.RawMessage + StepName string + type IdempotencyStore interface + Check func(ctx context.Context, key string) (*IdempotencyRecord, error) + Cleanup func(ctx context.Context) (int64, error) + Store func(ctx context.Context, record *IdempotencyRecord) error + type InMemoryAPIKeyStore struct + func NewInMemoryAPIKeyStore() *InMemoryAPIKeyStore + func (s *InMemoryAPIKeyStore) Create(_ context.Context, key *APIKey) (string, error) + func (s *InMemoryAPIKeyStore) Delete(_ context.Context, id uuid.UUID) error + func (s *InMemoryAPIKeyStore) Get(_ context.Context, id uuid.UUID) (*APIKey, error) + func (s *InMemoryAPIKeyStore) GetByHash(_ context.Context, keyHash string) (*APIKey, error) + func (s *InMemoryAPIKeyStore) List(_ context.Context, companyID uuid.UUID) ([]*APIKey, error) + func (s *InMemoryAPIKeyStore) UpdateLastUsed(_ context.Context, id uuid.UUID) error + func (s *InMemoryAPIKeyStore) Validate(_ context.Context, rawKey string) (*APIKey, error) + type InMemoryBackfillStore struct + func NewInMemoryBackfillStore() *InMemoryBackfillStore + func (s *InMemoryBackfillStore) Cancel(_ context.Context, id uuid.UUID) error + func (s *InMemoryBackfillStore) Create(_ context.Context, req *BackfillRequest) error + func (s *InMemoryBackfillStore) Get(_ context.Context, id uuid.UUID) (*BackfillRequest, error) + func (s *InMemoryBackfillStore) List(_ context.Context) ([]*BackfillRequest, error) + func (s *InMemoryBackfillStore) UpdateProgress(_ context.Context, id uuid.UUID, processed, failed int64) error + func (s *InMemoryBackfillStore) UpdateStatus(_ context.Context, id uuid.UUID, status BackfillStatus, errMsg string) error + type InMemoryDLQStore struct + func NewInMemoryDLQStore() *InMemoryDLQStore + func (s *InMemoryDLQStore) Add(_ context.Context, entry *DLQEntry) error + func (s *InMemoryDLQStore) Count(_ context.Context, filter DLQFilter) (int64, error) + func (s *InMemoryDLQStore) Discard(_ context.Context, id uuid.UUID) error + func (s *InMemoryDLQStore) Get(_ context.Context, id uuid.UUID) (*DLQEntry, error) + func (s *InMemoryDLQStore) List(_ context.Context, filter DLQFilter) ([]*DLQEntry, error) + func (s *InMemoryDLQStore) Purge(_ context.Context, olderThan time.Duration) (int64, error) + func (s *InMemoryDLQStore) Resolve(_ context.Context, id uuid.UUID) error + func (s *InMemoryDLQStore) Retry(_ context.Context, id uuid.UUID) error + func (s *InMemoryDLQStore) UpdateStatus(_ context.Context, id uuid.UUID, status DLQStatus) error + type InMemoryEventStore struct + func NewInMemoryEventStore() *InMemoryEventStore + func (s *InMemoryEventStore) Append(_ context.Context, executionID uuid.UUID, eventType string, ...) error + func (s *InMemoryEventStore) GetEvents(_ context.Context, executionID uuid.UUID) ([]ExecutionEvent, error) + func (s *InMemoryEventStore) GetTimeline(_ context.Context, executionID uuid.UUID) (*MaterializedExecution, error) + func (s *InMemoryEventStore) ListExecutions(_ context.Context, filter ExecutionEventFilter) ([]MaterializedExecution, error) + type InMemoryIdempotencyStore struct + func NewInMemoryIdempotencyStore() *InMemoryIdempotencyStore + func (s *InMemoryIdempotencyStore) Check(_ context.Context, key string) (*IdempotencyRecord, error) + func (s *InMemoryIdempotencyStore) Cleanup(_ context.Context) (int64, error) + func (s *InMemoryIdempotencyStore) Store(_ context.Context, record *IdempotencyRecord) error + type InMemoryStepMockStore struct + func NewInMemoryStepMockStore() *InMemoryStepMockStore + func (s *InMemoryStepMockStore) ClearAll(_ context.Context) error + func (s *InMemoryStepMockStore) Get(_ context.Context, pipeline, step string) (*StepMock, error) + func (s *InMemoryStepMockStore) IncrementHitCount(_ context.Context, pipeline, step string) error + func (s *InMemoryStepMockStore) List(_ context.Context, pipeline string) ([]*StepMock, error) + func (s *InMemoryStepMockStore) Remove(_ context.Context, pipeline, step string) error + func (s *InMemoryStepMockStore) Set(_ context.Context, mock *StepMock) error + type LocalStorage struct + func NewLocalStorage(root string) (*LocalStorage, error) + func (l *LocalStorage) Delete(_ context.Context, path string) error + func (l *LocalStorage) Get(_ context.Context, path string) (io.ReadCloser, error) + func (l *LocalStorage) List(_ context.Context, prefix string) ([]FileInfo, error) + func (l *LocalStorage) MkdirAll(_ context.Context, path string) error + func (l *LocalStorage) Put(_ context.Context, path string, reader io.Reader) error + func (l *LocalStorage) Root() string + func (l *LocalStorage) Stat(_ context.Context, path string) (FileInfo, error) + type LogFilter struct + ExecutionID *uuid.UUID + Level LogLevel + ModuleName string + Pagination Pagination + Since *time.Time + Until *time.Time + WorkflowID *uuid.UUID + type LogLevel string + const LogLevelDebug + const LogLevelError + const LogLevelFatal + const LogLevelInfo + const LogLevelWarn + type LogStore interface + Append func(ctx context.Context, l *ExecutionLog) error + CountByLevel func(ctx context.Context, workflowID uuid.UUID) (map[LogLevel]int, error) + Query func(ctx context.Context, f LogFilter) ([]*ExecutionLog, error) + type MaterializedExecution struct + CompletedAt *time.Time + Error string + EventCount int + ExecutionID uuid.UUID + Pipeline string + StartedAt *time.Time + Status string + Steps []MaterializedStep + TenantID string + type MaterializedStep struct + CompletedAt *time.Time + Error string + InputData json.RawMessage + OutputData json.RawMessage + Retries int + Route string + StartedAt *time.Time + Status string + StepName string + StepType string + type Membership struct + CompanyID uuid.UUID + CreatedAt time.Time + ID uuid.UUID + ProjectID *uuid.UUID + Role Role + UpdatedAt time.Time + UserID uuid.UUID + type MembershipFilter struct + CompanyID *uuid.UUID + Pagination Pagination + ProjectID *uuid.UUID + Role Role + UserID *uuid.UUID + type MembershipStore interface + Create func(ctx context.Context, m *Membership) error + Delete func(ctx context.Context, id uuid.UUID) error + Get func(ctx context.Context, id uuid.UUID) (*Membership, error) + GetEffectiveRole func(ctx context.Context, userID, companyID uuid.UUID, projectID *uuid.UUID) (Role, error) + List func(ctx context.Context, f MembershipFilter) ([]*Membership, error) + Update func(ctx context.Context, m *Membership) error + type Migrator struct + func NewMigrator(pool *pgxpool.Pool) *Migrator + func (m *Migrator) Migrate(ctx context.Context) error + type MockAuditStore struct + func NewMockAuditStore() *MockAuditStore + func (s *MockAuditStore) Query(_ context.Context, f AuditFilter) ([]*AuditEntry, error) + func (s *MockAuditStore) Record(_ context.Context, e *AuditEntry) error + type MockCompanyStore struct + func NewMockCompanyStore() *MockCompanyStore + func (s *MockCompanyStore) Create(_ context.Context, c *Company) error + func (s *MockCompanyStore) Delete(_ context.Context, id uuid.UUID) error + func (s *MockCompanyStore) Get(_ context.Context, id uuid.UUID) (*Company, error) + func (s *MockCompanyStore) GetBySlug(_ context.Context, slug string) (*Company, error) + func (s *MockCompanyStore) List(_ context.Context, f CompanyFilter) ([]*Company, error) + func (s *MockCompanyStore) ListForUser(_ context.Context, userID uuid.UUID) ([]*Company, error) + func (s *MockCompanyStore) SetMembershipStore(ms *MockMembershipStore) + func (s *MockCompanyStore) Update(_ context.Context, c *Company) error + type MockCrossWorkflowLinkStore struct + func NewMockCrossWorkflowLinkStore() *MockCrossWorkflowLinkStore + func (s *MockCrossWorkflowLinkStore) Create(_ context.Context, l *CrossWorkflowLink) error + func (s *MockCrossWorkflowLinkStore) Delete(_ context.Context, id uuid.UUID) error + func (s *MockCrossWorkflowLinkStore) Get(_ context.Context, id uuid.UUID) (*CrossWorkflowLink, error) + func (s *MockCrossWorkflowLinkStore) List(_ context.Context, f CrossWorkflowLinkFilter) ([]*CrossWorkflowLink, error) + type MockExecutionStore struct + func NewMockExecutionStore() *MockExecutionStore + func (s *MockExecutionStore) CountByStatus(_ context.Context, workflowID uuid.UUID) (map[ExecutionStatus]int, error) + func (s *MockExecutionStore) CreateExecution(_ context.Context, e *WorkflowExecution) error + func (s *MockExecutionStore) CreateStep(_ context.Context, step *ExecutionStep) error + func (s *MockExecutionStore) GetExecution(_ context.Context, id uuid.UUID) (*WorkflowExecution, error) + func (s *MockExecutionStore) ListExecutions(_ context.Context, f ExecutionFilter) ([]*WorkflowExecution, error) + func (s *MockExecutionStore) ListSteps(_ context.Context, executionID uuid.UUID) ([]*ExecutionStep, error) + func (s *MockExecutionStore) UpdateExecution(_ context.Context, e *WorkflowExecution) error + func (s *MockExecutionStore) UpdateStep(_ context.Context, step *ExecutionStep) error + type MockIAMStore struct + func NewMockIAMStore() *MockIAMStore + func (s *MockIAMStore) CreateMapping(_ context.Context, m *IAMRoleMapping) error + func (s *MockIAMStore) CreateProvider(_ context.Context, p *IAMProviderConfig) error + func (s *MockIAMStore) DeleteMapping(_ context.Context, id uuid.UUID) error + func (s *MockIAMStore) DeleteProvider(_ context.Context, id uuid.UUID) error + func (s *MockIAMStore) GetMapping(_ context.Context, id uuid.UUID) (*IAMRoleMapping, error) + func (s *MockIAMStore) GetProvider(_ context.Context, id uuid.UUID) (*IAMProviderConfig, error) + func (s *MockIAMStore) ListMappings(_ context.Context, f IAMRoleMappingFilter) ([]*IAMRoleMapping, error) + func (s *MockIAMStore) ListProviders(_ context.Context, f IAMProviderFilter) ([]*IAMProviderConfig, error) + func (s *MockIAMStore) ResolveRole(_ context.Context, providerID uuid.UUID, externalID string, ...) (Role, error) + func (s *MockIAMStore) UpdateProvider(_ context.Context, p *IAMProviderConfig) error + type MockLogStore struct + func NewMockLogStore() *MockLogStore + func (s *MockLogStore) Append(_ context.Context, l *ExecutionLog) error + func (s *MockLogStore) CountByLevel(_ context.Context, workflowID uuid.UUID) (map[LogLevel]int, error) + func (s *MockLogStore) Query(_ context.Context, f LogFilter) ([]*ExecutionLog, error) + type MockMembershipStore struct + func NewMockMembershipStore() *MockMembershipStore + func (s *MockMembershipStore) Create(_ context.Context, m *Membership) error + func (s *MockMembershipStore) Delete(_ context.Context, id uuid.UUID) error + func (s *MockMembershipStore) Get(_ context.Context, id uuid.UUID) (*Membership, error) + func (s *MockMembershipStore) GetEffectiveRole(_ context.Context, userID, companyID uuid.UUID, projectID *uuid.UUID) (Role, error) + func (s *MockMembershipStore) List(_ context.Context, f MembershipFilter) ([]*Membership, error) + func (s *MockMembershipStore) Update(_ context.Context, m *Membership) error + type MockProjectStore struct + func NewMockProjectStore() *MockProjectStore + func (s *MockProjectStore) Create(_ context.Context, p *Project) error + func (s *MockProjectStore) Delete(_ context.Context, id uuid.UUID) error + func (s *MockProjectStore) Get(_ context.Context, id uuid.UUID) (*Project, error) + func (s *MockProjectStore) GetBySlug(_ context.Context, companyID uuid.UUID, slug string) (*Project, error) + func (s *MockProjectStore) List(_ context.Context, f ProjectFilter) ([]*Project, error) + func (s *MockProjectStore) ListForUser(_ context.Context, userID uuid.UUID) ([]*Project, error) + func (s *MockProjectStore) SetMembershipStore(ms *MockMembershipStore) + func (s *MockProjectStore) Update(_ context.Context, p *Project) error + type MockSessionStore struct + func NewMockSessionStore() *MockSessionStore + func (s *MockSessionStore) Create(_ context.Context, sess *Session) error + func (s *MockSessionStore) Delete(_ context.Context, id uuid.UUID) error + func (s *MockSessionStore) DeleteExpired(_ context.Context) (int64, error) + func (s *MockSessionStore) Get(_ context.Context, id uuid.UUID) (*Session, error) + func (s *MockSessionStore) GetByToken(_ context.Context, token string) (*Session, error) + func (s *MockSessionStore) List(_ context.Context, f SessionFilter) ([]*Session, error) + func (s *MockSessionStore) Update(_ context.Context, sess *Session) error + type MockUserStore struct + func NewMockUserStore() *MockUserStore + func (s *MockUserStore) Create(_ context.Context, u *User) error + func (s *MockUserStore) Delete(_ context.Context, id uuid.UUID) error + func (s *MockUserStore) Get(_ context.Context, id uuid.UUID) (*User, error) + func (s *MockUserStore) GetByEmail(_ context.Context, email string) (*User, error) + func (s *MockUserStore) GetByOAuth(_ context.Context, provider OAuthProvider, oauthID string) (*User, error) + func (s *MockUserStore) List(_ context.Context, f UserFilter) ([]*User, error) + func (s *MockUserStore) Update(_ context.Context, u *User) error + type MockWorkflowStore struct + func NewMockWorkflowStore() *MockWorkflowStore + func (s *MockWorkflowStore) Create(_ context.Context, w *WorkflowRecord) error + func (s *MockWorkflowStore) Delete(_ context.Context, id uuid.UUID) error + func (s *MockWorkflowStore) Get(_ context.Context, id uuid.UUID) (*WorkflowRecord, error) + func (s *MockWorkflowStore) GetBySlug(_ context.Context, projectID uuid.UUID, slug string) (*WorkflowRecord, error) + func (s *MockWorkflowStore) GetVersion(_ context.Context, id uuid.UUID, version int) (*WorkflowRecord, error) + func (s *MockWorkflowStore) List(_ context.Context, f WorkflowFilter) ([]*WorkflowRecord, error) + func (s *MockWorkflowStore) ListVersions(_ context.Context, id uuid.UUID) ([]*WorkflowRecord, error) + func (s *MockWorkflowStore) Update(_ context.Context, w *WorkflowRecord) error + type OAuthProvider string + const OAuthProviderGitHub + const OAuthProviderGoogle + type Organization = Company + type OrganizationStore = CompanyStore + type PGAuditStore struct + func (s *PGAuditStore) Query(ctx context.Context, f AuditFilter) ([]*AuditEntry, error) + func (s *PGAuditStore) Record(ctx context.Context, e *AuditEntry) error + type PGCompanyStore struct + func (s *PGCompanyStore) Create(ctx context.Context, c *Company) error + func (s *PGCompanyStore) Delete(ctx context.Context, id uuid.UUID) error + func (s *PGCompanyStore) Get(ctx context.Context, id uuid.UUID) (*Company, error) + func (s *PGCompanyStore) GetBySlug(ctx context.Context, slug string) (*Company, error) + func (s *PGCompanyStore) List(ctx context.Context, f CompanyFilter) ([]*Company, error) + func (s *PGCompanyStore) ListForUser(ctx context.Context, userID uuid.UUID) ([]*Company, error) + func (s *PGCompanyStore) Update(ctx context.Context, c *Company) error + type PGConfig struct + MaxConnIdleTime string + MaxConns int32 + MinConns int32 + URL string + type PGCrossWorkflowLinkStore struct + func (s *PGCrossWorkflowLinkStore) Create(ctx context.Context, l *CrossWorkflowLink) error + func (s *PGCrossWorkflowLinkStore) Delete(ctx context.Context, id uuid.UUID) error + func (s *PGCrossWorkflowLinkStore) Get(ctx context.Context, id uuid.UUID) (*CrossWorkflowLink, error) + func (s *PGCrossWorkflowLinkStore) List(ctx context.Context, f CrossWorkflowLinkFilter) ([]*CrossWorkflowLink, error) + type PGExecutionStore struct + func (s *PGExecutionStore) CountByStatus(ctx context.Context, workflowID uuid.UUID) (map[ExecutionStatus]int, error) + func (s *PGExecutionStore) CreateExecution(ctx context.Context, e *WorkflowExecution) error + func (s *PGExecutionStore) CreateStep(ctx context.Context, step *ExecutionStep) error + func (s *PGExecutionStore) GetExecution(ctx context.Context, id uuid.UUID) (*WorkflowExecution, error) + func (s *PGExecutionStore) ListExecutions(ctx context.Context, f ExecutionFilter) ([]*WorkflowExecution, error) + func (s *PGExecutionStore) ListSteps(ctx context.Context, executionID uuid.UUID) ([]*ExecutionStep, error) + func (s *PGExecutionStore) UpdateExecution(ctx context.Context, e *WorkflowExecution) error + func (s *PGExecutionStore) UpdateStep(ctx context.Context, step *ExecutionStep) error + type PGIAMStore struct + func (s *PGIAMStore) CreateMapping(ctx context.Context, m *IAMRoleMapping) error + func (s *PGIAMStore) CreateProvider(ctx context.Context, p *IAMProviderConfig) error + func (s *PGIAMStore) DeleteMapping(ctx context.Context, id uuid.UUID) error + func (s *PGIAMStore) DeleteProvider(ctx context.Context, id uuid.UUID) error + func (s *PGIAMStore) GetMapping(ctx context.Context, id uuid.UUID) (*IAMRoleMapping, error) + func (s *PGIAMStore) GetProvider(ctx context.Context, id uuid.UUID) (*IAMProviderConfig, error) + func (s *PGIAMStore) ListMappings(ctx context.Context, f IAMRoleMappingFilter) ([]*IAMRoleMapping, error) + func (s *PGIAMStore) ListProviders(ctx context.Context, f IAMProviderFilter) ([]*IAMProviderConfig, error) + func (s *PGIAMStore) ResolveRole(ctx context.Context, providerID uuid.UUID, externalID string, ...) (Role, error) + func (s *PGIAMStore) UpdateProvider(ctx context.Context, p *IAMProviderConfig) error + type PGLogStore struct + func (s *PGLogStore) Append(ctx context.Context, l *ExecutionLog) error + func (s *PGLogStore) CountByLevel(ctx context.Context, workflowID uuid.UUID) (map[LogLevel]int, error) + func (s *PGLogStore) Query(ctx context.Context, f LogFilter) ([]*ExecutionLog, error) + type PGMembershipStore struct + func (s *PGMembershipStore) Create(ctx context.Context, m *Membership) error + func (s *PGMembershipStore) Delete(ctx context.Context, id uuid.UUID) error + func (s *PGMembershipStore) Get(ctx context.Context, id uuid.UUID) (*Membership, error) + func (s *PGMembershipStore) GetEffectiveRole(ctx context.Context, userID, companyID uuid.UUID, projectID *uuid.UUID) (Role, error) + func (s *PGMembershipStore) List(ctx context.Context, f MembershipFilter) ([]*Membership, error) + func (s *PGMembershipStore) Update(ctx context.Context, m *Membership) error + type PGProjectStore struct + func (s *PGProjectStore) Create(ctx context.Context, p *Project) error + func (s *PGProjectStore) Delete(ctx context.Context, id uuid.UUID) error + func (s *PGProjectStore) Get(ctx context.Context, id uuid.UUID) (*Project, error) + func (s *PGProjectStore) GetBySlug(ctx context.Context, companyID uuid.UUID, slug string) (*Project, error) + func (s *PGProjectStore) List(ctx context.Context, f ProjectFilter) ([]*Project, error) + func (s *PGProjectStore) ListForUser(ctx context.Context, userID uuid.UUID) ([]*Project, error) + func (s *PGProjectStore) Update(ctx context.Context, p *Project) error + type PGSessionStore struct + func (s *PGSessionStore) Create(ctx context.Context, sess *Session) error + func (s *PGSessionStore) Delete(ctx context.Context, id uuid.UUID) error + func (s *PGSessionStore) DeleteExpired(ctx context.Context) (int64, error) + func (s *PGSessionStore) Get(ctx context.Context, id uuid.UUID) (*Session, error) + func (s *PGSessionStore) GetByToken(ctx context.Context, token string) (*Session, error) + func (s *PGSessionStore) List(ctx context.Context, f SessionFilter) ([]*Session, error) + func (s *PGSessionStore) Update(ctx context.Context, sess *Session) error + type PGStore struct + func NewPGStore(ctx context.Context, cfg PGConfig) (*PGStore, error) + func (s *PGStore) Audit() AuditStore + func (s *PGStore) Close() + func (s *PGStore) Companies() CompanyStore + func (s *PGStore) CrossWorkflowLinks() CrossWorkflowLinkStore + func (s *PGStore) Executions() ExecutionStore + func (s *PGStore) IAM() IAMStore + func (s *PGStore) Logs() LogStore + func (s *PGStore) Memberships() MembershipStore + func (s *PGStore) Pool() *pgxpool.Pool + func (s *PGStore) Projects() ProjectStore + func (s *PGStore) Sessions() SessionStore + func (s *PGStore) Users() UserStore + func (s *PGStore) Workflows() WorkflowStore + type PGUserStore struct + func (s *PGUserStore) Create(ctx context.Context, u *User) error + func (s *PGUserStore) Delete(ctx context.Context, id uuid.UUID) error + func (s *PGUserStore) Get(ctx context.Context, id uuid.UUID) (*User, error) + func (s *PGUserStore) GetByEmail(ctx context.Context, email string) (*User, error) + func (s *PGUserStore) GetByOAuth(ctx context.Context, provider OAuthProvider, oauthID string) (*User, error) + func (s *PGUserStore) List(ctx context.Context, f UserFilter) ([]*User, error) + func (s *PGUserStore) Update(ctx context.Context, u *User) error + type PGWorkflowStore struct + func (s *PGWorkflowStore) Create(ctx context.Context, w *WorkflowRecord) error + func (s *PGWorkflowStore) Delete(ctx context.Context, id uuid.UUID) error + func (s *PGWorkflowStore) Get(ctx context.Context, id uuid.UUID) (*WorkflowRecord, error) + func (s *PGWorkflowStore) GetBySlug(ctx context.Context, projectID uuid.UUID, slug string) (*WorkflowRecord, error) + func (s *PGWorkflowStore) GetVersion(ctx context.Context, id uuid.UUID, version int) (*WorkflowRecord, error) + func (s *PGWorkflowStore) List(ctx context.Context, f WorkflowFilter) ([]*WorkflowRecord, error) + func (s *PGWorkflowStore) ListVersions(ctx context.Context, id uuid.UUID) ([]*WorkflowRecord, error) + func (s *PGWorkflowStore) Update(ctx context.Context, w *WorkflowRecord) error + type Pagination struct + Limit int + Offset int + func DefaultPagination() Pagination + type Project struct + CompanyID uuid.UUID + CreatedAt time.Time + Description string + ID uuid.UUID + Metadata json.RawMessage + Name string + Slug string + UpdatedAt time.Time + type ProjectFilter struct + CompanyID *uuid.UUID + Pagination Pagination + Slug string + type ProjectStore interface + Create func(ctx context.Context, p *Project) error + Delete func(ctx context.Context, id uuid.UUID) error + Get func(ctx context.Context, id uuid.UUID) (*Project, error) + GetBySlug func(ctx context.Context, companyID uuid.UUID, slug string) (*Project, error) + List func(ctx context.Context, f ProjectFilter) ([]*Project, error) + ListForUser func(ctx context.Context, userID uuid.UUID) ([]*Project, error) + Update func(ctx context.Context, p *Project) error + type ReplayHandler struct + ReplayFunc func(original *MaterializedExecution, mode string, modifications map[string]any) (uuid.UUID, error) + func NewReplayHandler(store EventStore, logger *slog.Logger) *ReplayHandler + func (h *ReplayHandler) RegisterRoutes(mux *http.ServeMux) + type ReplayRequest struct + Mode string + Modifications map[string]any + type ReplayResult struct + Mode string + NewExecutionID uuid.UUID + OriginalExecutionID uuid.UUID + Status string + Type string + type Role string + const RoleAdmin + const RoleEditor + const RoleOwner + const RoleViewer + type SQLiteAPIKeyStore struct + func NewSQLiteAPIKeyStore(dbPath string) (*SQLiteAPIKeyStore, error) + func NewSQLiteAPIKeyStoreFromDB(db *sql.DB) (*SQLiteAPIKeyStore, error) + func (s *SQLiteAPIKeyStore) Close() error + func (s *SQLiteAPIKeyStore) Create(ctx context.Context, key *APIKey) (string, error) + func (s *SQLiteAPIKeyStore) Delete(ctx context.Context, id uuid.UUID) error + func (s *SQLiteAPIKeyStore) Get(ctx context.Context, id uuid.UUID) (*APIKey, error) + func (s *SQLiteAPIKeyStore) GetByHash(ctx context.Context, keyHash string) (*APIKey, error) + func (s *SQLiteAPIKeyStore) List(ctx context.Context, companyID uuid.UUID) ([]*APIKey, error) + func (s *SQLiteAPIKeyStore) UpdateLastUsed(ctx context.Context, id uuid.UUID) error + func (s *SQLiteAPIKeyStore) Validate(ctx context.Context, rawKey string) (*APIKey, error) + type SQLiteDLQStore struct + func NewSQLiteDLQStore(dbPath string) (*SQLiteDLQStore, error) + func NewSQLiteDLQStoreFromDB(db *sql.DB) (*SQLiteDLQStore, error) + func (s *SQLiteDLQStore) Add(ctx context.Context, entry *DLQEntry) error + func (s *SQLiteDLQStore) Close() error + func (s *SQLiteDLQStore) Count(ctx context.Context, filter DLQFilter) (int64, error) + func (s *SQLiteDLQStore) Discard(ctx context.Context, id uuid.UUID) error + func (s *SQLiteDLQStore) Get(ctx context.Context, id uuid.UUID) (*DLQEntry, error) + func (s *SQLiteDLQStore) List(ctx context.Context, filter DLQFilter) ([]*DLQEntry, error) + func (s *SQLiteDLQStore) Purge(ctx context.Context, olderThan time.Duration) (int64, error) + func (s *SQLiteDLQStore) Resolve(ctx context.Context, id uuid.UUID) error + func (s *SQLiteDLQStore) Retry(ctx context.Context, id uuid.UUID) error + func (s *SQLiteDLQStore) UpdateStatus(ctx context.Context, id uuid.UUID, status DLQStatus) error + type SQLiteEventStore struct + func NewSQLiteEventStore(dbPath string) (*SQLiteEventStore, error) + func NewSQLiteEventStoreFromDB(db *sql.DB) (*SQLiteEventStore, error) + func (s *SQLiteEventStore) Append(ctx context.Context, executionID uuid.UUID, eventType string, ...) error + func (s *SQLiteEventStore) Close() error + func (s *SQLiteEventStore) GetEvents(ctx context.Context, executionID uuid.UUID) ([]ExecutionEvent, error) + func (s *SQLiteEventStore) GetTimeline(ctx context.Context, executionID uuid.UUID) (*MaterializedExecution, error) + func (s *SQLiteEventStore) ListExecutions(ctx context.Context, filter ExecutionEventFilter) ([]MaterializedExecution, error) + type SQLiteIdempotencyStore struct + func NewSQLiteIdempotencyStore(db *sql.DB) (*SQLiteIdempotencyStore, error) + func (s *SQLiteIdempotencyStore) Check(ctx context.Context, key string) (*IdempotencyRecord, error) + func (s *SQLiteIdempotencyStore) Cleanup(ctx context.Context) (int64, error) + func (s *SQLiteIdempotencyStore) Store(ctx context.Context, record *IdempotencyRecord) error + type Session struct + Active bool + CreatedAt time.Time + ExpiresAt time.Time + ID uuid.UUID + IPAddress string + Metadata json.RawMessage + Token string + UserAgent string + UserID uuid.UUID + type SessionFilter struct + Active *bool + Pagination Pagination + UserID *uuid.UUID + type SessionStore interface + Create func(ctx context.Context, s *Session) error + Delete func(ctx context.Context, id uuid.UUID) error + DeleteExpired func(ctx context.Context) (int64, error) + Get func(ctx context.Context, id uuid.UUID) (*Session, error) + GetByToken func(ctx context.Context, token string) (*Session, error) + List func(ctx context.Context, f SessionFilter) ([]*Session, error) + Update func(ctx context.Context, s *Session) error + type StepDiff struct + Changes []FieldChange + DurationA time.Duration + DurationB time.Duration + OutputA map[string]any + OutputB map[string]any + Status string + StepName string + type StepMock struct + CreatedAt time.Time + Delay time.Duration + Enabled bool + ErrorResponse string + HitCount int64 + ID uuid.UUID + PipelineName string + Response map[string]any + StepName string + type StepMockStore interface + ClearAll func(ctx context.Context) error + Get func(ctx context.Context, pipeline, step string) (*StepMock, error) + IncrementHitCount func(ctx context.Context, pipeline, step string) error + List func(ctx context.Context, pipeline string) ([]*StepMock, error) + Remove func(ctx context.Context, pipeline, step string) error + Set func(ctx context.Context, mock *StepMock) error + type StepStatus string + const StepStatusCompleted + const StepStatusFailed + const StepStatusPending + const StepStatusRunning + const StepStatusSkipped + type StorageProvider interface + Delete func(ctx context.Context, path string) error + Get func(ctx context.Context, path string) (io.ReadCloser, error) + List func(ctx context.Context, prefix string) ([]FileInfo, error) + MkdirAll func(ctx context.Context, path string) error + Put func(ctx context.Context, path string, reader io.Reader) error + Stat func(ctx context.Context, path string) (FileInfo, error) + type TimelineHandler struct + func NewTimelineHandler(store EventStore, logger *slog.Logger) *TimelineHandler + func (h *TimelineHandler) RegisterRoutes(mux *http.ServeMux) + type User struct + Active bool + AvatarURL string + CreatedAt time.Time + DisplayName string + Email string + ID uuid.UUID + LastLoginAt *time.Time + Metadata json.RawMessage + OAuthID string + OAuthProvider OAuthProvider + PasswordHash string + UpdatedAt time.Time + type UserFilter struct + Active *bool + Email string + OAuthProvider OAuthProvider + Pagination Pagination + type UserStore interface + Create func(ctx context.Context, u *User) error + Delete func(ctx context.Context, id uuid.UUID) error + Get func(ctx context.Context, id uuid.UUID) (*User, error) + GetByEmail func(ctx context.Context, email string) (*User, error) + GetByOAuth func(ctx context.Context, provider OAuthProvider, oauthID string) (*User, error) + List func(ctx context.Context, f UserFilter) ([]*User, error) + Update func(ctx context.Context, u *User) error + type WorkflowExecution struct + CompletedAt *time.Time + DurationMs *int64 + ErrorMessage string + ErrorStack string + ID uuid.UUID + Metadata json.RawMessage + OutputData json.RawMessage + StartedAt time.Time + Status ExecutionStatus + TriggerData json.RawMessage + TriggerType string + WorkflowID uuid.UUID + type WorkflowFilter struct + Pagination Pagination + ProjectID *uuid.UUID + Slug string + Status WorkflowStatus + type WorkflowRecord struct + ConfigYAML string + CreatedAt time.Time + CreatedBy uuid.UUID + Description string + ID uuid.UUID + Name string + ProjectID uuid.UUID + Slug string + Status WorkflowStatus + UpdatedAt time.Time + UpdatedBy uuid.UUID + Version int + type WorkflowStatus string + const WorkflowStatusActive + const WorkflowStatusDraft + const WorkflowStatusError + const WorkflowStatusStopped + type WorkflowStore interface + Create func(ctx context.Context, w *WorkflowRecord) error + Delete func(ctx context.Context, id uuid.UUID) error + Get func(ctx context.Context, id uuid.UUID) (*WorkflowRecord, error) + GetBySlug func(ctx context.Context, projectID uuid.UUID, slug string) (*WorkflowRecord, error) + GetVersion func(ctx context.Context, id uuid.UUID, version int) (*WorkflowRecord, error) + List func(ctx context.Context, f WorkflowFilter) ([]*WorkflowRecord, error) + ListVersions func(ctx context.Context, id uuid.UUID) ([]*WorkflowRecord, error) + Update func(ctx context.Context, w *WorkflowRecord) error + type WorkspaceManager struct + func NewWorkspaceManager(dataDir string) *WorkspaceManager + func (wm *WorkspaceManager) StorageForProject(projectID string) (*LocalStorage, error) + func (wm *WorkspaceManager) WorkspacePath(projectID string) string