Documentation
¶
Index ¶
- type AgentInstance
- type AgentLoop
- func (al *AgentLoop) GetStartupInfo() map[string]any
- func (al *AgentLoop) ProcessDirect(ctx context.Context, content, sessionKey string) (string, error)
- func (al *AgentLoop) ProcessDirectWithChannel(ctx context.Context, content, sessionKey, channel, chatID string) (string, error)
- func (al *AgentLoop) ProcessHeartbeat(ctx context.Context, content, channel, chatID string) (string, error)
- func (al *AgentLoop) RecordLastChannel(channel string) error
- func (al *AgentLoop) RecordLastChatID(chatID string) error
- func (al *AgentLoop) RegisterTool(tool tools.Tool)
- func (al *AgentLoop) Run(ctx context.Context) error
- func (al *AgentLoop) SetChannelManager(cm *channels.Manager)
- func (al *AgentLoop) SetMediaStore(s media.MediaStore)
- func (al *AgentLoop) SetTranscriber(t voice.Transcriber)
- func (al *AgentLoop) Stop()
- type AgentRegistry
- func (r *AgentRegistry) CanSpawnSubagent(parentAgentID, targetAgentID string) bool
- func (r *AgentRegistry) ForEachTool(name string, fn func(tools.Tool))
- func (r *AgentRegistry) GetAgent(agentID string) (*AgentInstance, bool)
- func (r *AgentRegistry) GetDefaultAgent() *AgentInstance
- func (r *AgentRegistry) ListAgentIDs() []string
- func (r *AgentRegistry) ResolveRoute(input routing.RouteInput) routing.ResolvedRoute
- type ContextBuilder
- func (cb *ContextBuilder) AddAssistantMessage(messages []providers.Message, content string, toolCalls []map[string]any) []providers.Message
- func (cb *ContextBuilder) AddToolResult(messages []providers.Message, toolCallID, toolName, result string) []providers.Message
- func (cb *ContextBuilder) BuildMessages(history []providers.Message, summary string, currentMessage string, ...) []providers.Message
- func (cb *ContextBuilder) BuildSystemPrompt() string
- func (cb *ContextBuilder) BuildSystemPromptWithCache() string
- func (cb *ContextBuilder) GetSkillsInfo() map[string]any
- func (cb *ContextBuilder) InvalidateCache()
- func (cb *ContextBuilder) LoadBootstrapFiles() string
- type MemoryStore
- func (ms *MemoryStore) AppendToday(content string) error
- func (ms *MemoryStore) GetMemoryContext() string
- func (ms *MemoryStore) GetRecentDailyNotes(days int) string
- func (ms *MemoryStore) ReadLongTerm() string
- func (ms *MemoryStore) ReadToday() string
- func (ms *MemoryStore) WriteLongTerm(content string) error
- type ThinkingLevel
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AgentInstance ¶ added in v0.2.0
type AgentInstance struct {
ID string
Name string
Model string
Fallbacks []string
Workspace string
MaxIterations int
MaxTokens int
Temperature float64
ThinkingLevel ThinkingLevel
ContextWindow int
SummarizeMessageThreshold int
SummarizeTokenPercent int
Provider providers.LLMProvider
Sessions *session.SessionManager
ContextBuilder *ContextBuilder
Tools *tools.ToolRegistry
Subagents *config.SubagentsConfig
SkillsFilter []string
Candidates []providers.FallbackCandidate
// Router is non-nil when model routing is configured and the light model
// was successfully resolved. It scores each incoming message and decides
// whether to route to LightCandidates or stay with Candidates.
Router *routing.Router
// LightCandidates holds the resolved provider candidates for the light model.
// Pre-computed at agent creation to avoid repeated model_list lookups at runtime.
LightCandidates []providers.FallbackCandidate
}
AgentInstance represents a fully configured agent with its own workspace, session manager, context builder, and tool registry.
func NewAgentInstance ¶ added in v0.2.0
func NewAgentInstance( agentCfg *config.AgentConfig, defaults *config.AgentDefaults, cfg *config.Config, provider providers.LLMProvider, ) *AgentInstance
NewAgentInstance creates an agent instance from config.
type AgentLoop ¶
type AgentLoop struct {
// contains filtered or unexported fields
}
func NewAgentLoop ¶
func NewAgentLoop( cfg *config.Config, msgBus *bus.MessageBus, provider providers.LLMProvider, ) *AgentLoop
func (*AgentLoop) GetStartupInfo ¶ added in v0.1.1
GetStartupInfo returns information about loaded tools and skills for logging.
func (*AgentLoop) ProcessDirect ¶
func (*AgentLoop) ProcessDirectWithChannel ¶ added in v0.1.1
func (*AgentLoop) ProcessHeartbeat ¶ added in v0.1.2
func (al *AgentLoop) ProcessHeartbeat( ctx context.Context, content, channel, chatID string, ) (string, error)
ProcessHeartbeat processes a heartbeat request without session history. Each heartbeat is independent and doesn't accumulate context.
func (*AgentLoop) RecordLastChannel ¶ added in v0.1.2
RecordLastChannel records the last active channel for this workspace. This uses the atomic state save mechanism to prevent data loss on crash.
func (*AgentLoop) RecordLastChatID ¶ added in v0.1.2
RecordLastChatID records the last active chat ID for this workspace. This uses the atomic state save mechanism to prevent data loss on crash.
func (*AgentLoop) RegisterTool ¶ added in v0.1.1
func (*AgentLoop) SetChannelManager ¶ added in v0.1.2
func (*AgentLoop) SetMediaStore ¶ added in v0.2.0
func (al *AgentLoop) SetMediaStore(s media.MediaStore)
SetMediaStore injects a MediaStore for media lifecycle management.
func (*AgentLoop) SetTranscriber ¶ added in v0.2.1
func (al *AgentLoop) SetTranscriber(t voice.Transcriber)
SetTranscriber injects a voice transcriber for agent-level audio transcription.
type AgentRegistry ¶ added in v0.2.0
type AgentRegistry struct {
// contains filtered or unexported fields
}
AgentRegistry manages multiple agent instances and routes messages to them.
func NewAgentRegistry ¶ added in v0.2.0
func NewAgentRegistry( cfg *config.Config, provider providers.LLMProvider, ) *AgentRegistry
NewAgentRegistry creates a registry from config, instantiating all agents.
func (*AgentRegistry) CanSpawnSubagent ¶ added in v0.2.0
func (r *AgentRegistry) CanSpawnSubagent(parentAgentID, targetAgentID string) bool
CanSpawnSubagent checks if parentAgentID is allowed to spawn targetAgentID.
func (*AgentRegistry) ForEachTool ¶ added in v0.2.1
func (r *AgentRegistry) ForEachTool(name string, fn func(tools.Tool))
ForEachTool calls fn for every tool registered under the given name across all agents. This is useful for propagating dependencies (e.g. MediaStore) to tools after registry construction.
func (*AgentRegistry) GetAgent ¶ added in v0.2.0
func (r *AgentRegistry) GetAgent(agentID string) (*AgentInstance, bool)
GetAgent returns the agent instance for a given ID.
func (*AgentRegistry) GetDefaultAgent ¶ added in v0.2.0
func (r *AgentRegistry) GetDefaultAgent() *AgentInstance
GetDefaultAgent returns the default agent instance.
func (*AgentRegistry) ListAgentIDs ¶ added in v0.2.0
func (r *AgentRegistry) ListAgentIDs() []string
ListAgentIDs returns all registered agent IDs.
func (*AgentRegistry) ResolveRoute ¶ added in v0.2.0
func (r *AgentRegistry) ResolveRoute(input routing.RouteInput) routing.ResolvedRoute
ResolveRoute determines which agent handles the message.
type ContextBuilder ¶
type ContextBuilder struct {
// contains filtered or unexported fields
}
func NewContextBuilder ¶
func NewContextBuilder(workspace string) *ContextBuilder
func (*ContextBuilder) AddAssistantMessage ¶
func (*ContextBuilder) AddToolResult ¶
func (*ContextBuilder) BuildMessages ¶
func (*ContextBuilder) BuildSystemPrompt ¶
func (cb *ContextBuilder) BuildSystemPrompt() string
func (*ContextBuilder) BuildSystemPromptWithCache ¶ added in v0.2.0
func (cb *ContextBuilder) BuildSystemPromptWithCache() string
BuildSystemPromptWithCache returns the cached system prompt if available and source files haven't changed, otherwise builds and caches it. Source file changes are detected via mtime checks (cheap stat calls).
func (*ContextBuilder) GetSkillsInfo ¶ added in v0.1.1
func (cb *ContextBuilder) GetSkillsInfo() map[string]any
GetSkillsInfo returns information about loaded skills.
func (*ContextBuilder) InvalidateCache ¶ added in v0.2.0
func (cb *ContextBuilder) InvalidateCache()
InvalidateCache clears the cached system prompt. Normally not needed because the cache auto-invalidates via mtime checks, but this is useful for tests or explicit reload commands.
func (*ContextBuilder) LoadBootstrapFiles ¶
func (cb *ContextBuilder) LoadBootstrapFiles() string
type MemoryStore ¶ added in v0.1.1
type MemoryStore struct {
// contains filtered or unexported fields
}
MemoryStore manages persistent memory for the agent. - Long-term memory: memory/MEMORY.md - Daily notes: memory/YYYYMM/YYYYMMDD.md
func NewMemoryStore ¶ added in v0.1.1
func NewMemoryStore(workspace string) *MemoryStore
NewMemoryStore creates a new MemoryStore with the given workspace path. It ensures the memory directory exists.
func (*MemoryStore) AppendToday ¶ added in v0.1.1
func (ms *MemoryStore) AppendToday(content string) error
AppendToday appends content to today's daily note. If the file doesn't exist, it creates a new file with a date header.
func (*MemoryStore) GetMemoryContext ¶ added in v0.1.1
func (ms *MemoryStore) GetMemoryContext() string
GetMemoryContext returns formatted memory context for the agent prompt. Includes long-term memory and recent daily notes.
func (*MemoryStore) GetRecentDailyNotes ¶ added in v0.1.1
func (ms *MemoryStore) GetRecentDailyNotes(days int) string
GetRecentDailyNotes returns daily notes from the last N days. Contents are joined with "---" separator.
func (*MemoryStore) ReadLongTerm ¶ added in v0.1.1
func (ms *MemoryStore) ReadLongTerm() string
ReadLongTerm reads the long-term memory (MEMORY.md). Returns empty string if the file doesn't exist.
func (*MemoryStore) ReadToday ¶ added in v0.1.1
func (ms *MemoryStore) ReadToday() string
ReadToday reads today's daily note. Returns empty string if the file doesn't exist.
func (*MemoryStore) WriteLongTerm ¶ added in v0.1.1
func (ms *MemoryStore) WriteLongTerm(content string) error
WriteLongTerm writes content to the long-term memory file (MEMORY.md).
type ThinkingLevel ¶ added in v0.2.1
type ThinkingLevel string
ThinkingLevel controls how the provider sends thinking parameters.
- "adaptive": sends {thinking: {type: "adaptive"}} + output_config.effort (Claude 4.6+)
- "low"/"medium"/"high"/"xhigh": sends {thinking: {type: "enabled", budget_tokens: N}} (all models)
- "off": disables thinking
const ( ThinkingOff ThinkingLevel = "off" ThinkingLow ThinkingLevel = "low" ThinkingMedium ThinkingLevel = "medium" ThinkingHigh ThinkingLevel = "high" ThinkingXHigh ThinkingLevel = "xhigh" ThinkingAdaptive ThinkingLevel = "adaptive" )