mirror of
https://github.com/sipeed/picoclaw.git
synced 2026-06-12 18:08:54 +00:00
b464687e2f
Address file growth concern from #711 review: logical truncation via skip offset is fast but leaves dead lines on disk indefinitely. Compact() rewrites the JSONL file keeping only active messages, using the same temp+rename pattern for crash safety. No-op when skip == 0. The caller (lifecycle manager or agent loop) decides when to trigger compaction — e.g. when skipped lines exceed active lines.
43 lines
1.7 KiB
Go
43 lines
1.7 KiB
Go
package memory
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/sipeed/picoclaw/pkg/providers"
|
|
)
|
|
|
|
// Store defines an interface for persistent session storage.
|
|
// Each method is an atomic operation — there is no separate Save() call.
|
|
type Store interface {
|
|
// AddMessage appends a simple text message to a session.
|
|
AddMessage(ctx context.Context, sessionKey, role, content string) error
|
|
|
|
// AddFullMessage appends a complete message (with tool calls, etc.) to a session.
|
|
AddFullMessage(ctx context.Context, sessionKey string, msg providers.Message) error
|
|
|
|
// GetHistory returns all messages for a session in insertion order.
|
|
// Returns an empty slice (not nil) if the session does not exist.
|
|
GetHistory(ctx context.Context, sessionKey string) ([]providers.Message, error)
|
|
|
|
// GetSummary returns the conversation summary for a session.
|
|
// Returns an empty string if no summary exists.
|
|
GetSummary(ctx context.Context, sessionKey string) (string, error)
|
|
|
|
// SetSummary updates the conversation summary for a session.
|
|
SetSummary(ctx context.Context, sessionKey, summary string) error
|
|
|
|
// TruncateHistory removes all but the last keepLast messages from a session.
|
|
// If keepLast <= 0, all messages are removed.
|
|
TruncateHistory(ctx context.Context, sessionKey string, keepLast int) error
|
|
|
|
// SetHistory replaces all messages in a session with the provided history.
|
|
SetHistory(ctx context.Context, sessionKey string, history []providers.Message) error
|
|
|
|
// Compact reclaims storage by physically removing logically truncated
|
|
// data. Backends that do not accumulate dead data may return nil.
|
|
Compact(ctx context.Context, sessionKey string) error
|
|
|
|
// Close releases any resources held by the store.
|
|
Close() error
|
|
}
|