scanSession scans a single row into a Session struct. Note: Messages are loaded separately from session_items table. The thinking column is read but discarded — it is kept in the schema for backward compatibility with older docker-agent versions that wrote it.
(scanner interface {
Scan(dest ...any) error
},
)
| 637 | // The thinking column is read but discarded — it is kept in the schema for |
| 638 | // backward compatibility with older docker-agent versions that wrote it. |
| 639 | func scanSession(scanner interface { |
| 640 | Scan(dest ...any) error |
| 641 | }, |
| 642 | ) (*Session, error) { |
| 643 | var ( |
| 644 | sess Session |
| 645 | workingDir sql.NullString |
| 646 | permissionsJSON sql.NullString |
| 647 | parentID sql.NullString |
| 648 | agentModelOverridesJSON string |
| 649 | customModelsUsedJSON string |
| 650 | createdAtStr string |
| 651 | thinking bool // discarded |
| 652 | ) |
| 653 | |
| 654 | err := scanner.Scan( |
| 655 | &sess.ID, &sess.ToolsApproved, &sess.InputTokens, &sess.OutputTokens, |
| 656 | &sess.Title, &sess.Cost, &sess.SendUserMessage, &sess.MaxIterations, |
| 657 | &workingDir, &createdAtStr, &sess.Starred, &permissionsJSON, |
| 658 | &agentModelOverridesJSON, &customModelsUsedJSON, &thinking, &parentID, |
| 659 | ) |
| 660 | if err != nil { |
| 661 | return nil, err |
| 662 | } |
| 663 | |
| 664 | sess.CreatedAt, err = time.Parse(time.RFC3339, createdAtStr) |
| 665 | if err != nil { |
| 666 | return nil, err |
| 667 | } |
| 668 | |
| 669 | sess.WorkingDir = workingDir.String |
| 670 | sess.ParentID = parentID.String |
| 671 | |
| 672 | if permissionsJSON.Valid && permissionsJSON.String != "" { |
| 673 | sess.Permissions = &PermissionsConfig{} |
| 674 | if err := json.Unmarshal([]byte(permissionsJSON.String), sess.Permissions); err != nil { |
| 675 | return nil, err |
| 676 | } |
| 677 | } |
| 678 | |
| 679 | if agentModelOverridesJSON != "" && agentModelOverridesJSON != "{}" { |
| 680 | if err := json.Unmarshal([]byte(agentModelOverridesJSON), &sess.AgentModelOverrides); err != nil { |
| 681 | return nil, err |
| 682 | } |
| 683 | } |
| 684 | |
| 685 | if customModelsUsedJSON != "" && customModelsUsedJSON != "[]" { |
| 686 | if err := json.Unmarshal([]byte(customModelsUsedJSON), &sess.CustomModelsUsed); err != nil { |
| 687 | return nil, err |
| 688 | } |
| 689 | } |
| 690 | |
| 691 | return &sess, nil |
| 692 | } |
| 693 | |
| 694 | // GetSession retrieves a session by ID |
| 695 | func (s *SQLiteSessionStore) GetSession(ctx context.Context, id string) (*Session, error) { |
no test coverage detected