db

package
v0.15.0 Latest Latest
Warning

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

Go to latest
Published: Jan 18, 2026 License: MIT Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const SchemaVersion = 11

SchemaVersion is the current database schema version

Variables

View Source
var Migrations = []Migration{

	{
		Version:     2,
		Description: "Add action_log table for undo support",
		SQL: `
CREATE TABLE IF NOT EXISTS action_log (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    session_id TEXT NOT NULL,
    action_type TEXT NOT NULL,
    entity_type TEXT NOT NULL,
    entity_id TEXT NOT NULL,
    previous_data TEXT DEFAULT '',
    new_data TEXT DEFAULT '',
    timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    undone INTEGER DEFAULT 0
);
CREATE INDEX IF NOT EXISTS idx_action_log_session ON action_log(session_id);
CREATE INDEX IF NOT EXISTS idx_action_log_timestamp ON action_log(timestamp);
`,
	},
	{
		Version:     3,
		Description: "Allow work session logs without issue_id",
		SQL: `
-- SQLite doesn't support ALTER COLUMN, so we need to recreate the table
CREATE TABLE logs_new (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    issue_id TEXT DEFAULT '',
    session_id TEXT NOT NULL,
    work_session_id TEXT DEFAULT '',
    message TEXT NOT NULL,
    type TEXT NOT NULL DEFAULT 'progress',
    timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO logs_new SELECT * FROM logs;
DROP TABLE logs;
ALTER TABLE logs_new RENAME TO logs;
CREATE INDEX IF NOT EXISTS idx_logs_issue ON logs(issue_id);
CREATE INDEX IF NOT EXISTS idx_logs_work_session ON logs(work_session_id);
`,
	},
	{
		Version:     4,
		Description: "Add minor flag to issues for self-reviewable tasks",
		SQL:         `ALTER TABLE issues ADD COLUMN minor INTEGER DEFAULT 0;`,
	},
	{
		Version:     5,
		Description: "Add created_branch to issues",
		SQL:         `ALTER TABLE issues ADD COLUMN created_branch TEXT DEFAULT '';`,
	},
	{
		Version:     6,
		Description: "Add creator_session for review enforcement",
		SQL:         `ALTER TABLE issues ADD COLUMN creator_session TEXT DEFAULT '';`,
	},
	{
		Version:     7,
		Description: "Add session history for review enforcement",
		SQL: `CREATE TABLE IF NOT EXISTS issue_session_history (
    id TEXT PRIMARY KEY,
    issue_id TEXT NOT NULL,
    session_id TEXT NOT NULL,
    action TEXT NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (issue_id) REFERENCES issues(id)
);
CREATE INDEX IF NOT EXISTS idx_ish_issue ON issue_session_history(issue_id);
CREATE INDEX IF NOT EXISTS idx_ish_session ON issue_session_history(session_id);`,
	},
	{
		Version:     8,
		Description: "Add timestamp indexes for activity queries",
		SQL: `CREATE INDEX IF NOT EXISTS idx_handoffs_timestamp ON handoffs(timestamp);
CREATE INDEX IF NOT EXISTS idx_issues_deleted_status ON issues(deleted_at, status);`,
	},
	{
		Version:     9,
		Description: "Add boards and board_issues tables",
		SQL: `
-- Boards table
CREATE TABLE IF NOT EXISTS boards (
    id TEXT PRIMARY KEY,
    name TEXT NOT NULL COLLATE NOCASE UNIQUE,
    last_viewed_at DATETIME,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);

-- Board-Issue membership with ordering
CREATE TABLE IF NOT EXISTS board_issues (
    board_id TEXT NOT NULL,
    issue_id TEXT NOT NULL,
    position INTEGER NOT NULL,
    added_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (board_id, issue_id),
    FOREIGN KEY (board_id) REFERENCES boards(id) ON DELETE CASCADE,
    FOREIGN KEY (issue_id) REFERENCES issues(id) ON DELETE CASCADE
);

CREATE UNIQUE INDEX IF NOT EXISTS idx_board_issues_position ON board_issues(board_id, position);
`,
	},
	{
		Version:     10,
		Description: "Query-based boards with sparse ordering and sprint field",
		SQL: `
-- Add query and is_builtin columns to boards
ALTER TABLE boards ADD COLUMN query TEXT NOT NULL DEFAULT '';
ALTER TABLE boards ADD COLUMN is_builtin INTEGER NOT NULL DEFAULT 0;

-- Rename board_issues to board_issue_positions for semantic clarity
DROP INDEX IF EXISTS idx_board_issues_position;
ALTER TABLE board_issues RENAME TO board_issue_positions;

-- Recreate index on positions
CREATE UNIQUE INDEX IF NOT EXISTS idx_board_positions_position
    ON board_issue_positions(board_id, position);

-- Add sprint field to issues
ALTER TABLE issues ADD COLUMN sprint TEXT DEFAULT '';

-- Create built-in "All Issues" board (empty query = all issues)
INSERT INTO boards (id, name, query, is_builtin, created_at, updated_at)
VALUES ('bd-all-issues', 'All Issues', '', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
ON CONFLICT(name) DO UPDATE SET
    query = excluded.query,
    is_builtin = 1,
    updated_at = CURRENT_TIMESTAMP;
`,
	},
	{
		Version:     11,
		Description: "Add view_mode to boards for swimlanes/backlog toggle",
		SQL:         `ALTER TABLE boards ADD COLUMN view_mode TEXT NOT NULL DEFAULT 'swimlanes';`,
	},
}

Migrations is the list of all database migrations in order

View Source
var QueryValidator func(queryStr string) error

QueryValidator is set by main to validate TDQ queries without import cycle. Returns nil if valid, error describing parse failure otherwise.

Functions

func AnalyticsEnabled added in v0.7.0

func AnalyticsEnabled() bool

AnalyticsEnabled returns true unless TD_ANALYTICS is explicitly disabled

func ClearAgentErrors added in v0.4.16

func ClearAgentErrors(baseDir string) error

ClearAgentErrors removes the agent errors file.

func ClearCommandUsage added in v0.7.0

func ClearCommandUsage(baseDir string) error

ClearCommandUsage removes the usage file

func ClearSecurityEvents added in v0.5.0

func ClearSecurityEvents(baseDir string) error

ClearSecurityEvents removes the security events file

func CountAgentErrors added in v0.4.16

func CountAgentErrors(baseDir string) (int, error)

CountAgentErrors returns the number of logged errors.

func CountCommandUsage added in v0.7.0

func CountCommandUsage(baseDir string) (int, error)

CountCommandUsage returns the number of logged events

func LogAgentError added in v0.4.16

func LogAgentError(baseDir string, args []string, errMsg string, sessionID string) error

LogAgentError appends a failed command to the agent errors file. baseDir is the project root. If the .todos directory doesn't exist, the error is silently dropped (project not initialized).

func LogCommandUsage added in v0.7.0

func LogCommandUsage(baseDir string, event CommandUsageEvent) error

LogCommandUsage appends a usage event to the JSONL file

func LogCommandUsageAsync added in v0.7.0

func LogCommandUsageAsync(baseDir string, event CommandUsageEvent)

LogCommandUsageAsync logs without blocking the caller

func LogSecurityEvent added in v0.5.0

func LogSecurityEvent(baseDir string, event SecurityEvent) error

LogSecurityEvent appends a security event to the jsonl file

func NormalizeIssueID added in v0.4.17

func NormalizeIssueID(id string) string

NormalizeIssueID ensures an issue ID has the td- prefix Accepts bare hex IDs like "abc123" and returns "td-abc123"

func ResolveBaseDir added in v0.12.0

func ResolveBaseDir(baseDir string) string

ResolveBaseDir checks for a .td-root file in the given directory. If found, it returns the path contained in that file (pointing to the main worktree's root). Otherwise, returns the original baseDir unchanged. This enables git worktrees to share a single td database with the main repo.

func SanitizeFlags added in v0.7.0

func SanitizeFlags(flags map[string]string) map[string]string

SanitizeFlags redacts sensitive flag values

Types

type AgentError added in v0.4.16

type AgentError struct {
	Timestamp time.Time `json:"ts"`
	Args      []string  `json:"args"`
	Error     string    `json:"error"`
	SessionID string    `json:"session,omitempty"`
}

AgentError represents a failed command invocation

func ReadAgentErrors added in v0.4.16

func ReadAgentErrors(baseDir string) ([]AgentError, error)

ReadAgentErrors reads all agent errors from the file. Returns empty slice if file doesn't exist.

func ReadAgentErrorsFiltered added in v0.4.16

func ReadAgentErrorsFiltered(baseDir string, sessionID string, since time.Time, limit int) ([]AgentError, error)

ReadAgentErrorsFiltered reads agent errors matching the filter criteria.

type AnalyticsSummary added in v0.7.0

type AnalyticsSummary struct {
	TotalCommands   int            `json:"total_commands"`
	UniqueCommands  int            `json:"unique_commands"`
	CommandCounts   map[string]int `json:"by_command"`
	FlagCounts      map[string]int `json:"by_flag"`
	DailyActivity   map[string]int `json:"daily"`
	ErrorRate       float64        `json:"error_rate"`
	ErrorsByCommand map[string]int `json:"errors_by_command"`
	SessionActivity map[string]int `json:"by_session"`
	AvgDurationMs   int64          `json:"avg_dur_ms"`
	NeverUsed       []string       `json:"never_used,omitempty"`
}

AnalyticsSummary holds aggregated analytics data

func ComputeAnalyticsSummary added in v0.7.0

func ComputeAnalyticsSummary(events []CommandUsageEvent, allCommands []string) *AnalyticsSummary

ComputeAnalyticsSummary aggregates events into summary stats

type BoardIssuePosition added in v0.10.0

type BoardIssuePosition struct {
	BoardID  string
	IssueID  string
	Position int
}

BoardIssuePosition represents an explicit position for an issue on a board

type CommandUsageEvent added in v0.7.0

type CommandUsageEvent struct {
	Timestamp  time.Time         `json:"ts"`
	Command    string            `json:"cmd"`
	Subcommand string            `json:"sub,omitempty"`
	Flags      map[string]string `json:"flags,omitempty"`
	SessionID  string            `json:"session,omitempty"`
	Success    bool              `json:"ok"`
	DurationMs int64             `json:"dur_ms"`
	Error      string            `json:"err,omitempty"`
}

CommandUsageEvent represents a single CLI invocation

func ReadCommandUsage added in v0.7.0

func ReadCommandUsage(baseDir string) ([]CommandUsageEvent, error)

ReadCommandUsage reads all usage events from the file

func ReadCommandUsageFiltered added in v0.7.0

func ReadCommandUsageFiltered(baseDir string, since time.Time, limit int) ([]CommandUsageEvent, error)

ReadCommandUsageFiltered reads usage events matching filter criteria

type DB

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

DB wraps the database connection

func Initialize

func Initialize(baseDir string) (*DB, error)

Initialize creates the database and runs migrations

func Open

func Open(baseDir string) (*DB, error)

Open opens the database and runs any pending migrations

func (*DB) AddComment

func (db *DB) AddComment(comment *models.Comment) error

AddComment adds a comment to an issue

func (*DB) AddDependency

func (db *DB) AddDependency(issueID, dependsOnID, relationType string) error

AddDependency adds a dependency between issues

func (*DB) AddGitSnapshot

func (db *DB) AddGitSnapshot(snapshot *models.GitSnapshot) error

AddGitSnapshot records a git state snapshot

func (*DB) AddHandoff

func (db *DB) AddHandoff(handoff *models.Handoff) error

AddHandoff adds a handoff entry

func (*DB) AddLog

func (db *DB) AddLog(log *models.Log) error

AddLog adds a log entry to an issue

func (*DB) ApplyBoardPositions added in v0.10.0

func (db *DB) ApplyBoardPositions(boardID string, issues []models.Issue) ([]models.BoardIssueView, error)

ApplyBoardPositions takes a list of issues and applies board positions. Issues with explicit positions are sorted by position and returned first, followed by unpositioned issues in their original order. This function should be used with query.Execute() results for boards with TDQ queries.

func (*DB) BaseDir

func (db *DB) BaseDir() string

BaseDir returns the base directory for the database

func (*DB) CascadeUpParentStatus added in v0.4.16

func (db *DB) CascadeUpParentStatus(issueID string, targetStatus models.Status, sessionID string) (int, []string)

CascadeUpParentStatus checks if all children of a parent epic have reached the target status, and if so, updates the parent to that status. Works recursively up the parent chain. Returns the number of parents that were cascaded and the list of cascaded parent IDs.

func (*DB) Close

func (db *DB) Close() error

Close closes the database

func (*DB) CreateBoard added in v0.10.0

func (db *DB) CreateBoard(name, queryStr string) (*models.Board, error)

CreateBoard creates a new board with a TDQ query

func (*DB) CreateIssue

func (db *DB) CreateIssue(issue *models.Issue) error

CreateIssue creates a new issue

func (*DB) CreateWorkSession

func (db *DB) CreateWorkSession(ws *models.WorkSession) error

CreateWorkSession creates a new work session

func (*DB) DeleteBoard added in v0.10.0

func (db *DB) DeleteBoard(id string) error

DeleteBoard deletes a board (fails for builtin boards)

func (*DB) DeleteHandoff added in v0.4.16

func (db *DB) DeleteHandoff(handoffID int64) error

DeleteHandoff removes a handoff by ID (for undo support)

func (*DB) DeleteIssue

func (db *DB) DeleteIssue(id string) error

DeleteIssue soft-deletes an issue

func (*DB) GetActiveSessions

func (db *DB) GetActiveSessions(since time.Time) ([]string, error)

GetActiveSessions returns distinct session IDs with activity since the given time

func (*DB) GetAllDependencies added in v0.7.0

func (db *DB) GetAllDependencies() (map[string][]string, error)

GetAllDependencies returns all dependency relationships as a map

func (*DB) GetBlockedBy

func (db *DB) GetBlockedBy(issueID string) ([]string, error)

GetBlockedBy returns what issues are blocked by this issue

func (*DB) GetBoard added in v0.10.0

func (db *DB) GetBoard(id string) (*models.Board, error)

GetBoard retrieves a board by ID

func (*DB) GetBoardByName added in v0.10.0

func (db *DB) GetBoardByName(name string) (*models.Board, error)

GetBoardByName retrieves a board by name (case-insensitive)

func (*DB) GetBoardIssuePositions added in v0.10.0

func (db *DB) GetBoardIssuePositions(boardID string) ([]BoardIssuePosition, error)

GetBoardIssuePositions returns all explicit positions for a board

func (*DB) GetBoardIssues added in v0.10.0

func (db *DB) GetBoardIssues(boardID, sessionID string, statusFilter []models.Status) ([]models.BoardIssueView, error)

GetBoardIssues returns issues for a board with their positions. For boards with empty query, it fetches all issues directly. For boards with TDQ queries, callers should use ApplyBoardPositions with pre-executed query results to avoid circular import issues. Issues are returned: positioned first (by position), then unpositioned (by query order).

func (*DB) GetComments

func (db *DB) GetComments(issueID string) ([]models.Comment, error)

GetComments retrieves comments for an issue

func (*DB) GetDependencies

func (db *DB) GetDependencies(issueID string) ([]string, error)

GetDependencies returns what an issue depends on

func (*DB) GetDescendantIssues added in v0.4.16

func (db *DB) GetDescendantIssues(issueID string, statuses []models.Status) ([]*models.Issue, error)

GetDescendantIssues returns all descendant issues (children, grandchildren, etc.) filtered by the given statuses (empty = all statuses)

func (*DB) GetDirectChildren added in v0.4.16

func (db *DB) GetDirectChildren(issueID string) ([]*models.Issue, error)

GetDirectChildren returns the direct children of an issue (not recursive)

func (*DB) GetExtendedStats added in v0.4.1

func (db *DB) GetExtendedStats() (*models.ExtendedStats, error)

GetExtendedStats returns detailed statistics for dashboard/stats displays

func (*DB) GetIssue

func (db *DB) GetIssue(id string) (*models.Issue, error)

GetIssue retrieves an issue by ID Accepts bare IDs without the td- prefix (e.g., "abc123" becomes "td-abc123")

func (*DB) GetIssueSessionLog

func (db *DB) GetIssueSessionLog(sessionID string) ([]string, error)

GetIssueSessionLog returns issues touched by a session

func (*DB) GetIssueStatuses added in v0.7.0

func (db *DB) GetIssueStatuses(ids []string) (map[string]models.Status, error)

GetIssueStatuses fetches statuses for multiple issues in a single query

func (*DB) GetIssueTitles added in v0.7.0

func (db *DB) GetIssueTitles(ids []string) (map[string]string, error)

GetIssueTitles fetches titles for multiple issues in a single query

func (*DB) GetIssuesByIDs added in v0.7.0

func (db *DB) GetIssuesByIDs(ids []string) ([]models.Issue, error)

GetIssuesByIDs fetches multiple issues in a single query

func (*DB) GetLastAction

func (db *DB) GetLastAction(sessionID string) (*models.ActionLog, error)

GetLastAction returns the most recent undoable action for a session

func (*DB) GetLastViewedBoard added in v0.10.0

func (db *DB) GetLastViewedBoard() (*models.Board, error)

GetLastViewedBoard returns the most recently viewed board

func (*DB) GetLatestHandoff

func (db *DB) GetLatestHandoff(issueID string) (*models.Handoff, error)

GetLatestHandoff retrieves the latest handoff for an issue

func (*DB) GetLinkedFiles

func (db *DB) GetLinkedFiles(issueID string) ([]models.IssueFile, error)

GetLinkedFiles returns files linked to an issue

func (*DB) GetLogs

func (db *DB) GetLogs(issueID string, limit int) ([]models.Log, error)

GetLogs retrieves logs for an issue, including work session logs

func (*DB) GetLogsByWorkSession

func (db *DB) GetLogsByWorkSession(wsID string) ([]models.Log, error)

GetLogsByWorkSession retrieves logs for a specific work session

func (*DB) GetMaxBoardPosition added in v0.13.0

func (db *DB) GetMaxBoardPosition(boardID string) (int, error)

GetMaxBoardPosition returns the highest position value for a board, or 0 if no positioned issues.

func (*DB) GetRecentActions

func (db *DB) GetRecentActions(sessionID string, limit int) ([]models.ActionLog, error)

GetRecentActions returns recent actions for a session

func (*DB) GetRecentActionsAll

func (db *DB) GetRecentActionsAll(limit int) ([]models.ActionLog, error)

GetRecentActionsAll returns recent action_log entries across all sessions

func (*DB) GetRecentCommentsAll

func (db *DB) GetRecentCommentsAll(limit int) ([]models.Comment, error)

GetRecentCommentsAll returns recent comments across all issues

func (*DB) GetRecentHandoffs

func (db *DB) GetRecentHandoffs(limit int, since time.Time) ([]models.Handoff, error)

GetRecentHandoffs retrieves recent handoffs across all issues

func (*DB) GetRecentLogsAll

func (db *DB) GetRecentLogsAll(limit int) ([]models.Log, error)

GetRecentLogsAll returns recent logs across all issues

func (*DB) GetRejectedInProgressIssueIDs added in v0.8.0

func (db *DB) GetRejectedInProgressIssueIDs() (map[string]bool, error)

GetRejectedInProgressIssueIDs returns IDs of in_progress issues that have a recent ActionReject without a subsequent ActionReview (needs rework)

func (*DB) GetSchemaVersion

func (db *DB) GetSchemaVersion() (int, error)

GetSchemaVersion returns the current schema version from the database

func (*DB) GetSessionHistory added in v0.4.26

func (db *DB) GetSessionHistory(issueID string) ([]models.IssueSessionHistory, error)

GetSessionHistory returns all session interactions for an issue

func (*DB) GetStartSnapshot

func (db *DB) GetStartSnapshot(issueID string) (*models.GitSnapshot, error)

GetStartSnapshot returns the start snapshot for an issue

func (*DB) GetStats

func (db *DB) GetStats() (map[string]int, error)

GetStats returns database statistics

func (*DB) GetWorkSession

func (db *DB) GetWorkSession(id string) (*models.WorkSession, error)

GetWorkSession retrieves a work session

func (*DB) GetWorkSessionIssues

func (db *DB) GetWorkSessionIssues(wsID string) ([]string, error)

GetWorkSessionIssues returns issues tagged to a work session

func (*DB) HasChildren added in v0.4.16

func (db *DB) HasChildren(issueID string) (bool, error)

HasChildren returns true if the issue has any child issues

func (*DB) LinkFile

func (db *DB) LinkFile(issueID, filePath string, role models.FileRole, sha string) error

LinkFile links a file to an issue

func (*DB) ListBoards added in v0.10.0

func (db *DB) ListBoards() ([]models.Board, error)

ListBoards returns all boards sorted by last_viewed_at DESC

func (*DB) ListIssues

func (db *DB) ListIssues(opts ListIssuesOptions) ([]models.Issue, error)

ListIssues returns issues matching the filter

func (*DB) ListWorkSessions

func (db *DB) ListWorkSessions(limit int) ([]models.WorkSession, error)

ListWorkSessions returns recent work sessions

func (*DB) LogAction

func (db *DB) LogAction(action *models.ActionLog) error

LogAction records an action for undo support

func (*DB) MarkActionUndone

func (db *DB) MarkActionUndone(actionID int64) error

MarkActionUndone marks an action as undone

func (*DB) RecordSessionAction added in v0.4.26

func (db *DB) RecordSessionAction(issueID, sessionID string, action models.IssueSessionAction) error

RecordSessionAction logs a session's interaction with an issue

func (*DB) RemoveDependency

func (db *DB) RemoveDependency(issueID, dependsOnID string) error

RemoveDependency removes a dependency

func (*DB) RemoveIssuePosition added in v0.10.0

func (db *DB) RemoveIssuePosition(boardID, issueID string) error

RemoveIssuePosition removes an explicit position for an issue

func (*DB) ResolveBoardRef added in v0.10.0

func (db *DB) ResolveBoardRef(ref string) (*models.Board, error)

ResolveBoardRef resolves a board reference (ID or name)

func (*DB) RestoreIssue

func (db *DB) RestoreIssue(id string) error

RestoreIssue restores a soft-deleted issue

func (*DB) RunMigrations

func (db *DB) RunMigrations() (int, error)

RunMigrations runs any pending database migrations

func (*DB) SearchIssues

func (db *DB) SearchIssues(query string, opts ListIssuesOptions) ([]models.Issue, error)

SearchIssues performs full-text search across issues

func (*DB) SearchIssuesRanked added in v0.4.9

func (db *DB) SearchIssuesRanked(query string, opts ListIssuesOptions) ([]SearchResult, error)

SearchIssuesRanked performs search with relevance scoring

func (*DB) SetIssuePosition added in v0.10.0

func (db *DB) SetIssuePosition(boardID, issueID string, position int) error

SetIssuePosition sets an explicit position for an issue on a board

func (*DB) SetSchemaVersion

func (db *DB) SetSchemaVersion(version int) error

SetSchemaVersion sets the schema version in the database

func (*DB) SwapIssuePositions added in v0.10.0

func (db *DB) SwapIssuePositions(boardID, id1, id2 string) error

SwapIssuePositions swaps the positions of two issues on a board

func (*DB) TagIssueToWorkSession

func (db *DB) TagIssueToWorkSession(wsID, issueID string) error

TagIssueToWorkSession links an issue to a work session

func (*DB) UnlinkFile

func (db *DB) UnlinkFile(issueID, filePath string) error

UnlinkFile removes a file link

func (*DB) UntagIssueFromWorkSession

func (db *DB) UntagIssueFromWorkSession(wsID, issueID string) error

UntagIssueFromWorkSession removes an issue from a work session

func (*DB) UpdateBoard added in v0.10.0

func (db *DB) UpdateBoard(board *models.Board) error

UpdateBoard updates a board's name and/or query

func (*DB) UpdateBoardLastViewed added in v0.10.0

func (db *DB) UpdateBoardLastViewed(boardID string) error

UpdateBoardLastViewed updates the last_viewed_at timestamp for a board

func (*DB) UpdateBoardViewMode added in v0.10.0

func (db *DB) UpdateBoardViewMode(boardID, viewMode string) error

UpdateBoardViewMode updates the view_mode for a board (swimlanes or backlog)

func (*DB) UpdateIssue

func (db *DB) UpdateIssue(issue *models.Issue) error

UpdateIssue updates an issue

func (*DB) UpdateWorkSession

func (db *DB) UpdateWorkSession(ws *models.WorkSession) error

UpdateWorkSession updates a work session

func (*DB) WasSessionInvolved added in v0.4.26

func (db *DB) WasSessionInvolved(issueID, sessionID string) (bool, error)

WasSessionInvolved checks if a session ever interacted with an issue

type ListIssuesOptions

type ListIssuesOptions struct {
	Status         []models.Status
	Type           []models.Type
	Priority       string
	Labels         []string
	IncludeDeleted bool
	OnlyDeleted    bool
	Search         string
	Implementer    string
	Reviewer       string
	ReviewableBy   string // Issues that this session can review
	ParentID       string
	EpicID         string // Filter by epic (parent_id matches epic, recursively)
	PointsMin      int
	PointsMax      int
	CreatedAfter   time.Time
	CreatedBefore  time.Time
	UpdatedAfter   time.Time
	UpdatedBefore  time.Time
	ClosedAfter    time.Time
	ClosedBefore   time.Time
	SortBy         string
	SortDesc       bool
	Limit          int
	IDs            []string
}

ListIssuesOptions contains filter options for listing issues

type Migration

type Migration struct {
	Version     int
	Description string
	SQL         string
}

Migration defines a database migration

type SearchResult added in v0.4.9

type SearchResult struct {
	Issue      models.Issue
	Score      int    // Higher = better match (0-100)
	MatchField string // Primary field that matched: 'id', 'title', 'description', 'labels'
}

SearchResult holds an issue with relevance scoring for ranked search

type SecurityEvent added in v0.5.0

type SecurityEvent struct {
	Timestamp time.Time `json:"ts"`
	IssueID   string    `json:"issue_id"`
	SessionID string    `json:"session_id"`
	AgentType string    `json:"agent_type,omitempty"`
	Reason    string    `json:"reason"`
}

SecurityEvent represents a security-relevant action (like a self-close exception)

func ReadSecurityEvents added in v0.5.0

func ReadSecurityEvents(baseDir string) ([]SecurityEvent, error)

ReadSecurityEvents reads all security events from the file

Jump to

Keyboard shortcuts

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