Skip to content

Commit 95f35ba

Browse files
committed
Refactored to add loadSession(), removed inaccessible code path
1 parent f1cdb7f commit 95f35ba

2 files changed

Lines changed: 48 additions & 40 deletions

File tree

cmd/main.go

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -416,18 +416,6 @@ func RunRootCommand(ctx context.Context, opt Options, args []string) error {
416416
if err != nil {
417417
return fmt.Errorf("failed to get latest session: %w", err)
418418
}
419-
if chatStore == nil {
420-
// No sessions exist, create a new one
421-
meta := sessions.Metadata{
422-
ProviderID: opt.ProviderID,
423-
ModelID: opt.ModelID,
424-
}
425-
chatStore, err = sessionManager.NewSession(meta)
426-
if err != nil {
427-
return fmt.Errorf("failed to create new session: %w", err)
428-
}
429-
klog.Infof("Created new session: %s\n", chatStore.(*sessions.Session).ID)
430-
}
431419
} else {
432420
sessionID = opt.ResumeSession
433421
chatStore, err = sessionManager.FindSessionByID(sessionID)

pkg/agent/conversation.go

Lines changed: 48 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -200,13 +200,7 @@ func (s *Agent) Init(ctx context.Context) error {
200200
}
201201

202202
if session, ok := s.ChatMessageStore.(*sessions.Session); ok {
203-
metadata, err := session.LoadMetadata()
204-
if err != nil {
205-
return fmt.Errorf("failed to load session metadata: %w", err)
206-
}
207-
s.session.ID = session.ID
208-
s.session.CreatedAt = metadata.CreatedAt
209-
s.session.LastModified = metadata.LastAccessed
203+
s.loadSession(session.ID)
210204
} else {
211205
s.session.ID = uuid.New().String()
212206
s.session.CreatedAt = time.Now()
@@ -747,36 +741,62 @@ func (c *Agent) handleMetaQuery(ctx context.Context, query string) (answer strin
747741
return "Invalid command. Usage: resume-session <session_id>", true, nil
748742
}
749743
sessionID := parts[1]
750-
751-
manager, err := sessions.NewSessionManager()
752-
if err != nil {
753-
return "", false, fmt.Errorf("failed to create session manager: %w", err)
744+
if err := c.loadSession(sessionID); err != nil {
745+
return "", false, err
754746
}
747+
return fmt.Sprintf("Resumed session %s.", sessionID), true, nil
748+
}
755749

756-
session, err := manager.FindSessionByID(sessionID)
750+
return "", false, nil
751+
}
752+
753+
// loadSession loads a session by ID (or latest), updates the agent's state, and re-initializes the chat.
754+
func (c *Agent) loadSession(sessionID string) error {
755+
manager, err := sessions.NewSessionManager()
756+
if err != nil {
757+
return fmt.Errorf("failed to create session manager: %w", err)
758+
}
759+
760+
var session *sessions.Session
761+
if sessionID == "" || sessionID == "latest" {
762+
s, err := manager.GetLatestSession()
757763
if err != nil {
758-
return "", false, fmt.Errorf("failed to get session: %w", err)
764+
return fmt.Errorf("failed to get latest session: %w", err)
759765
}
760-
761-
c.sessionMu.Lock()
762-
c.ChatMessageStore = session
763-
c.session.ChatMessageStore = session
764-
c.session.Messages = session.ChatMessages()
765-
metadata, err := session.LoadMetadata()
766+
if s == nil {
767+
// This can happen if GetLatestSession returns nil, nil (no sessions exist)
768+
return fmt.Errorf("no sessions found to resume")
769+
}
770+
session = s
771+
} else {
772+
s, err := manager.FindSessionByID(sessionID)
766773
if err != nil {
767-
c.sessionMu.Unlock()
768-
return "", false, fmt.Errorf("failed to load session metadata: %w", err)
774+
return fmt.Errorf("failed to get session %q: %w", sessionID, err)
769775
}
770-
c.session.ID = session.ID
771-
c.session.CreatedAt = metadata.CreatedAt
772-
c.session.LastModified = metadata.LastAccessed
773-
c.llmChat.Initialize(c.session.ChatMessageStore.ChatMessages())
774-
c.sessionMu.Unlock()
776+
session = s
777+
}
775778

776-
return fmt.Sprintf("Resumed session %s.", sessionID), true, nil
779+
c.sessionMu.Lock()
780+
defer c.sessionMu.Unlock()
781+
782+
c.ChatMessageStore = session
783+
c.session.ChatMessageStore = session
784+
c.session.Messages = session.ChatMessages()
785+
metadata, err := session.LoadMetadata()
786+
if err != nil {
787+
return fmt.Errorf("failed to load session metadata: %w", err)
777788
}
789+
c.session.ID = session.ID
790+
c.session.CreatedAt = metadata.CreatedAt
791+
c.session.LastModified = metadata.LastAccessed
778792

779-
return "", false, nil
793+
if c.llmChat != nil {
794+
if err := c.llmChat.Initialize(c.session.ChatMessageStore.ChatMessages()); err != nil {
795+
return fmt.Errorf("failed to re-initialize chat with new session: %w", err)
796+
}
797+
}
798+
799+
return nil
780800
}
781801

782802
func (c *Agent) listModels(ctx context.Context) ([]string, error) {

0 commit comments

Comments
 (0)