agent

package
v0.8.0 Latest Latest
Warning

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

Go to latest
Published: Mar 17, 2026 License: MIT Imports: 17 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func BuildSessionKey added in v0.8.0

func BuildSessionKey(agentID, platform, externalUserID, channelContext string) string

BuildSessionKey constructs a session key from agent, platform, user, and context. Format: {agentID}:{platform}:{externalUserID}:{channelContext}

func NewRunnerFactory added in v0.8.0

func NewRunnerFactory(snap *config.Snapshot, extraTools []agenttool.Tool, pluginHooks engine.PluginHookRunner) (runner.NewRunnerFunc, error)

NewRunnerFactory creates a runner.NewRunnerFunc for a given config snapshot. The returned factory creates runners scoped to one agent's provider, model, workspace, and system prompt. User memory is injected per-session from RunnerParams.UserMemory.

func SetupWorkspace added in v0.8.0

func SetupWorkspace(agentID, basePath string) (string, error)

SetupWorkspace ensures the per-agent workspace directory exists. Creates: basePath/workspaces/{agentID}/skills/ Returns the absolute path to the agent's workspace directory.

Types

type ChatOption

type ChatOption func(*chatOptions)

ChatOption configures a single Chat call.

func WithModel

func WithModel(model string) ChatOption

WithModel overrides the model for this Chat call. If the session already has a runner with a different model, the runner is replaced.

type CompactionConfig

type CompactionConfig struct {
	// MaxTokens triggers compaction when the estimated token count exceeds this.
	// 0 (or omitted) uses the default of 80000. Negative values disable
	// automatic compaction. Manual /compact still works.
	MaxTokens int `yaml:"max_tokens"`
	// KeepTail is the number of recent message entries to preserve verbatim
	// after compaction. Default: 20.
	KeepTail int `yaml:"keep_tail"`
}

CompactionConfig controls automatic session compaction.

func (CompactionConfig) WithDefaults

func (c CompactionConfig) WithDefaults() CompactionConfig

WithDefaults returns a copy with zero-value fields replaced by defaults. MaxTokens 0 -> 80000; negative values are preserved (meaning disabled).

type ExtraToolsFactory added in v0.8.0

type ExtraToolsFactory func(snap *config.Snapshot) []agenttool.Tool

ExtraToolsFactory creates agent-specific extra tools given a snapshot. It allows callers to inject tools that depend on per-agent configuration (e.g. scheduler, memory retrieval).

type Pool

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

Pool manages a set of sessions, each with its own history and runner. It is the only type channels interact with.

func NewPool

func NewPool(factory runner.NewRunnerFunc, mem memory.Engine, opts ...PoolOption) *Pool

NewPool creates a new Pool with the given runner factory and memory engine. The memory engine is required — it is the sole persistence layer for sessions.

func (*Pool) ActiveSession

func (p *Pool) ActiveSession(channel string) (SessionInfo, bool)

ActiveSession returns the most recent non-archived session for a channel.

func (*Pool) AgentID added in v0.8.0

func (p *Pool) AgentID() string

AgentID returns the agent ID this pool belongs to.

func (*Pool) ArchiveSession

func (p *Pool) ArchiveSession(sessionID string) error

ArchiveSession marks a session as archived, closes its runner, but keeps history on disk. The session is removed from the in-memory map; its metadata persists in the index.

func (*Pool) Chat

func (p *Pool) Chat(ctx context.Context, sessionID string, message runner.MessageContent, opts ...ChatOption) <-chan runner.Event

Chat sends a message in a session and streams back events. Internally: gets/creates runner, passes history, collects events, appends to session log, streams to caller.

func (*Pool) Close

func (p *Pool) Close() error

Close shuts down all sessions and runners.

func (*Pool) CompactSession

func (p *Pool) CompactSession(ctx context.Context, sessionID string) (string, error)

CompactSession delegates compaction to the memory engine and returns the summary text on success.

func (*Pool) CreateSession

func (p *Pool) CreateSession(channel string, userID ...int64) (SessionInfo, error)

CreateSession creates a new session with a generated ID and persists its metadata.

func (*Pool) GetSession

func (p *Pool) GetSession(sessionID string) (SessionInfo, error)

GetSession returns metadata for a session.

func (*Pool) History

func (p *Pool) History(sessionID string) []ai.Message

History returns the message history for a session, loading from the memory engine. Returns nil if the session has no history.

func (*Pool) ListSessions

func (p *Pool) ListSessions(includeArchived bool) ([]SessionInfo, error)

ListSessions returns metadata for all sessions.

func (*Pool) NeedsCompaction

func (p *Pool) NeedsCompaction(sessionID string) bool

NeedsCompaction reports whether a session's estimated token count exceeds the compaction threshold. Returns false if compaction is disabled or no memory engine is set.

func (*Pool) ResolveSession

func (p *Pool) ResolveSession(channel string, userID ...int64) (SessionInfo, error)

ResolveSession returns the active session for a channel, creating one if needed. The check-and-create is atomic to prevent duplicate sessions under concurrent access. An optional userID associates the session with a user (stored in conversations table).

func (*Pool) RotateSession

func (p *Pool) RotateSession(channel string, userID ...int64) (SessionInfo, error)

RotateSession archives the active session for a channel (if any) and creates a new one.

func (*Pool) SetDefaultModel

func (p *Pool) SetDefaultModel(model string)

SetDefaultModel updates the default model used for new runners. Call this alongside SetFactory when the user switches models at runtime.

func (*Pool) SetFactory

func (p *Pool) SetFactory(factory runner.NewRunnerFunc)

SetFactory replaces the runner factory used for new runners. Existing runners are not affected until their session is reset.

func (*Pool) StartReaper

func (p *Pool) StartReaper(ctx context.Context)

StartReaper runs a background goroutine that periodically checks for idle or dead runners. It returns when ctx is cancelled.

type PoolManager added in v0.8.0

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

PoolManager manages a map of agent ID to Pool. It reads enabled agents from the config Store and creates one Pool per agent.

func NewPoolManager added in v0.8.0

func NewPoolManager(store config.Store, mem memory.Engine, opts ...PoolManagerOption) *PoolManager

NewPoolManager creates a new PoolManager.

func (*PoolManager) Close added in v0.8.0

func (pm *PoolManager) Close() error

Close shuts down all pools.

func (*PoolManager) DefaultPool added in v0.8.0

func (pm *PoolManager) DefaultPool() *Pool

DefaultPool returns the first pool found in the map, or nil if empty. Useful for backward compatibility with code expecting a single pool.

func (*PoolManager) Get added in v0.8.0

func (pm *PoolManager) Get(agentID string) *Pool

Get returns the Pool for the given agent ID, or nil if not found.

func (*PoolManager) StartAll added in v0.8.0

func (pm *PoolManager) StartAll(ctx context.Context) error

StartAll reads enabled agents from the store, creates a Pool per agent with per-agent runner factory, and starts reapers.

type PoolManagerOption added in v0.8.0

type PoolManagerOption func(*PoolManager)

PoolManagerOption configures a PoolManager.

func WithCompactionPM added in v0.8.0

func WithCompactionPM(cfg CompactionConfig) PoolManagerOption

WithCompactionPM sets the compaction config for all pools.

func WithExtraToolsFactory added in v0.8.0

func WithExtraToolsFactory(f ExtraToolsFactory) PoolManagerOption

WithExtraToolsFactory sets the function that creates per-agent extra tools.

func WithIdleTimeoutPM added in v0.8.0

func WithIdleTimeoutPM(d time.Duration) PoolManagerOption

WithIdleTimeoutPM sets the idle timeout for all pools.

func WithPluginHooksPM added in v0.8.0

func WithPluginHooksPM(hooks engine.PluginHookRunner) PoolManagerOption

WithPluginHooksPM sets the plugin hook runner for all pools.

func WithSharedExtraTools added in v0.8.0

func WithSharedExtraTools(tools []agenttool.Tool) PoolManagerOption

WithSharedExtraTools sets tools shared across all agents (e.g. scheduler, memory).

type PoolOption

type PoolOption func(*Pool)

PoolOption configures a Pool.

func WithAgentID added in v0.8.0

func WithAgentID(id string) PoolOption

WithAgentID sets the agent ID this pool belongs to.

func WithCompaction

func WithCompaction(cfg CompactionConfig) PoolOption

WithCompaction sets the compaction configuration.

func WithDefaultModel

func WithDefaultModel(model string) PoolOption

WithDefaultModel sets the default model ID for new runners.

func WithFastModel

func WithFastModel(model string) PoolOption

WithFastModel sets the model ID used for compaction and other fast tasks.

func WithIdleTimeout

func WithIdleTimeout(d time.Duration) PoolOption

WithIdleTimeout sets the idle timeout for reaping runners.

func WithPluginHooks added in v0.7.0

func WithPluginHooks(hooks engine.PluginHookRunner) PoolOption

WithPluginHooks sets the plugin lifecycle hook runner.

func WithUserMemory added in v0.8.0

func WithUserMemory(store *memory.UserMemoryStore) PoolOption

WithUserMemory sets the per-user memory store for system prompt injection.

type Session

type Session struct {
	Info   SessionInfo
	Runner runner.Runner
	Model  string // model ID the current runner was created with
}

Session holds the state of a single conversation: metadata and the currently assigned runner. Message persistence is handled by the memory engine exclusively.

type SessionInfo

type SessionInfo = memory.SessionInfo

SessionInfo is an alias for memory.SessionInfo.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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