Documentation
¶
Index ¶
- Constants
- Variables
- func BoolArg(arguments map[string]any, key string) (bool, bool, error)
- func FirstStringArg(arguments map[string]any, keys ...string) string
- func IntArg(arguments map[string]any, key string) (int, bool, error)
- func StringArg(arguments map[string]any, key string) string
- type Attachment
- type BrowserProvider
- type ContactsProvider
- type ContainerProvider
- type EmailProvider
- type FederationProvider
- type HistoryProvider
- type ImageGenProvider
- type MemoryProvider
- type MemorySettingsReader
- type MessageProvider
- type ModelCreator
- type Reaction
- type ReadMediaToolOutput
- type ReadMediaToolResult
- type ScheduleProvider
- type Scheduler
- type SessionContext
- type SessionLister
- type SkillDetail
- type SkillProvider
- type SpawnAgent
- type SpawnIdentity
- type SpawnLoopConfig
- type SpawnProvider
- func (p *SpawnProvider) SetAgent(a SpawnAgent)
- func (p *SpawnProvider) SetMessageService(w messagepkg.Writer)
- func (p *SpawnProvider) SetModelCreator(fn ModelCreator)
- func (p *SpawnProvider) SetSystemPromptFunc(fn func(sessionType string) string)
- func (p *SpawnProvider) Tools(_ context.Context, session SessionContext) ([]sdk.Tool, error)
- type SpawnResult
- type SpawnRunConfig
- type Speech
- type StreamEmitter
- type StreamEventType
- type SubagentWatchdog
- type TTSChannelResolver
- type TTSProvider
- type TTSSender
- type ToolProvider
- type ToolStreamEvent
- type TranscriptionProvider
- type WebFetchProvider
- type WebProvider
Constants ¶
const ( // ReadMediaToolName is the tool name that the agent decoration layer // matches on to intercept image payloads. After the merge this is "read". ReadMediaToolName = "read" )
Variables ¶
var ErrWatchdogTimedOut = errors.New("subagent watchdog: no activity within timeout")
ErrWatchdogTimedOut is returned when the subagent watchdog fires (no activity within the timeout period).
Functions ¶
Types ¶
type Attachment ¶ added in v0.7.0
type Attachment struct {
Type string `json:"type"`
Path string `json:"path,omitempty"`
URL string `json:"url,omitempty"`
Base64 string `json:"base64,omitempty"`
PlatformKey string `json:"platform_key,omitempty"`
Mime string `json:"mime,omitempty"`
Name string `json:"name,omitempty"`
ContentHash string `json:"content_hash,omitempty"`
Size int64 `json:"size,omitempty"`
Metadata map[string]any `json:"metadata,omitempty"`
}
Attachment describes a file reference emitted by a tool.
type BrowserProvider ¶
type BrowserProvider struct {
// contains filtered or unexported fields
}
func NewBrowserProvider ¶
func NewBrowserProvider(log *slog.Logger, settingsSvc *settings.Service, containers bridge.Provider, displayWorkspace displaypkg.Workspace, dataRoot string) *BrowserProvider
func (*BrowserProvider) Tools ¶
func (p *BrowserProvider) Tools(ctx context.Context, session SessionContext) ([]sdk.Tool, error)
type ContactsProvider ¶
type ContactsProvider struct {
// contains filtered or unexported fields
}
func NewContactsProvider ¶
func NewContactsProvider(log *slog.Logger, routeService route.Service) *ContactsProvider
func (*ContactsProvider) Tools ¶
func (p *ContactsProvider) Tools(_ context.Context, session SessionContext) ([]sdk.Tool, error)
type ContainerProvider ¶
type ContainerProvider struct {
// contains filtered or unexported fields
}
func NewContainerProvider ¶
func NewContainerProvider(log *slog.Logger, clients bridge.Provider, bgManager *background.Manager, execWorkDir string) *ContainerProvider
func (*ContainerProvider) Tools ¶
func (p *ContainerProvider) Tools(ctx context.Context, session SessionContext) ([]sdk.Tool, error)
type EmailProvider ¶
type EmailProvider struct {
// contains filtered or unexported fields
}
func NewEmailProvider ¶
func (*EmailProvider) Tools ¶
func (p *EmailProvider) Tools(_ context.Context, session SessionContext) ([]sdk.Tool, error)
type FederationProvider ¶
type FederationProvider struct {
// contains filtered or unexported fields
}
FederationProvider adapts a mcp.ToolSource (federated MCP connections) into the ToolProvider interface so the agent can load external MCP tools alongside built-in tools.
func NewFederationProvider ¶
func NewFederationProvider(log *slog.Logger, source mcp.ToolSource) *FederationProvider
func (*FederationProvider) Tools ¶
func (f *FederationProvider) Tools(ctx context.Context, session SessionContext) ([]sdk.Tool, error)
type HistoryProvider ¶
type HistoryProvider struct {
// contains filtered or unexported fields
}
HistoryProvider exposes list_sessions and search_messages tools.
func NewHistoryProvider ¶
func NewHistoryProvider(log *slog.Logger, sessions SessionLister, queries dbstore.Queries) *HistoryProvider
func (*HistoryProvider) Tools ¶
func (p *HistoryProvider) Tools(_ context.Context, sess SessionContext) ([]sdk.Tool, error)
type ImageGenProvider ¶ added in v0.7.0
type ImageGenProvider struct {
// contains filtered or unexported fields
}
func NewImageGenProvider ¶ added in v0.7.0
func (*ImageGenProvider) Tools ¶ added in v0.7.0
func (p *ImageGenProvider) Tools(ctx context.Context, session SessionContext) ([]sdk.Tool, error)
type MemoryProvider ¶
type MemoryProvider struct {
// contains filtered or unexported fields
}
func NewMemoryProvider ¶
func NewMemoryProvider(log *slog.Logger, registry *memprovider.Registry, settingsSvc MemorySettingsReader) *MemoryProvider
func (*MemoryProvider) Tools ¶
func (p *MemoryProvider) Tools(ctx context.Context, session SessionContext) ([]sdk.Tool, error)
type MemorySettingsReader ¶
type MemorySettingsReader interface {
GetBot(ctx context.Context, botID string) (settings.Settings, error)
}
MemorySettingsReader returns bot settings for memory provider resolution.
type MessageProvider ¶
type MessageProvider struct {
// contains filtered or unexported fields
}
func NewMessageProvider ¶
func NewMessageProvider(log *slog.Logger, sender messaging.Sender, reactor messaging.Reactor, resolver messaging.ChannelTypeResolver, assetResolver messaging.AssetResolver) *MessageProvider
func (*MessageProvider) Tools ¶
func (p *MessageProvider) Tools(_ context.Context, session SessionContext) ([]sdk.Tool, error)
type ModelCreator ¶
type ModelCreator func(modelID, clientType, apiKey, codexAccountID, baseURL string, httpClient *http.Client) *sdk.Model
ModelCreator creates an sdk.Model from provider config. Set via SetModelCreator.
type Reaction ¶ added in v0.7.0
type Reaction struct {
Emoji string `json:"emoji"`
MessageID string `json:"message_id"`
Remove bool `json:"remove,omitempty"`
}
Reaction describes an emoji reaction emitted by a tool.
type ReadMediaToolOutput ¶
type ReadMediaToolOutput struct {
Public ReadMediaToolResult
ImageBase64 string
ImageMediaType string
}
ReadMediaToolOutput is the internal execution result used by the agent to inject the image into the next Twilight AI step while keeping the visible tool result lightweight.
func ReadImageFromContainer ¶ added in v0.7.0
func ReadImageFromContainer(ctx context.Context, client *bridge.Client, path string, maxBytes int64) ReadMediaToolOutput
ReadImageFromContainer reads a binary file through the bridge client, validates that it is a supported image format, and returns a ReadMediaToolOutput ready for the agent decoration pipeline.
It reads only a small header first to sniff the MIME type, avoiding buffering large non-image binaries just to reject them.
type ReadMediaToolResult ¶
type ReadMediaToolResult struct {
OK bool `json:"ok"`
Path string `json:"path,omitempty"`
Mime string `json:"mime,omitempty"`
Size int `json:"size,omitempty"`
Error string `json:"error,omitempty"`
}
ReadMediaToolResult is the public result returned to the model.
type ScheduleProvider ¶
type ScheduleProvider struct {
// contains filtered or unexported fields
}
func NewScheduleProvider ¶
func NewScheduleProvider(log *slog.Logger, service Scheduler) *ScheduleProvider
func (*ScheduleProvider) Tools ¶
func (p *ScheduleProvider) Tools(_ context.Context, session SessionContext) ([]sdk.Tool, error)
type Scheduler ¶
type Scheduler interface {
List(ctx context.Context, botID string) ([]sched.Schedule, error)
Get(ctx context.Context, id string) (sched.Schedule, error)
Create(ctx context.Context, botID string, req sched.CreateRequest) (sched.Schedule, error)
Update(ctx context.Context, id string, req sched.UpdateRequest) (sched.Schedule, error)
Delete(ctx context.Context, id string) error
}
Scheduler is the interface for schedule CRUD operations.
type SessionContext ¶
type SessionContext struct {
BotID string
ChatID string
SessionID string
SessionType string
ChannelIdentityID string
SessionToken string //nolint:gosec // carries session credential material at runtime
CurrentPlatform string
ReplyTarget string
SupportsImageInput bool
IsSubagent bool
Skills map[string]SkillDetail
TimezoneLocation *time.Location
Emitter StreamEmitter
}
SessionContext carries request-scoped identity for tool execution.
func (SessionContext) FormatTime ¶
func (s SessionContext) FormatTime(t time.Time) string
FormatTime formats a time.Time using the session timezone (falls back to UTC).
func (SessionContext) IsSameConversation ¶ added in v0.7.0
func (s SessionContext) IsSameConversation(platform, target string) bool
IsSameConversation reports whether the given platform+target pair refers to the conversation that the agent is currently replying to.
type SessionLister ¶
type SessionLister interface {
ListByBot(ctx context.Context, botID string) ([]session.Session, error)
}
SessionLister is the minimal interface for listing sessions.
type SkillDetail ¶
SkillDetail holds the description and content of a loadable skill.
type SkillProvider ¶
type SkillProvider struct {
// contains filtered or unexported fields
}
func NewSkillProvider ¶
func NewSkillProvider(log *slog.Logger) *SkillProvider
func (*SkillProvider) Tools ¶
func (*SkillProvider) Tools(_ context.Context, session SessionContext) ([]sdk.Tool, error)
type SpawnAgent ¶
type SpawnAgent interface {
Generate(ctx context.Context, cfg SpawnRunConfig) (*SpawnResult, error)
GenerateWithWatchdog(ctx context.Context, cfg SpawnRunConfig, touchFn func()) (*SpawnResult, error)
}
SpawnAgent is the interface the spawn tool uses to run subagent tasks. It is satisfied by *agent.Agent and avoids an import cycle.
type SpawnIdentity ¶
type SpawnIdentity struct {
BotID string
ChatID string
SessionID string
ChannelIdentityID string
CurrentPlatform string
SessionToken string //nolint:gosec // #nosec G117 -- session identifier, not a secret
IsSubagent bool
}
SpawnIdentity mirrors agent.SessionContext fields needed by spawn.
type SpawnLoopConfig ¶
type SpawnLoopConfig struct {
Enabled bool
}
SpawnLoopConfig mirrors agent.LoopDetectionConfig.
type SpawnProvider ¶
type SpawnProvider struct {
// contains filtered or unexported fields
}
SpawnProvider exposes a "spawn" tool that runs one or more subagent tasks concurrently and returns results to the parent agent.
func NewSpawnProvider ¶
func NewSpawnProvider( log *slog.Logger, settingsSvc *settings.Service, modelsSvc *models.Service, queries dbstore.Queries, sessionService *sessionpkg.Service, ) *SpawnProvider
NewSpawnProvider creates a SpawnProvider. The agent must be injected later via SetAgent to avoid a dependency cycle.
func (*SpawnProvider) SetAgent ¶
func (p *SpawnProvider) SetAgent(a SpawnAgent)
SetAgent injects the agent after construction (breaking the DI cycle).
func (*SpawnProvider) SetMessageService ¶
func (p *SpawnProvider) SetMessageService(w messagepkg.Writer)
SetMessageService injects an optional message writer for persisting subagent conversation history.
func (*SpawnProvider) SetModelCreator ¶
func (p *SpawnProvider) SetModelCreator(fn ModelCreator)
SetModelCreator injects the function used to create SDK models (typically agent.CreateModel wrapped to match the signature).
func (*SpawnProvider) SetSystemPromptFunc ¶
func (p *SpawnProvider) SetSystemPromptFunc(fn func(sessionType string) string)
SetSystemPromptFunc injects the function used to generate the system prompt (typically agent.GenerateSystemPrompt).
func (*SpawnProvider) Tools ¶
func (p *SpawnProvider) Tools(_ context.Context, session SessionContext) ([]sdk.Tool, error)
type SpawnResult ¶
SpawnResult mirrors agent.GenerateResult.
type SpawnRunConfig ¶
type SpawnRunConfig struct {
Model *sdk.Model
System string
Query string
SessionType string
Identity SpawnIdentity
LoopDetection SpawnLoopConfig
Messages []sdk.Message
ReasoningEffort string
PromptCacheTTL string
}
SpawnRunConfig mirrors agent.RunConfig fields needed by spawn.
type Speech ¶ added in v0.7.0
type Speech struct {
Text string `json:"text"`
}
Speech describes a TTS speech request emitted by a tool.
type StreamEmitter ¶ added in v0.7.0
type StreamEmitter func(ToolStreamEvent)
StreamEmitter pushes a side-effect event into the current agent stream. Nil when no stream is available (e.g. subagent or non-streaming contexts where the caller collects events after generation).
type StreamEventType ¶ added in v0.7.0
type StreamEventType string
StreamEventType identifies the kind of stream event emitted by tools.
const ( StreamEventAttachment StreamEventType = "attachment" StreamEventReaction StreamEventType = "reaction" StreamEventSpeech StreamEventType = "speech" StreamEventSpawnHeartbeat StreamEventType = "spawn_heartbeat" )
type SubagentWatchdog ¶ added in v0.7.0
type SubagentWatchdog struct {
// contains filtered or unexported fields
}
SubagentWatchdog implements an activity-based timeout for subagent execution. It is "touched" (fed/reset) on each activity signal from the LLM or tools. If no touch occurs within the configured timeout, it fires by cancelling its associated context.
Lifecycle:
- Call NewSubagentWatchdog to create a watchdog context.
- Call Touch() on each activity signal.
- Call Stop() when the watched operation completes normally.
The watchdog respects parent context cancellation: if the parent context is cancelled, the watchdog's context is also cancelled immediately.
func NewSubagentWatchdog ¶ added in v0.7.0
func NewSubagentWatchdog(parentCtx context.Context, timeout time.Duration, logger *slog.Logger) (context.Context, *SubagentWatchdog)
NewSubagentWatchdog creates a watchdog that cancels the returned context after timeout of inactivity. The returned context is derived from parentCtx. If parentCtx is cancelled, the watchdog context is also cancelled.
func (*SubagentWatchdog) Stop ¶ added in v0.7.0
func (w *SubagentWatchdog) Stop()
Stop terminates the watchdog goroutine and releases resources. Call this when the watched operation completes normally.
func (*SubagentWatchdog) Touch ¶ added in v0.7.0
func (w *SubagentWatchdog) Touch()
Touch resets the watchdog timer. It is non-blocking and safe to call from any goroutine.
type TTSChannelResolver ¶
type TTSChannelResolver interface {
ParseChannelType(raw string) (channel.ChannelType, error)
}
TTSChannelResolver parses platform name to channel type.
type TTSProvider ¶
type TTSProvider struct {
// contains filtered or unexported fields
}
func NewTTSProvider ¶
func NewTTSProvider(log *slog.Logger, settingsSvc *settings.Service, audioSvc *audiopkg.Service, sender TTSSender, resolver TTSChannelResolver) *TTSProvider
func (*TTSProvider) Tools ¶
func (p *TTSProvider) Tools(ctx context.Context, session SessionContext) ([]sdk.Tool, error)
type TTSSender ¶
type TTSSender interface {
Send(ctx context.Context, botID string, channelType channel.ChannelType, req channel.SendRequest) error
}
TTSSender sends outbound messages through the channel manager.
type ToolProvider ¶
type ToolProvider interface {
Tools(ctx context.Context, session SessionContext) ([]sdk.Tool, error)
}
ToolProvider supplies a set of tools for the agent. Tools() is called per-request; implementations may return different tool sets based on session context (e.g. subagent restrictions, bot settings).
type ToolStreamEvent ¶ added in v0.7.0
type ToolStreamEvent struct {
Type StreamEventType
Attachments []Attachment
Reactions []Reaction
Speeches []Speech
}
ToolStreamEvent is a side-effect event emitted by a tool targeting the current conversation (e.g. inline attachment, reaction, or TTS speech). The agent framework converts these into the appropriate wire-level events.
type TranscriptionProvider ¶ added in v0.7.1
type TranscriptionProvider struct {
// contains filtered or unexported fields
}
func NewTranscriptionProvider ¶ added in v0.7.1
func (*TranscriptionProvider) Tools ¶ added in v0.7.1
func (p *TranscriptionProvider) Tools(ctx context.Context, session SessionContext) ([]sdk.Tool, error)
type WebFetchProvider ¶
type WebFetchProvider struct {
// contains filtered or unexported fields
}
func NewWebFetchProvider ¶
func NewWebFetchProvider(log *slog.Logger) *WebFetchProvider
func (*WebFetchProvider) Tools ¶
func (p *WebFetchProvider) Tools(_ context.Context, _ SessionContext) ([]sdk.Tool, error)
type WebProvider ¶
type WebProvider struct {
// contains filtered or unexported fields
}
func NewWebProvider ¶
func NewWebProvider(log *slog.Logger, settingsSvc *settings.Service, searchSvc *searchproviders.Service) *WebProvider
func (*WebProvider) Tools ¶
func (p *WebProvider) Tools(_ context.Context, session SessionContext) ([]sdk.Tool, error)