Documentation
¶
Index ¶
- Constants
- Variables
- func IsRetryableError(err error) bool
- func RetryWithBackoff(ctx context.Context, config RetryConfig, fn func() error) error
- type AdapterManager
- func (m *AdapterManager) GetAdapter(platform string) (ChatAdapter, bool)
- func (m *AdapterManager) Handler() http.Handler
- func (m *AdapterManager) ListPlatforms() []string
- func (m *AdapterManager) Register(adapter ChatAdapter) error
- func (m *AdapterManager) RegisterEngine(eng *engine.Engine)
- func (m *AdapterManager) RegisterRoutes(router *mux.Router)
- func (m *AdapterManager) SendMessage(ctx context.Context, platform, sessionID string, msg *ChatMessage) error
- func (m *AdapterManager) StartAll(ctx context.Context) error
- func (m *AdapterManager) StopAll() error
- func (m *AdapterManager) Unregister(platform string) error
- type AdapterMetrics
- type Attachment
- type ChatAdapter
- type ChatMessage
- type ConfigLoader
- func (c *ConfigLoader) Close() error
- func (c *ConfigLoader) GetConfig(platform string) *PlatformConfig
- func (c *ConfigLoader) GetOptions(platform string) map[string]any
- func (c *ConfigLoader) GetSystemPrompt(platform string) string
- func (c *ConfigLoader) GetTaskInstructions(platform string) string
- func (c *ConfigLoader) HasPlatform(platform string) bool
- func (c *ConfigLoader) Load(configDir string) error
- func (c *ConfigLoader) Platforms() []string
- func (c *ConfigLoader) StartHotReload(ctx context.Context, configDir string, ...) error
- type DiscordEmbed
- type DiscordEmbedField
- type DiscordEmbedFooter
- type DiscordEmbedImage
- type DiscordEmbedThumbnail
- type EngineConfig
- type EngineHolder
- type EngineHolderOptions
- type EngineMessageHandler
- type EngineMessageHandlerOption
- type HealthCheck
- type HealthChecker
- type InlineKeyboardButton
- type InlineKeyboardMarkup
- type LifecycleManager
- func (m *LifecycleManager) OnStart(hook func(ChatAdapter) error)
- func (m *LifecycleManager) OnStop(hook func(ChatAdapter) error)
- func (m *LifecycleManager) RegisterAdapter(adapter ChatAdapter, startPriority int)
- func (m *LifecycleManager) StartAll(ctx context.Context) error
- func (m *LifecycleManager) StopAll() error
- type Logger
- type MessageHandler
- type MessageQueue
- func (q *MessageQueue) AddToDLQ(msg *QueuedMessage)
- func (q *MessageQueue) DLQLen() int
- func (q *MessageQueue) Dequeue() (*QueuedMessage, bool)
- func (q *MessageQueue) Enqueue(platform, sessionID string, msg *ChatMessage) error
- func (q *MessageQueue) GetDLQ() []*QueuedMessage
- func (q *MessageQueue) Requeue(msg *QueuedMessage) error
- func (q *MessageQueue) Size() int
- func (q *MessageQueue) Start(adapterGetter func(string) (ChatAdapter, bool), ...)
- func (q *MessageQueue) Stop()
- type ParseMode
- type PlatformConfig
- type QueueError
- type QueuedMessage
- type RateLimiter
- type RetryConfig
- type RichContent
- type SlackBlock
- type StreamAdapter
- type StreamCallback
- type StreamHandler
Constants ¶
const ( ParseModeNone = base.ParseModeNone ParseModeMarkdown = base.ParseModeMarkdown ParseModeHTML = base.ParseModeHTML )
Variables ¶
var ErrQueueFull = &QueueError{Message: "queue is full"}
Functions ¶
func IsRetryableError ¶
IsRetryableError classifies errors as retryable or non-retryable
func RetryWithBackoff ¶
func RetryWithBackoff(ctx context.Context, config RetryConfig, fn func() error) error
Types ¶
type AdapterManager ¶
type AdapterManager struct {
// contains filtered or unexported fields
}
func NewAdapterManager ¶
func NewAdapterManager(logger *slog.Logger) *AdapterManager
func Setup ¶ added in v0.11.0
Setup initializes all enabled ChatApps and their dedicated Engines. It returns an http.Handler that handles all webhook routes.
func (*AdapterManager) GetAdapter ¶
func (m *AdapterManager) GetAdapter(platform string) (ChatAdapter, bool)
func (*AdapterManager) Handler ¶ added in v0.11.0
func (m *AdapterManager) Handler() http.Handler
Handler returns an http.Handler with all adapter webhooks mounted This is a convenience method when you don't need gorilla/mux
func (*AdapterManager) ListPlatforms ¶
func (m *AdapterManager) ListPlatforms() []string
func (*AdapterManager) Register ¶
func (m *AdapterManager) Register(adapter ChatAdapter) error
func (*AdapterManager) RegisterEngine ¶ added in v0.11.0
func (m *AdapterManager) RegisterEngine(eng *engine.Engine)
func (*AdapterManager) RegisterRoutes ¶ added in v0.11.0
func (m *AdapterManager) RegisterRoutes(router *mux.Router)
RegisterRoutes registers all adapter webhooks to a unified router Path format: /webhook/{platform} (e.g., /webhook/telegram, /webhook/discord)
func (*AdapterManager) SendMessage ¶
func (m *AdapterManager) SendMessage(ctx context.Context, platform, sessionID string, msg *ChatMessage) error
SendMessage sends a message to a specific platform
func (*AdapterManager) StopAll ¶
func (m *AdapterManager) StopAll() error
func (*AdapterManager) Unregister ¶
func (m *AdapterManager) Unregister(platform string) error
type AdapterMetrics ¶
type AdapterMetrics struct {
MessagesReceived atomic.Int64
MessagesSent atomic.Int64
MessagesFailed atomic.Int64
LastMessageAt atomic.Int64
Uptime atomic.Int64
}
func NewAdapterMetrics ¶
func NewAdapterMetrics() *AdapterMetrics
func (*AdapterMetrics) GetStats ¶
func (m *AdapterMetrics) GetStats() map[string]int64
func (*AdapterMetrics) RecordFailure ¶
func (m *AdapterMetrics) RecordFailure()
func (*AdapterMetrics) RecordReceive ¶
func (m *AdapterMetrics) RecordReceive()
func (*AdapterMetrics) RecordSend ¶
func (m *AdapterMetrics) RecordSend()
type Attachment ¶
type Attachment = base.Attachment
type ChatAdapter ¶
type ChatAdapter = base.ChatAdapter
type ChatMessage ¶
type ChatMessage = base.ChatMessage
func NewChatMessage ¶ added in v0.11.0
func NewChatMessage(platform, sessionID, userID, content string) *ChatMessage
type ConfigLoader ¶
type ConfigLoader struct {
// contains filtered or unexported fields
}
func NewConfigLoader ¶
func NewConfigLoader(configDir string, logger *slog.Logger) (*ConfigLoader, error)
func (*ConfigLoader) Close ¶ added in v0.11.0
func (c *ConfigLoader) Close() error
Close stops all hot reload watchers and releases resources.
func (*ConfigLoader) GetConfig ¶
func (c *ConfigLoader) GetConfig(platform string) *PlatformConfig
func (*ConfigLoader) GetOptions ¶ added in v0.11.0
func (c *ConfigLoader) GetOptions(platform string) map[string]any
func (*ConfigLoader) GetSystemPrompt ¶
func (c *ConfigLoader) GetSystemPrompt(platform string) string
func (*ConfigLoader) GetTaskInstructions ¶
func (c *ConfigLoader) GetTaskInstructions(platform string) string
func (*ConfigLoader) HasPlatform ¶
func (c *ConfigLoader) HasPlatform(platform string) bool
func (*ConfigLoader) Load ¶
func (c *ConfigLoader) Load(configDir string) error
func (*ConfigLoader) Platforms ¶
func (c *ConfigLoader) Platforms() []string
func (*ConfigLoader) StartHotReload ¶ added in v0.11.0
func (c *ConfigLoader) StartHotReload(ctx context.Context, configDir string, onReload func(platform string, cfg *PlatformConfig)) error
StartHotReload starts watching all config files for changes and automatically reloads them. The onReload callback is called with the updated PlatformConfig for each platform.
type DiscordEmbed ¶
type DiscordEmbed struct {
Title string `json:"title,omitempty"`
Description string `json:"description,omitempty"`
URL string `json:"url,omitempty"`
Color int `json:"color,omitempty"`
Fields []DiscordEmbedField `json:"fields,omitempty"`
Thumbnail *DiscordEmbedThumbnail `json:"thumbnail,omitempty"`
Image *DiscordEmbedImage `json:"image,omitempty"`
Timestamp string `json:"timestamp,omitempty"`
}
type DiscordEmbedField ¶
type DiscordEmbedFooter ¶
type DiscordEmbedFooter struct {
}
type DiscordEmbedImage ¶
type DiscordEmbedImage struct {
URL string `json:"url"`
}
type DiscordEmbedThumbnail ¶
type DiscordEmbedThumbnail struct {
URL string `json:"url"`
}
type EngineConfig ¶ added in v0.11.0
type EngineHolder ¶
type EngineHolder struct {
// contains filtered or unexported fields
}
EngineHolder holds the Engine instance and configuration for ChatApps integration
func NewEngineHolder ¶
func NewEngineHolder(opts EngineHolderOptions) (*EngineHolder, error)
NewEngineHolder creates a new EngineHolder with the given options
func (*EngineHolder) GetAdapterManager ¶
func (h *EngineHolder) GetAdapterManager() *AdapterManager
GetAdapterManager returns the AdapterManager for sending messages
func (*EngineHolder) GetEngine ¶
func (h *EngineHolder) GetEngine() *engine.Engine
GetEngine returns the underlying Engine instance
type EngineHolderOptions ¶
type EngineHolderOptions struct {
Logger *slog.Logger
Adapters *AdapterManager
Timeout time.Duration
IdleTimeout time.Duration
Namespace string
PermissionMode string
AllowedTools []string
DisallowedTools []string
DefaultWorkDir string
DefaultTaskInstr string
}
EngineHolderOptions configures the EngineHolder
type EngineMessageHandler ¶
type EngineMessageHandler struct {
// contains filtered or unexported fields
}
EngineMessageHandler implements MessageHandler and integrates with Engine
func NewEngineMessageHandler ¶
func NewEngineMessageHandler(engine *engine.Engine, adapters *AdapterManager, opts ...EngineMessageHandlerOption) *EngineMessageHandler
NewEngineMessageHandler creates a new EngineMessageHandler
func (*EngineMessageHandler) Handle ¶
func (h *EngineMessageHandler) Handle(ctx context.Context, msg *ChatMessage) error
Handle implements MessageHandler
type EngineMessageHandlerOption ¶
type EngineMessageHandlerOption func(*EngineMessageHandler)
EngineMessageHandlerOption configures the EngineMessageHandler
func WithConfigLoader ¶
func WithConfigLoader(loader *ConfigLoader) EngineMessageHandlerOption
func WithLogger ¶
func WithLogger(logger *slog.Logger) EngineMessageHandlerOption
func WithTaskInstrFn ¶
func WithTaskInstrFn(fn func(sessionID string) string) EngineMessageHandlerOption
func WithWorkDirFn ¶
func WithWorkDirFn(fn func(sessionID string) string) EngineMessageHandlerOption
type HealthCheck ¶
type HealthChecker ¶
type HealthChecker struct {
// contains filtered or unexported fields
}
func NewHealthChecker ¶
func NewHealthChecker(interval time.Duration) *HealthChecker
func (*HealthChecker) GetStatus ¶
func (h *HealthChecker) GetStatus() map[string]HealthCheck
func (*HealthChecker) Register ¶
func (h *HealthChecker) Register(check HealthCheck)
func (*HealthChecker) Start ¶
func (h *HealthChecker) Start()
func (*HealthChecker) Stop ¶
func (h *HealthChecker) Stop()
type InlineKeyboardButton ¶
type InlineKeyboardMarkup ¶
type InlineKeyboardMarkup struct {
InlineKeyboard [][]InlineKeyboardButton `json:"inline_keyboard"`
}
type LifecycleManager ¶
type LifecycleManager struct {
// contains filtered or unexported fields
}
func NewLifecycleManager ¶
func NewLifecycleManager() *LifecycleManager
func (*LifecycleManager) OnStart ¶
func (m *LifecycleManager) OnStart(hook func(ChatAdapter) error)
func (*LifecycleManager) OnStop ¶
func (m *LifecycleManager) OnStop(hook func(ChatAdapter) error)
func (*LifecycleManager) RegisterAdapter ¶
func (m *LifecycleManager) RegisterAdapter(adapter ChatAdapter, startPriority int)
func (*LifecycleManager) StopAll ¶
func (m *LifecycleManager) StopAll() error
type MessageHandler ¶
type MessageHandler = base.MessageHandler
type MessageQueue ¶
type MessageQueue struct {
// contains filtered or unexported fields
}
func NewMessageQueue ¶
func NewMessageQueue(logger *slog.Logger, maxSize, dlqSize, workers int) *MessageQueue
func (*MessageQueue) AddToDLQ ¶
func (q *MessageQueue) AddToDLQ(msg *QueuedMessage)
AddToDLQ stores a failed message to the Dead Letter Queue
func (*MessageQueue) DLQLen ¶
func (q *MessageQueue) DLQLen() int
DLQLen returns the number of messages in the Dead Letter Queue
func (*MessageQueue) Dequeue ¶
func (q *MessageQueue) Dequeue() (*QueuedMessage, bool)
func (*MessageQueue) Enqueue ¶
func (q *MessageQueue) Enqueue(platform, sessionID string, msg *ChatMessage) error
func (*MessageQueue) GetDLQ ¶
func (q *MessageQueue) GetDLQ() []*QueuedMessage
GetDLQ returns all messages in the Dead Letter Queue
func (*MessageQueue) Requeue ¶
func (q *MessageQueue) Requeue(msg *QueuedMessage) error
Requeue adds a message back to the queue for retry
func (*MessageQueue) Size ¶
func (q *MessageQueue) Size() int
func (*MessageQueue) Start ¶
func (q *MessageQueue) Start(adapterGetter func(string) (ChatAdapter, bool), sendFn func(context.Context, string, string, *ChatMessage) error)
func (*MessageQueue) Stop ¶
func (q *MessageQueue) Stop()
type PlatformConfig ¶
type PlatformConfig struct {
Platform string `yaml:"platform"`
SystemPrompt string `yaml:"system_prompt"`
TaskInstructions string `yaml:"task_instructions"`
Engine EngineConfig `yaml:"engine"`
Provider provider.ProviderConfig `yaml:"provider"`
Options map[string]any `yaml:"options,omitempty"`
}
type QueueError ¶
type QueueError struct {
Message string
}
func (*QueueError) Error ¶
func (e *QueueError) Error() string
type QueuedMessage ¶
type RateLimiter ¶
type RateLimiter struct {
// contains filtered or unexported fields
}
func NewRateLimiter ¶
func NewRateLimiter(maxTokens float64, refillRate float64) *RateLimiter
func (*RateLimiter) Allow ¶
func (r *RateLimiter) Allow() bool
type RetryConfig ¶
type RichContent ¶
type RichContent = base.RichContent
type SlackBlock ¶
type StreamAdapter ¶
type StreamAdapter interface {
ChatAdapter
SendStreamMessage(ctx context.Context, sessionID string, msg *ChatMessage) (StreamHandler, error)
UpdateMessage(ctx context.Context, sessionID, messageID string, msg *ChatMessage) error
}
type StreamCallback ¶
type StreamCallback struct {
// contains filtered or unexported fields
}
StreamCallback implements event.Callback to receive Engine events and forward to ChatApp
func NewStreamCallback ¶
func NewStreamCallback(ctx context.Context, sessionID, platform string, adapters *AdapterManager, logger *slog.Logger, metadata map[string]any) *StreamCallback
NewStreamCallback creates a new StreamCallback