iop/packages/go/agentprovider/cli/status/tail_buffer.go

43 lines
891 B
Go

package status
import (
"strings"
"sync"
)
// TailBuffer holds a bounded buffer of terminal output.
type TailBuffer struct {
mu sync.Mutex
buf strings.Builder
max int
}
// NewTailBuffer creates a new TailBuffer with the given maximum capacity in bytes.
func NewTailBuffer(max int) *TailBuffer {
return &TailBuffer{max: max}
}
// Append appends a string to the buffer, truncating from the front if it exceeds capacity.
func (tb *TailBuffer) Append(s string) {
tb.mu.Lock()
defer tb.mu.Unlock()
tb.buf.WriteString(s)
raw := tb.buf.String()
if len(raw) <= tb.max {
return
}
tb.buf.Reset()
tb.buf.WriteString(raw[len(raw)-tb.max:])
}
// String returns the contents of the buffer.
func (tb *TailBuffer) String() string {
tb.mu.Lock()
defer tb.mu.Unlock()
return tb.buf.String()
}
// Snapshot holds a snapshot of a terminal session.
type Snapshot struct {
Tail string
}