summaryrefslogtreecommitdiffhomepage
path: root/internal/db
diff options
context:
space:
mode:
authoradamdottv <[email protected]>2025-05-02 09:24:24 -0500
committerAdam <[email protected]>2025-05-02 15:24:47 -0500
commit49423da081d6fdffb0bd7275e070a2edeb28e3b5 (patch)
tree3119b731ecd46ff8ef3c26d779c0420c7dfe6c9e /internal/db
parent364cf5b429c3dd6952d45c3361765aa3898e6326 (diff)
downloadopencode-49423da081d6fdffb0bd7275e070a2edeb28e3b5.tar.gz
opencode-49423da081d6fdffb0bd7275e070a2edeb28e3b5.zip
feat: compact command with auto-compact
Diffstat (limited to 'internal/db')
-rw-r--r--internal/db/db.go104
-rw-r--r--internal/db/files.sql.go2
-rw-r--r--internal/db/messages.sql.go46
-rw-r--r--internal/db/migrations/20250502063010_add_summary_to_sessions.sql11
-rw-r--r--internal/db/models.go4
-rw-r--r--internal/db/querier.go3
-rw-r--r--internal/db/sessions.sql.go44
-rw-r--r--internal/db/sql/messages.sql6
-rw-r--r--internal/db/sql/sessions.sql8
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 *;