Documentation
¶
Overview ¶
Package db contains sqlc-generated query and model types for PostgreSQL. All other files in this package are generated by sqlc — do not edit by hand. Run `task sqlc` from the build/ directory to regenerate after query/migration changes.
Index ¶
- type ActivityLog
- type AiCostLedger
- type BeginTaskStatusParams
- type BehaviorRule
- type CompleteTaskParams
- type CompletionCandidate
- type Concept
- type CreateActivityLogParams
- type CreateConceptParams
- type CreateDecisionParams
- type CreateGoalParams
- type CreatePendingProposalParams
- type CreateProjectParams
- type CreateReviewScheduleParams
- type CreateTaskParams
- type DBTX
- type Decision
- type DeleteTaskParams
- type DisciplineEvent
- type DisciplineEventsM8
- type Evaluation
- type GetPendingProposalParams
- type GetProjectByIDParams
- type GetProjectByNameParams
- type GetRepoByNameParams
- type GetTasksByProjectParams
- type Goal
- type GuardBypass
- type GuardEvent
- type HandoffsSinceParams
- type KnowledgeItem
- type KnowledgeRanked
- type ListAllDecisionsParams
- type ListConceptsForAIReviewParams
- type ListConceptsForAIReviewRow
- type ListConceptsParams
- type ListDecisionsByProjectParams
- type ListDecisionsByRepoParams
- type ListDecisionsByTaskIDParams
- type ListDecisionsFilteredParams
- type ListDueReviewsParams
- type ListDueReviewsRow
- type ListProjectTasksAllStatusesParams
- type MemoryAtom
- type MemoryLink
- type MergedPrsObserved
- type Outcome
- type PendingProposal
- type Playbook
- type ProceduralMemory
- type Project
- type ProjectArch
- type ProjectStatusSnapshot
- type Querier
- type Queries
- func (q *Queries) BeginTaskStatus(ctx context.Context, arg BeginTaskStatusParams) (Task, error)
- func (q *Queries) CompleteTask(ctx context.Context, arg CompleteTaskParams) (Task, error)
- func (q *Queries) CountCompletedTasksThisWeek(ctx context.Context, workspaceID pgtype.UUID) (int64, error)
- func (q *Queries) CountWeeklyRelevantTasks(ctx context.Context, workspaceID pgtype.UUID) (int64, error)
- func (q *Queries) CreateActivityLog(ctx context.Context, arg CreateActivityLogParams) (ActivityLog, error)
- func (q *Queries) CreateConcept(ctx context.Context, arg CreateConceptParams) (Concept, error)
- func (q *Queries) CreateDecision(ctx context.Context, arg CreateDecisionParams) (Decision, error)
- func (q *Queries) CreateGoal(ctx context.Context, arg CreateGoalParams) (Goal, error)
- func (q *Queries) CreatePendingProposal(ctx context.Context, arg CreatePendingProposalParams) (PendingProposal, error)
- func (q *Queries) CreateProject(ctx context.Context, arg CreateProjectParams) (Project, error)
- func (q *Queries) CreateReviewSchedule(ctx context.Context, arg CreateReviewScheduleParams) (ReviewSchedule, error)
- func (q *Queries) CreateTask(ctx context.Context, arg CreateTaskParams) (Task, error)
- func (q *Queries) DeleteTask(ctx context.Context, arg DeleteTaskParams) error
- func (q *Queries) GetAllPendingTasks(ctx context.Context, workspaceID pgtype.UUID) ([]Task, error)
- func (q *Queries) GetPendingProposal(ctx context.Context, arg GetPendingProposalParams) (PendingProposal, error)
- func (q *Queries) GetProjectByID(ctx context.Context, arg GetProjectByIDParams) (Project, error)
- func (q *Queries) GetProjectByName(ctx context.Context, arg GetProjectByNameParams) (Project, error)
- func (q *Queries) GetRepoByName(ctx context.Context, arg GetRepoByNameParams) (Repo, error)
- func (q *Queries) GetTasksByProject(ctx context.Context, arg GetTasksByProjectParams) ([]Task, error)
- func (q *Queries) HandoffsSince(ctx context.Context, arg HandoffsSinceParams) ([]SessionHandoff, error)
- func (q *Queries) ListActiveGoals(ctx context.Context, workspaceID pgtype.UUID) ([]Goal, error)
- func (q *Queries) ListActiveProjects(ctx context.Context, workspaceID pgtype.UUID) ([]Project, error)
- func (q *Queries) ListActiveRepos(ctx context.Context, workspaceID pgtype.UUID) ([]Repo, error)
- func (q *Queries) ListAllDecisions(ctx context.Context, arg ListAllDecisionsParams) ([]Decision, error)
- func (q *Queries) ListConcepts(ctx context.Context, arg ListConceptsParams) ([]Concept, error)
- func (q *Queries) ListConceptsForAIReview(ctx context.Context, arg ListConceptsForAIReviewParams) ([]ListConceptsForAIReviewRow, error)
- func (q *Queries) ListDecisionsByProject(ctx context.Context, arg ListDecisionsByProjectParams) ([]Decision, error)
- func (q *Queries) ListDecisionsByRepo(ctx context.Context, arg ListDecisionsByRepoParams) ([]Decision, error)
- func (q *Queries) ListDecisionsByTaskID(ctx context.Context, arg ListDecisionsByTaskIDParams) ([]Decision, error)
- func (q *Queries) ListDecisionsFiltered(ctx context.Context, arg ListDecisionsFilteredParams) ([]Decision, error)
- func (q *Queries) ListDueReviews(ctx context.Context, arg ListDueReviewsParams) ([]ListDueReviewsRow, error)
- func (q *Queries) ListPendingProposals(ctx context.Context, workspaceID pgtype.UUID) ([]PendingProposal, error)
- func (q *Queries) ListProjectTasksAllStatuses(ctx context.Context, arg ListProjectTasksAllStatusesParams) ([]Task, error)
- func (q *Queries) ResolveHandoff(ctx context.Context, arg ResolveHandoffParams) (int64, error)
- func (q *Queries) ResolvePendingProposal(ctx context.Context, arg ResolvePendingProposalParams) (PendingProposal, error)
- func (q *Queries) ReviewedSince(ctx context.Context, arg ReviewedSinceParams) ([]ReviewedSinceRow, error)
- func (q *Queries) SetTaskVisionItemID(ctx context.Context, arg SetTaskVisionItemIDParams) (Task, error)
- func (q *Queries) UpdateConceptStatus(ctx context.Context, arg UpdateConceptStatusParams) (Concept, error)
- func (q *Queries) UpdateGoal(ctx context.Context, arg UpdateGoalParams) (Goal, error)
- func (q *Queries) UpdateKnowledgeEmbedding(ctx context.Context, arg UpdateKnowledgeEmbeddingParams) error
- func (q *Queries) UpdateProject(ctx context.Context, arg UpdateProjectParams) (Project, error)
- func (q *Queries) UpdateProjectStatus(ctx context.Context, arg UpdateProjectStatusParams) (Project, error)
- func (q *Queries) UpdateReviewSchedule(ctx context.Context, arg UpdateReviewScheduleParams) (ReviewSchedule, error)
- func (q *Queries) UpdateTaskStatus(ctx context.Context, arg UpdateTaskStatusParams) (Task, error)
- func (q *Queries) UpsertRepo(ctx context.Context, arg UpsertRepoParams) (Repo, error)
- func (q *Queries) WithTx(tx pgx.Tx) *Queries
- type Reflection
- type Repo
- type ResolveHandoffParams
- type ResolvePendingProposalParams
- type ReviewSchedule
- type ReviewedSinceParams
- type ReviewedSinceRow
- type SessionHandoff
- type SetTaskVisionItemIDParams
- type Skill
- type Task
- type UpdateConceptStatusParams
- type UpdateGoalParams
- type UpdateKnowledgeEmbeddingParams
- type UpdateProjectParams
- type UpdateProjectStatusParams
- type UpdateReviewScheduleParams
- type UpdateTaskStatusParams
- type UpsertRepoParams
- type VisionItem
- type WorkSession
- type WorkSessionEvidence
- type WorkSessionTask
- type WorkspacePreference
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ActivityLog ¶
type AiCostLedger ¶
type AiCostLedger struct {
ID uuid.UUID `json:"id"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
Caller string `json:"caller"`
Model string `json:"model"`
InputTokens int64 `json:"input_tokens"`
OutputTokens int64 `json:"output_tokens"`
CacheReadTokens int64 `json:"cache_read_tokens"`
CacheWriteTokens int64 `json:"cache_write_tokens"`
// Computed cost in micro-USD (USD * 1_000_000). Stored as integer to avoid float rounding.
CostUsdMicro int64 `json:"cost_usd_micro"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
}
AI token usage and computed USD cost per API call. 30-day retention via daily-ai-cost-ledger-prune scheduler job per backend-security-design.md §1.3.
type BeginTaskStatusParams ¶
type BehaviorRule ¶
type BehaviorRule struct {
ID uuid.UUID `json:"id"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
Condition string `json:"condition"`
Action string `json:"action"`
SourceType string `json:"source_type"`
SourceID pgtype.UUID `json:"source_id"`
Confidence pgtype.Numeric `json:"confidence"`
Status string `json:"status"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
}
behavior_rules table; 365-day retention for rejected/deprecated rows via daily-behavior-rule-prune job per backend-security-design.md §1.3. Active and proposed rows are never auto-pruned.
type CompleteTaskParams ¶
type CompletionCandidate ¶
type CompletionCandidate struct {
ID uuid.UUID `json:"id"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
TaskID uuid.UUID `json:"task_id"`
RepoName pgtype.Text `json:"repo_name"`
Reason string `json:"reason"`
EvidenceRefs []string `json:"evidence_refs"`
Confidence string `json:"confidence"`
SuggestedArtifact pgtype.Text `json:"suggested_artifact"`
Status string `json:"status"`
DetectedAt pgtype.Timestamptz `json:"detected_at"`
ResolvedAt pgtype.Timestamptz `json:"resolved_at"`
}
type Concept ¶
type Concept struct {
ID uuid.UUID `json:"id"`
Title string `json:"title"`
Content string `json:"content"`
Tags []string `json:"tags"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
Status string `json:"status"`
Importance float64 `json:"importance"`
RecallCount int32 `json:"recall_count"`
LastRecalledAt pgtype.Timestamptz `json:"last_recalled_at"`
BaseLambda float64 `json:"base_lambda"`
ArchivedAt pgtype.Timestamptz `json:"archived_at"`
}
type CreateActivityLogParams ¶
type CreateConceptParams ¶
type CreateDecisionParams ¶
type CreateDecisionParams struct {
ProjectID pgtype.UUID `json:"project_id"`
RepoName pgtype.Text `json:"repo_name"`
Title string `json:"title"`
Context string `json:"context"`
Decision string `json:"decision"`
Rationale string `json:"rationale"`
Alternatives pgtype.Text `json:"alternatives"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
TaskID pgtype.UUID `json:"task_id"`
Source string `json:"source"`
ActorSessionID pgtype.Text `json:"actor_session_id"`
ConfirmedByHuman bool `json:"confirmed_by_human"`
}
type CreateGoalParams ¶
type CreateProjectParams ¶
type CreateTaskParams ¶
type CreateTaskParams struct {
ProjectID pgtype.UUID `json:"project_id"`
Title string `json:"title"`
Description pgtype.Text `json:"description"`
Priority int32 `json:"priority"`
Assignee pgtype.Text `json:"assignee"`
DueDate pgtype.Timestamptz `json:"due_date"`
Importance pgtype.Int2 `json:"importance"`
Context pgtype.Text `json:"context"`
Kind string `json:"kind"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
VisionItemID pgtype.UUID `json:"vision_item_id"`
}
type Decision ¶
type Decision struct {
ID uuid.UUID `json:"id"`
ProjectID pgtype.UUID `json:"project_id"`
RepoName pgtype.Text `json:"repo_name"`
Title string `json:"title"`
Context string `json:"context"`
Decision string `json:"decision"`
Rationale string `json:"rationale"`
Alternatives pgtype.Text `json:"alternatives"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
Embedding []byte `json:"embedding"`
TaskID pgtype.UUID `json:"task_id"`
EmbeddingProvider pgtype.Text `json:"embedding_provider"`
EmbeddingModel pgtype.Text `json:"embedding_model"`
EmbeddingDim pgtype.Int4 `json:"embedding_dim"`
Source string `json:"source"`
ActorSessionID pgtype.Text `json:"actor_session_id"`
ConfirmedByHuman bool `json:"confirmed_by_human"`
}
func (Decision) MarshalJSON ¶
MarshalJSON hides Decision.ActorSessionID and Decision.ConfirmedByHuman from every JSON serialization boundary in this codebase (handler.JSON responses, MCP jsonText, any future c.JSON(decision) call site) — PR160 M-3 / M-2. Declared on the VALUE receiver, not a pointer: pgtype's own MarshalJSON methods (Text, UUID, Timestamptz — see this package's go.sum-pinned pgx/v5) all use value receivers for the identical reason mcp.safeSessionHandoff documents (internal/mcp/session_handoff_safe.go): encoding/json only special-cases a pointer receiver when the value being marshaled is addressable, which a map value or an `any`-boxed element is not guaranteed to be. A value receiver makes "this type never emits those two fields" hold regardless of how a caller stores or nests the value — []db.Decision, *db.Decision, map[string]any{"decision": d}, []any{d}, a struct field — all of them.
The write path is untouched: Decision.ActorSessionID/ConfirmedByHuman still round-trip through the DB exactly as before (this method only governs json.Marshal(Decision), never affects DB reads/writes, which go through pgx's binary/text wire protocol, not encoding/json).
type DeleteTaskParams ¶
type DisciplineEvent ¶
type DisciplineEvent struct {
ID int64 `json:"id"`
SessionID string `json:"session_id"`
RepoName pgtype.Text `json:"repo_name"`
ToolName string `json:"tool_name"`
IsMutating bool `json:"is_mutating"`
ObservedAt pgtype.Timestamptz `json:"observed_at"`
LinkedDecisionID pgtype.UUID `json:"linked_decision_id"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
}
MCP tool-call audit trail for meta-rule drift detection; 30-day TTL via task discipline-prune
type DisciplineEventsM8 ¶
type DisciplineEventsM8 struct {
ID uuid.UUID `json:"id"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
EventType string `json:"event_type"`
Severity string `json:"severity"`
Detail []byte `json:"detail"`
ResolvedAt pgtype.Timestamptz `json:"resolved_at"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
}
Watchdog meta-cognition events (M8). 90-day retention via daily-discipline-event-m8-prune scheduler job per backend-security-design.md §1.3.
type Evaluation ¶
type Evaluation struct {
ID uuid.UUID `json:"id"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
OutcomeID uuid.UUID `json:"outcome_id"`
Analysis string `json:"analysis"`
Lessons []byte `json:"lessons"`
ImprovementSuggestions []byte `json:"improvement_suggestions"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
}
type GetProjectByIDParams ¶
type GetProjectByNameParams ¶
type GetRepoByNameParams ¶
type GetTasksByProjectParams ¶
type Goal ¶
type Goal struct {
ID uuid.UUID `json:"id"`
Title string `json:"title"`
Description pgtype.Text `json:"description"`
Status string `json:"status"`
Area pgtype.Text `json:"area"`
DueDate pgtype.Timestamptz `json:"due_date"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
}
type GuardBypass ¶
type GuardBypass struct {
ID uuid.UUID `json:"id"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
ExpiresAt pgtype.Timestamptz `json:"expires_at"`
Scope string `json:"scope"`
Target string `json:"target"`
ToolName pgtype.Text `json:"tool_name"`
Reason string `json:"reason"`
CreatedBy pgtype.Text `json:"created_by"`
}
type GuardEvent ¶
type GuardEvent struct {
ID uuid.UUID `json:"id"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
SessionID pgtype.Text `json:"session_id"`
ToolName string `json:"tool_name"`
ToolInput []byte `json:"tool_input"`
Cwd pgtype.Text `json:"cwd"`
RepoName pgtype.Text `json:"repo_name"`
RiskTier int16 `json:"risk_tier"`
RiskReason pgtype.Text `json:"risk_reason"`
WouldDeny bool `json:"would_deny"`
Matcher string `json:"matcher"`
BypassID pgtype.UUID `json:"bypass_id"`
}
type HandoffsSinceParams ¶
type HandoffsSinceParams struct {
WorkspaceID pgtype.UUID `json:"workspace_id"`
Since pgtype.Timestamptz `json:"since"`
LimitN int32 `json:"limit_n"`
}
type KnowledgeItem ¶
type KnowledgeItem struct {
ID uuid.UUID `json:"id"`
Type string `json:"type"`
Title string `json:"title"`
Content string `json:"content"`
Url pgtype.Text `json:"url"`
Tags []string `json:"tags"`
Embedding pgvector.Vector `json:"embedding"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
Source string `json:"source"`
LearningValue pgtype.Int4 `json:"learning_value"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
Importance float64 `json:"importance"`
RecallCount int32 `json:"recall_count"`
LastRecalledAt pgtype.Timestamptz `json:"last_recalled_at"`
BaseLambda float64 `json:"base_lambda"`
ArchivedAt pgtype.Timestamptz `json:"archived_at"`
ParentID pgtype.UUID `json:"parent_id"`
HeadingPath pgtype.Text `json:"heading_path"`
HeadingLevel pgtype.Int4 `json:"heading_level"`
ProjectID pgtype.UUID `json:"project_id"`
TaskID pgtype.UUID `json:"task_id"`
DecisionID pgtype.UUID `json:"decision_id"`
}
type KnowledgeRanked ¶
type KnowledgeRanked struct {
ID uuid.UUID `json:"id"`
Type string `json:"type"`
Title string `json:"title"`
Content string `json:"content"`
Url pgtype.Text `json:"url"`
Tags []string `json:"tags"`
Embedding pgvector.Vector `json:"embedding"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
Source string `json:"source"`
LearningValue pgtype.Int4 `json:"learning_value"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
Importance float64 `json:"importance"`
RecallCount int32 `json:"recall_count"`
LastRecalledAt pgtype.Timestamptz `json:"last_recalled_at"`
BaseLambda float64 `json:"base_lambda"`
ArchivedAt pgtype.Timestamptz `json:"archived_at"`
Strength interface{} `json:"strength"`
}
type ListAllDecisionsParams ¶
type ListConceptsParams ¶
type ListDueReviewsParams ¶
type ListDueReviewsRow ¶
type ListDueReviewsRow struct {
ID uuid.UUID `json:"id"`
Title string `json:"title"`
Content string `json:"content"`
Tags []string `json:"tags"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
Status string `json:"status"`
ScheduleID uuid.UUID `json:"schedule_id"`
Stability float64 `json:"stability"`
Difficulty float64 `json:"difficulty"`
DueDate pgtype.Timestamptz `json:"due_date"`
ReviewCount int32 `json:"review_count"`
}
type MemoryAtom ¶
type MemoryAtom struct {
ID uuid.UUID `json:"id"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
ParentTable string `json:"parent_table"`
ParentID uuid.UUID `json:"parent_id"`
Content string `json:"content"`
Keywords []byte `json:"keywords"`
Tags []byte `json:"tags"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
// pending | done | failed | consolidated | promoted
DigestStatus string `json:"digest_status"`
ErrorMsg pgtype.Text `json:"error_msg"`
}
Atomic fact units; retain 90 days (TTL not enforced by DB; use scheduled DELETE)
type MemoryLink ¶
type MergedPrsObserved ¶
type MergedPrsObserved struct {
ID uuid.UUID `json:"id"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
Repo string `json:"repo"`
Url string `json:"url"`
HeadRef pgtype.Text `json:"head_ref"`
Title pgtype.Text `json:"title"`
BodyExcerpt pgtype.Text `json:"body_excerpt"`
MergedAt pgtype.Timestamptz `json:"merged_at"`
ObservedAt pgtype.Timestamptz `json:"observed_at"`
}
type Outcome ¶
type Outcome struct {
ID uuid.UUID `json:"id"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
EntityType string `json:"entity_type"`
EntityID uuid.UUID `json:"entity_id"`
Result string `json:"result"`
Metrics []byte `json:"metrics"`
Notes pgtype.Text `json:"notes"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
RelatedRuleIds []uuid.UUID `json:"related_rule_ids"`
WorkSessionID pgtype.UUID `json:"work_session_id"`
SupersedesID pgtype.UUID `json:"supersedes_id"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
}
type PendingProposal ¶
type PendingProposal struct {
ID uuid.UUID `json:"id"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
Type string `json:"type"`
Payload []byte `json:"payload"`
Status string `json:"status"`
ProposedBy pgtype.Text `json:"proposed_by"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
ResolvedAt pgtype.Timestamptz `json:"resolved_at"`
Reason pgtype.Text `json:"reason"`
}
func (PendingProposal) MarshalJSON ¶
func (p PendingProposal) MarshalJSON() ([]byte, error)
MarshalJSON emits a clean JSON shape for PendingProposal that hides pgx pgtype.* wrapper internals.
Without this method, default reflection marshalling of pgtype.Text / pgtype.UUID / pgtype.Timestamptz leaks `{"String":"x","Valid":true}` or `{"Bytes":[1,2,...],"Valid":true}` whenever a caller serialises a raw db.PendingProposal — which today happens only through the handler-layer toResponse() but is one stray c.JSON(prop) away from regressing. Adding the method here makes the type self-defending regardless of caller.
sqlc regen (`cd build && task sqlc`) never touches this file (different basename from generated files), so the override survives schema iterations.
Time format mirrors handler.toResponse() (RFC3339, second-resolution); the existing API contract emits this shape and tests assert on it.
type Playbook ¶
type Playbook struct {
ID uuid.UUID `json:"id"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
TriggerPattern string `json:"trigger_pattern"`
ActionTemplate string `json:"action_template"`
SourceDecisionIds []uuid.UUID `json:"source_decision_ids"`
Confidence pgtype.Numeric `json:"confidence"`
Hits int32 `json:"hits"`
LastUsedAt pgtype.Timestamptz `json:"last_used_at"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
}
type ProceduralMemory ¶
type ProceduralMemory struct {
ID uuid.UUID `json:"id"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
RepoName string `json:"repo_name"`
ProjectID pgtype.UUID `json:"project_id"`
Title string `json:"title"`
WhenToUse string `json:"when_to_use"`
ApproachMd string `json:"approach_md"`
ToolsUsed []byte `json:"tools_used"`
FilesTouched []byte `json:"files_touched"`
SuccessCount int32 `json:"success_count"`
LastUsedAt pgtype.Timestamptz `json:"last_used_at"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
}
type Project ¶
type Project struct {
ID uuid.UUID `json:"id"`
GoalID pgtype.UUID `json:"goal_id"`
Name string `json:"name"`
Title string `json:"title"`
Description pgtype.Text `json:"description"`
Status string `json:"status"`
Area string `json:"area"`
Priority int32 `json:"priority"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
// Optional repo binding for workspace overview drill-down; populated by hand-rolled UPDATE post-migration
RepoName pgtype.Text `json:"repo_name"`
}
type ProjectArch ¶
type ProjectStatusSnapshot ¶
type ProjectStatusSnapshot struct {
ID uuid.UUID `json:"id"`
Slug string `json:"slug"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
GeneratedAt pgtype.Timestamptz `json:"generated_at"`
SprintSummary pgtype.Text `json:"sprint_summary"`
GapAnalysis pgtype.Text `json:"gap_analysis"`
SotaCatchupPct pgtype.Int4 `json:"sota_catchup_pct"`
PendingSummary pgtype.Text `json:"pending_summary"`
SourceDecisionIds []uuid.UUID `json:"source_decision_ids"`
Embedding []byte `json:"embedding"`
Source string `json:"source"`
EmbeddingProvider pgtype.Text `json:"embedding_provider"`
EmbeddingModel pgtype.Text `json:"embedding_model"`
EmbeddingDim pgtype.Int4 `json:"embedding_dim"`
}
type Querier ¶
type Querier interface {
// Atomically sets status to in_progress only when the current status is not
// already in_progress, preventing duplicate activity_log rows on concurrent calls.
// Returns pgx.ErrNoRows when the task is already in_progress or not found.
BeginTaskStatus(ctx context.Context, arg BeginTaskStatusParams) (Task, error)
// artifact is presence-aware (Ω4, 2026-08-20-mcp-surface-spec.md): omitting
// it (sqlc.narg → SQL NULL) preserves whatever is already stored, matching
// upsert_project_arch.summary/file_map's established convention. Without
// COALESCE, re-completing a reopened task without re-supplying artifact
// silently wiped an already-recorded PR/commit link.
CompleteTask(ctx context.Context, arg CompleteTaskParams) (Task, error)
CountCompletedTasksThisWeek(ctx context.Context, workspaceID pgtype.UUID) (int64, error)
// Returns count of tasks that are "relevant to this week":
// (1) completed this week, OR
// (2) pending/in_progress AND (due_date this week OR created this week)
CountWeeklyRelevantTasks(ctx context.Context, workspaceID pgtype.UUID) (int64, error)
CreateActivityLog(ctx context.Context, arg CreateActivityLogParams) (ActivityLog, error)
CreateConcept(ctx context.Context, arg CreateConceptParams) (Concept, error)
// actor_session_id / confirmed_by_human (migration 000076): caller-code-path
// values only, never decoded from an MCP/HTTP payload — see
// internal/decision.LogParams's ActorSessionID/ConfirmedByHuman doc comments.
CreateDecision(ctx context.Context, arg CreateDecisionParams) (Decision, error)
CreateGoal(ctx context.Context, arg CreateGoalParams) (Goal, error)
CreatePendingProposal(ctx context.Context, arg CreatePendingProposalParams) (PendingProposal, error)
CreateProject(ctx context.Context, arg CreateProjectParams) (Project, error)
CreateReviewSchedule(ctx context.Context, arg CreateReviewScheduleParams) (ReviewSchedule, error)
CreateTask(ctx context.Context, arg CreateTaskParams) (Task, error)
// The Go-side store wraps this in a transaction together with cleanup of
// work_session_tasks + work_sessions.current_task_id (the cascade behaviour
// previously enforced by FKs; see migration 000026 and gtd.Store.DeleteTask).
DeleteTask(ctx context.Context, arg DeleteTaskParams) error
GetAllPendingTasks(ctx context.Context, workspaceID pgtype.UUID) ([]Task, error)
GetPendingProposal(ctx context.Context, arg GetPendingProposalParams) (PendingProposal, error)
GetProjectByID(ctx context.Context, arg GetProjectByIDParams) (Project, error)
GetProjectByName(ctx context.Context, arg GetProjectByNameParams) (Project, error)
GetRepoByName(ctx context.Context, arg GetRepoByNameParams) (Repo, error)
GetTasksByProject(ctx context.Context, arg GetTasksByProjectParams) ([]Task, error)
HandoffsSince(ctx context.Context, arg HandoffsSinceParams) ([]SessionHandoff, error)
ListActiveGoals(ctx context.Context, workspaceID pgtype.UUID) ([]Goal, error)
// All queries take workspace_id as the named nullable arg @workspace_id.
// NULL → no filter (legacy mode); UUID → strict per-workspace scope.
ListActiveProjects(ctx context.Context, workspaceID pgtype.UUID) ([]Project, error)
ListActiveRepos(ctx context.Context, workspaceID pgtype.UUID) ([]Repo, error)
ListAllDecisions(ctx context.Context, arg ListAllDecisionsParams) ([]Decision, error)
ListConcepts(ctx context.Context, arg ListConceptsParams) ([]Concept, error)
ListConceptsForAIReview(ctx context.Context, arg ListConceptsForAIReviewParams) ([]ListConceptsForAIReviewRow, error)
ListDecisionsByProject(ctx context.Context, arg ListDecisionsByProjectParams) ([]Decision, error)
ListDecisionsByRepo(ctx context.Context, arg ListDecisionsByRepoParams) ([]Decision, error)
ListDecisionsByTaskID(ctx context.Context, arg ListDecisionsByTaskIDParams) ([]Decision, error)
// P3.0a Stage B: source-filtered read path for MCP list_decisions.
// project_id and repo_name are mutually exclusive at the application layer
// (decision.ListParams.Validate) — this query accepts both narg'd so a nil
// one is a no-op filter, but callers never pass both non-nil.
// Source is filtered BEFORE ORDER/LIMIT so the limit isn't consumed by rows
// that get excluded.
ListDecisionsFiltered(ctx context.Context, arg ListDecisionsFilteredParams) ([]Decision, error)
ListDueReviews(ctx context.Context, arg ListDueReviewsParams) ([]ListDueReviewsRow, error)
ListPendingProposals(ctx context.Context, workspaceID pgtype.UUID) ([]PendingProposal, error)
// All-statuses variant of GetTasksByProject. Used by the ProjectDetailPage to
// render both the "open" and the "completed/cancelled" sections; the default
// GetTasksByProject query stays active-only so existing GTD list pages don't
// regress. Ordering: newest activity first via COALESCE(updated_at, created_at)
// DESC so completed rows surface in roughly the order they were finished.
ListProjectTasksAllStatuses(ctx context.Context, arg ListProjectTasksAllStatusesParams) ([]Task, error)
ResolveHandoff(ctx context.Context, arg ResolveHandoffParams) (int64, error)
ResolvePendingProposal(ctx context.Context, arg ResolvePendingProposalParams) (PendingProposal, error)
ReviewedSince(ctx context.Context, arg ReviewedSinceParams) ([]ReviewedSinceRow, error)
SetTaskVisionItemID(ctx context.Context, arg SetTaskVisionItemIDParams) (Task, error)
UpdateConceptStatus(ctx context.Context, arg UpdateConceptStatusParams) (Concept, error)
UpdateGoal(ctx context.Context, arg UpdateGoalParams) (Goal, error)
UpdateKnowledgeEmbedding(ctx context.Context, arg UpdateKnowledgeEmbeddingParams) error
UpdateProject(ctx context.Context, arg UpdateProjectParams) (Project, error)
UpdateProjectStatus(ctx context.Context, arg UpdateProjectStatusParams) (Project, error)
UpdateReviewSchedule(ctx context.Context, arg UpdateReviewScheduleParams) (ReviewSchedule, error)
UpdateTaskStatus(ctx context.Context, arg UpdateTaskStatusParams) (Task, error)
// path/description/language/current_branch/next_planned_step are
// presence-aware (Ω6, 2026-08-20-mcp-surface-spec.md): the CASE checks the
// bound PARAMETER ($2/$3/$4/$5/$7), not EXCLUDED.<col> (which post-INSERT is
// never NULL — it's whatever the VALUES clause carried). NULL means the
// caller omitted the field (preserve stored value); a non-NULL value
// (including "") means an explicit set. Without this, every sync_repo call
// that didn't re-specify a field silently wiped it. known_issues already had
// this protection.
UpsertRepo(ctx context.Context, arg UpsertRepoParams) (Repo, error)
}
type Queries ¶
type Queries struct {
// contains filtered or unexported fields
}
func (*Queries) BeginTaskStatus ¶
Atomically sets status to in_progress only when the current status is not already in_progress, preventing duplicate activity_log rows on concurrent calls. Returns pgx.ErrNoRows when the task is already in_progress or not found.
func (*Queries) CompleteTask ¶
artifact is presence-aware (Ω4, 2026-08-20-mcp-surface-spec.md): omitting it (sqlc.narg → SQL NULL) preserves whatever is already stored, matching upsert_project_arch.summary/file_map's established convention. Without COALESCE, re-completing a reopened task without re-supplying artifact silently wiped an already-recorded PR/commit link.
func (*Queries) CountCompletedTasksThisWeek ¶
func (*Queries) CountWeeklyRelevantTasks ¶
func (q *Queries) CountWeeklyRelevantTasks(ctx context.Context, workspaceID pgtype.UUID) (int64, error)
Returns count of tasks that are "relevant to this week": (1) completed this week, OR (2) pending/in_progress AND (due_date this week OR created this week)
func (*Queries) CreateActivityLog ¶
func (q *Queries) CreateActivityLog(ctx context.Context, arg CreateActivityLogParams) (ActivityLog, error)
func (*Queries) CreateConcept ¶
func (*Queries) CreateDecision ¶
actor_session_id / confirmed_by_human (migration 000076): caller-code-path values only, never decoded from an MCP/HTTP payload — see internal/decision.LogParams's ActorSessionID/ConfirmedByHuman doc comments.
func (*Queries) CreateGoal ¶
func (*Queries) CreatePendingProposal ¶
func (q *Queries) CreatePendingProposal(ctx context.Context, arg CreatePendingProposalParams) (PendingProposal, error)
func (*Queries) CreateProject ¶
func (*Queries) CreateReviewSchedule ¶
func (q *Queries) CreateReviewSchedule(ctx context.Context, arg CreateReviewScheduleParams) (ReviewSchedule, error)
func (*Queries) CreateTask ¶
func (*Queries) DeleteTask ¶
func (q *Queries) DeleteTask(ctx context.Context, arg DeleteTaskParams) error
The Go-side store wraps this in a transaction together with cleanup of work_session_tasks + work_sessions.current_task_id (the cascade behaviour previously enforced by FKs; see migration 000026 and gtd.Store.DeleteTask).
func (*Queries) GetAllPendingTasks ¶
func (*Queries) GetPendingProposal ¶
func (q *Queries) GetPendingProposal(ctx context.Context, arg GetPendingProposalParams) (PendingProposal, error)
func (*Queries) GetProjectByID ¶
func (*Queries) GetProjectByName ¶
func (*Queries) GetRepoByName ¶
func (*Queries) GetTasksByProject ¶
func (*Queries) HandoffsSince ¶
func (q *Queries) HandoffsSince(ctx context.Context, arg HandoffsSinceParams) ([]SessionHandoff, error)
func (*Queries) ListActiveGoals ¶
func (*Queries) ListActiveProjects ¶
func (q *Queries) ListActiveProjects(ctx context.Context, workspaceID pgtype.UUID) ([]Project, error)
All queries take workspace_id as the named nullable arg @workspace_id. NULL → no filter (legacy mode); UUID → strict per-workspace scope.
func (*Queries) ListActiveRepos ¶
func (*Queries) ListAllDecisions ¶
func (*Queries) ListConcepts ¶
func (*Queries) ListConceptsForAIReview ¶
func (q *Queries) ListConceptsForAIReview(ctx context.Context, arg ListConceptsForAIReviewParams) ([]ListConceptsForAIReviewRow, error)
func (*Queries) ListDecisionsByProject ¶
func (*Queries) ListDecisionsByRepo ¶
func (*Queries) ListDecisionsByTaskID ¶
func (*Queries) ListDecisionsFiltered ¶
func (q *Queries) ListDecisionsFiltered(ctx context.Context, arg ListDecisionsFilteredParams) ([]Decision, error)
P3.0a Stage B: source-filtered read path for MCP list_decisions. project_id and repo_name are mutually exclusive at the application layer (decision.ListParams.Validate) — this query accepts both narg'd so a nil one is a no-op filter, but callers never pass both non-nil. Source is filtered BEFORE ORDER/LIMIT so the limit isn't consumed by rows that get excluded.
func (*Queries) ListDueReviews ¶
func (q *Queries) ListDueReviews(ctx context.Context, arg ListDueReviewsParams) ([]ListDueReviewsRow, error)
func (*Queries) ListPendingProposals ¶
func (*Queries) ListProjectTasksAllStatuses ¶
func (q *Queries) ListProjectTasksAllStatuses(ctx context.Context, arg ListProjectTasksAllStatusesParams) ([]Task, error)
All-statuses variant of GetTasksByProject. Used by the ProjectDetailPage to render both the "open" and the "completed/cancelled" sections; the default GetTasksByProject query stays active-only so existing GTD list pages don't regress. Ordering: newest activity first via COALESCE(updated_at, created_at) DESC so completed rows surface in roughly the order they were finished.
func (*Queries) ResolveHandoff ¶
func (*Queries) ResolvePendingProposal ¶
func (q *Queries) ResolvePendingProposal(ctx context.Context, arg ResolvePendingProposalParams) (PendingProposal, error)
func (*Queries) ReviewedSince ¶
func (q *Queries) ReviewedSince(ctx context.Context, arg ReviewedSinceParams) ([]ReviewedSinceRow, error)
func (*Queries) SetTaskVisionItemID ¶
func (*Queries) UpdateConceptStatus ¶
func (*Queries) UpdateGoal ¶
func (*Queries) UpdateKnowledgeEmbedding ¶
func (q *Queries) UpdateKnowledgeEmbedding(ctx context.Context, arg UpdateKnowledgeEmbeddingParams) error
func (*Queries) UpdateProject ¶
func (*Queries) UpdateProjectStatus ¶
func (*Queries) UpdateReviewSchedule ¶
func (q *Queries) UpdateReviewSchedule(ctx context.Context, arg UpdateReviewScheduleParams) (ReviewSchedule, error)
func (*Queries) UpdateTaskStatus ¶
func (*Queries) UpsertRepo ¶
path/description/language/current_branch/next_planned_step are presence-aware (Ω6, 2026-08-20-mcp-surface-spec.md): the CASE checks the bound PARAMETER ($2/$3/$4/$5/$7), not EXCLUDED.<col> (which post-INSERT is never NULL — it's whatever the VALUES clause carried). NULL means the caller omitted the field (preserve stored value); a non-NULL value (including "") means an explicit set. Without this, every sync_repo call that didn't re-specify a field silently wiped it. known_issues already had this protection.
type Reflection ¶
type Reflection struct {
ID uuid.UUID `json:"id"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
Type string `json:"type"`
RelatedEntityType pgtype.Text `json:"related_entity_type"`
RelatedEntityID pgtype.UUID `json:"related_entity_id"`
Summary string `json:"summary"`
Insights []byte `json:"insights"`
PatternsDetected []byte `json:"patterns_detected"`
SuggestedActions []byte `json:"suggested_actions"`
Confidence float64 `json:"confidence"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
}
Persisted AI reflection records; 180-day retention via the scheduled daily-reflection-prune job (DELETE WHERE created_at < NOW() - INTERVAL '180 days') per backend-security-design.md §1.3.
type Repo ¶
type Repo struct {
ID uuid.UUID `json:"id"`
Name string `json:"name"`
Path pgtype.Text `json:"path"`
Description pgtype.Text `json:"description"`
Language pgtype.Text `json:"language"`
Status string `json:"status"`
CurrentBranch pgtype.Text `json:"current_branch"`
KnownIssues []string `json:"known_issues"`
NextPlannedStep pgtype.Text `json:"next_planned_step"`
LastActivity pgtype.Timestamptz `json:"last_activity"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
}
type ResolveHandoffParams ¶
type ReviewSchedule ¶
type ReviewSchedule struct {
ID uuid.UUID `json:"id"`
ConceptID uuid.UUID `json:"concept_id"`
Stability float64 `json:"stability"`
Difficulty float64 `json:"difficulty"`
DueDate pgtype.Timestamptz `json:"due_date"`
LastReviewAt pgtype.Timestamptz `json:"last_review_at"`
ReviewCount int32 `json:"review_count"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
}
type ReviewedSinceParams ¶
type ReviewedSinceParams struct {
WorkspaceID pgtype.UUID `json:"workspace_id"`
Since pgtype.Timestamptz `json:"since"`
LimitN int32 `json:"limit_n"`
}
type ReviewedSinceRow ¶
type ReviewedSinceRow struct {
ID uuid.UUID `json:"id"`
Title string `json:"title"`
DueDate pgtype.Timestamptz `json:"due_date"`
}
type SessionHandoff ¶
type SessionHandoff struct {
ID uuid.UUID `json:"id"`
ProjectID pgtype.UUID `json:"project_id"`
RepoName pgtype.Text `json:"repo_name"`
Intent string `json:"intent"`
ContextSummary pgtype.Text `json:"context_summary"`
ResolvedAt pgtype.Timestamptz `json:"resolved_at"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
SummaryText pgtype.Text `json:"summary_text"`
Embedding []byte `json:"embedding"`
NextActions []byte `json:"next_actions"`
EmbeddingProvider pgtype.Text `json:"embedding_provider"`
EmbeddingModel pgtype.Text `json:"embedding_model"`
EmbeddingDim pgtype.Int4 `json:"embedding_dim"`
}
type Skill ¶
type Skill struct {
ID uuid.UUID `json:"id"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
Name string `json:"name"`
Description string `json:"description"`
Triggers []byte `json:"triggers"`
Steps []byte `json:"steps"`
FailureModes []byte `json:"failure_modes"`
VerificationChecklist []byte `json:"verification_checklist"`
Examples []byte `json:"examples"`
// Code-layer refs to memory_atoms.id; no FK per project red-line #9
SourceAtomIds []byte `json:"source_atom_ids"`
SuccessCount int32 `json:"success_count"`
FailureCount int32 `json:"failure_count"`
LastUsedAt pgtype.Timestamptz `json:"last_used_at"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
}
Curated skill library — intentionally no TTL; rows accumulate by design (explicit extract_skill only).
type Task ¶
type Task struct {
ID uuid.UUID `json:"id"`
ProjectID pgtype.UUID `json:"project_id"`
Title string `json:"title"`
Description pgtype.Text `json:"description"`
Status string `json:"status"`
Priority int32 `json:"priority"`
Assignee pgtype.Text `json:"assignee"`
DueDate pgtype.Timestamptz `json:"due_date"`
Artifact pgtype.Text `json:"artifact"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
Importance pgtype.Int2 `json:"importance"`
Context pgtype.Text `json:"context"`
Checklist []byte `json:"checklist"`
Kind string `json:"kind"`
BranchName pgtype.Text `json:"branch_name"`
PRUrl pgtype.Text `json:"pr_url"`
CommitSHAs []string `json:"commit_shas"`
VisionItemID pgtype.UUID `json:"vision_item_id"`
}
type UpdateGoalParams ¶
type UpdateProjectParams ¶
type UpdateProjectParams struct {
Title string `json:"title"`
Description pgtype.Text `json:"description"`
Area string `json:"area"`
Priority int32 `json:"priority"`
Status string `json:"status"`
GoalID pgtype.UUID `json:"goal_id"`
ID uuid.UUID `json:"id"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
}
type UpdateTaskStatusParams ¶
type UpsertRepoParams ¶
type UpsertRepoParams struct {
Name string `json:"name"`
Path pgtype.Text `json:"path"`
Description pgtype.Text `json:"description"`
Language pgtype.Text `json:"language"`
CurrentBranch pgtype.Text `json:"current_branch"`
KnownIssues []string `json:"known_issues"`
NextPlannedStep pgtype.Text `json:"next_planned_step"`
LastActivity pgtype.Timestamptz `json:"last_activity"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
}
type VisionItem ¶
type VisionItem struct {
ID uuid.UUID `json:"id"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
RepoName pgtype.Text `json:"repo_name"`
ProjectID pgtype.UUID `json:"project_id"`
Title string `json:"title"`
WhyBlocked string `json:"why_blocked"`
DependsOn []byte `json:"depends_on"`
ParentInitiative pgtype.Text `json:"parent_initiative"`
Status string `json:"status"`
ContextMd pgtype.Text `json:"context_md"`
PromotedTaskID pgtype.UUID `json:"promoted_task_id"`
LastDiscussedAt pgtype.Timestamptz `json:"last_discussed_at"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
}
type WorkSession ¶
type WorkSession struct {
ID uuid.UUID `json:"id"`
WorkspaceID uuid.UUID `json:"workspace_id"`
RepoName string `json:"repo_name"`
ProjectID pgtype.UUID `json:"project_id"`
Title string `json:"title"`
Goal string `json:"goal"`
Status string `json:"status"`
Source string `json:"source"`
ConfirmedPlanID pgtype.UUID `json:"confirmed_plan_id"`
CurrentTaskID pgtype.UUID `json:"current_task_id"`
FinalSummary pgtype.Text `json:"final_summary"`
StartedAt pgtype.Timestamptz `json:"started_at"`
LastCheckpointAt pgtype.Timestamptz `json:"last_checkpoint_at"`
CompletedAt pgtype.Timestamptz `json:"completed_at"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
ContextPackID pgtype.UUID `json:"context_pack_id"`
VerificationStatus pgtype.Text `json:"verification_status"`
VerificationCommand pgtype.Text `json:"verification_command"`
VerificationOutputExcerpt pgtype.Text `json:"verification_output_excerpt"`
OutcomeID pgtype.UUID `json:"outcome_id"`
FinalResult pgtype.Text `json:"final_result"`
BranchName pgtype.Text `json:"branch_name"`
}
type WorkSessionEvidence ¶
type WorkSessionEvidence struct {
ID uuid.UUID `json:"id"`
WorkspaceID pgtype.UUID `json:"workspace_id"`
SessionID uuid.UUID `json:"session_id"`
EvidenceType string `json:"evidence_type"`
Status string `json:"status"`
Command pgtype.Text `json:"command"`
Artifact pgtype.Text `json:"artifact"`
OutputExcerpt pgtype.Text `json:"output_excerpt"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
}
type WorkSessionTask ¶
type WorkspacePreference ¶
type WorkspacePreference struct {
WorkspaceID uuid.UUID `json:"workspace_id"`
ModelPreference string `json:"model_preference"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
}