Browse Source

wip: refactoring tui

adamdottv 9 months ago
parent
commit
4818bc5426

+ 0 - 68
internal/db/connect.go

@@ -1,68 +0,0 @@
-package db
-
-import (
-	"database/sql"
-	"fmt"
-	"os"
-	"path/filepath"
-
-	_ "github.com/ncruces/go-sqlite3/driver"
-	_ "github.com/ncruces/go-sqlite3/embed"
-
-	"github.com/sst/opencode/internal/config"
-	"log/slog"
-
-	"github.com/pressly/goose/v3"
-)
-
-func Connect() (*sql.DB, error) {
-	dataDir := config.Get().Data.Directory
-	if dataDir == "" {
-		return nil, fmt.Errorf("data.dir is not set")
-	}
-	if err := os.MkdirAll(dataDir, 0o700); err != nil {
-		return nil, fmt.Errorf("failed to create data directory: %w", err)
-	}
-	dbPath := filepath.Join(dataDir, "opencode.db")
-	// Open the SQLite database
-	db, err := sql.Open("sqlite3", dbPath)
-	if err != nil {
-		return nil, fmt.Errorf("failed to open database: %w", err)
-	}
-
-	// Verify connection
-	if err = db.Ping(); err != nil {
-		db.Close()
-		return nil, fmt.Errorf("failed to connect to database: %w", err)
-	}
-
-	// Set pragmas for better performance
-	pragmas := []string{
-		"PRAGMA foreign_keys = ON;",
-		"PRAGMA journal_mode = WAL;",
-		"PRAGMA page_size = 4096;",
-		"PRAGMA cache_size = -8000;",
-		"PRAGMA synchronous = NORMAL;",
-	}
-
-	for _, pragma := range pragmas {
-		if _, err = db.Exec(pragma); err != nil {
-			slog.Error("Failed to set pragma", pragma, err)
-		} else {
-			slog.Debug("Set pragma", "pragma", pragma)
-		}
-	}
-
-	goose.SetBaseFS(FS)
-
-	if err := goose.SetDialect("sqlite3"); err != nil {
-		slog.Error("Failed to set dialect", "error", err)
-		return nil, fmt.Errorf("failed to set dialect: %w", err)
-	}
-
-	if err := goose.Up(db, "migrations"); err != nil {
-		slog.Error("Failed to apply migrations", "error", err)
-		return nil, fmt.Errorf("failed to apply migrations: %w", err)
-	}
-	return db, nil
-}

+ 0 - 328
internal/db/db.go

@@ -1,328 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-//   sqlc v1.29.0
-
-package db
-
-import (
-	"context"
-	"database/sql"
-	"fmt"
-)
-
-type DBTX interface {
-	ExecContext(context.Context, string, ...interface{}) (sql.Result, error)
-	PrepareContext(context.Context, string) (*sql.Stmt, error)
-	QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error)
-	QueryRowContext(context.Context, string, ...interface{}) *sql.Row
-}
-
-func New(db DBTX) *Queries {
-	return &Queries{db: db}
-}
-
-func Prepare(ctx context.Context, db DBTX) (*Queries, error) {
-	q := Queries{db: db}
-	var err error
-	if q.createFileStmt, err = db.PrepareContext(ctx, createFile); err != nil {
-		return nil, fmt.Errorf("error preparing query CreateFile: %w", err)
-	}
-	if q.createLogStmt, err = db.PrepareContext(ctx, createLog); err != nil {
-		return nil, fmt.Errorf("error preparing query CreateLog: %w", err)
-	}
-	if q.createMessageStmt, err = db.PrepareContext(ctx, createMessage); err != nil {
-		return nil, fmt.Errorf("error preparing query CreateMessage: %w", err)
-	}
-	if q.createSessionStmt, err = db.PrepareContext(ctx, createSession); err != nil {
-		return nil, fmt.Errorf("error preparing query CreateSession: %w", err)
-	}
-	if q.deleteFileStmt, err = db.PrepareContext(ctx, deleteFile); err != nil {
-		return nil, fmt.Errorf("error preparing query DeleteFile: %w", err)
-	}
-	if q.deleteMessageStmt, err = db.PrepareContext(ctx, deleteMessage); err != nil {
-		return nil, fmt.Errorf("error preparing query DeleteMessage: %w", err)
-	}
-	if q.deleteSessionStmt, err = db.PrepareContext(ctx, deleteSession); err != nil {
-		return nil, fmt.Errorf("error preparing query DeleteSession: %w", err)
-	}
-	if q.deleteSessionFilesStmt, err = db.PrepareContext(ctx, deleteSessionFiles); err != nil {
-		return nil, fmt.Errorf("error preparing query DeleteSessionFiles: %w", err)
-	}
-	if q.deleteSessionMessagesStmt, err = db.PrepareContext(ctx, deleteSessionMessages); err != nil {
-		return nil, fmt.Errorf("error preparing query DeleteSessionMessages: %w", err)
-	}
-	if q.getFileStmt, err = db.PrepareContext(ctx, getFile); err != nil {
-		return nil, fmt.Errorf("error preparing query GetFile: %w", err)
-	}
-	if q.getFileByPathAndSessionStmt, err = db.PrepareContext(ctx, getFileByPathAndSession); err != nil {
-		return nil, fmt.Errorf("error preparing query GetFileByPathAndSession: %w", err)
-	}
-	if q.getMessageStmt, err = db.PrepareContext(ctx, getMessage); err != nil {
-		return nil, fmt.Errorf("error preparing query GetMessage: %w", err)
-	}
-	if q.getSessionByIDStmt, err = db.PrepareContext(ctx, getSessionByID); err != nil {
-		return nil, fmt.Errorf("error preparing query GetSessionByID: %w", err)
-	}
-	if q.listAllLogsStmt, err = db.PrepareContext(ctx, listAllLogs); err != nil {
-		return nil, fmt.Errorf("error preparing query ListAllLogs: %w", err)
-	}
-	if q.listFilesByPathStmt, err = db.PrepareContext(ctx, listFilesByPath); err != nil {
-		return nil, fmt.Errorf("error preparing query ListFilesByPath: %w", err)
-	}
-	if q.listFilesBySessionStmt, err = db.PrepareContext(ctx, listFilesBySession); err != nil {
-		return nil, fmt.Errorf("error preparing query ListFilesBySession: %w", err)
-	}
-	if q.listLatestSessionFilesStmt, err = db.PrepareContext(ctx, listLatestSessionFiles); err != nil {
-		return nil, fmt.Errorf("error preparing query ListLatestSessionFiles: %w", err)
-	}
-	if q.listLogsBySessionStmt, err = db.PrepareContext(ctx, listLogsBySession); err != nil {
-		return nil, fmt.Errorf("error preparing query ListLogsBySession: %w", err)
-	}
-	if q.listMessagesBySessionStmt, err = db.PrepareContext(ctx, listMessagesBySession); err != nil {
-		return nil, fmt.Errorf("error preparing query ListMessagesBySession: %w", err)
-	}
-	if q.listMessagesBySessionAfterStmt, err = db.PrepareContext(ctx, listMessagesBySessionAfter); err != nil {
-		return nil, fmt.Errorf("error preparing query ListMessagesBySessionAfter: %w", err)
-	}
-	if q.listNewFilesStmt, err = db.PrepareContext(ctx, listNewFiles); err != nil {
-		return nil, fmt.Errorf("error preparing query ListNewFiles: %w", err)
-	}
-	if q.listSessionsStmt, err = db.PrepareContext(ctx, listSessions); err != nil {
-		return nil, fmt.Errorf("error preparing query ListSessions: %w", err)
-	}
-	if q.updateFileStmt, err = db.PrepareContext(ctx, updateFile); err != nil {
-		return nil, fmt.Errorf("error preparing query UpdateFile: %w", err)
-	}
-	if q.updateMessageStmt, err = db.PrepareContext(ctx, updateMessage); err != nil {
-		return nil, fmt.Errorf("error preparing query UpdateMessage: %w", err)
-	}
-	if q.updateSessionStmt, err = db.PrepareContext(ctx, updateSession); err != nil {
-		return nil, fmt.Errorf("error preparing query UpdateSession: %w", err)
-	}
-	return &q, nil
-}
-
-func (q *Queries) Close() error {
-	var err error
-	if q.createFileStmt != nil {
-		if cerr := q.createFileStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing createFileStmt: %w", cerr)
-		}
-	}
-	if q.createLogStmt != nil {
-		if cerr := q.createLogStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing createLogStmt: %w", cerr)
-		}
-	}
-	if q.createMessageStmt != nil {
-		if cerr := q.createMessageStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing createMessageStmt: %w", cerr)
-		}
-	}
-	if q.createSessionStmt != nil {
-		if cerr := q.createSessionStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing createSessionStmt: %w", cerr)
-		}
-	}
-	if q.deleteFileStmt != nil {
-		if cerr := q.deleteFileStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing deleteFileStmt: %w", cerr)
-		}
-	}
-	if q.deleteMessageStmt != nil {
-		if cerr := q.deleteMessageStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing deleteMessageStmt: %w", cerr)
-		}
-	}
-	if q.deleteSessionStmt != nil {
-		if cerr := q.deleteSessionStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing deleteSessionStmt: %w", cerr)
-		}
-	}
-	if q.deleteSessionFilesStmt != nil {
-		if cerr := q.deleteSessionFilesStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing deleteSessionFilesStmt: %w", cerr)
-		}
-	}
-	if q.deleteSessionMessagesStmt != nil {
-		if cerr := q.deleteSessionMessagesStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing deleteSessionMessagesStmt: %w", cerr)
-		}
-	}
-	if q.getFileStmt != nil {
-		if cerr := q.getFileStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing getFileStmt: %w", cerr)
-		}
-	}
-	if q.getFileByPathAndSessionStmt != nil {
-		if cerr := q.getFileByPathAndSessionStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing getFileByPathAndSessionStmt: %w", cerr)
-		}
-	}
-	if q.getMessageStmt != nil {
-		if cerr := q.getMessageStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing getMessageStmt: %w", cerr)
-		}
-	}
-	if q.getSessionByIDStmt != nil {
-		if cerr := q.getSessionByIDStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing getSessionByIDStmt: %w", cerr)
-		}
-	}
-	if q.listAllLogsStmt != nil {
-		if cerr := q.listAllLogsStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing listAllLogsStmt: %w", cerr)
-		}
-	}
-	if q.listFilesByPathStmt != nil {
-		if cerr := q.listFilesByPathStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing listFilesByPathStmt: %w", cerr)
-		}
-	}
-	if q.listFilesBySessionStmt != nil {
-		if cerr := q.listFilesBySessionStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing listFilesBySessionStmt: %w", cerr)
-		}
-	}
-	if q.listLatestSessionFilesStmt != nil {
-		if cerr := q.listLatestSessionFilesStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing listLatestSessionFilesStmt: %w", cerr)
-		}
-	}
-	if q.listLogsBySessionStmt != nil {
-		if cerr := q.listLogsBySessionStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing listLogsBySessionStmt: %w", cerr)
-		}
-	}
-	if q.listMessagesBySessionStmt != nil {
-		if cerr := q.listMessagesBySessionStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing listMessagesBySessionStmt: %w", cerr)
-		}
-	}
-	if q.listMessagesBySessionAfterStmt != nil {
-		if cerr := q.listMessagesBySessionAfterStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing listMessagesBySessionAfterStmt: %w", cerr)
-		}
-	}
-	if q.listNewFilesStmt != nil {
-		if cerr := q.listNewFilesStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing listNewFilesStmt: %w", cerr)
-		}
-	}
-	if q.listSessionsStmt != nil {
-		if cerr := q.listSessionsStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing listSessionsStmt: %w", cerr)
-		}
-	}
-	if q.updateFileStmt != nil {
-		if cerr := q.updateFileStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing updateFileStmt: %w", cerr)
-		}
-	}
-	if q.updateMessageStmt != nil {
-		if cerr := q.updateMessageStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing updateMessageStmt: %w", cerr)
-		}
-	}
-	if q.updateSessionStmt != nil {
-		if cerr := q.updateSessionStmt.Close(); cerr != nil {
-			err = fmt.Errorf("error closing updateSessionStmt: %w", cerr)
-		}
-	}
-	return err
-}
-
-func (q *Queries) exec(ctx context.Context, stmt *sql.Stmt, query string, args ...interface{}) (sql.Result, error) {
-	switch {
-	case stmt != nil && q.tx != nil:
-		return q.tx.StmtContext(ctx, stmt).ExecContext(ctx, args...)
-	case stmt != nil:
-		return stmt.ExecContext(ctx, args...)
-	default:
-		return q.db.ExecContext(ctx, query, args...)
-	}
-}
-
-func (q *Queries) query(ctx context.Context, stmt *sql.Stmt, query string, args ...interface{}) (*sql.Rows, error) {
-	switch {
-	case stmt != nil && q.tx != nil:
-		return q.tx.StmtContext(ctx, stmt).QueryContext(ctx, args...)
-	case stmt != nil:
-		return stmt.QueryContext(ctx, args...)
-	default:
-		return q.db.QueryContext(ctx, query, args...)
-	}
-}
-
-func (q *Queries) queryRow(ctx context.Context, stmt *sql.Stmt, query string, args ...interface{}) *sql.Row {
-	switch {
-	case stmt != nil && q.tx != nil:
-		return q.tx.StmtContext(ctx, stmt).QueryRowContext(ctx, args...)
-	case stmt != nil:
-		return stmt.QueryRowContext(ctx, args...)
-	default:
-		return q.db.QueryRowContext(ctx, query, args...)
-	}
-}
-
-type Queries struct {
-	db                             DBTX
-	tx                             *sql.Tx
-	createFileStmt                 *sql.Stmt
-	createLogStmt                  *sql.Stmt
-	createMessageStmt              *sql.Stmt
-	createSessionStmt              *sql.Stmt
-	deleteFileStmt                 *sql.Stmt
-	deleteMessageStmt              *sql.Stmt
-	deleteSessionStmt              *sql.Stmt
-	deleteSessionFilesStmt         *sql.Stmt
-	deleteSessionMessagesStmt      *sql.Stmt
-	getFileStmt                    *sql.Stmt
-	getFileByPathAndSessionStmt    *sql.Stmt
-	getMessageStmt                 *sql.Stmt
-	getSessionByIDStmt             *sql.Stmt
-	listAllLogsStmt                *sql.Stmt
-	listFilesByPathStmt            *sql.Stmt
-	listFilesBySessionStmt         *sql.Stmt
-	listLatestSessionFilesStmt     *sql.Stmt
-	listLogsBySessionStmt          *sql.Stmt
-	listMessagesBySessionStmt      *sql.Stmt
-	listMessagesBySessionAfterStmt *sql.Stmt
-	listNewFilesStmt               *sql.Stmt
-	listSessionsStmt               *sql.Stmt
-	updateFileStmt                 *sql.Stmt
-	updateMessageStmt              *sql.Stmt
-	updateSessionStmt              *sql.Stmt
-}
-
-func (q *Queries) WithTx(tx *sql.Tx) *Queries {
-	return &Queries{
-		db:                             tx,
-		tx:                             tx,
-		createFileStmt:                 q.createFileStmt,
-		createLogStmt:                  q.createLogStmt,
-		createMessageStmt:              q.createMessageStmt,
-		createSessionStmt:              q.createSessionStmt,
-		deleteFileStmt:                 q.deleteFileStmt,
-		deleteMessageStmt:              q.deleteMessageStmt,
-		deleteSessionStmt:              q.deleteSessionStmt,
-		deleteSessionFilesStmt:         q.deleteSessionFilesStmt,
-		deleteSessionMessagesStmt:      q.deleteSessionMessagesStmt,
-		getFileStmt:                    q.getFileStmt,
-		getFileByPathAndSessionStmt:    q.getFileByPathAndSessionStmt,
-		getMessageStmt:                 q.getMessageStmt,
-		getSessionByIDStmt:             q.getSessionByIDStmt,
-		listAllLogsStmt:                q.listAllLogsStmt,
-		listFilesByPathStmt:            q.listFilesByPathStmt,
-		listFilesBySessionStmt:         q.listFilesBySessionStmt,
-		listLatestSessionFilesStmt:     q.listLatestSessionFilesStmt,
-		listLogsBySessionStmt:          q.listLogsBySessionStmt,
-		listMessagesBySessionStmt:      q.listMessagesBySessionStmt,
-		listMessagesBySessionAfterStmt: q.listMessagesBySessionAfterStmt,
-		listNewFilesStmt:               q.listNewFilesStmt,
-		listSessionsStmt:               q.listSessionsStmt,
-		updateFileStmt:                 q.updateFileStmt,
-		updateMessageStmt:              q.updateMessageStmt,
-		updateSessionStmt:              q.updateSessionStmt,
-	}
-}

+ 0 - 6
internal/db/embed.go

@@ -1,6 +0,0 @@
-package db
-
-import "embed"
-
-//go:embed migrations/*.sql
-var FS embed.FS

+ 0 - 317
internal/db/files.sql.go

@@ -1,317 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-//   sqlc v1.29.0
-// source: files.sql
-
-package db
-
-import (
-	"context"
-)
-
-const createFile = `-- name: CreateFile :one
-INSERT INTO files (
-    id,
-    session_id,
-    path,
-    content,
-    version
-) VALUES (
-    ?, ?, ?, ?, ?
-)
-RETURNING id, session_id, path, content, version, is_new, created_at, updated_at
-`
-
-type CreateFileParams struct {
-	ID        string `json:"id"`
-	SessionID string `json:"session_id"`
-	Path      string `json:"path"`
-	Content   string `json:"content"`
-	Version   string `json:"version"`
-}
-
-func (q *Queries) CreateFile(ctx context.Context, arg CreateFileParams) (File, error) {
-	row := q.queryRow(ctx, q.createFileStmt, createFile,
-		arg.ID,
-		arg.SessionID,
-		arg.Path,
-		arg.Content,
-		arg.Version,
-	)
-	var i File
-	err := row.Scan(
-		&i.ID,
-		&i.SessionID,
-		&i.Path,
-		&i.Content,
-		&i.Version,
-		&i.IsNew,
-		&i.CreatedAt,
-		&i.UpdatedAt,
-	)
-	return i, err
-}
-
-const deleteFile = `-- name: DeleteFile :exec
-DELETE FROM files
-WHERE id = ?
-`
-
-func (q *Queries) DeleteFile(ctx context.Context, id string) error {
-	_, err := q.exec(ctx, q.deleteFileStmt, deleteFile, id)
-	return err
-}
-
-const deleteSessionFiles = `-- name: DeleteSessionFiles :exec
-DELETE FROM files
-WHERE session_id = ?
-`
-
-func (q *Queries) DeleteSessionFiles(ctx context.Context, sessionID string) error {
-	_, err := q.exec(ctx, q.deleteSessionFilesStmt, deleteSessionFiles, sessionID)
-	return err
-}
-
-const getFile = `-- name: GetFile :one
-SELECT id, session_id, path, content, version, is_new, created_at, updated_at
-FROM files
-WHERE id = ? LIMIT 1
-`
-
-func (q *Queries) GetFile(ctx context.Context, id string) (File, error) {
-	row := q.queryRow(ctx, q.getFileStmt, getFile, id)
-	var i File
-	err := row.Scan(
-		&i.ID,
-		&i.SessionID,
-		&i.Path,
-		&i.Content,
-		&i.Version,
-		&i.IsNew,
-		&i.CreatedAt,
-		&i.UpdatedAt,
-	)
-	return i, err
-}
-
-const getFileByPathAndSession = `-- name: GetFileByPathAndSession :one
-SELECT id, session_id, path, content, version, is_new, created_at, updated_at
-FROM files
-WHERE path = ? AND session_id = ?
-ORDER BY created_at DESC
-LIMIT 1
-`
-
-type GetFileByPathAndSessionParams struct {
-	Path      string `json:"path"`
-	SessionID string `json:"session_id"`
-}
-
-func (q *Queries) GetFileByPathAndSession(ctx context.Context, arg GetFileByPathAndSessionParams) (File, error) {
-	row := q.queryRow(ctx, q.getFileByPathAndSessionStmt, getFileByPathAndSession, arg.Path, arg.SessionID)
-	var i File
-	err := row.Scan(
-		&i.ID,
-		&i.SessionID,
-		&i.Path,
-		&i.Content,
-		&i.Version,
-		&i.IsNew,
-		&i.CreatedAt,
-		&i.UpdatedAt,
-	)
-	return i, err
-}
-
-const listFilesByPath = `-- name: ListFilesByPath :many
-SELECT id, session_id, path, content, version, is_new, created_at, updated_at
-FROM files
-WHERE path = ?
-ORDER BY created_at DESC
-`
-
-func (q *Queries) ListFilesByPath(ctx context.Context, path string) ([]File, error) {
-	rows, err := q.query(ctx, q.listFilesByPathStmt, listFilesByPath, path)
-	if err != nil {
-		return nil, err
-	}
-	defer rows.Close()
-	items := []File{}
-	for rows.Next() {
-		var i File
-		if err := rows.Scan(
-			&i.ID,
-			&i.SessionID,
-			&i.Path,
-			&i.Content,
-			&i.Version,
-			&i.IsNew,
-			&i.CreatedAt,
-			&i.UpdatedAt,
-		); err != nil {
-			return nil, err
-		}
-		items = append(items, i)
-	}
-	if err := rows.Close(); err != nil {
-		return nil, err
-	}
-	if err := rows.Err(); err != nil {
-		return nil, err
-	}
-	return items, nil
-}
-
-const listFilesBySession = `-- name: ListFilesBySession :many
-SELECT id, session_id, path, content, version, is_new, created_at, updated_at
-FROM files
-WHERE session_id = ?
-ORDER BY created_at ASC
-`
-
-func (q *Queries) ListFilesBySession(ctx context.Context, sessionID string) ([]File, error) {
-	rows, err := q.query(ctx, q.listFilesBySessionStmt, listFilesBySession, sessionID)
-	if err != nil {
-		return nil, err
-	}
-	defer rows.Close()
-	items := []File{}
-	for rows.Next() {
-		var i File
-		if err := rows.Scan(
-			&i.ID,
-			&i.SessionID,
-			&i.Path,
-			&i.Content,
-			&i.Version,
-			&i.IsNew,
-			&i.CreatedAt,
-			&i.UpdatedAt,
-		); err != nil {
-			return nil, err
-		}
-		items = append(items, i)
-	}
-	if err := rows.Close(); err != nil {
-		return nil, err
-	}
-	if err := rows.Err(); err != nil {
-		return nil, err
-	}
-	return items, nil
-}
-
-const listLatestSessionFiles = `-- name: ListLatestSessionFiles :many
-SELECT f.id, f.session_id, f.path, f.content, f.version, f.is_new, f.created_at, f.updated_at
-FROM files f
-INNER JOIN (
-    SELECT path, MAX(created_at) as max_created_at
-    FROM files
-    GROUP BY path
-) latest ON f.path = latest.path AND f.created_at = latest.max_created_at
-WHERE f.session_id = ?
-ORDER BY f.path
-`
-
-func (q *Queries) ListLatestSessionFiles(ctx context.Context, sessionID string) ([]File, error) {
-	rows, err := q.query(ctx, q.listLatestSessionFilesStmt, listLatestSessionFiles, sessionID)
-	if err != nil {
-		return nil, err
-	}
-	defer rows.Close()
-	items := []File{}
-	for rows.Next() {
-		var i File
-		if err := rows.Scan(
-			&i.ID,
-			&i.SessionID,
-			&i.Path,
-			&i.Content,
-			&i.Version,
-			&i.IsNew,
-			&i.CreatedAt,
-			&i.UpdatedAt,
-		); err != nil {
-			return nil, err
-		}
-		items = append(items, i)
-	}
-	if err := rows.Close(); err != nil {
-		return nil, err
-	}
-	if err := rows.Err(); err != nil {
-		return nil, err
-	}
-	return items, nil
-}
-
-const listNewFiles = `-- name: ListNewFiles :many
-SELECT id, session_id, path, content, version, is_new, created_at, updated_at
-FROM files
-WHERE is_new = 1
-ORDER BY created_at DESC
-`
-
-func (q *Queries) ListNewFiles(ctx context.Context) ([]File, error) {
-	rows, err := q.query(ctx, q.listNewFilesStmt, listNewFiles)
-	if err != nil {
-		return nil, err
-	}
-	defer rows.Close()
-	items := []File{}
-	for rows.Next() {
-		var i File
-		if err := rows.Scan(
-			&i.ID,
-			&i.SessionID,
-			&i.Path,
-			&i.Content,
-			&i.Version,
-			&i.IsNew,
-			&i.CreatedAt,
-			&i.UpdatedAt,
-		); err != nil {
-			return nil, err
-		}
-		items = append(items, i)
-	}
-	if err := rows.Close(); err != nil {
-		return nil, err
-	}
-	if err := rows.Err(); err != nil {
-		return nil, err
-	}
-	return items, nil
-}
-
-const updateFile = `-- name: UpdateFile :one
-UPDATE files
-SET
-    content = ?,
-    version = ?,
-    updated_at = strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')
-WHERE id = ?
-RETURNING id, session_id, path, content, version, is_new, created_at, updated_at
-`
-
-type UpdateFileParams struct {
-	Content string `json:"content"`
-	Version string `json:"version"`
-	ID      string `json:"id"`
-}
-
-func (q *Queries) UpdateFile(ctx context.Context, arg UpdateFileParams) (File, error) {
-	row := q.queryRow(ctx, q.updateFileStmt, updateFile, arg.Content, arg.Version, arg.ID)
-	var i File
-	err := row.Scan(
-		&i.ID,
-		&i.SessionID,
-		&i.Path,
-		&i.Content,
-		&i.Version,
-		&i.IsNew,
-		&i.CreatedAt,
-		&i.UpdatedAt,
-	)
-	return i, err
-}

+ 0 - 137
internal/db/logs.sql.go

@@ -1,137 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-//   sqlc v1.29.0
-// source: logs.sql
-
-package db
-
-import (
-	"context"
-	"database/sql"
-)
-
-const createLog = `-- name: CreateLog :one
-INSERT INTO logs (
-    id,
-    session_id,
-    timestamp,
-    level,
-    message,
-    attributes
-) VALUES (
-    ?,
-    ?,
-    ?,
-    ?,
-    ?,
-    ?
-) RETURNING id, session_id, timestamp, level, message, attributes, created_at, updated_at
-`
-
-type CreateLogParams struct {
-	ID         string         `json:"id"`
-	SessionID  sql.NullString `json:"session_id"`
-	Timestamp  string         `json:"timestamp"`
-	Level      string         `json:"level"`
-	Message    string         `json:"message"`
-	Attributes sql.NullString `json:"attributes"`
-}
-
-func (q *Queries) CreateLog(ctx context.Context, arg CreateLogParams) (Log, error) {
-	row := q.queryRow(ctx, q.createLogStmt, createLog,
-		arg.ID,
-		arg.SessionID,
-		arg.Timestamp,
-		arg.Level,
-		arg.Message,
-		arg.Attributes,
-	)
-	var i Log
-	err := row.Scan(
-		&i.ID,
-		&i.SessionID,
-		&i.Timestamp,
-		&i.Level,
-		&i.Message,
-		&i.Attributes,
-		&i.CreatedAt,
-		&i.UpdatedAt,
-	)
-	return i, err
-}
-
-const listAllLogs = `-- name: ListAllLogs :many
-SELECT id, session_id, timestamp, level, message, attributes, created_at, updated_at FROM logs
-ORDER BY timestamp DESC
-LIMIT ?
-`
-
-func (q *Queries) ListAllLogs(ctx context.Context, limit int64) ([]Log, error) {
-	rows, err := q.query(ctx, q.listAllLogsStmt, listAllLogs, limit)
-	if err != nil {
-		return nil, err
-	}
-	defer rows.Close()
-	items := []Log{}
-	for rows.Next() {
-		var i Log
-		if err := rows.Scan(
-			&i.ID,
-			&i.SessionID,
-			&i.Timestamp,
-			&i.Level,
-			&i.Message,
-			&i.Attributes,
-			&i.CreatedAt,
-			&i.UpdatedAt,
-		); err != nil {
-			return nil, err
-		}
-		items = append(items, i)
-	}
-	if err := rows.Close(); err != nil {
-		return nil, err
-	}
-	if err := rows.Err(); err != nil {
-		return nil, err
-	}
-	return items, nil
-}
-
-const listLogsBySession = `-- name: ListLogsBySession :many
-SELECT id, session_id, timestamp, level, message, attributes, created_at, updated_at FROM logs
-WHERE session_id = ?
-ORDER BY timestamp DESC
-`
-
-func (q *Queries) ListLogsBySession(ctx context.Context, sessionID sql.NullString) ([]Log, error) {
-	rows, err := q.query(ctx, q.listLogsBySessionStmt, listLogsBySession, sessionID)
-	if err != nil {
-		return nil, err
-	}
-	defer rows.Close()
-	items := []Log{}
-	for rows.Next() {
-		var i Log
-		if err := rows.Scan(
-			&i.ID,
-			&i.SessionID,
-			&i.Timestamp,
-			&i.Level,
-			&i.Message,
-			&i.Attributes,
-			&i.CreatedAt,
-			&i.UpdatedAt,
-		); err != nil {
-			return nil, err
-		}
-		items = append(items, i)
-	}
-	if err := rows.Close(); err != nil {
-		return nil, err
-	}
-	if err := rows.Err(); err != nil {
-		return nil, err
-	}
-	return items, nil
-}

+ 0 - 199
internal/db/messages.sql.go

@@ -1,199 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-//   sqlc v1.29.0
-// source: messages.sql
-
-package db
-
-import (
-	"context"
-	"database/sql"
-)
-
-const createMessage = `-- name: CreateMessage :one
-INSERT INTO messages (
-    id,
-    session_id,
-    role,
-    parts,
-    model
-) VALUES (
-    ?, ?, ?, ?, ?
-)
-RETURNING id, session_id, role, parts, model, created_at, updated_at, finished_at
-`
-
-type CreateMessageParams struct {
-	ID        string         `json:"id"`
-	SessionID string         `json:"session_id"`
-	Role      string         `json:"role"`
-	Parts     string         `json:"parts"`
-	Model     sql.NullString `json:"model"`
-}
-
-func (q *Queries) CreateMessage(ctx context.Context, arg CreateMessageParams) (Message, error) {
-	row := q.queryRow(ctx, q.createMessageStmt, createMessage,
-		arg.ID,
-		arg.SessionID,
-		arg.Role,
-		arg.Parts,
-		arg.Model,
-	)
-	var i Message
-	err := row.Scan(
-		&i.ID,
-		&i.SessionID,
-		&i.Role,
-		&i.Parts,
-		&i.Model,
-		&i.CreatedAt,
-		&i.UpdatedAt,
-		&i.FinishedAt,
-	)
-	return i, err
-}
-
-const deleteMessage = `-- name: DeleteMessage :exec
-DELETE FROM messages
-WHERE id = ?
-`
-
-func (q *Queries) DeleteMessage(ctx context.Context, id string) error {
-	_, err := q.exec(ctx, q.deleteMessageStmt, deleteMessage, id)
-	return err
-}
-
-const deleteSessionMessages = `-- name: DeleteSessionMessages :exec
-DELETE FROM messages
-WHERE session_id = ?
-`
-
-func (q *Queries) DeleteSessionMessages(ctx context.Context, sessionID string) error {
-	_, err := q.exec(ctx, q.deleteSessionMessagesStmt, deleteSessionMessages, sessionID)
-	return err
-}
-
-const getMessage = `-- name: GetMessage :one
-SELECT id, session_id, role, parts, model, created_at, updated_at, finished_at
-FROM messages
-WHERE id = ? LIMIT 1
-`
-
-func (q *Queries) GetMessage(ctx context.Context, id string) (Message, error) {
-	row := q.queryRow(ctx, q.getMessageStmt, getMessage, id)
-	var i Message
-	err := row.Scan(
-		&i.ID,
-		&i.SessionID,
-		&i.Role,
-		&i.Parts,
-		&i.Model,
-		&i.CreatedAt,
-		&i.UpdatedAt,
-		&i.FinishedAt,
-	)
-	return i, err
-}
-
-const listMessagesBySession = `-- name: ListMessagesBySession :many
-SELECT id, session_id, role, parts, model, created_at, updated_at, finished_at
-FROM messages
-WHERE session_id = ?
-ORDER BY created_at ASC
-`
-
-func (q *Queries) ListMessagesBySession(ctx context.Context, sessionID string) ([]Message, error) {
-	rows, err := q.query(ctx, q.listMessagesBySessionStmt, listMessagesBySession, sessionID)
-	if err != nil {
-		return nil, err
-	}
-	defer rows.Close()
-	items := []Message{}
-	for rows.Next() {
-		var i Message
-		if err := rows.Scan(
-			&i.ID,
-			&i.SessionID,
-			&i.Role,
-			&i.Parts,
-			&i.Model,
-			&i.CreatedAt,
-			&i.UpdatedAt,
-			&i.FinishedAt,
-		); err != nil {
-			return nil, err
-		}
-		items = append(items, i)
-	}
-	if err := rows.Close(); err != nil {
-		return nil, err
-	}
-	if err := rows.Err(); err != nil {
-		return nil, err
-	}
-	return items, nil
-}
-
-const listMessagesBySessionAfter = `-- name: ListMessagesBySessionAfter :many
-SELECT id, session_id, role, parts, model, created_at, updated_at, finished_at
-FROM messages
-WHERE session_id = ? AND created_at > ?
-ORDER BY created_at ASC
-`
-
-type ListMessagesBySessionAfterParams struct {
-	SessionID string `json:"session_id"`
-	CreatedAt string `json:"created_at"`
-}
-
-func (q *Queries) ListMessagesBySessionAfter(ctx context.Context, arg ListMessagesBySessionAfterParams) ([]Message, error) {
-	rows, err := q.query(ctx, q.listMessagesBySessionAfterStmt, listMessagesBySessionAfter, arg.SessionID, arg.CreatedAt)
-	if err != nil {
-		return nil, err
-	}
-	defer rows.Close()
-	items := []Message{}
-	for rows.Next() {
-		var i Message
-		if err := rows.Scan(
-			&i.ID,
-			&i.SessionID,
-			&i.Role,
-			&i.Parts,
-			&i.Model,
-			&i.CreatedAt,
-			&i.UpdatedAt,
-			&i.FinishedAt,
-		); err != nil {
-			return nil, err
-		}
-		items = append(items, i)
-	}
-	if err := rows.Close(); err != nil {
-		return nil, err
-	}
-	if err := rows.Err(); err != nil {
-		return nil, err
-	}
-	return items, nil
-}
-
-const updateMessage = `-- name: UpdateMessage :exec
-UPDATE messages
-SET
-    parts = ?,
-    finished_at = ?,
-    updated_at = strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')
-WHERE id = ?
-`
-
-type UpdateMessageParams struct {
-	Parts      string         `json:"parts"`
-	FinishedAt sql.NullString `json:"finished_at"`
-	ID         string         `json:"id"`
-}
-
-func (q *Queries) UpdateMessage(ctx context.Context, arg UpdateMessageParams) error {
-	_, err := q.exec(ctx, q.updateMessageStmt, updateMessage, arg.Parts, arg.FinishedAt, arg.ID)
-	return err
-}

+ 0 - 125
internal/db/migrations/20250513000000_initial.sql

@@ -1,125 +0,0 @@
--- +goose Up
--- +goose StatementBegin
--- Sessions
-CREATE TABLE IF NOT EXISTS sessions (
-    id TEXT PRIMARY KEY,
-    parent_session_id TEXT,
-    title TEXT NOT NULL,
-    message_count INTEGER NOT NULL DEFAULT 0 CHECK (message_count >= 0),
-    prompt_tokens INTEGER NOT NULL DEFAULT 0 CHECK (prompt_tokens >= 0),
-    completion_tokens INTEGER NOT NULL DEFAULT 0 CHECK (completion_tokens >= 0),
-    cost REAL NOT NULL DEFAULT 0.0 CHECK (cost >= 0.0),
-    summary TEXT,
-    summarized_at TEXT,
-    updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')),
-    created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%f000Z', 'now'))
-);
-
-CREATE TRIGGER IF NOT EXISTS update_sessions_updated_at
-AFTER UPDATE ON sessions
-BEGIN
-UPDATE sessions SET updated_at = strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')
-WHERE id = new.id;
-END;
-
--- Files
-CREATE TABLE IF NOT EXISTS files (
-    id TEXT PRIMARY KEY,
-    session_id TEXT NOT NULL,
-    path TEXT NOT NULL,
-    content TEXT NOT NULL,
-    version TEXT NOT NULL,
-    is_new INTEGER DEFAULT 0,
-    created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')),
-    updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')),
-    FOREIGN KEY (session_id) REFERENCES sessions (id) ON DELETE CASCADE,
-    UNIQUE(path, session_id, version)
-);
-
-CREATE INDEX IF NOT EXISTS idx_files_session_id ON files (session_id);
-CREATE INDEX IF NOT EXISTS idx_files_path ON files (path);
-
-CREATE TRIGGER IF NOT EXISTS update_files_updated_at
-AFTER UPDATE ON files
-BEGIN
-UPDATE files SET updated_at = strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')
-WHERE id = new.id;
-END;
-
--- Messages
-CREATE TABLE IF NOT EXISTS messages (
-    id TEXT PRIMARY KEY,
-    session_id TEXT NOT NULL,
-    role TEXT NOT NULL,
-    parts TEXT NOT NULL default '[]',
-    model TEXT,
-    created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')),
-    updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')),
-    finished_at TEXT,
-    FOREIGN KEY (session_id) REFERENCES sessions (id) ON DELETE CASCADE
-);
-
-CREATE INDEX IF NOT EXISTS idx_messages_session_id ON messages (session_id);
-
-CREATE TRIGGER IF NOT EXISTS update_messages_updated_at
-AFTER UPDATE ON messages
-BEGIN
-UPDATE messages SET updated_at = strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')
-WHERE id = new.id;
-END;
-
-CREATE TRIGGER IF NOT EXISTS update_session_message_count_on_insert
-AFTER INSERT ON messages
-BEGIN
-UPDATE sessions SET
-    message_count = message_count + 1
-WHERE id = new.session_id;
-END;
-
-CREATE TRIGGER IF NOT EXISTS update_session_message_count_on_delete
-AFTER DELETE ON messages
-BEGIN
-UPDATE sessions SET
-    message_count = message_count - 1
-WHERE id = old.session_id;
-END;
-
--- Logs
-CREATE TABLE IF NOT EXISTS logs (
-    id TEXT PRIMARY KEY,
-    session_id TEXT REFERENCES sessions(id) ON DELETE CASCADE,
-    timestamp TEXT NOT NULL,
-    level TEXT NOT NULL,
-    message TEXT NOT NULL,
-    attributes TEXT,
-    created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')),
-    updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%f000Z', 'now'))
-);
-
-CREATE INDEX logs_session_id_idx ON logs(session_id);
-CREATE INDEX logs_timestamp_idx ON logs(timestamp);
-
-CREATE TRIGGER IF NOT EXISTS update_logs_updated_at
-AFTER UPDATE ON logs
-BEGIN
-UPDATE logs SET updated_at = strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')
-WHERE id = new.id;
-END;
-
--- +goose StatementEnd
-
--- +goose Down
--- +goose StatementBegin
-DROP TRIGGER IF EXISTS update_sessions_updated_at;
-DROP TRIGGER IF EXISTS update_messages_updated_at;
-DROP TRIGGER IF EXISTS update_files_updated_at;
-DROP TRIGGER IF EXISTS update_logs_updated_at;
-
-DROP TRIGGER IF EXISTS update_session_message_count_on_delete;
-DROP TRIGGER IF EXISTS update_session_message_count_on_insert;
-
-DROP TABLE IF EXISTS logs;
-DROP TABLE IF EXISTS messages;
-DROP TABLE IF EXISTS files;
-DROP TABLE IF EXISTS sessions;
--- +goose StatementEnd

+ 0 - 56
internal/db/models.go

@@ -1,56 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-//   sqlc v1.29.0
-
-package db
-
-import (
-	"database/sql"
-)
-
-type File struct {
-	ID        string        `json:"id"`
-	SessionID string        `json:"session_id"`
-	Path      string        `json:"path"`
-	Content   string        `json:"content"`
-	Version   string        `json:"version"`
-	IsNew     sql.NullInt64 `json:"is_new"`
-	CreatedAt string        `json:"created_at"`
-	UpdatedAt string        `json:"updated_at"`
-}
-
-type Log struct {
-	ID         string         `json:"id"`
-	SessionID  sql.NullString `json:"session_id"`
-	Timestamp  string         `json:"timestamp"`
-	Level      string         `json:"level"`
-	Message    string         `json:"message"`
-	Attributes sql.NullString `json:"attributes"`
-	CreatedAt  string         `json:"created_at"`
-	UpdatedAt  string         `json:"updated_at"`
-}
-
-type Message struct {
-	ID         string         `json:"id"`
-	SessionID  string         `json:"session_id"`
-	Role       string         `json:"role"`
-	Parts      string         `json:"parts"`
-	Model      sql.NullString `json:"model"`
-	CreatedAt  string         `json:"created_at"`
-	UpdatedAt  string         `json:"updated_at"`
-	FinishedAt sql.NullString `json:"finished_at"`
-}
-
-type Session struct {
-	ID               string         `json:"id"`
-	ParentSessionID  sql.NullString `json:"parent_session_id"`
-	Title            string         `json:"title"`
-	MessageCount     int64          `json:"message_count"`
-	PromptTokens     int64          `json:"prompt_tokens"`
-	CompletionTokens int64          `json:"completion_tokens"`
-	Cost             float64        `json:"cost"`
-	Summary          sql.NullString `json:"summary"`
-	SummarizedAt     sql.NullString `json:"summarized_at"`
-	UpdatedAt        string         `json:"updated_at"`
-	CreatedAt        string         `json:"created_at"`
-}

+ 0 - 40
internal/db/querier.go

@@ -1,40 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-//   sqlc v1.29.0
-
-package db
-
-import (
-	"context"
-	"database/sql"
-)
-
-type Querier interface {
-	CreateFile(ctx context.Context, arg CreateFileParams) (File, error)
-	CreateLog(ctx context.Context, arg CreateLogParams) (Log, error)
-	CreateMessage(ctx context.Context, arg CreateMessageParams) (Message, error)
-	CreateSession(ctx context.Context, arg CreateSessionParams) (Session, error)
-	DeleteFile(ctx context.Context, id string) error
-	DeleteMessage(ctx context.Context, id string) error
-	DeleteSession(ctx context.Context, id string) error
-	DeleteSessionFiles(ctx context.Context, sessionID string) error
-	DeleteSessionMessages(ctx context.Context, sessionID string) error
-	GetFile(ctx context.Context, id string) (File, error)
-	GetFileByPathAndSession(ctx context.Context, arg GetFileByPathAndSessionParams) (File, error)
-	GetMessage(ctx context.Context, id string) (Message, error)
-	GetSessionByID(ctx context.Context, id string) (Session, error)
-	ListAllLogs(ctx context.Context, limit int64) ([]Log, error)
-	ListFilesByPath(ctx context.Context, path string) ([]File, error)
-	ListFilesBySession(ctx context.Context, sessionID string) ([]File, error)
-	ListLatestSessionFiles(ctx context.Context, sessionID string) ([]File, error)
-	ListLogsBySession(ctx context.Context, sessionID sql.NullString) ([]Log, error)
-	ListMessagesBySession(ctx context.Context, sessionID string) ([]Message, error)
-	ListMessagesBySessionAfter(ctx context.Context, arg ListMessagesBySessionAfterParams) ([]Message, error)
-	ListNewFiles(ctx context.Context) ([]File, error)
-	ListSessions(ctx context.Context) ([]Session, error)
-	UpdateFile(ctx context.Context, arg UpdateFileParams) (File, error)
-	UpdateMessage(ctx context.Context, arg UpdateMessageParams) error
-	UpdateSession(ctx context.Context, arg UpdateSessionParams) (Session, error)
-}
-
-var _ Querier = (*Queries)(nil)

+ 0 - 203
internal/db/sessions.sql.go

@@ -1,203 +0,0 @@
-// Code generated by sqlc. DO NOT EDIT.
-// versions:
-//   sqlc v1.29.0
-// source: sessions.sql
-
-package db
-
-import (
-	"context"
-	"database/sql"
-)
-
-const createSession = `-- name: CreateSession :one
-INSERT INTO sessions (
-    id,
-    parent_session_id,
-    title,
-    message_count,
-    prompt_tokens,
-    completion_tokens,
-    cost,
-    summary,
-    summarized_at
-) VALUES (
-    ?,
-    ?,
-    ?,
-    ?,
-    ?,
-    ?,
-    ?,
-    ?,
-    ?
-) RETURNING id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, summary, summarized_at, updated_at, created_at
-`
-
-type CreateSessionParams struct {
-	ID               string         `json:"id"`
-	ParentSessionID  sql.NullString `json:"parent_session_id"`
-	Title            string         `json:"title"`
-	MessageCount     int64          `json:"message_count"`
-	PromptTokens     int64          `json:"prompt_tokens"`
-	CompletionTokens int64          `json:"completion_tokens"`
-	Cost             float64        `json:"cost"`
-	Summary          sql.NullString `json:"summary"`
-	SummarizedAt     sql.NullString `json:"summarized_at"`
-}
-
-func (q *Queries) CreateSession(ctx context.Context, arg CreateSessionParams) (Session, error) {
-	row := q.queryRow(ctx, q.createSessionStmt, createSession,
-		arg.ID,
-		arg.ParentSessionID,
-		arg.Title,
-		arg.MessageCount,
-		arg.PromptTokens,
-		arg.CompletionTokens,
-		arg.Cost,
-		arg.Summary,
-		arg.SummarizedAt,
-	)
-	var i Session
-	err := row.Scan(
-		&i.ID,
-		&i.ParentSessionID,
-		&i.Title,
-		&i.MessageCount,
-		&i.PromptTokens,
-		&i.CompletionTokens,
-		&i.Cost,
-		&i.Summary,
-		&i.SummarizedAt,
-		&i.UpdatedAt,
-		&i.CreatedAt,
-	)
-	return i, err
-}
-
-const deleteSession = `-- name: DeleteSession :exec
-DELETE FROM sessions
-WHERE id = ?
-`
-
-func (q *Queries) DeleteSession(ctx context.Context, id string) error {
-	_, err := q.exec(ctx, q.deleteSessionStmt, deleteSession, id)
-	return err
-}
-
-const getSessionByID = `-- name: GetSessionByID :one
-SELECT id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, summary, summarized_at, updated_at, created_at
-FROM sessions
-WHERE id = ? LIMIT 1
-`
-
-func (q *Queries) GetSessionByID(ctx context.Context, id string) (Session, error) {
-	row := q.queryRow(ctx, q.getSessionByIDStmt, getSessionByID, id)
-	var i Session
-	err := row.Scan(
-		&i.ID,
-		&i.ParentSessionID,
-		&i.Title,
-		&i.MessageCount,
-		&i.PromptTokens,
-		&i.CompletionTokens,
-		&i.Cost,
-		&i.Summary,
-		&i.SummarizedAt,
-		&i.UpdatedAt,
-		&i.CreatedAt,
-	)
-	return i, err
-}
-
-const listSessions = `-- name: ListSessions :many
-SELECT id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, summary, summarized_at, updated_at, created_at
-FROM sessions
-WHERE parent_session_id is NULL
-ORDER BY created_at DESC
-`
-
-func (q *Queries) ListSessions(ctx context.Context) ([]Session, error) {
-	rows, err := q.query(ctx, q.listSessionsStmt, listSessions)
-	if err != nil {
-		return nil, err
-	}
-	defer rows.Close()
-	items := []Session{}
-	for rows.Next() {
-		var i Session
-		if err := rows.Scan(
-			&i.ID,
-			&i.ParentSessionID,
-			&i.Title,
-			&i.MessageCount,
-			&i.PromptTokens,
-			&i.CompletionTokens,
-			&i.Cost,
-			&i.Summary,
-			&i.SummarizedAt,
-			&i.UpdatedAt,
-			&i.CreatedAt,
-		); err != nil {
-			return nil, err
-		}
-		items = append(items, i)
-	}
-	if err := rows.Close(); err != nil {
-		return nil, err
-	}
-	if err := rows.Err(); err != nil {
-		return nil, err
-	}
-	return items, nil
-}
-
-const updateSession = `-- name: UpdateSession :one
-UPDATE sessions
-SET
-    title = ?,
-    prompt_tokens = ?,
-    completion_tokens = ?,
-    cost = ?,
-    summary = ?,
-    summarized_at = ?
-WHERE id = ?
-RETURNING id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, summary, summarized_at, updated_at, created_at
-`
-
-type UpdateSessionParams struct {
-	Title            string         `json:"title"`
-	PromptTokens     int64          `json:"prompt_tokens"`
-	CompletionTokens int64          `json:"completion_tokens"`
-	Cost             float64        `json:"cost"`
-	Summary          sql.NullString `json:"summary"`
-	SummarizedAt     sql.NullString `json:"summarized_at"`
-	ID               string         `json:"id"`
-}
-
-func (q *Queries) UpdateSession(ctx context.Context, arg UpdateSessionParams) (Session, error) {
-	row := q.queryRow(ctx, q.updateSessionStmt, updateSession,
-		arg.Title,
-		arg.PromptTokens,
-		arg.CompletionTokens,
-		arg.Cost,
-		arg.Summary,
-		arg.SummarizedAt,
-		arg.ID,
-	)
-	var i Session
-	err := row.Scan(
-		&i.ID,
-		&i.ParentSessionID,
-		&i.Title,
-		&i.MessageCount,
-		&i.PromptTokens,
-		&i.CompletionTokens,
-		&i.Cost,
-		&i.Summary,
-		&i.SummarizedAt,
-		&i.UpdatedAt,
-		&i.CreatedAt,
-	)
-	return i, err
-}

+ 0 - 69
internal/db/sql/files.sql

@@ -1,69 +0,0 @@
--- name: GetFile :one
-SELECT *
-FROM files
-WHERE id = ? LIMIT 1;
-
--- name: GetFileByPathAndSession :one
-SELECT *
-FROM files
-WHERE path = ? AND session_id = ?
-ORDER BY created_at DESC
-LIMIT 1;
-
--- name: ListFilesBySession :many
-SELECT *
-FROM files
-WHERE session_id = ?
-ORDER BY created_at ASC;
-
--- name: ListFilesByPath :many
-SELECT *
-FROM files
-WHERE path = ?
-ORDER BY created_at DESC;
-
--- name: CreateFile :one
-INSERT INTO files (
-    id,
-    session_id,
-    path,
-    content,
-    version
-) VALUES (
-    ?, ?, ?, ?, ?
-)
-RETURNING *;
-
--- name: UpdateFile :one
-UPDATE files
-SET
-    content = ?,
-    version = ?,
-    updated_at = strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')
-WHERE id = ?
-RETURNING *;
-
--- name: DeleteFile :exec
-DELETE FROM files
-WHERE id = ?;
-
--- name: DeleteSessionFiles :exec
-DELETE FROM files
-WHERE session_id = ?;
-
--- name: ListLatestSessionFiles :many
-SELECT f.*
-FROM files f
-INNER JOIN (
-    SELECT path, MAX(created_at) as max_created_at
-    FROM files
-    GROUP BY path
-) latest ON f.path = latest.path AND f.created_at = latest.max_created_at
-WHERE f.session_id = ?
-ORDER BY f.path;
-
--- name: ListNewFiles :many
-SELECT *
-FROM files
-WHERE is_new = 1
-ORDER BY created_at DESC;

+ 0 - 26
internal/db/sql/logs.sql

@@ -1,26 +0,0 @@
--- name: CreateLog :one
-INSERT INTO logs (
-    id,
-    session_id,
-    timestamp,
-    level,
-    message,
-    attributes
-) VALUES (
-    ?,
-    ?,
-    ?,
-    ?,
-    ?,
-    ?
-) RETURNING *;
-
--- name: ListLogsBySession :many
-SELECT * FROM logs
-WHERE session_id = ?
-ORDER BY timestamp DESC;
-
--- name: ListAllLogs :many
-SELECT * FROM logs
-ORDER BY timestamp DESC
-LIMIT ?;

+ 0 - 45
internal/db/sql/messages.sql

@@ -1,45 +0,0 @@
--- name: GetMessage :one
-SELECT *
-FROM messages
-WHERE id = ? LIMIT 1;
-
--- name: ListMessagesBySession :many
-SELECT *
-FROM messages
-WHERE session_id = ?
-ORDER BY created_at ASC;
-
--- name: ListMessagesBySessionAfter :many
-SELECT *
-FROM messages
-WHERE session_id = ? AND created_at > ?
-ORDER BY created_at ASC;
-
--- name: CreateMessage :one
-INSERT INTO messages (
-    id,
-    session_id,
-    role,
-    parts,
-    model
-) VALUES (
-    ?, ?, ?, ?, ?
-)
-RETURNING *;
-
--- name: UpdateMessage :exec
-UPDATE messages
-SET
-    parts = ?,
-    finished_at = ?,
-    updated_at = strftime('%Y-%m-%dT%H:%M:%f000Z', 'now')
-WHERE id = ?;
-
-
--- name: DeleteMessage :exec
-DELETE FROM messages
-WHERE id = ?;
-
--- name: DeleteSessionMessages :exec
-DELETE FROM messages
-WHERE session_id = ?;

+ 0 - 50
internal/db/sql/sessions.sql

@@ -1,50 +0,0 @@
--- name: CreateSession :one
-INSERT INTO sessions (
-    id,
-    parent_session_id,
-    title,
-    message_count,
-    prompt_tokens,
-    completion_tokens,
-    cost,
-    summary,
-    summarized_at
-) VALUES (
-    ?,
-    ?,
-    ?,
-    ?,
-    ?,
-    ?,
-    ?,
-    ?,
-    ?
-) RETURNING *;
-
--- name: GetSessionByID :one
-SELECT *
-FROM sessions
-WHERE id = ? LIMIT 1;
-
--- name: ListSessions :many
-SELECT *
-FROM sessions
-WHERE parent_session_id is NULL
-ORDER BY created_at DESC;
-
--- name: UpdateSession :one
-UPDATE sessions
-SET
-    title = ?,
-    prompt_tokens = ?,
-    completion_tokens = ?,
-    cost = ?,
-    summary = ?,
-    summarized_at = ?
-WHERE id = ?
-RETURNING *;
-
-
--- name: DeleteSession :exec
-DELETE FROM sessions
-WHERE id = ?;