editor

package
v0.38.7 Latest Latest
Warning

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

Go to latest
Published: Mar 10, 2026 License: MIT Imports: 13 Imported by: 0

Documentation

Index

Constants

View Source
const DefaultIdleThreshold = 2 * time.Second

DefaultIdleThreshold is the minimum time since last modification before a live edit is considered safe.

Variables

View Source
var ErrRaceDetected = errors.New("race detected: file modified during live edit")

ErrRaceDetected is returned when the JSONL file changes during a live edit, indicating Claude Code wrote between operations.

View Source
var ErrSessionNotIdle = errors.New("session not idle: mtime too recent")

ErrSessionNotIdle is returned when the session mtime is too recent to safely edit.

Functions

func CollapsePreview added in v0.4.6

func CollapsePreview(path string, commitPointUUID string) (int, error)

CollapsePreview returns the count of CANDIDATE entries above a commit point without modifying anything (dry-run).

func CountSeparatorTokens added in v0.3.0

func CountSeparatorTokens(entries []jsonl.Entry) int

CountSeparatorTokens estimates the token cost of separators in entries.

func DeduplicateSections added in v0.8.0

func DeduplicateSections(sections []UniteSection) map[int]int

DeduplicateSections returns a map of index → duplicate-of-index for sections with identical headings. The earlier occurrence wins.

func ExportBranchesPreview added in v0.4.7

func ExportBranchesPreview(entries []jsonl.Entry, branches []analyzer.Branch, selectedIndices []int) (int, float64)

ExportBranchesPreview returns token and cost totals without writing a file.

func IsIdle added in v0.3.0

func IsIdle(path string, threshold time.Duration) (bool, time.Time, error)

IsIdle returns true if the file's mtime is older than threshold. Also returns the current mtime for subsequent race detection.

func MarkerPath added in v0.4.5

func MarkerPath(sessionPath string) string

MarkerPath returns the sidecar file path for a given session JSONL path.

func RenderVector added in v0.9.0

func RenderVector(snap *VectorSnapshot, outputPath string) error

RenderVector writes the snapshot to a compact markdown file.

func SaveMarkers added in v0.4.5

func SaveMarkers(sessionPath string, mf *MarkerFile) error

SaveMarkers writes the marker file to disk.

Types

type Bookmark added in v0.30.0

type Bookmark struct {
	Type  BookmarkType `json:"type"`
	Label string       `json:"label,omitempty"`
}

Bookmark is a user-defined positional anchor with optional label.

type BookmarkType added in v0.30.0

type BookmarkType string

BookmarkType is a non-destructive navigational anchor type.

const (
	BookmarkCheckpoint BookmarkType = "checkpoint"
	BookmarkMilestone  BookmarkType = "milestone"
)

type CleanAllOpts added in v0.38.5

type CleanAllOpts struct {
	Tombstone bool // replace orphans with placeholders instead of deleting
}

CleanAllOpts configures a CleanAll run.

type CleanAllResult added in v0.3.0

type CleanAllResult struct {
	ProgressRemoved    int
	SnapshotsRemoved   int
	SidechainsRemoved  int
	TangentsRemoved    int
	FailedRetries      int
	StaleReadsRemoved  int
	OrphansRemoved     int
	OrphansTombstoned  int
	CascadeConverged   bool
	ImagesReplaced     int
	SeparatorsStripped int
	OutputsTruncated   int
	TotalTokensSaved   int
	KeepSkipped        int
	BytesBefore        int64
	BytesAfter         int64
}

CleanAllResult holds the combined results of all cleanup operations.

func CleanAll added in v0.3.0

func CleanAll(path string, opts CleanAllOpts) (*CleanAllResult, error)

CleanAll runs all cleanup operations in optimal order with a single backup. Order: entry deletions first, then content surgery.

type CleanLiveOpts added in v0.3.0

type CleanLiveOpts struct {
	Aggressive bool          // include Tier 4-5 (images, separators, truncation)
	Tier3      bool          // include stale reads + failed retries
	Threshold  time.Duration // idle threshold (default: DefaultIdleThreshold)
}

CleanLiveOpts configures a live cleanup pass.

type CleanLiveResult added in v0.3.0

type CleanLiveResult struct {
	ProgressRemoved    int
	SnapshotsRemoved   int
	StaleReadsRemoved  int // Tier 3, only with Tier3
	FailedRetries      int // Tier 3, only with Tier3
	ImagesReplaced     int // Tier 4, only with Aggressive
	SeparatorsStripped int // Tier 4, only with Aggressive
	OutputsTruncated   int // Tier 5, only with Aggressive
	TotalTokensSaved   int
	BytesBefore        int64
	BytesAfter         int64
}

CleanLiveResult holds the combined results of live cleanup operations.

func CleanLive added in v0.3.0

func CleanLive(path string, opts CleanLiveOpts) (*CleanLiveResult, error)

CleanLive runs safe cleanup operations on a potentially active session.

Tier 1: progress removal Tier 2: snapshot removal With Aggressive: Tier 4: image replacement, separator stripping Tier 5: bash output truncation

Between each sub-operation, the file mtime is checked. If it changed (meaning Claude Code wrote to it), the operation aborts and restores from the original backup.

Tier 6-7 operations (sidechains, tangents, retries, dedup) are NEVER available in live mode regardless of flags.

type CollapseResult added in v0.4.6

type CollapseResult struct {
	EntriesRemoved int
	ChainRepairs   int
	BytesBefore    int64
	BytesAfter     int64
}

CollapseResult holds the result of a collapse operation.

func Collapse added in v0.4.6

func Collapse(path string, commitPointUUID string) (*CollapseResult, error)

Collapse deletes CANDIDATE entries above a commit point, preserving KEEP entries. Creates a backup before modifying. Removes the commit point from the sidecar after collapse.

type CommitPoint added in v0.4.6

type CommitPoint struct {
	UUID        string    `json:"uuid"`
	Timestamp   time.Time `json:"timestamp"`
	Goal        string    `json:"goal"`
	Decisions   []string  `json:"decisions"`
	Constraints []string  `json:"constraints,omitempty"`
	Questions   []string  `json:"questions,omitempty"`
	Files       []string  `json:"files,omitempty"`
}

CommitPoint represents a user-marked decision boundary in a session.

func ExtractCanonicalState added in v0.4.6

func ExtractCanonicalState(entries []jsonl.Entry, cursorIdx int) CommitPoint

ExtractCanonicalState scans entries[0..cursorIdx] and builds a CommitPoint with extracted decisions, constraints, questions, and file references.

type DedupResult added in v0.3.0

type DedupResult struct {
	StaleReadsRemoved int
	EntriesRemoved    int
	BlocksRemoved     int
	ChainRepairs      int
	BytesBefore       int64
	BytesAfter        int64
}

DedupResult holds the result of a duplicate read deduplication operation.

func DeduplicateReads added in v0.3.0

func DeduplicateReads(path string, dupResult *analyzer.DuplicateReadResult) (*DedupResult, error)

DeduplicateReads removes stale file read tool_use/tool_result pairs. For each stale read:

  • If assistant message has only that tool_use → delete entire entry
  • If assistant message has other blocks → remove just that tool_use block
  • Remove the corresponding tool_result block from user message
  • If user message only has that tool_result → delete entire entry

Always creates a backup before modifying.

type DeleteResult

type DeleteResult struct {
	EntriesRemoved int
	ChainRepairs   int
	KeepSkipped    int
	BytesBefore    int64
	BytesAfter     int64
}

DeleteResult holds the result of a delete operation.

func Delete

func Delete(path string, toDelete map[int]bool) (*DeleteResult, error)

Delete removes selected entries from a JSONL file, repairing parentUuid chains. Always creates a backup before modifying.

func DeleteWithMarkers added in v0.4.5

func DeleteWithMarkers(path string, toDelete map[int]bool, markers *MarkerFile) (*DeleteResult, error)

DeleteWithMarkers removes selected entries, skipping any marked as KEEP.

func RemoveProgress

func RemoveProgress(path string) (*DeleteResult, error)

RemoveProgress removes all progress messages from a JSONL file. Always creates a backup before modifying.

type DistillOpts added in v0.7.0

type DistillOpts struct {
	FullContent bool
	OutputPath  string
}

DistillOpts controls distillation output.

type DistillResult added in v0.7.0

type DistillResult struct {
	TopicsIncluded  int
	SessionsSpanned int
	TotalTokens     int
	TotalCost       float64
	OutputPath      string
}

DistillResult holds the output of a distill operation.

func DistillToMarkdown added in v0.7.0

func DistillToMarkdown(ts *analyzer.TopicSet, selectedIndices []int, opts DistillOpts) (*DistillResult, error)

DistillToMarkdown renders selected topics to a markdown file.

type ExportResult added in v0.4.7

type ExportResult struct {
	BranchesExported int
	EntriesExtracted int
	TokenCost        int
	DollarCost       float64
	OutputPath       string
}

ExportResult holds the result of a branch export operation.

func ExportBranches added in v0.4.7

func ExportBranches(entries []jsonl.Entry, branches []analyzer.Branch, selectedIndices []int, sessionID, outputPath string) (*ExportResult, error)

ExportBranches writes selected branches to a markdown file. selectedIndices are branch indices (0-based) into the branches slice. If selectedIndices is empty, all branches are exported.

type MarkerFile added in v0.4.5

type MarkerFile struct {
	Version      int                   `json:"version"`
	Markers      map[string]MarkerType `json:"markers"`
	Phases       map[string]PhaseType  `json:"phases,omitempty"`
	CommitPoints []CommitPoint         `json:"commit_points,omitempty"`
	Bookmarks    map[string]Bookmark   `json:"bookmarks,omitempty"`
}

MarkerFile holds persisted markers in a sidecar file alongside a session JSONL.

func LoadMarkers added in v0.4.5

func LoadMarkers(sessionPath string) (*MarkerFile, error)

LoadMarkers reads the sidecar marker file. Returns an empty MarkerFile if missing.

func (*MarkerFile) AddCommitPoint added in v0.4.6

func (mf *MarkerFile) AddCommitPoint(cp CommitPoint)

AddCommitPoint appends a commit point.

func (*MarkerFile) Clear added in v0.4.5

func (mf *MarkerFile) Clear(uuid string)

Clear removes a marker from a UUID.

func (*MarkerFile) ClearBookmark added in v0.30.0

func (mf *MarkerFile) ClearBookmark(uuid string)

ClearBookmark removes a bookmark from a UUID.

func (*MarkerFile) ClearPhase added in v0.4.7

func (mf *MarkerFile) ClearPhase(uuid string)

ClearPhase removes a phase from a UUID.

func (*MarkerFile) Get added in v0.4.5

func (mf *MarkerFile) Get(uuid string) MarkerType

Get returns the marker for a UUID, or "" if unset.

func (*MarkerFile) GetBookmark added in v0.30.0

func (mf *MarkerFile) GetBookmark(uuid string) (Bookmark, bool)

GetBookmark returns the bookmark for a UUID, if any.

func (*MarkerFile) GetCommitPoint added in v0.4.6

func (mf *MarkerFile) GetCommitPoint(uuid string) *CommitPoint

GetCommitPoint returns the commit point for a UUID, or nil if not found.

func (*MarkerFile) GetPhase added in v0.4.7

func (mf *MarkerFile) GetPhase(uuid string) PhaseType

GetPhase returns the phase for a UUID, or "" if unset.

func (*MarkerFile) HasCommitPoint added in v0.4.6

func (mf *MarkerFile) HasCommitPoint(uuid string) bool

HasCommitPoint returns true if a commit point exists at the given UUID.

func (*MarkerFile) IsKeep added in v0.4.5

func (mf *MarkerFile) IsKeep(uuid string) bool

IsKeep returns true if the UUID is marked as KEEP.

func (*MarkerFile) IsNoise added in v0.4.5

func (mf *MarkerFile) IsNoise(uuid string) bool

IsNoise returns true if the UUID is marked as NOISE.

func (*MarkerFile) RemoveCommitPoint added in v0.4.6

func (mf *MarkerFile) RemoveCommitPoint(uuid string)

RemoveCommitPoint removes a commit point by UUID.

func (*MarkerFile) Set added in v0.4.5

func (mf *MarkerFile) Set(uuid string, marker MarkerType)

Set assigns a marker to a UUID.

func (*MarkerFile) SetBookmark added in v0.30.0

func (mf *MarkerFile) SetBookmark(uuid string, typ BookmarkType, label string)

SetBookmark assigns or updates a bookmark on a UUID.

func (*MarkerFile) SetPhase added in v0.4.7

func (mf *MarkerFile) SetPhase(uuid string, phase PhaseType)

SetPhase assigns a phase to a UUID.

func (*MarkerFile) Toggle added in v0.4.5

func (mf *MarkerFile) Toggle(uuid string, marker MarkerType)

Toggle sets the marker if unset or different, clears it if same.

func (*MarkerFile) TogglePhase added in v0.4.7

func (mf *MarkerFile) TogglePhase(uuid string, phase PhaseType)

TogglePhase sets the phase if unset or different, clears it if same.

type MarkerType added in v0.4.5

type MarkerType string

MarkerType represents an explicit user intent label for a session entry.

const (
	MarkerKeep      MarkerType = "keep"
	MarkerCandidate MarkerType = "candidate"
	MarkerNoise     MarkerType = "noise"
)

type PhaseType added in v0.4.7

type PhaseType string

PhaseType represents a reasoning phase label for a session entry.

const (
	PhaseExploratory PhaseType = "exploratory"
	PhaseDecision    PhaseType = "decision"
	PhaseOperational PhaseType = "operational"
)

type ReconnectResult added in v0.30.0

type ReconnectResult struct {
	EntriesReconnected int
}

ReconnectResult holds reconnect-sidechains outcome.

func ReconnectSidechains added in v0.30.0

func ReconnectSidechains(path string, report *analyzer.SidechainReport) (*ReconnectResult, error)

ReconnectSidechains rewrites missing parentUuid references to nearest surviving ancestors for sidechain entries classified as repairable.

type RepairResult added in v0.3.0

type RepairResult struct {
	IssuesFixed       int
	EntriesRemoved    int
	EntriesTombstoned int
	ImagesReplaced    int
	ChainRepairs      int
}

RepairResult holds the outcome of a repair operation.

func Repair added in v0.3.0

func Repair(path string, issues []analyzer.Issue, tombstone bool) (*RepairResult, error)

Repair applies fixes for detected issues. When tombstone is true, orphaned results are replaced with placeholders instead of deleted, preserving conversation continuity for Claude for Mac.

type ReplaceImagesResult

type ReplaceImagesResult struct {
	ImagesReplaced int
	BytesSaved     int64
}

ReplaceImagesResult holds the result of an image replacement operation.

func ReplaceImages

func ReplaceImages(path string) (*ReplaceImagesResult, error)

ReplaceImages replaces all base64 image blocks with text placeholders. Always creates a backup before modifying.

type RetryCleanResult added in v0.3.0

type RetryCleanResult struct {
	FailedRemoved  int
	EntriesRemoved int
	BlocksRemoved  int
	ChainRepairs   int
	BytesBefore    int64
	BytesAfter     int64
}

RetryCleanResult holds the result of a failed retry cleanup operation.

func RemoveFailedRetries added in v0.3.0

func RemoveFailedRetries(path string, retryResult *analyzer.RetryResult) (*RetryCleanResult, error)

RemoveFailedRetries removes failed tool attempts that were superseded by retries. For each failed sequence:

  • Remove the tool_use block from the assistant message (or whole entry if only block)
  • Remove the error tool_result block from the user message (or whole entry)

Always creates a backup before modifying.

type SplitResult added in v0.4.3

type SplitResult struct {
	EntriesExtracted int
	TokenCost        int
	DollarCost       float64
	TargetRepo       string
	ReExplFiles      []string
	OutputPath       string
}

SplitResult holds the result of a split-to-markdown operation.

func SplitToMarkdown added in v0.4.3

func SplitToMarkdown(entries []jsonl.Entry, from, to int, meta *analyzer.RangeMetadata, sessionID, outputPath string) (*SplitResult, error)

SplitToMarkdown extracts entries[from:to+1] into a markdown file.

type StripResult added in v0.3.0

type StripResult struct {
	LinesStripped    int
	MessagesModified int
	CharsSaved       int
}

StripResult holds the outcome of separator stripping.

func StripSeparators added in v0.3.0

func StripSeparators(path string) (*StripResult, error)

StripSeparators removes decorative separator lines from assistant messages. Only modifies assistant entries. Creates a backup before writing.

type TombstoneResult added in v0.38.5

type TombstoneResult struct {
	EntriesTombstoned int
	BytesBefore       int64
	BytesAfter        int64
}

TombstoneResult holds the result of a tombstone operation.

func Tombstone added in v0.38.5

func Tombstone(path string, toTombstone map[int]bool) (*TombstoneResult, error)

Tombstone replaces the content of selected entries with a text placeholder, preserving the entry's uuid and parentUuid chain position. Used instead of Delete when entry removal would create visible gaps (Claude for Mac).

type TruncateResult added in v0.3.0

type TruncateResult struct {
	OutputsTruncated int
	TokensSaved      int
	BytesBefore      int64
	BytesAfter       int64
}

TruncateResult holds the result of an output truncation operation.

func TruncateOutputs added in v0.3.0

func TruncateOutputs(path string, threshold, keepLines int) (*TruncateResult, error)

TruncateOutputs truncates large Bash tool_result content to first+last keepLines lines. threshold is the minimum byte size to trigger truncation. keepLines is the number of lines to keep at the start and end.

type UniteOpts added in v0.8.0

type UniteOpts struct {
	OutputPath  string
	ProjectName string
}

UniteOpts controls the unite operation.

type UniteResult added in v0.8.0

type UniteResult struct {
	SectionsIncluded int
	SourceFileCount  int
	TotalTokens      int
	OutputPath       string
}

UniteResult holds the output of a unite operation.

func UniteSections added in v0.8.0

func UniteSections(sections []UniteSection, selectedIndices []int, opts UniteOpts) (*UniteResult, error)

UniteSections merges selected sections into a single markdown file.

type UniteSection added in v0.8.0

type UniteSection struct {
	SourceFile    string
	SourceModTime int64
	Heading       string
	Summary       string
	MetadataLines []string
	Content       string
	TokenEstimate int
}

UniteSection represents a single ## section parsed from a markdown file.

func ParseMarkdownSections added in v0.8.0

func ParseMarkdownSections(path string) ([]UniteSection, string, error)

ParseMarkdownSections parses a markdown file into sections split on "## " headings. Returns sections, project name extracted from # heading, and any error.

type VectorItem added in v0.9.0

type VectorItem struct {
	Text       string
	Source     string
	SourceType VectorSourceType
	Epoch      int
}

VectorItem is a single extracted decision, constraint, or question.

func DeduplicateItems added in v0.9.0

func DeduplicateItems(items []VectorItem) []VectorItem

DeduplicateItems removes items with identical normalized text. First occurrence wins, preserving source priority ordering.

type VectorMarkerInput added in v0.9.0

type VectorMarkerInput struct {
	SessionLabel string
	Markers      *MarkerFile
}

VectorMarkerInput pairs a session label with its loaded markers.

type VectorSnapshot added in v0.9.0

type VectorSnapshot struct {
	ProjectName     string
	SnapshotDate    time.Time
	Decisions       []VectorItem
	Constraints     []VectorItem
	Questions       []VectorItem
	Files           []string
	SessionsScanned int
}

VectorSnapshot holds the aggregated project vector.

func CollectVector added in v0.9.0

func CollectVector(ts *analyzer.TopicSet, markers []VectorMarkerInput) *VectorSnapshot

CollectVector extracts decisions, constraints, and questions from topics and commit points.

type VectorSourceType added in v0.9.0

type VectorSourceType string

VectorSourceType identifies where a vector item was extracted from.

const (
	VectorSourceCommitPoint VectorSourceType = "commit_point"
	VectorSourceArchaeology VectorSourceType = "archaeology"
)

Jump to

Keyboard shortcuts

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