Documentation
¶
Index ¶
- Constants
- func ValidateCheckpointFile(path string) error
- type Checkpoint
- type CheckpointContext
- type CheckpointMessage
- type CheckpointSession
- type CheckpointStatistics
- type CompactConfig
- type CompactPlan
- type CompactResult
- type CompactStatus
- type CompactStatusCallback
- type Compactor
- type ContextItem
- type CreateSessionParams
- type DefaultCompactor
- type ExportOptions
- type ImportOptions
- type Manager
- func (m *Manager) AddContext(ctx context.Context, sessionID, contextType, key, value string) error
- func (m *Manager) AddMessage(ctx context.Context, sessionID, role, content string) error
- func (m *Manager) CleanOldSessions(ctx context.Context, retentionDays int) (int, error)
- func (m *Manager) Close() error
- func (m *Manager) CreateSession(ctx context.Context, params CreateSessionParams) (*Session, error)
- func (m *Manager) DeleteSession(ctx context.Context, id string) error
- func (m *Manager) ExportSession(ctx context.Context, sessionID string, outputPath string, opts ExportOptions) error
- func (m *Manager) ExportSessionByName(ctx context.Context, sessionName string, outputPath string, opts ExportOptions) error
- func (m *Manager) GetContext(ctx context.Context, sessionID string) ([]*ContextItem, error)
- func (m *Manager) GetMessageCount(ctx context.Context, sessionID string) (int, error)
- func (m *Manager) GetMessages(ctx context.Context, sessionID string, limit int) ([]*Message, error)
- func (m *Manager) GetMessagesWithCompaction(ctx context.Context, sessionID string, limit int) ([]*Message, error)
- func (m *Manager) GetSession(ctx context.Context, id string) (*Session, error)
- func (m *Manager) GetSessionByName(ctx context.Context, name string) (*Session, error)
- func (m *Manager) ImportSession(ctx context.Context, checkpointPath string, opts ImportOptions) (*Session, error)
- func (m *Manager) ListSessions(ctx context.Context) ([]*Session, error)
- func (m *Manager) SetCompactStatusCallback(callback CompactStatusCallback)
- func (m *Manager) UpdateSession(ctx context.Context, sess *Session) error
- type Message
- type SQLiteStorage
- func (s *SQLiteStorage) AddContext(ctx context.Context, item *ContextItem) error
- func (s *SQLiteStorage) AddMessage(ctx context.Context, message *Message) error
- func (s *SQLiteStorage) ArchiveMessages(ctx context.Context, messageIDs []int64) error
- func (s *SQLiteStorage) Close() error
- func (s *SQLiteStorage) CreateSession(ctx context.Context, session *Session) error
- func (s *SQLiteStorage) DeleteContext(ctx context.Context, sessionID string) error
- func (s *SQLiteStorage) DeleteOldSessions(ctx context.Context, olderThan time.Time) (int, error)
- func (s *SQLiteStorage) DeleteSession(ctx context.Context, id string) error
- func (s *SQLiteStorage) GetActiveMessages(ctx context.Context, sessionID string, limit int) ([]*Message, error)
- func (s *SQLiteStorage) GetContext(ctx context.Context, sessionID string) ([]*ContextItem, error)
- func (s *SQLiteStorage) GetMessageCount(ctx context.Context, sessionID string) (int, error)
- func (s *SQLiteStorage) GetMessages(ctx context.Context, sessionID string, limit int) ([]*Message, error)
- func (s *SQLiteStorage) GetSession(ctx context.Context, id string) (*Session, error)
- func (s *SQLiteStorage) GetSessionByName(ctx context.Context, projectPath, name string) (*Session, error)
- func (s *SQLiteStorage) GetSummaries(ctx context.Context, sessionID string) ([]*Summary, error)
- func (s *SQLiteStorage) ListSessions(ctx context.Context, projectPath string, limit int) ([]*Session, error)
- func (s *SQLiteStorage) Migrate() error
- func (s *SQLiteStorage) StoreSummary(ctx context.Context, summary *Summary) error
- func (s *SQLiteStorage) UpdateSession(ctx context.Context, session *Session) error
- type Session
- type Storage
- type Summary
Constants ¶
const ( // DefaultMaxSessions is the default maximum number of sessions to keep. DefaultMaxSessions = 40 // DefaultRetentionDays is the default number of days to retain sessions. DefaultRetentionDays = 30 )
const ( RoleUser = "user" RoleAssistant = "assistant" RoleSystem = "system" )
Role constants for messages.
const ( ContextTypeStackFile = "stack_file" ContextTypeComponent = "component" ContextTypeSetting = "setting" ContextTypeQuery = "query" ContextTypeATMOSMD = "atmos_md" )
ContextType constants.
const (
// CheckpointVersion is the current checkpoint format version.
CheckpointVersion = "1.0"
)
Variables ¶
This section is empty.
Functions ¶
func ValidateCheckpointFile ¶
ValidateCheckpointFile validates a checkpoint file without importing. Useful for pre-import validation or CLI dry-run.
Types ¶
type Checkpoint ¶
type Checkpoint struct {
// Version is the checkpoint format version for compatibility.
Version string `json:"version" yaml:"version"`
// ExportedAt is when the checkpoint was created.
ExportedAt time.Time `json:"exported_at" yaml:"exported_at"`
// ExportedBy is the user who exported the checkpoint (optional).
ExportedBy string `json:"exported_by,omitempty" yaml:"exported_by,omitempty"`
// Session contains session metadata.
Session CheckpointSession `json:"session" yaml:"session"`
// Messages contains the complete conversation history.
Messages []CheckpointMessage `json:"messages" yaml:"messages"`
// Context contains project-specific context.
Context *CheckpointContext `json:"context,omitempty" yaml:"context,omitempty"`
// Statistics contains session statistics.
Statistics CheckpointStatistics `json:"statistics" yaml:"statistics"`
}
Checkpoint represents an exportable session snapshot. It contains all information needed to restore a session.
type CheckpointContext ¶
type CheckpointContext struct {
// ProjectInstructions is the ATMOS.md content at export time (optional).
ProjectInstructions string `json:"project_instructions,omitempty" yaml:"project_instructions,omitempty"`
// FilesAccessed is a list of files accessed during the session (optional).
FilesAccessed []string `json:"files_accessed,omitempty" yaml:"files_accessed,omitempty"`
// WorkingDirectory is the working directory at export time (optional).
WorkingDirectory string `json:"working_directory,omitempty" yaml:"working_directory,omitempty"`
}
CheckpointContext contains project-specific context.
type CheckpointMessage ¶
type CheckpointMessage struct {
// Role is the message role (user, assistant, system).
Role string `json:"role" yaml:"role"`
// Content is the message content.
Content string `json:"content" yaml:"content"`
// CreatedAt is when the message was created.
CreatedAt time.Time `json:"created_at" yaml:"created_at"`
// Archived indicates if the message was compacted.
Archived bool `json:"archived,omitempty" yaml:"archived,omitempty"`
}
CheckpointMessage represents a message in the checkpoint.
type CheckpointSession ¶
type CheckpointSession struct {
// Name is the session name.
Name string `json:"name" yaml:"name"`
// Provider is the AI provider (anthropic, openai, etc.).
Provider string `json:"provider" yaml:"provider"`
// Model is the AI model used.
Model string `json:"model" yaml:"model"`
// Skill is the AI skill name (optional).
Skill string `json:"skill,omitempty" yaml:"skill,omitempty"`
// ProjectPath is the project path where session was created.
ProjectPath string `json:"project_path" yaml:"project_path"`
// CreatedAt is when the session was created.
CreatedAt time.Time `json:"created_at" yaml:"created_at"`
// UpdatedAt is when the session was last updated.
UpdatedAt time.Time `json:"updated_at" yaml:"updated_at"`
// Metadata contains custom metadata.
Metadata map[string]interface{} `json:"metadata,omitempty" yaml:"metadata,omitempty"`
}
CheckpointSession contains session metadata for export.
type CheckpointStatistics ¶
type CheckpointStatistics struct {
// MessageCount is the total number of messages.
MessageCount int `json:"message_count" yaml:"message_count"`
// UserMessages is the number of user messages.
UserMessages int `json:"user_messages" yaml:"user_messages"`
// AssistantMessages is the number of assistant messages.
AssistantMessages int `json:"assistant_messages" yaml:"assistant_messages"`
// TotalTokens is the total token count (if tracked).
TotalTokens int64 `json:"total_tokens,omitempty" yaml:"total_tokens,omitempty"`
// ToolCalls is the number of tool executions (if tracked).
ToolCalls int `json:"tool_calls,omitempty" yaml:"tool_calls,omitempty"`
}
CheckpointStatistics contains session statistics.
type CompactConfig ¶
type CompactConfig struct {
Enabled bool `json:"enabled" yaml:"enabled"`
TriggerThreshold float64 `json:"trigger_threshold" yaml:"trigger_threshold"` // 0.0-1.0, default 0.75
CompactRatio float64 `json:"compact_ratio" yaml:"compact_ratio"` // 0.0-1.0, default 0.4
PreserveRecent int `json:"preserve_recent" yaml:"preserve_recent"` // Default 10
UseAISummary bool `json:"use_ai_summary" yaml:"use_ai_summary"` // Default true
ShowSummaryMarkers bool `json:"show_summary_markers" yaml:"show_summary_markers"` // Default false
}
CompactConfig holds configuration for auto-compact behavior.
func DefaultCompactConfig ¶
func DefaultCompactConfig() CompactConfig
DefaultCompactConfig returns the default compaction configuration.
type CompactPlan ¶
type CompactPlan struct {
SessionID string
TotalMessages int
MessagesToCompact []*Message
MessagesToKeep []*Message
EstimatedSavings int // Token savings estimate
Reason string
}
CompactPlan describes what will be compacted.
type CompactResult ¶
type CompactResult struct {
SummaryID string
OriginalMessageIDs []int64
SummaryContent string
TokenCount int
CompactedAt time.Time
Success bool
Error error
}
CompactResult contains the outcome of compaction.
type CompactStatus ¶
type CompactStatus struct {
Stage string // "starting", "summarizing", "completed", "failed"
MessageCount int // Number of messages being compacted
EstimatedSavings int // Estimated token savings
Error error // Error if failed
}
CompactStatus represents the status of a compaction operation.
type CompactStatusCallback ¶
type CompactStatusCallback func(status CompactStatus)
CompactStatusCallback is called when compaction status changes. This allows UI components to show compaction progress.
type Compactor ¶
type Compactor interface {
// ShouldCompact determines if compaction is needed based on current history.
ShouldCompact(messages []*Message, maxMessages int, config *CompactConfig) (bool, *CompactPlan)
// Compact performs the compaction operation.
Compact(ctx context.Context, plan *CompactPlan, config *CompactConfig) (*CompactResult, error)
}
Compactor handles intelligent conversation history compaction.
func NewCompactor ¶
func NewCompactor(storage Storage, atmosConfig *schema.AtmosConfiguration) Compactor
NewCompactor creates a new compactor instance.
type ContextItem ¶
type ContextItem struct {
SessionID string `json:"session_id"`
ContextType string `json:"context_type"` // stack_file, component, setting
ContextKey string `json:"context_key"` // e.g., "vpc", "prod-use1"
ContextValue string `json:"context_value"` // JSON or text value
}
ContextItem represents a piece of context associated with a session.
type CreateSessionParams ¶
type CreateSessionParams struct {
Name string
Model string
Provider string
Skill string
Metadata map[string]interface{}
}
CreateSessionParams holds parameters for creating a new session.
type DefaultCompactor ¶
type DefaultCompactor struct {
// contains filtered or unexported fields
}
DefaultCompactor implements Compactor with AI-powered summarization.
func (*DefaultCompactor) Compact ¶
func (c *DefaultCompactor) Compact(ctx context.Context, plan *CompactPlan, config *CompactConfig) (*CompactResult, error)
Compact performs the compaction operation with AI-powered summarization.
func (*DefaultCompactor) ShouldCompact ¶
func (c *DefaultCompactor) ShouldCompact(messages []*Message, maxMessages int, config *CompactConfig) (bool, *CompactPlan)
ShouldCompact determines if compaction is needed.
type ExportOptions ¶
type ExportOptions struct {
// IncludeContext includes project instructions and file access history.
IncludeContext bool
// IncludeMetadata includes session metadata.
IncludeMetadata bool
// Format is the export format (json, yaml, markdown).
Format string
}
ExportOptions contains options for exporting a checkpoint.
type ImportOptions ¶
type ImportOptions struct {
// Name is the name for the imported session.
// If empty, uses the checkpoint's session name.
Name string
// ProjectPath is the project path for the imported session.
// If empty, uses the current project path.
ProjectPath string
// OverwriteExisting allows overwriting an existing session with the same name.
OverwriteExisting bool
// IncludeContext includes project context in the import.
IncludeContext bool
}
ImportOptions contains options for importing a checkpoint.
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
Manager handles session lifecycle and operations.
func NewManager ¶
func NewManager(storage Storage, projectPath string, maxSessions int, atmosConfig *schema.AtmosConfiguration) *Manager
NewManager creates a new session manager.
func (*Manager) AddContext ¶
AddContext adds a context item to a session.
func (*Manager) AddMessage ¶
AddMessage adds a message to a session.
func (*Manager) CleanOldSessions ¶
CleanOldSessions removes sessions older than the specified duration.
func (*Manager) CreateSession ¶
CreateSession creates a new session.
func (*Manager) DeleteSession ¶
DeleteSession deletes a session and all its data.
func (*Manager) ExportSession ¶
func (m *Manager) ExportSession(ctx context.Context, sessionID string, outputPath string, opts ExportOptions) error
ExportSession exports a session to a checkpoint file.
func (*Manager) ExportSessionByName ¶
func (m *Manager) ExportSessionByName(ctx context.Context, sessionName string, outputPath string, opts ExportOptions) error
ExportSessionByName exports a session by name.
func (*Manager) GetContext ¶
GetContext retrieves all context items for a session.
func (*Manager) GetMessageCount ¶
GetMessageCount returns the number of messages in a session.
func (*Manager) GetMessages ¶
GetMessages retrieves messages for a session.
func (*Manager) GetMessagesWithCompaction ¶
func (m *Manager) GetMessagesWithCompaction(ctx context.Context, sessionID string, limit int) ([]*Message, error)
GetMessagesWithCompaction retrieves messages for a session with auto-compact support.
func (*Manager) GetSession ¶
GetSession retrieves a session by ID.
func (*Manager) GetSessionByName ¶
GetSessionByName retrieves a session by name within the current project.
func (*Manager) ImportSession ¶
func (m *Manager) ImportSession(ctx context.Context, checkpointPath string, opts ImportOptions) (*Session, error)
ImportSession imports a session from a checkpoint file.
func (*Manager) ListSessions ¶
ListSessions returns all sessions for the current project.
func (*Manager) SetCompactStatusCallback ¶
func (m *Manager) SetCompactStatusCallback(callback CompactStatusCallback)
SetCompactStatusCallback sets the callback for compaction status updates. This allows UI components to be notified when compaction starts/completes.
type Message ¶
type Message struct {
ID int64 `json:"id"`
SessionID string `json:"session_id"`
Role string `json:"role"` // user, assistant, system
Content string `json:"content"`
CreatedAt time.Time `json:"created_at"`
Archived bool `json:"archived"` // True if message has been compacted into a summary
IsSummary bool `json:"is_summary"` // True if this is a summary message (for display purposes)
}
Message represents a single message in a session.
type SQLiteStorage ¶
type SQLiteStorage struct {
// contains filtered or unexported fields
}
SQLiteStorage implements Storage using SQLite.
func NewSQLiteStorage ¶
func NewSQLiteStorage(storagePath string) (*SQLiteStorage, error)
NewSQLiteStorage creates a new SQLite storage backend.
func (*SQLiteStorage) AddContext ¶
func (s *SQLiteStorage) AddContext(ctx context.Context, item *ContextItem) error
AddContext adds a context item to a session.
func (*SQLiteStorage) AddMessage ¶
func (s *SQLiteStorage) AddMessage(ctx context.Context, message *Message) error
AddMessage adds a message to a session.
func (*SQLiteStorage) ArchiveMessages ¶
func (s *SQLiteStorage) ArchiveMessages(ctx context.Context, messageIDs []int64) error
ArchiveMessages marks messages as archived.
func (*SQLiteStorage) Close ¶
func (s *SQLiteStorage) Close() error
Close closes the database connection.
func (*SQLiteStorage) CreateSession ¶
func (s *SQLiteStorage) CreateSession(ctx context.Context, session *Session) error
CreateSession creates a new session.
func (*SQLiteStorage) DeleteContext ¶
func (s *SQLiteStorage) DeleteContext(ctx context.Context, sessionID string) error
DeleteContext deletes all context items for a session.
func (*SQLiteStorage) DeleteOldSessions ¶
DeleteOldSessions deletes sessions older than the specified time.
func (*SQLiteStorage) DeleteSession ¶
func (s *SQLiteStorage) DeleteSession(ctx context.Context, id string) error
DeleteSession deletes a session.
func (*SQLiteStorage) GetActiveMessages ¶
func (s *SQLiteStorage) GetActiveMessages(ctx context.Context, sessionID string, limit int) ([]*Message, error)
GetActiveMessages retrieves non-archived messages for a session.
func (*SQLiteStorage) GetContext ¶
func (s *SQLiteStorage) GetContext(ctx context.Context, sessionID string) ([]*ContextItem, error)
GetContext retrieves all context items for a session.
func (*SQLiteStorage) GetMessageCount ¶
GetMessageCount returns the number of messages in a session.
func (*SQLiteStorage) GetMessages ¶
func (s *SQLiteStorage) GetMessages(ctx context.Context, sessionID string, limit int) ([]*Message, error)
GetMessages retrieves messages for a session.
func (*SQLiteStorage) GetSession ¶
GetSession retrieves a session by ID.
func (*SQLiteStorage) GetSessionByName ¶
func (s *SQLiteStorage) GetSessionByName(ctx context.Context, projectPath, name string) (*Session, error)
GetSessionByName retrieves a session by name and project path.
func (*SQLiteStorage) GetSummaries ¶
GetSummaries retrieves all summaries for a session.
func (*SQLiteStorage) ListSessions ¶
func (s *SQLiteStorage) ListSessions(ctx context.Context, projectPath string, limit int) ([]*Session, error)
ListSessions returns all sessions for a project.
func (*SQLiteStorage) Migrate ¶
func (s *SQLiteStorage) Migrate() error
Migrate creates or updates the database schema.
func (*SQLiteStorage) StoreSummary ¶
func (s *SQLiteStorage) StoreSummary(ctx context.Context, summary *Summary) error
StoreSummary stores a message summary.
func (*SQLiteStorage) UpdateSession ¶
func (s *SQLiteStorage) UpdateSession(ctx context.Context, session *Session) error
UpdateSession updates an existing session.
type Session ¶
type Session struct {
ID string `json:"id"`
Name string `json:"name"`
ProjectPath string `json:"project_path"`
Model string `json:"model"`
Provider string `json:"provider"`
Skill string `json:"skill,omitempty"` // AI skill name (e.g., "general", "stack-analyzer")
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
Metadata map[string]interface{} `json:"metadata,omitempty"`
MessageCount int `json:"message_count,omitempty"`
}
Session represents an AI chat session with persistent state.
type Storage ¶
type Storage interface {
// Session operations
CreateSession(ctx context.Context, session *Session) error
GetSession(ctx context.Context, id string) (*Session, error)
GetSessionByName(ctx context.Context, projectPath, name string) (*Session, error)
ListSessions(ctx context.Context, projectPath string, limit int) ([]*Session, error)
UpdateSession(ctx context.Context, session *Session) error
DeleteSession(ctx context.Context, id string) error
DeleteOldSessions(ctx context.Context, olderThan time.Time) (int, error)
// Message operations
AddMessage(ctx context.Context, message *Message) error
GetMessages(ctx context.Context, sessionID string, limit int) ([]*Message, error)
GetMessageCount(ctx context.Context, sessionID string) (int, error)
// Context operations
AddContext(ctx context.Context, item *ContextItem) error
GetContext(ctx context.Context, sessionID string) ([]*ContextItem, error)
DeleteContext(ctx context.Context, sessionID string) error
// Summary operations (auto-compact)
StoreSummary(ctx context.Context, summary *Summary) error
GetSummaries(ctx context.Context, sessionID string) ([]*Summary, error)
ArchiveMessages(ctx context.Context, messageIDs []int64) error
GetActiveMessages(ctx context.Context, sessionID string, limit int) ([]*Message, error)
// Database management
Close() error
Migrate() error
}
Storage defines the interface for session persistence.
type Summary ¶
type Summary struct {
ID string `json:"id"`
SessionID string `json:"session_id"`
Provider string `json:"provider"`
OriginalMessageIDs []int64 `json:"original_message_ids"`
MessageRange string `json:"message_range"` // Human-readable: "Messages 1-20"
SummaryContent string `json:"summary_content"`
TokenCount int `json:"token_count"`
CompactedAt time.Time `json:"compacted_at"`
}
Summary represents a compacted summary of multiple messages.