// Code generated by sqlc. DO NOT EDIT.
// versions:
//   sqlc v1.31.1

package changerequestsqlc

import (
	"net/netip"

	"github.com/jackc/pgx/v5/pgtype"
	"github.com/pgvector/pgvector-go"
)

type AcpAgentKind struct {
	ID                  pgtype.UUID        `json:"id"`
	Name                string             `json:"name"`
	DisplayName         string             `json:"display_name"`
	Description         string             `json:"description"`
	BinaryPath          string             `json:"binary_path"`
	Args                []string           `json:"args"`
	EncryptedEnv        []byte             `json:"encrypted_env"`
	Enabled             bool               `json:"enabled"`
	CreatedBy           pgtype.UUID        `json:"created_by"`
	CreatedAt           pgtype.Timestamptz `json:"created_at"`
	UpdatedAt           pgtype.Timestamptz `json:"updated_at"`
	ToolAllowlist       []string           `json:"tool_allowlist"`
	ClientType          string             `json:"client_type"`
	EncryptedMcpServers []byte             `json:"encrypted_mcp_servers"`
	ModelID             pgtype.UUID        `json:"model_id"`
	MaxCostUsd          pgtype.Numeric     `json:"max_cost_usd"`
	MaxTokens           *int64             `json:"max_tokens"`
	MaxWallClockSeconds *int32             `json:"max_wall_clock_seconds"`
	KeyVersion          int16              `json:"key_version"`
}

type AcpAgentKindConfigFile struct {
	ID               pgtype.UUID        `json:"id"`
	AgentKindID      pgtype.UUID        `json:"agent_kind_id"`
	RelPath          string             `json:"rel_path"`
	EncryptedContent []byte             `json:"encrypted_content"`
	UpdatedBy        pgtype.UUID        `json:"updated_by"`
	CreatedAt        pgtype.Timestamptz `json:"created_at"`
	UpdatedAt        pgtype.Timestamptz `json:"updated_at"`
	KeyVersion       int16              `json:"key_version"`
}

type AcpEvent struct {
	ID          int64              `json:"id"`
	SessionID   pgtype.UUID        `json:"session_id"`
	Direction   string             `json:"direction"`
	RpcKind     string             `json:"rpc_kind"`
	Method      *string            `json:"method"`
	Payload     []byte             `json:"payload"`
	PayloadSize int32              `json:"payload_size"`
	Truncated   bool               `json:"truncated"`
	CreatedAt   pgtype.Timestamptz `json:"created_at"`
}

type AcpPermissionRequest struct {
	ID             pgtype.UUID        `json:"id"`
	SessionID      pgtype.UUID        `json:"session_id"`
	AgentRequestID string             `json:"agent_request_id"`
	ToolName       string             `json:"tool_name"`
	ToolCall       []byte             `json:"tool_call"`
	Options        []byte             `json:"options"`
	Status         string             `json:"status"`
	ChosenOptionID *string            `json:"chosen_option_id"`
	DecidedBy      pgtype.UUID        `json:"decided_by"`
	DecidedAt      pgtype.Timestamptz `json:"decided_at"`
	CreatedAt      pgtype.Timestamptz `json:"created_at"`
}

type AcpSession struct {
	ID                        pgtype.UUID        `json:"id"`
	WorkspaceID               pgtype.UUID        `json:"workspace_id"`
	ProjectID                 pgtype.UUID        `json:"project_id"`
	AgentKindID               pgtype.UUID        `json:"agent_kind_id"`
	UserID                    pgtype.UUID        `json:"user_id"`
	IssueID                   pgtype.UUID        `json:"issue_id"`
	RequirementID             pgtype.UUID        `json:"requirement_id"`
	AgentSessionID            *string            `json:"agent_session_id"`
	Branch                    string             `json:"branch"`
	CwdPath                   string             `json:"cwd_path"`
	IsMainWorktree            bool               `json:"is_main_worktree"`
	Status                    string             `json:"status"`
	Pid                       *int32             `json:"pid"`
	ExitCode                  *int32             `json:"exit_code"`
	LastError                 *string            `json:"last_error"`
	StartedAt                 pgtype.Timestamptz `json:"started_at"`
	EndedAt                   pgtype.Timestamptz `json:"ended_at"`
	LastStopReason            *string            `json:"last_stop_reason"`
	OrchestratorStepID        pgtype.UUID        `json:"orchestrator_step_id"`
	PromptTokens              int64              `json:"prompt_tokens"`
	CompletionTokens          int64              `json:"completion_tokens"`
	ThinkingTokens            int64              `json:"thinking_tokens"`
	TotalCostUsd              pgtype.Numeric     `json:"total_cost_usd"`
	LastActivityAt            pgtype.Timestamptz `json:"last_activity_at"`
	BudgetMaxCostUsd          pgtype.Numeric     `json:"budget_max_cost_usd"`
	BudgetMaxTokens           *int64             `json:"budget_max_tokens"`
	BudgetMaxWallClockSeconds *int32             `json:"budget_max_wall_clock_seconds"`
	TerminatedReason          *string            `json:"terminated_reason"`
	SandboxMode               *string            `json:"sandbox_mode"`
	CostUsd                   pgtype.Numeric     `json:"cost_usd"`
	TokensTotal               int64              `json:"tokens_total"`
}

type AcpSessionUsage struct {
	ID               int64              `json:"id"`
	SessionID        pgtype.UUID        `json:"session_id"`
	UserID           pgtype.UUID        `json:"user_id"`
	ProjectID        pgtype.UUID        `json:"project_id"`
	AgentKindID      pgtype.UUID        `json:"agent_kind_id"`
	ModelID          pgtype.UUID        `json:"model_id"`
	PromptTokens     int64              `json:"prompt_tokens"`
	CompletionTokens int64              `json:"completion_tokens"`
	ThinkingTokens   int64              `json:"thinking_tokens"`
	CostUsd          pgtype.Numeric     `json:"cost_usd"`
	SourceEventID    *int64             `json:"source_event_id"`
	CreatedAt        pgtype.Timestamptz `json:"created_at"`
}

type AcpTurn struct {
	ID              int64              `json:"id"`
	SessionID       pgtype.UUID        `json:"session_id"`
	TurnIndex       int32              `json:"turn_index"`
	PromptRequestID *string            `json:"prompt_request_id"`
	Status          string             `json:"status"`
	StopReason      *string            `json:"stop_reason"`
	UpdateCount     int32              `json:"update_count"`
	StartedAt       pgtype.Timestamptz `json:"started_at"`
	CompletedAt     pgtype.Timestamptz `json:"completed_at"`
}

type AuditLog struct {
	ID         int64              `json:"id"`
	UserID     pgtype.UUID        `json:"user_id"`
	Action     string             `json:"action"`
	TargetType *string            `json:"target_type"`
	TargetID   *string            `json:"target_id"`
	Ip         *netip.Addr        `json:"ip"`
	Metadata   []byte             `json:"metadata"`
	CreatedAt  pgtype.Timestamptz `json:"created_at"`
}

type ChangeRequest struct {
	ID             pgtype.UUID        `json:"id"`
	ProjectID      pgtype.UUID        `json:"project_id"`
	WorkspaceID    pgtype.UUID        `json:"workspace_id"`
	RequirementID  pgtype.UUID        `json:"requirement_id"`
	IssueID        pgtype.UUID        `json:"issue_id"`
	Number         int32              `json:"number"`
	Title          string             `json:"title"`
	Description    string             `json:"description"`
	SourceBranch   string             `json:"source_branch"`
	TargetBranch   string             `json:"target_branch"`
	State          string             `json:"state"`
	ReviewVerdict  string             `json:"review_verdict"`
	CiState        string             `json:"ci_state"`
	Provider       string             `json:"provider"`
	ExternalID     *int64             `json:"external_id"`
	ExternalUrl    string             `json:"external_url"`
	MergeCommitSha string             `json:"merge_commit_sha"`
	ReviewedBy     pgtype.UUID        `json:"reviewed_by"`
	ReviewedAt     pgtype.Timestamptz `json:"reviewed_at"`
	CreatedBy      pgtype.UUID        `json:"created_by"`
	MergedAt       pgtype.Timestamptz `json:"merged_at"`
	CreatedAt      pgtype.Timestamptz `json:"created_at"`
	UpdatedAt      pgtype.Timestamptz `json:"updated_at"`
}

type CodeChunk struct {
	ID          pgtype.UUID        `json:"id"`
	RunID       pgtype.UUID        `json:"run_id"`
	WorkspaceID pgtype.UUID        `json:"workspace_id"`
	CommitSha   string             `json:"commit_sha"`
	FilePath    string             `json:"file_path"`
	Lang        *string            `json:"lang"`
	StartLine   int32              `json:"start_line"`
	EndLine     int32              `json:"end_line"`
	Content     string             `json:"content"`
	ContentSha  []byte             `json:"content_sha"`
	TokenCount  *int32             `json:"token_count"`
	Embedding   *pgvector.Vector   `json:"embedding"`
	CreatedAt   pgtype.Timestamptz `json:"created_at"`
}

type CodeIndexRun struct {
	ID                  pgtype.UUID        `json:"id"`
	WorkspaceID         pgtype.UUID        `json:"workspace_id"`
	WorktreeID          pgtype.UUID        `json:"worktree_id"`
	Branch              string             `json:"branch"`
	CommitSha           string             `json:"commit_sha"`
	Status              string             `json:"status"`
	EmbeddingEndpointID pgtype.UUID        `json:"embedding_endpoint_id"`
	EmbeddingModel      string             `json:"embedding_model"`
	Dims                int32              `json:"dims"`
	FilesIndexed        int32              `json:"files_indexed"`
	ChunksIndexed       int32              `json:"chunks_indexed"`
	Error               *string            `json:"error"`
	StartedAt           pgtype.Timestamptz `json:"started_at"`
	FinishedAt          pgtype.Timestamptz `json:"finished_at"`
	CreatedAt           pgtype.Timestamptz `json:"created_at"`
}

type CommitSummary struct {
	ID          pgtype.UUID        `json:"id"`
	WorkspaceID pgtype.UUID        `json:"workspace_id"`
	WorktreeID  pgtype.UUID        `json:"worktree_id"`
	Branch      string             `json:"branch"`
	CommitSha   string             `json:"commit_sha"`
	Kind        string             `json:"kind"`
	Title       *string            `json:"title"`
	BodyMd      string             `json:"body_md"`
	Model       *string            `json:"model"`
	Status      string             `json:"status"`
	Error       *string            `json:"error"`
	CreatedAt   pgtype.Timestamptz `json:"created_at"`
}

type Conversation struct {
	ID               pgtype.UUID        `json:"id"`
	UserID           pgtype.UUID        `json:"user_id"`
	ProjectID        pgtype.UUID        `json:"project_id"`
	WorkspaceID      pgtype.UUID        `json:"workspace_id"`
	IssueID          pgtype.UUID        `json:"issue_id"`
	ModelID          pgtype.UUID        `json:"model_id"`
	SystemPrompt     string             `json:"system_prompt"`
	Title            *string            `json:"title"`
	TitleGeneratedAt pgtype.Timestamptz `json:"title_generated_at"`
	CreatedAt        pgtype.Timestamptz `json:"created_at"`
	UpdatedAt        pgtype.Timestamptz `json:"updated_at"`
	DeletedAt        pgtype.Timestamptz `json:"deleted_at"`
	RequirementID    pgtype.UUID        `json:"requirement_id"`
}

type CryptoKey struct {
	Version   int32              `json:"version"`
	Provider  string             `json:"provider"`
	KeyRef    *string            `json:"key_ref"`
	Status    string             `json:"status"`
	CreatedAt pgtype.Timestamptz `json:"created_at"`
}

type GitCredential struct {
	ID              pgtype.UUID        `json:"id"`
	WorkspaceID     pgtype.UUID        `json:"workspace_id"`
	Kind            string             `json:"kind"`
	Username        *string            `json:"username"`
	EncryptedSecret []byte             `json:"encrypted_secret"`
	Fingerprint     *string            `json:"fingerprint"`
	CreatedAt       pgtype.Timestamptz `json:"created_at"`
	UpdatedAt       pgtype.Timestamptz `json:"updated_at"`
	KeyVersion      int16              `json:"key_version"`
}

type Issue struct {
	ID            pgtype.UUID        `json:"id"`
	ProjectID     pgtype.UUID        `json:"project_id"`
	RequirementID pgtype.UUID        `json:"requirement_id"`
	Number        int32              `json:"number"`
	Title         string             `json:"title"`
	Description   string             `json:"description"`
	Status        string             `json:"status"`
	AssigneeID    pgtype.UUID        `json:"assignee_id"`
	CreatedBy     pgtype.UUID        `json:"created_by"`
	ClosedAt      pgtype.Timestamptz `json:"closed_at"`
	CreatedAt     pgtype.Timestamptz `json:"created_at"`
	UpdatedAt     pgtype.Timestamptz `json:"updated_at"`
	WorkspaceID   pgtype.UUID        `json:"workspace_id"`
	ParentID      pgtype.UUID        `json:"parent_id"`
	Priority      int32              `json:"priority"`
}

type IssueDependency struct {
	ID        pgtype.UUID        `json:"id"`
	ProjectID pgtype.UUID        `json:"project_id"`
	BlockedID pgtype.UUID        `json:"blocked_id"`
	BlockerID pgtype.UUID        `json:"blocker_id"`
	CreatedBy pgtype.UUID        `json:"created_by"`
	CreatedAt pgtype.Timestamptz `json:"created_at"`
}

type Job struct {
	ID          pgtype.UUID        `json:"id"`
	Type        string             `json:"type"`
	Payload     []byte             `json:"payload"`
	Status      string             `json:"status"`
	ScheduledAt pgtype.Timestamptz `json:"scheduled_at"`
	Attempts    int32              `json:"attempts"`
	MaxAttempts int32              `json:"max_attempts"`
	LeasedAt    pgtype.Timestamptz `json:"leased_at"`
	LeasedBy    *string            `json:"leased_by"`
	LastError   *string            `json:"last_error"`
	CompletedAt pgtype.Timestamptz `json:"completed_at"`
	CreatedAt   pgtype.Timestamptz `json:"created_at"`
	UpdatedAt   pgtype.Timestamptz `json:"updated_at"`
}

type LlmEndpoint struct {
	ID              pgtype.UUID        `json:"id"`
	Provider        string             `json:"provider"`
	DisplayName     string             `json:"display_name"`
	BaseUrl         string             `json:"base_url"`
	ApiKeyEncrypted []byte             `json:"api_key_encrypted"`
	CreatedBy       pgtype.UUID        `json:"created_by"`
	CreatedAt       pgtype.Timestamptz `json:"created_at"`
	UpdatedAt       pgtype.Timestamptz `json:"updated_at"`
	KeyVersion      int16              `json:"key_version"`
}

type LlmModel struct {
	ID                           pgtype.UUID        `json:"id"`
	EndpointID                   pgtype.UUID        `json:"endpoint_id"`
	ModelID                      string             `json:"model_id"`
	DisplayName                  string             `json:"display_name"`
	Capabilities                 []byte             `json:"capabilities"`
	ContextWindow                int32              `json:"context_window"`
	MaxOutputTokens              int32              `json:"max_output_tokens"`
	PromptPricePerMillionUsd     pgtype.Numeric     `json:"prompt_price_per_million_usd"`
	CompletionPricePerMillionUsd pgtype.Numeric     `json:"completion_price_per_million_usd"`
	ThinkingPricePerMillionUsd   pgtype.Numeric     `json:"thinking_price_per_million_usd"`
	IsTitleGenerator             bool               `json:"is_title_generator"`
	Enabled                      bool               `json:"enabled"`
	SortOrder                    int32              `json:"sort_order"`
	CreatedAt                    pgtype.Timestamptz `json:"created_at"`
	UpdatedAt                    pgtype.Timestamptz `json:"updated_at"`
}

type LlmUsage struct {
	ID               int64              `json:"id"`
	ConversationID   pgtype.UUID        `json:"conversation_id"`
	MessageID        int64              `json:"message_id"`
	UserID           pgtype.UUID        `json:"user_id"`
	EndpointID       pgtype.UUID        `json:"endpoint_id"`
	ModelID          pgtype.UUID        `json:"model_id"`
	PromptTokens     int32              `json:"prompt_tokens"`
	CompletionTokens int32              `json:"completion_tokens"`
	ThinkingTokens   int32              `json:"thinking_tokens"`
	CostUsd          pgtype.Numeric     `json:"cost_usd"`
	CreatedAt        pgtype.Timestamptz `json:"created_at"`
}

type McpToken struct {
	ID           pgtype.UUID        `json:"id"`
	TokenHash    []byte             `json:"token_hash"`
	UserID       pgtype.UUID        `json:"user_id"`
	Name         string             `json:"name"`
	Issuer       string             `json:"issuer"`
	Scope        []byte             `json:"scope"`
	AcpSessionID pgtype.UUID        `json:"acp_session_id"`
	ExpiresAt    pgtype.Timestamptz `json:"expires_at"`
	LastUsedAt   pgtype.Timestamptz `json:"last_used_at"`
	RevokedAt    pgtype.Timestamptz `json:"revoked_at"`
	CreatedBy    pgtype.UUID        `json:"created_by"`
	CreatedAt    pgtype.Timestamptz `json:"created_at"`
}

type Message struct {
	ID               int64              `json:"id"`
	ConversationID   pgtype.UUID        `json:"conversation_id"`
	Role             string             `json:"role"`
	Content          string             `json:"content"`
	Thinking         *string            `json:"thinking"`
	ToolCalls        []byte             `json:"tool_calls"`
	Status           string             `json:"status"`
	ErrorMessage     *string            `json:"error_message"`
	PromptTokens     *int32             `json:"prompt_tokens"`
	CompletionTokens *int32             `json:"completion_tokens"`
	ThinkingTokens   *int32             `json:"thinking_tokens"`
	CreatedAt        pgtype.Timestamptz `json:"created_at"`
	UpdatedAt        pgtype.Timestamptz `json:"updated_at"`
}

type MessageAttachment struct {
	ID          pgtype.UUID        `json:"id"`
	UserID      pgtype.UUID        `json:"user_id"`
	MessageID   *int64             `json:"message_id"`
	Filename    string             `json:"filename"`
	MimeType    string             `json:"mime_type"`
	SizeBytes   int64              `json:"size_bytes"`
	Sha256      string             `json:"sha256"`
	StoragePath string             `json:"storage_path"`
	CreatedAt   pgtype.Timestamptz `json:"created_at"`
}

type Notification struct {
	ID        pgtype.UUID        `json:"id"`
	UserID    pgtype.UUID        `json:"user_id"`
	Topic     string             `json:"topic"`
	Severity  string             `json:"severity"`
	Title     string             `json:"title"`
	Body      string             `json:"body"`
	Link      *string            `json:"link"`
	Metadata  []byte             `json:"metadata"`
	ReadAt    pgtype.Timestamptz `json:"read_at"`
	CreatedAt pgtype.Timestamptz `json:"created_at"`
}

type NotificationPref struct {
	UserID          pgtype.UUID        `json:"user_id"`
	EmailEnabled    bool               `json:"email_enabled"`
	ImEnabled       bool               `json:"im_enabled"`
	ImWebhookUrlEnc []byte             `json:"im_webhook_url_enc"`
	MinSeverity     string             `json:"min_severity"`
	UpdatedAt       pgtype.Timestamptz `json:"updated_at"`
}

type OrchestratorRun struct {
	ID            pgtype.UUID        `json:"id"`
	ProjectID     pgtype.UUID        `json:"project_id"`
	RequirementID pgtype.UUID        `json:"requirement_id"`
	WorkspaceID   pgtype.UUID        `json:"workspace_id"`
	OwnerID       pgtype.UUID        `json:"owner_id"`
	Status        string             `json:"status"`
	CurrentPhase  string             `json:"current_phase"`
	Config        []byte             `json:"config"`
	LastError     *string            `json:"last_error"`
	CreatedAt     pgtype.Timestamptz `json:"created_at"`
	UpdatedAt     pgtype.Timestamptz `json:"updated_at"`
	EndedAt       pgtype.Timestamptz `json:"ended_at"`
}

type OrchestratorStep struct {
	ID           pgtype.UUID        `json:"id"`
	RunID        pgtype.UUID        `json:"run_id"`
	Phase        string             `json:"phase"`
	Attempt      int32              `json:"attempt"`
	ParentStepID pgtype.UUID        `json:"parent_step_id"`
	Depth        int32              `json:"depth"`
	Status       string             `json:"status"`
	AgentKindID  pgtype.UUID        `json:"agent_kind_id"`
	AcpSessionID pgtype.UUID        `json:"acp_session_id"`
	Prompt       string             `json:"prompt"`
	StopReason   *string            `json:"stop_reason"`
	GateResult   []byte             `json:"gate_result"`
	LastError    *string            `json:"last_error"`
	JobID        pgtype.UUID        `json:"job_id"`
	CreatedAt    pgtype.Timestamptz `json:"created_at"`
	UpdatedAt    pgtype.Timestamptz `json:"updated_at"`
	EndedAt      pgtype.Timestamptz `json:"ended_at"`
}

type Project struct {
	ID          pgtype.UUID        `json:"id"`
	Slug        string             `json:"slug"`
	Name        string             `json:"name"`
	Description string             `json:"description"`
	Visibility  string             `json:"visibility"`
	OwnerID     pgtype.UUID        `json:"owner_id"`
	ArchivedAt  pgtype.Timestamptz `json:"archived_at"`
	CreatedAt   pgtype.Timestamptz `json:"created_at"`
	UpdatedAt   pgtype.Timestamptz `json:"updated_at"`
}

type ProjectMember struct {
	ProjectID pgtype.UUID        `json:"project_id"`
	UserID    pgtype.UUID        `json:"user_id"`
	Role      string             `json:"role"`
	CreatedAt pgtype.Timestamptz `json:"created_at"`
	AddedBy   pgtype.UUID        `json:"added_by"`
}

type ProjectMemory struct {
	ID             pgtype.UUID        `json:"id"`
	ProjectID      pgtype.UUID        `json:"project_id"`
	WorkspaceID    pgtype.UUID        `json:"workspace_id"`
	Kind           string             `json:"kind"`
	Title          string             `json:"title"`
	Body           string             `json:"body"`
	Tags           []string           `json:"tags"`
	Source         string             `json:"source"`
	Embedding      *pgvector.Vector   `json:"embedding"`
	EmbeddingModel *string            `json:"embedding_model"`
	CreatedBy      pgtype.UUID        `json:"created_by"`
	CreatedAt      pgtype.Timestamptz `json:"created_at"`
	UpdatedAt      pgtype.Timestamptz `json:"updated_at"`
}

type PromptTemplate struct {
	ID        pgtype.UUID        `json:"id"`
	Name      string             `json:"name"`
	Content   string             `json:"content"`
	Scope     string             `json:"scope"`
	OwnerID   pgtype.UUID        `json:"owner_id"`
	CreatedAt pgtype.Timestamptz `json:"created_at"`
	UpdatedAt pgtype.Timestamptz `json:"updated_at"`
}

type Requirement struct {
	ID          pgtype.UUID        `json:"id"`
	ProjectID   pgtype.UUID        `json:"project_id"`
	Number      int32              `json:"number"`
	Title       string             `json:"title"`
	Description string             `json:"description"`
	Phase       string             `json:"phase"`
	Status      string             `json:"status"`
	OwnerID     pgtype.UUID        `json:"owner_id"`
	ClosedAt    pgtype.Timestamptz `json:"closed_at"`
	CreatedAt   pgtype.Timestamptz `json:"created_at"`
	UpdatedAt   pgtype.Timestamptz `json:"updated_at"`
	WorkspaceID pgtype.UUID        `json:"workspace_id"`
}

type RequirementArtifact struct {
	ID              pgtype.UUID        `json:"id"`
	RequirementID   pgtype.UUID        `json:"requirement_id"`
	Phase           string             `json:"phase"`
	Version         int32              `json:"version"`
	Content         string             `json:"content"`
	Note            string             `json:"note"`
	SourceMessageID *int64             `json:"source_message_id"`
	CreatedBy       pgtype.UUID        `json:"created_by"`
	CreatedAt       pgtype.Timestamptz `json:"created_at"`
	Verdict         string             `json:"verdict"`
}

type RequirementPhasePointer struct {
	RequirementID      pgtype.UUID        `json:"requirement_id"`
	Phase              string             `json:"phase"`
	ApprovedArtifactID pgtype.UUID        `json:"approved_artifact_id"`
	ApprovedBy         pgtype.UUID        `json:"approved_by"`
	ApprovedAt         pgtype.Timestamptz `json:"approved_at"`
	UpdatedAt          pgtype.Timestamptz `json:"updated_at"`
}

type User struct {
	ID           pgtype.UUID        `json:"id"`
	Email        string             `json:"email"`
	PasswordHash string             `json:"password_hash"`
	DisplayName  string             `json:"display_name"`
	IsAdmin      bool               `json:"is_admin"`
	CreatedAt    pgtype.Timestamptz `json:"created_at"`
	UpdatedAt    pgtype.Timestamptz `json:"updated_at"`
	Enabled      bool               `json:"enabled"`
}

type UserSession struct {
	ID         pgtype.UUID        `json:"id"`
	UserID     pgtype.UUID        `json:"user_id"`
	TokenHash  []byte             `json:"token_hash"`
	ExpiresAt  pgtype.Timestamptz `json:"expires_at"`
	LastSeenAt pgtype.Timestamptz `json:"last_seen_at"`
	CreatedAt  pgtype.Timestamptz `json:"created_at"`
}

type Workspace struct {
	ID                  pgtype.UUID        `json:"id"`
	ProjectID           pgtype.UUID        `json:"project_id"`
	Slug                string             `json:"slug"`
	Name                string             `json:"name"`
	Description         string             `json:"description"`
	GitRemoteUrl        string             `json:"git_remote_url"`
	DefaultBranch       string             `json:"default_branch"`
	MainPath            string             `json:"main_path"`
	SyncStatus          string             `json:"sync_status"`
	LastSyncedAt        pgtype.Timestamptz `json:"last_synced_at"`
	LastSyncError       *string            `json:"last_sync_error"`
	CreatedAt           pgtype.Timestamptz `json:"created_at"`
	UpdatedAt           pgtype.Timestamptz `json:"updated_at"`
	ActiveMainSessionID pgtype.UUID        `json:"active_main_session_id"`
}

type WorkspaceRunProfile struct {
	ID            pgtype.UUID        `json:"id"`
	WorkspaceID   pgtype.UUID        `json:"workspace_id"`
	Slug          string             `json:"slug"`
	Name          string             `json:"name"`
	Description   string             `json:"description"`
	Command       string             `json:"command"`
	Args          []string           `json:"args"`
	EncryptedEnv  []byte             `json:"encrypted_env"`
	Enabled       bool               `json:"enabled"`
	LastStartedAt pgtype.Timestamptz `json:"last_started_at"`
	LastExitCode  *int32             `json:"last_exit_code"`
	LastError     string             `json:"last_error"`
	CreatedBy     pgtype.UUID        `json:"created_by"`
	CreatedAt     pgtype.Timestamptz `json:"created_at"`
	UpdatedAt     pgtype.Timestamptz `json:"updated_at"`
	KeyVersion    int16              `json:"key_version"`
}

type WorkspaceWorktree struct {
	ID             pgtype.UUID        `json:"id"`
	WorkspaceID    pgtype.UUID        `json:"workspace_id"`
	Branch         string             `json:"branch"`
	Path           string             `json:"path"`
	Status         string             `json:"status"`
	ActiveHolder   *string            `json:"active_holder"`
	AcquiredAt     pgtype.Timestamptz `json:"acquired_at"`
	LastUsedAt     pgtype.Timestamptz `json:"last_used_at"`
	CreatedAt      pgtype.Timestamptz `json:"created_at"`
	PruneWarningAt pgtype.Timestamptz `json:"prune_warning_at"`
}
