ratelimit

package
v1.42.0 Latest Latest
Warning

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

Go to latest
Published: Aug 13, 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