| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- package backend
- import (
- "context"
- "github.com/charmbracelet/crush/internal/message"
- "github.com/charmbracelet/crush/internal/proto"
- "github.com/charmbracelet/crush/internal/session"
- )
- // CreateSession creates a new session in the given workspace.
- func (b *Backend) CreateSession(ctx context.Context, workspaceID, title string) (session.Session, error) {
- ws, err := b.GetWorkspace(workspaceID)
- if err != nil {
- return session.Session{}, err
- }
- return ws.Sessions.Create(ctx, title)
- }
- // GetSession retrieves a session by workspace and session ID.
- func (b *Backend) GetSession(ctx context.Context, workspaceID, sessionID string) (session.Session, error) {
- ws, err := b.GetWorkspace(workspaceID)
- if err != nil {
- return session.Session{}, err
- }
- return ws.Sessions.Get(ctx, sessionID)
- }
- // ListSessions returns all sessions in the given workspace.
- func (b *Backend) ListSessions(ctx context.Context, workspaceID string) ([]session.Session, error) {
- ws, err := b.GetWorkspace(workspaceID)
- if err != nil {
- return nil, err
- }
- return ws.Sessions.List(ctx)
- }
- // GetAgentSession returns session metadata with the agent's busy
- // status.
- func (b *Backend) GetAgentSession(ctx context.Context, workspaceID, sessionID string) (proto.AgentSession, error) {
- ws, err := b.GetWorkspace(workspaceID)
- if err != nil {
- return proto.AgentSession{}, err
- }
- se, err := ws.Sessions.Get(ctx, sessionID)
- if err != nil {
- return proto.AgentSession{}, err
- }
- var isSessionBusy bool
- if ws.AgentCoordinator != nil {
- isSessionBusy = ws.AgentCoordinator.IsSessionBusy(sessionID)
- }
- return proto.AgentSession{
- Session: proto.Session{
- ID: se.ID,
- Title: se.Title,
- },
- IsBusy: isSessionBusy,
- }, nil
- }
- // ListSessionMessages returns all messages for a session.
- func (b *Backend) ListSessionMessages(ctx context.Context, workspaceID, sessionID string) ([]message.Message, error) {
- ws, err := b.GetWorkspace(workspaceID)
- if err != nil {
- return nil, err
- }
- return ws.Messages.List(ctx, sessionID)
- }
- // ListSessionHistory returns the history items for a session.
- func (b *Backend) ListSessionHistory(ctx context.Context, workspaceID, sessionID string) (any, error) {
- ws, err := b.GetWorkspace(workspaceID)
- if err != nil {
- return nil, err
- }
- return ws.History.ListBySession(ctx, sessionID)
- }
- // SaveSession updates a session in the given workspace.
- func (b *Backend) SaveSession(ctx context.Context, workspaceID string, sess session.Session) (session.Session, error) {
- ws, err := b.GetWorkspace(workspaceID)
- if err != nil {
- return session.Session{}, err
- }
- return ws.Sessions.Save(ctx, sess)
- }
- // DeleteSession deletes a session from the given workspace.
- func (b *Backend) DeleteSession(ctx context.Context, workspaceID, sessionID string) error {
- ws, err := b.GetWorkspace(workspaceID)
- if err != nil {
- return err
- }
- return ws.Sessions.Delete(ctx, sessionID)
- }
- // ListUserMessages returns user-role messages for a session.
- func (b *Backend) ListUserMessages(ctx context.Context, workspaceID, sessionID string) ([]message.Message, error) {
- ws, err := b.GetWorkspace(workspaceID)
- if err != nil {
- return nil, err
- }
- return ws.Messages.ListUserMessages(ctx, sessionID)
- }
- // ListAllUserMessages returns all user-role messages across sessions.
- func (b *Backend) ListAllUserMessages(ctx context.Context, workspaceID string) ([]message.Message, error) {
- ws, err := b.GetWorkspace(workspaceID)
- if err != nil {
- return nil, err
- }
- return ws.Messages.ListAllUserMessages(ctx)
- }
|