sync

package
v0.10.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 5, 2026 License: MIT Imports: 17 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ComputeFileHash

func ComputeFileHash(path string) (string, error)

ComputeFileHash returns the SHA-256 hex digest of the file at path.

func ComputeHash

func ComputeHash(r io.Reader) (string, error)

ComputeHash returns the SHA-256 hex digest of data from r.

Types

type Engine

type Engine struct {
	// contains filtered or unexported fields
}

Engine orchestrates session file discovery and sync.

func NewEngine

func NewEngine(
	database *db.DB, cfg EngineConfig,
) *Engine

NewEngine creates a sync engine. It pre-populates the in-memory skip cache from the database so that files skipped in a prior run are not re-parsed on startup.

func (*Engine) FindSourceFile

func (e *Engine) FindSourceFile(sessionID string) string

FindSourceFile locates the original source file for a session ID.

func (*Engine) LastSync

func (e *Engine) LastSync() time.Time

LastSync returns the time of the last completed sync.

func (*Engine) LastSyncStats

func (e *Engine) LastSyncStats() SyncStats

LastSyncStats returns statistics from the last sync.

func (*Engine) ResyncAll added in v0.6.0

func (e *Engine) ResyncAll(
	onProgress ProgressFunc,
) SyncStats

ResyncAll builds a fresh database from scratch, syncs all sessions into it, copies insights from the old DB, then atomically swaps the files and reopens the original DB handle. This avoids the per-row trigger overhead of bulk deleting hundreds of thousands of messages in place.

func (*Engine) SyncAll

func (e *Engine) SyncAll(onProgress ProgressFunc) SyncStats

SyncAll discovers and syncs all session files from all agents.

func (*Engine) SyncPaths added in v0.3.0

func (e *Engine) SyncPaths(paths []string)

SyncPaths syncs only the specified changed file paths instead of discovering and hashing all session files. Paths that don't match known session file patterns are silently ignored.

func (*Engine) SyncSingleSession

func (e *Engine) SyncSingleSession(sessionID string) error

SyncSingleSession re-syncs a single session by its ID. Unlike the bulk SyncAll path, this includes exec-originated Codex sessions and uses the existing DB project as fallback.

type EngineConfig added in v0.10.0

type EngineConfig struct {
	AgentDirs               map[parser.AgentType][]string
	Machine                 string
	BlockedResultCategories []string
}

EngineConfig holds the configuration needed by the sync engine, replacing per-agent positional parameters.

type Phase

type Phase string

Phase describes the current sync phase.

const (
	PhaseIdle        Phase = "idle"
	PhaseDiscovering Phase = "discovering"
	PhaseSyncing     Phase = "syncing"
	PhaseDone        Phase = "done"
)

type Progress

type Progress struct {
	Phase           Phase  `json:"phase"`
	CurrentProject  string `json:"current_project,omitempty"`
	ProjectsTotal   int    `json:"projects_total"`
	ProjectsDone    int    `json:"projects_done"`
	SessionsTotal   int    `json:"sessions_total"`
	SessionsDone    int    `json:"sessions_done"`
	MessagesIndexed int    `json:"messages_indexed"`
}

Progress reports sync progress to listeners.

func (Progress) Percent

func (p Progress) Percent() float64

Percent returns the sync progress as a percentage (0–100).

type ProgressFunc

type ProgressFunc func(Progress)

ProgressFunc is called with progress updates during sync.

type SyncResult

type SyncResult struct {
	SessionID string `json:"session_id"`
	Project   string `json:"project"`
	Skipped   bool   `json:"skipped"`
	Messages  int    `json:"messages"`
}

SyncResult describes the outcome of syncing a single session.

type SyncStats

type SyncStats struct {
	TotalSessions  int      `json:"total_sessions"`
	Synced         int      `json:"synced"`
	Skipped        int      `json:"skipped"`
	Failed         int      `json:"failed"`
	OrphanedCopied int      `json:"orphaned_copied,omitempty"`
	Warnings       []string `json:"warnings,omitempty"`
	Aborted        bool     `json:"aborted,omitempty"`
	// contains filtered or unexported fields
}

SyncStats summarizes a full sync run.

TotalSessions counts discovered files plus OpenCode sessions. Synced counts sessions (one file can produce multiple via fork detection; OpenCode adds sessions directly). Failed counts files with hard parse/stat errors. filesOK counts files that produced at least one session — used by ResyncAll to compare against Failed on the same unit.

func (*SyncStats) RecordFailed added in v0.8.0

func (s *SyncStats) RecordFailed()

RecordFailed increments the hard-failure counter.

func (*SyncStats) RecordSkip

func (s *SyncStats) RecordSkip()

RecordSkip increments the skipped session counter.

func (*SyncStats) RecordSynced

func (s *SyncStats) RecordSynced(n int)

RecordSynced adds n to the synced session counter.

type Watcher

type Watcher struct {
	// contains filtered or unexported fields
}

Watcher uses fsnotify to watch session directories for changes and triggers a callback with debouncing.

func NewWatcher

func NewWatcher(
	debounce time.Duration, onChange func(paths []string),
) (*Watcher, error)

NewWatcher creates a file watcher that calls onChange when files are modified after the debounce period elapses.

func (*Watcher) Start

func (w *Watcher) Start()

Start begins processing file events in a goroutine.

func (*Watcher) Stop

func (w *Watcher) Stop()

Stop stops the watcher and waits for it to finish.

func (*Watcher) WatchRecursive

func (w *Watcher) WatchRecursive(root string) (watched int, unwatched int, err error)

WatchRecursive walks a directory tree and adds all subdirectories to the watch list. Returns the number of directories watched and unwatched (failed to add).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL