Help us shape the future of Go! Take the 2026 Go Developer Survey

ratelimit

package
v1.53.0 Latest Latest
Warning

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

Go to latest
Published: Sep 9, 2026 License: AGPL-3.0 Imports: 9 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DefaultCooldown      = 30 * time.Second
	DefaultResetBuffer   = 5
	DefaultRecoveryInput = "1\n"
	// DefaultFallbackWait is how long to wait before retrying when no reset time is known.
	DefaultFallbackWait = 30 * time.Minute
)

Variables

This section is empty.

Functions

This section is empty.

Types

type BufferReader

type BufferReader interface {
	GetRecentOutput(n int) []byte
}

type Detection

type Detection struct {
	Provider    Provider
	State       RateLimitState
	ResetTime   time.Time
	InputToSend []byte
	DetectedAt  time.Time
}

type Detector

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

func NewDetector

func NewDetector(sessionID string) *Detector

func (*Detector) GetResetTime

func (d *Detector) GetResetTime() time.Time

func (*Detector) GetState

func (d *Detector) GetState() RateLimitState

func (*Detector) ProcessOutput

func (d *Detector) ProcessOutput(data []byte)

func (*Detector) SetCooldown

func (d *Detector) SetCooldown(cooldown time.Duration)

func (*Detector) SetDetectionCallback

func (d *Detector) SetDetectionCallback(callback func(Detection))

func (*Detector) SetResetBuffer

func (d *Detector) SetResetBuffer(seconds int)

func (*Detector) SetState

func (d *Detector) SetState(state RateLimitState)

type EventBus

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

func NewEventBus

func NewEventBus() *EventBus

func (*EventBus) Publish

func (eb *EventBus) Publish(event RateLimitEvent)

func (*EventBus) Subscribe

func (eb *EventBus) Subscribe(eventType eventType) <-chan RateLimitEvent

type Integration

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

func NewIntegrationWithAccessor

func NewIntegrationWithAccessor(sessionID string, session SessionAccessor, buffer BufferReader) *Integration

func (*Integration) GetManager

func (i *Integration) GetManager() *Manager

func (*Integration) IsEnabled

func (i *Integration) IsEnabled() bool

func (*Integration) SetEnabled

func (i *Integration) SetEnabled(enabled bool)

func (*Integration) Start

func (i *Integration) Start()

func (*Integration) Stop

func (i *Integration) Stop()

type Manager

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

func NewManager

func NewManager(sessionID string, instance SessionAccessor) *Manager

func (*Manager) GetDetector

func (m *Manager) GetDetector() *Detector

func (*Manager) GetEventBus

func (m *Manager) GetEventBus() *EventBus

func (*Manager) GetResetTime added in v1.35.0

func (m *Manager) GetResetTime() time.Time

GetResetTime returns the current rate limit reset time, delegating to the detector.

func (*Manager) GetScheduler

func (m *Manager) GetScheduler() *Scheduler

func (*Manager) GetState

func (m *Manager) GetState() RateLimitState

func (*Manager) IsEnabled

func (m *Manager) IsEnabled() bool

func (*Manager) ProcessOutput

func (m *Manager) ProcessOutput(data []byte)

func (*Manager) SetCooldown

func (m *Manager) SetCooldown(cooldown time.Duration)

func (*Manager) SetDetectionCallback added in v1.35.0

func (m *Manager) SetDetectionCallback(fn func(Detection))

SetDetectionCallback registers an external callback to fire when a rate limit is detected. Called in addition to the internal event bus publish. Safe to call with nil to clear.

func (*Manager) SetEnabled

func (m *Manager) SetEnabled(enabled bool)

func (*Manager) SetRecoveryCallback added in v1.35.0

func (m *Manager) SetRecoveryCallback(fn func(success bool, det Detection))

SetRecoveryCallback registers an external callback to fire when recovery completes. success=true means recovery input was sent successfully; false means it failed.

func (*Manager) SetResetBuffer

func (m *Manager) SetResetBuffer(seconds int)

func (*Manager) Start

func (m *Manager) Start()

func (*Manager) Stop

func (m *Manager) Stop()

type PTYConsumer

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

func NewPTYConsumer

func NewPTYConsumer(buffer BufferReader, manager *Manager) *PTYConsumer

func (*PTYConsumer) GetManager added in v1.35.0

func (pc *PTYConsumer) GetManager() *Manager

GetManager returns the underlying Manager for advanced callback wiring.

func (*PTYConsumer) GetRateLimitState

func (pc *PTYConsumer) GetRateLimitState() RateLimitState

func (*PTYConsumer) GetResetTime added in v1.35.0

func (pc *PTYConsumer) GetResetTime() time.Time

GetResetTime returns the current rate limit reset time from the underlying manager.

func (*PTYConsumer) IsEnabled

func (pc *PTYConsumer) IsEnabled() bool

func (*PTYConsumer) NotifyOutput added in v1.35.0

func (pc *PTYConsumer) NotifyOutput()

NotifyOutput signals the poll loop that new data is available, avoiding the 500ms polling delay. The send is non-blocking: if a notification is already pending, the extra signal is dropped rather than blocking the caller.

func (*PTYConsumer) SetEnabled

func (pc *PTYConsumer) SetEnabled(enabled bool)

func (*PTYConsumer) Start

func (pc *PTYConsumer) Start()

func (*PTYConsumer) Stop

func (pc *PTYConsumer) Stop()

type Provider

type Provider string
const (
	ProviderAnthropic Provider = "anthropic"
	ProviderOpenAI    Provider = "openai"
	ProviderGoogle    Provider = "google"
	ProviderAider     Provider = "aider"
	ProviderUnknown   Provider = "unknown"
)

type RateLimitEvent

type RateLimitEvent struct {
	Type      eventType
	SessionID string
	Provider  Provider
	Timestamp time.Time
	Error     error
}

type RateLimitState

type RateLimitState int
const (
	StateNone RateLimitState = iota
	StateWaiting
	StateRecovering
	StateRecovered
	StateFailed
)

type RecoveryHandler

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

func NewRecoveryHandler

func NewRecoveryHandler(sessionID string, sendInput func([]byte) error) *RecoveryHandler

func (*RecoveryHandler) Execute

func (h *RecoveryHandler) Execute(input []byte) error

type Scheduler

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

func NewScheduler

func NewScheduler(sessionID string) *Scheduler

func (*Scheduler) CancelRecovery

func (s *Scheduler) CancelRecovery()

func (*Scheduler) GetFireTime added in v1.35.0

func (s *Scheduler) GetFireTime() (time.Time, bool)

GetFireTime returns the actual time the scheduled timer will fire. Returns zero time and false when no timer is scheduled. Useful for testing the fallback wait duration.

func (*Scheduler) GetScheduledTime

func (s *Scheduler) GetScheduledTime() (time.Time, bool)

func (*Scheduler) IsScheduled

func (s *Scheduler) IsScheduled() bool

func (*Scheduler) ScheduleRecovery

func (s *Scheduler) ScheduleRecovery(resetTime time.Time)

func (*Scheduler) SetBuffer

func (s *Scheduler) SetBuffer(seconds int)

func (*Scheduler) SetRecoveryCallback

func (s *Scheduler) SetRecoveryCallback(callback func() error)

func (*Scheduler) SetSessionStatusCheck

func (s *Scheduler) SetSessionStatusCheck(callback func() bool)

type SessionAccessor

type SessionAccessor interface {
	WriteToPTY(data []byte) (int, error)
	GetStatus() int
}

type SessionStatus

type SessionStatus int
const (
	SessionStatusRunning SessionStatus = iota
	SessionStatusReady
	SessionStatusPaused
	SessionStatusStopped
)

func StatusToSessionStatus

func StatusToSessionStatus(s int) SessionStatus

Jump to

Keyboard shortcuts

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