diff options
| author | adamdottv <[email protected]> | 2025-05-02 09:24:24 -0500 |
|---|---|---|
| committer | Adam <[email protected]> | 2025-05-02 15:24:47 -0500 |
| commit | 49423da081d6fdffb0bd7275e070a2edeb28e3b5 (patch) | |
| tree | 3119b731ecd46ff8ef3c26d779c0420c7dfe6c9e /internal/db | |
| parent | 364cf5b429c3dd6952d45c3361765aa3898e6326 (diff) | |
| download | opencode-49423da081d6fdffb0bd7275e070a2edeb28e3b5.tar.gz opencode-49423da081d6fdffb0bd7275e070a2edeb28e3b5.zip | |
feat: compact command with auto-compact
Diffstat (limited to 'internal/db')
| -rw-r--r-- | internal/db/db.go | 104 | ||||
| -rw-r--r-- | internal/db/files.sql.go | 2 | ||||
| -rw-r--r-- | internal/db/messages.sql.go | 46 | ||||
| -rw-r--r-- | internal/db/migrations/20250502063010_add_summary_to_sessions.sql | 11 | ||||
| -rw-r--r-- | internal/db/models.go | 4 | ||||
| -rw-r--r-- | internal/db/querier.go | 3 | ||||
| -rw-r--r-- | internal/db/sessions.sql.go | 44 | ||||
| -rw-r--r-- | internal/db/sql/messages.sql | 6 | ||||
| -rw-r--r-- | internal/db/sql/sessions.sql | 8 |
9 files changed, 165 insertions, 63 deletions
diff --git a/internal/db/db.go b/internal/db/db.go index 16e663804..e71b86227 100644 --- a/internal/db/db.go +++ b/internal/db/db.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.27.0 +// sqlc v1.29.0 package db @@ -72,6 +72,9 @@ func Prepare(ctx context.Context, db DBTX) (*Queries, error) { 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) } @@ -172,6 +175,11 @@ func (q *Queries) Close() error { 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) @@ -234,55 +242,57 @@ func (q *Queries) queryRow(ctx context.Context, stmt *sql.Stmt, query string, ar } type Queries struct { - db DBTX - tx *sql.Tx - createFileStmt *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 - listFilesByPathStmt *sql.Stmt - listFilesBySessionStmt *sql.Stmt - listLatestSessionFilesStmt *sql.Stmt - listMessagesBySessionStmt *sql.Stmt - listNewFilesStmt *sql.Stmt - listSessionsStmt *sql.Stmt - updateFileStmt *sql.Stmt - updateMessageStmt *sql.Stmt - updateSessionStmt *sql.Stmt + db DBTX + tx *sql.Tx + createFileStmt *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 + listFilesByPathStmt *sql.Stmt + listFilesBySessionStmt *sql.Stmt + listLatestSessionFilesStmt *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, - 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, - listFilesByPathStmt: q.listFilesByPathStmt, - listFilesBySessionStmt: q.listFilesBySessionStmt, - listLatestSessionFilesStmt: q.listLatestSessionFilesStmt, - listMessagesBySessionStmt: q.listMessagesBySessionStmt, - listNewFilesStmt: q.listNewFilesStmt, - listSessionsStmt: q.listSessionsStmt, - updateFileStmt: q.updateFileStmt, - updateMessageStmt: q.updateMessageStmt, - updateSessionStmt: q.updateSessionStmt, + db: tx, + tx: tx, + createFileStmt: q.createFileStmt, + 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, + listFilesByPathStmt: q.listFilesByPathStmt, + listFilesBySessionStmt: q.listFilesBySessionStmt, + listLatestSessionFilesStmt: q.listLatestSessionFilesStmt, + listMessagesBySessionStmt: q.listMessagesBySessionStmt, + listMessagesBySessionAfterStmt: q.listMessagesBySessionAfterStmt, + listNewFilesStmt: q.listNewFilesStmt, + listSessionsStmt: q.listSessionsStmt, + updateFileStmt: q.updateFileStmt, + updateMessageStmt: q.updateMessageStmt, + updateSessionStmt: q.updateSessionStmt, } } diff --git a/internal/db/files.sql.go b/internal/db/files.sql.go index 39def271f..28abaa55d 100644 --- a/internal/db/files.sql.go +++ b/internal/db/files.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.27.0 +// sqlc v1.29.0 // source: files.sql package db diff --git a/internal/db/messages.sql.go b/internal/db/messages.sql.go index 0555b4330..15ef7695b 100644 --- a/internal/db/messages.sql.go +++ b/internal/db/messages.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.27.0 +// sqlc v1.29.0 // source: messages.sql package db @@ -136,6 +136,50 @@ func (q *Queries) ListMessagesBySession(ctx context.Context, sessionID string) ( 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 int64 `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 diff --git a/internal/db/migrations/20250502063010_add_summary_to_sessions.sql b/internal/db/migrations/20250502063010_add_summary_to_sessions.sql new file mode 100644 index 000000000..9cecfcedb --- /dev/null +++ b/internal/db/migrations/20250502063010_add_summary_to_sessions.sql @@ -0,0 +1,11 @@ +-- +goose Up +-- +goose StatementBegin +ALTER TABLE sessions ADD COLUMN summary TEXT; +ALTER TABLE sessions ADD COLUMN summarized_at INTEGER; +-- +goose StatementEnd + +-- +goose Down +-- +goose StatementBegin +ALTER TABLE sessions DROP COLUMN summarized_at; +ALTER TABLE sessions DROP COLUMN summary; +-- +goose StatementEnd
\ No newline at end of file diff --git a/internal/db/models.go b/internal/db/models.go index f00cb6ad1..47028c19a 100644 --- a/internal/db/models.go +++ b/internal/db/models.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.27.0 +// sqlc v1.29.0 package db @@ -39,4 +39,6 @@ type Session struct { Cost float64 `json:"cost"` UpdatedAt int64 `json:"updated_at"` CreatedAt int64 `json:"created_at"` + Summary sql.NullString `json:"summary"` + SummarizedAt sql.NullInt64 `json:"summarized_at"` } diff --git a/internal/db/querier.go b/internal/db/querier.go index 704a97da2..ee0a2f7bd 100644 --- a/internal/db/querier.go +++ b/internal/db/querier.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.27.0 +// sqlc v1.29.0 package db @@ -25,6 +25,7 @@ type Querier interface { ListFilesBySession(ctx context.Context, sessionID string) ([]File, error) ListLatestSessionFiles(ctx context.Context, sessionID string) ([]File, 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) diff --git a/internal/db/sessions.sql.go b/internal/db/sessions.sql.go index 18d70c3db..f6150b40f 100644 --- a/internal/db/sessions.sql.go +++ b/internal/db/sessions.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.27.0 +// sqlc v1.29.0 // source: sessions.sql package db @@ -19,6 +19,8 @@ INSERT INTO sessions ( prompt_tokens, completion_tokens, cost, + summary, + summarized_at, updated_at, created_at ) VALUES ( @@ -29,9 +31,11 @@ INSERT INTO sessions ( ?, ?, ?, + ?, + ?, strftime('%s', 'now'), strftime('%s', 'now') -) RETURNING id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, updated_at, created_at +) RETURNING id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, updated_at, created_at, summary, summarized_at ` type CreateSessionParams struct { @@ -42,6 +46,8 @@ type CreateSessionParams struct { PromptTokens int64 `json:"prompt_tokens"` CompletionTokens int64 `json:"completion_tokens"` Cost float64 `json:"cost"` + Summary sql.NullString `json:"summary"` + SummarizedAt sql.NullInt64 `json:"summarized_at"` } func (q *Queries) CreateSession(ctx context.Context, arg CreateSessionParams) (Session, error) { @@ -53,6 +59,8 @@ func (q *Queries) CreateSession(ctx context.Context, arg CreateSessionParams) (S arg.PromptTokens, arg.CompletionTokens, arg.Cost, + arg.Summary, + arg.SummarizedAt, ) var i Session err := row.Scan( @@ -65,6 +73,8 @@ func (q *Queries) CreateSession(ctx context.Context, arg CreateSessionParams) (S &i.Cost, &i.UpdatedAt, &i.CreatedAt, + &i.Summary, + &i.SummarizedAt, ) return i, err } @@ -80,7 +90,7 @@ func (q *Queries) DeleteSession(ctx context.Context, id string) error { } const getSessionByID = `-- name: GetSessionByID :one -SELECT id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, updated_at, created_at +SELECT id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, updated_at, created_at, summary, summarized_at FROM sessions WHERE id = ? LIMIT 1 ` @@ -98,12 +108,14 @@ func (q *Queries) GetSessionByID(ctx context.Context, id string) (Session, error &i.Cost, &i.UpdatedAt, &i.CreatedAt, + &i.Summary, + &i.SummarizedAt, ) return i, err } const listSessions = `-- name: ListSessions :many -SELECT id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, updated_at, created_at +SELECT id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, updated_at, created_at, summary, summarized_at FROM sessions WHERE parent_session_id is NULL ORDER BY created_at DESC @@ -128,6 +140,8 @@ func (q *Queries) ListSessions(ctx context.Context) ([]Session, error) { &i.Cost, &i.UpdatedAt, &i.CreatedAt, + &i.Summary, + &i.SummarizedAt, ); err != nil { return nil, err } @@ -148,17 +162,21 @@ SET title = ?, prompt_tokens = ?, completion_tokens = ?, - cost = ? + cost = ?, + summary = ?, + summarized_at = ? WHERE id = ? -RETURNING id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, updated_at, created_at +RETURNING id, parent_session_id, title, message_count, prompt_tokens, completion_tokens, cost, updated_at, created_at, summary, summarized_at ` type UpdateSessionParams struct { - Title string `json:"title"` - PromptTokens int64 `json:"prompt_tokens"` - CompletionTokens int64 `json:"completion_tokens"` - Cost float64 `json:"cost"` - ID string `json:"id"` + 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.NullInt64 `json:"summarized_at"` + ID string `json:"id"` } func (q *Queries) UpdateSession(ctx context.Context, arg UpdateSessionParams) (Session, error) { @@ -167,6 +185,8 @@ func (q *Queries) UpdateSession(ctx context.Context, arg UpdateSessionParams) (S arg.PromptTokens, arg.CompletionTokens, arg.Cost, + arg.Summary, + arg.SummarizedAt, arg.ID, ) var i Session @@ -180,6 +200,8 @@ func (q *Queries) UpdateSession(ctx context.Context, arg UpdateSessionParams) (S &i.Cost, &i.UpdatedAt, &i.CreatedAt, + &i.Summary, + &i.SummarizedAt, ) return i, err } diff --git a/internal/db/sql/messages.sql b/internal/db/sql/messages.sql index a59cebe7d..475b23a86 100644 --- a/internal/db/sql/messages.sql +++ b/internal/db/sql/messages.sql @@ -9,6 +9,12 @@ 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, diff --git a/internal/db/sql/sessions.sql b/internal/db/sql/sessions.sql index f065b5f56..81abebd3c 100644 --- a/internal/db/sql/sessions.sql +++ b/internal/db/sql/sessions.sql @@ -7,6 +7,8 @@ INSERT INTO sessions ( prompt_tokens, completion_tokens, cost, + summary, + summarized_at, updated_at, created_at ) VALUES ( @@ -17,6 +19,8 @@ INSERT INTO sessions ( ?, ?, ?, + ?, + ?, strftime('%s', 'now'), strftime('%s', 'now') ) RETURNING *; @@ -38,7 +42,9 @@ SET title = ?, prompt_tokens = ?, completion_tokens = ?, - cost = ? + cost = ?, + summary = ?, + summarized_at = ? WHERE id = ? RETURNING *; |
