config

package
v0.37.0 Latest Latest
Warning

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

Go to latest
Published: May 22, 2026 License: AGPL-3.0 Imports: 13 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DefaultAnthropicModelID      = "claude-sonnet-4-6"
	DefaultOpenAIModelID         = "gpt-4o"
	DefaultOpenAIResponseModelID = "gpt-4o"
)
View Source
const (
	ModelTierStrong = "strong"
	ModelTierFast   = "fast"
)

Model tier constants.

View Source
const (
	PluginKindTool     = "tool"
	PluginKindChannel  = "channel"
	PluginKindHook     = "hook"
	PluginKindProvider = "provider"
	PluginKindMemory   = "memory"
	PluginKindSandbox  = "sandbox"
	PluginKindAuth     = "auth"
)

Plugin kind constants.

View Source
const (
	SandboxBackendDocker = "docker"
	SandboxBackendLocal  = "local"
	SandboxBackendNone   = "none"

	SandboxNetworkDisabled = "disabled"
	SandboxNetworkAllowAll = "allow_all"
)
View Source
const (
	AgentScopeSystem     = "system"     // all users can access
	AgentScopeRestricted = "restricted" // only assigned users can access
)

AgentScope constants define the access scope for an agent.

Variables

This section is empty.

Functions

func ActiveSandboxBackend

func ActiveSandboxBackend(plugins []Plugin) string

ActiveSandboxBackend returns the name of the enabled sandbox backend plugin, or SandboxBackendLocal if none is explicitly enabled.

func BuiltinPluginIDs

func BuiltinPluginIDs() []string

BuiltinPluginIDs returns all built-in plugin IDs in deterministic order. Provider instances are stored separately in settings_providers.

func CachePath

func CachePath() string

CachePath returns the cache directory inside the stella home.

func DBPath

func DBPath() string

DBPath returns the default database path inside the stella home.

func DefaultAgentModelRef

func DefaultAgentModelRef(providers []Provider) string

DefaultAgentModelRef picks the preferred starter model ref from the configured providers. It prefers Anthropic, then OpenAI, then OpenAI Responses, and falls back to the Anthropic compatibility alias.

func DefaultModelIDForProviderType

func DefaultModelIDForProviderType(providerType string) string

DefaultModelIDForProviderType returns the preferred starter model ID for a built-in provider type.

func DefaultModelRefForProvider

func DefaultModelRefForProvider(provider Provider) string

DefaultModelRefForProvider returns the default provider/model ref for a concrete provider instance.

func DefaultModelRefForProviderType

func DefaultModelRefForProviderType(providerType string) string

DefaultModelRefForProviderType returns the default provider/model ref for the given provider type using the provider type as the prefix.

func ModelConfigToAI

func ModelConfigToAI(provider string, m ModelConfig) ai.Model

ModelConfigToAI converts a ModelConfig to an ai.Model.

func ModelsCachePath

func ModelsCachePath() string

ModelsCachePath returns the path to the models.json cache file.

func ParseModelRef

func ParseModelRef(ref string) (provider, model string)

ParseModelRef splits a "provider/model" string into its parts. If the string contains no "/", it returns ("", ref) as fallback.

func PluginID

func PluginID(kind, name string) string

PluginID constructs a plugin ID from kind and name.

func ResetStellaHome

func ResetStellaHome()

ResetStellaHome clears the cached StellaHome value (for testing).

func SandboxDockerImage

func SandboxDockerImage() string

SandboxDockerImage returns the sandbox container image tag for the current stella build. Dev builds use a local `stella-sandbox:dev` tag (produced by `mise run sandbox:docker:build`); tagged releases pull `ghcr.io/cherryhq/stella-sandbox:<version>` from GHCR. The version is normalized to strip any leading "v" so "v1.2.3" and "1.2.3" resolve to the same image tag.

func SandboxDockerImageIsDev

func SandboxDockerImageIsDev() bool

SandboxDockerImageIsDev reports whether SandboxDockerImage resolves to the local dev tag. Callers use this to surface a build-image hint when the image is missing locally.

func SaveModelsCache

func SaveModelsCache(cache *ModelsCache) error

SaveModelsCache writes the models cache to the cache directory.

func ServerURL

func ServerURL() string

ServerURL returns the URL CLI commands should use to talk to the local stella server. Priority: STELLA_SERVER_URL env -> http://127.0.0.1:25678 (the default admin port from cmd/stella/gateway.go).

func StellaHome

func StellaHome() string

StellaHome returns the stella home directory. Priority: STELLA_HOME env -> ~/.stella The result is cached after the first call.

Types

type Agent

type Agent struct {
	ID           string        `json:"id"`
	Name         string        `json:"name"`
	Model        string        `json:"model"`
	ModelStrong  string        `json:"model_strong"`
	ModelFast    string        `json:"model_fast"`
	SystemPrompt string        `json:"system_prompt"`
	Soul         string        `json:"soul"`
	Workspace    string        `json:"workspace"`
	Sandbox      SandboxConfig `json:"sandbox"`
	Scope        string        `json:"scope"`
	CreatorID    string        `json:"creator_id"`
	Enabled      bool          `json:"enabled"`
}

Agent represents an agent definition. Model fields use {provider}/{model} format (e.g. "anthropic/claude-sonnet-4-6").

type CachedModel

type CachedModel struct {
	Provider string `json:"provider"`
	Model    string `json:"model"`
}

CachedModel is the on-disk representation of a model in models.json.

type Channel

type Channel struct {
	ID      string `json:"id"`
	Type    string `json:"type"`
	AgentID string `json:"agent_id,omitempty"`
	Enabled bool   `json:"enabled"`
	Config  string `json:"config"`
}

Channel represents a platform channel configuration.

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 `json:"max_tokens"`
	// KeepTail is the number of recent message entries to preserve verbatim
	// after compaction. Default: 20.
	KeepTail int `json:"keep_tail"`
}

CompactionConfig controls automatic session compaction.

type DBStore

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

DBStore implements Store using sqlc queries backed by SQLite.

func NewDBStore

func NewDBStore(db *sql.DB) *DBStore

NewDBStore creates a new DBStore wrapping the given database connection. It sets MaxOpenConns(1) to mitigate SQLite concurrency issues.

func (*DBStore) CreateAgent

func (s *DBStore) CreateAgent(ctx context.Context, a Agent) error

func (*DBStore) CreateProvider

func (s *DBStore) CreateProvider(ctx context.Context, p Provider) error

func (*DBStore) DeleteAgent

func (s *DBStore) DeleteAgent(ctx context.Context, id string) error

func (*DBStore) DeleteChannel

func (s *DBStore) DeleteChannel(ctx context.Context, id string) error

func (*DBStore) DeleteChatAgent

func (s *DBStore) DeleteChatAgent(ctx context.Context, channelID, platform, chatID string) error

func (*DBStore) DeletePlugin

func (s *DBStore) DeletePlugin(ctx context.Context, id string) error

func (*DBStore) DeleteProvider

func (s *DBStore) DeleteProvider(ctx context.Context, id string) error

func (*DBStore) GetAgent

func (s *DBStore) GetAgent(ctx context.Context, id string) (Agent, error)

func (*DBStore) GetChannel

func (s *DBStore) GetChannel(ctx context.Context, id string) (Channel, error)

func (*DBStore) GetChatAgent

func (s *DBStore) GetChatAgent(ctx context.Context, channelID, platform, chatID string) (string, error)

func (*DBStore) GetPlugin

func (s *DBStore) GetPlugin(ctx context.Context, id string) (Plugin, error)

func (*DBStore) GetProvider

func (s *DBStore) GetProvider(ctx context.Context, id string) (Provider, error)

func (*DBStore) GetSetting

func (s *DBStore) GetSetting(ctx context.Context, key string) (string, error)

func (*DBStore) ListAgents

func (s *DBStore) ListAgents(ctx context.Context) ([]Agent, error)

func (*DBStore) ListChannels

func (s *DBStore) ListChannels(ctx context.Context) ([]Channel, error)

func (*DBStore) ListChannelsByType

func (s *DBStore) ListChannelsByType(ctx context.Context, channelType string) ([]Channel, error)

func (*DBStore) ListEnabledAgents

func (s *DBStore) ListEnabledAgents(ctx context.Context) ([]Agent, error)

func (*DBStore) ListEnabledPlugins

func (s *DBStore) ListEnabledPlugins(ctx context.Context) ([]Plugin, error)

func (*DBStore) ListPlugins

func (s *DBStore) ListPlugins(ctx context.Context) ([]Plugin, error)

func (*DBStore) ListPluginsByKind

func (s *DBStore) ListPluginsByKind(ctx context.Context, kind string) ([]Plugin, error)

func (*DBStore) ListProviders

func (s *DBStore) ListProviders(ctx context.Context) ([]Provider, error)

func (*DBStore) SeedDefaults

func (s *DBStore) SeedDefaults(ctx context.Context) error

SeedDefaults populates the DB with sensible defaults on first bootstrap. It is idempotent: if providers/agents already exist, it does nothing.

func (*DBStore) SetChatAgent

func (s *DBStore) SetChatAgent(ctx context.Context, channelID, platform, chatID, agentID string) error

func (*DBStore) SetPluginConfig

func (s *DBStore) SetPluginConfig(ctx context.Context, id string, config map[string]any) error

func (*DBStore) SetPluginEnabled

func (s *DBStore) SetPluginEnabled(ctx context.Context, id string, enabled bool) error

func (*DBStore) SetSetting

func (s *DBStore) SetSetting(ctx context.Context, key, value string) error

func (*DBStore) Snapshot

func (s *DBStore) Snapshot(ctx context.Context, agentID string) (*Snapshot, error)

func (*DBStore) UpdateAgent

func (s *DBStore) UpdateAgent(ctx context.Context, a Agent) error

func (*DBStore) UpdateProvider

func (s *DBStore) UpdateProvider(ctx context.Context, p Provider) error

func (*DBStore) UpsertChannel

func (s *DBStore) UpsertChannel(ctx context.Context, ch Channel) error

func (*DBStore) UpsertPlugin

func (s *DBStore) UpsertPlugin(ctx context.Context, p Plugin) error

type HeartbeatConfig

type HeartbeatConfig struct {
	Enabled *bool  `json:"enabled"`
	Every   string `json:"every"`
	File    string `json:"file"`
}

HeartbeatConfig configures periodic heartbeat checks.

func (HeartbeatConfig) FilePath

func (c HeartbeatConfig) FilePath(workspace string) string

FilePath resolves the configured heartbeat file relative to the workspace.

func (HeartbeatConfig) Interval

func (c HeartbeatConfig) Interval() string

Interval returns the configured heartbeat cadence.

func (HeartbeatConfig) IsEnabled

func (c HeartbeatConfig) IsEnabled() bool

IsEnabled returns whether heartbeat is enabled (defaults to false).

type ModelConfig

type ModelConfig struct {
	ID            string            `json:"id"`
	Name          string            `json:"name"`
	API           string            `json:"api"`
	Reasoning     bool              `json:"reasoning"`
	Input         []string          `json:"input"`
	ContextWindow int               `json:"context_window"`
	MaxTokens     int               `json:"max_tokens"`
	Headers       map[string]string `json:"headers"`
	Cost          *ModelCostConfig  `json:"cost"`
}

ModelConfig describes a model's metadata (used in model listing/caching).

type ModelCostConfig

type ModelCostConfig struct {
	Input      float64 `json:"input"`
	Output     float64 `json:"output"`
	CacheRead  float64 `json:"cache_read"`
	CacheWrite float64 `json:"cache_write"`
}

ModelCostConfig describes the cost of a model per million tokens.

type ModelsCache

type ModelsCache struct {
	UpdatedAt time.Time     `json:"updated_at"`
	Models    []CachedModel `json:"models"`
}

ModelsCache is the top-level structure for models.json in the cache directory.

func LoadModelsCache

func LoadModelsCache() (*ModelsCache, error)

LoadModelsCache reads the cached models from the workspace models.json.

type Plugin

type Plugin struct {
	ID      string         `json:"id"`
	Kind    string         `json:"kind"`
	Name    string         `json:"name"`
	Enabled bool           `json:"enabled"`
	Config  map[string]any `json:"config"`
}

Plugin represents a unified plugin entry stored in settings_plugins. IDs follow "kind/name" format, e.g. "tool/webfetch" or "channel/telegram".

type Provider

type Provider struct {
	ID      string                   `json:"id"`
	Type    string                   `json:"type"`
	Name    string                   `json:"name"`
	Enabled bool                     `json:"enabled"`
	APIKey  string                   `json:"api_key"`
	BaseURL string                   `json:"base_url"`
	Models  map[string]ProviderModel `json:"models,omitempty"`
}

Provider represents an LLM API provider.

type ProviderCreds

type ProviderCreds struct {
	Type    string
	APIKey  string
	BaseURL string
}

ProviderCreds holds credentials for a single provider.

type ProviderModel

type ProviderModel struct {
	ID            string            `json:"id,omitempty"`
	Name          string            `json:"name,omitempty"`
	Enabled       bool              `json:"enabled"`
	Reasoning     bool              `json:"reasoning,omitempty"`
	Input         []string          `json:"input,omitempty"`
	Output        []string          `json:"output,omitempty"`
	ContextWindow int               `json:"contextWindow,omitempty"`
	MaxTokens     int               `json:"maxTokens,omitempty"`
	Cost          ProviderModelCost `json:"cost,omitzero"`
}

type ProviderModelCost

type ProviderModelCost struct {
	Input      float64 `json:"input,omitempty"`
	Output     float64 `json:"output,omitempty"`
	CacheRead  float64 `json:"cacheRead,omitempty"`
	CacheWrite float64 `json:"cacheWrite,omitempty"`
}

type RunnerConfig

type RunnerConfig struct {
	Type            string           `json:"type"`
	System          string           `json:"system"`
	IdleTimeout     int              `json:"idle_timeout"`
	DelegateTimeout int              `json:"delegate_timeout"` // minutes; 0 = use default (15m)
	Compaction      CompactionConfig `json:"compaction"`
}

RunnerConfig configures the agent runner.

func (RunnerConfig) DelegateTimeoutDuration added in v0.33.0

func (c RunnerConfig) DelegateTimeoutDuration() time.Duration

DelegateTimeoutDuration returns the configured delegate timeout as a time.Duration. Zero means "use the built-in default" (15 minutes).

type SandboxConfig

type SandboxConfig struct {
	Network SandboxNetworkConfig `json:"network"`
}

SandboxConfig configures the sandbox backend. The active backend is selected globally on the Plugins page.

func (SandboxConfig) NetworkMode

func (c SandboxConfig) NetworkMode() string

NetworkMode returns the configured network mode with defaults applied.

func (SandboxConfig) Validate

func (c SandboxConfig) Validate() error

Validate returns an error when the sandbox configuration is invalid.

type SandboxNetworkConfig

type SandboxNetworkConfig struct {
	Mode      string   `json:"mode"`
	Allowlist []string `json:"allowlist"`
}

SandboxNetworkConfig configures sandbox network access.

type SchedulerConfig

type SchedulerConfig struct {
	Enabled *bool  `json:"enabled"`
	DataDir string `json:"data_dir"`
}

SchedulerConfig configures the scheduler subsystem.

func (SchedulerConfig) IsEnabled

func (c SchedulerConfig) IsEnabled() bool

IsEnabled returns whether the scheduler is enabled (defaults to true).

type Snapshot

type Snapshot struct {
	AgentID string // the agent ID this snapshot belongs to

	// Provider, APIKey, BaseURL are the default provider credentials derived
	// from the Model field's provider prefix. Kept for backward compatibility.
	Provider     string
	Model        string
	ModelStrong  string
	ModelFast    string
	Workspace    string
	Sandbox      SandboxConfig
	APIKey       string
	BaseURL      string
	SystemPrompt string // agent's base system prompt from DB
	Soul         string // agent's default soul from DB (fallback for all users)

	Runner     RunnerConfig
	Compaction CompactionConfig
	Heartbeat  HeartbeatConfig
	Scheduler  SchedulerConfig
	Plugins    []Plugin

	// Providers maps provider ID to credentials, enabling per-tier provider
	// resolution when model_strong or model_fast use a different provider.
	Providers map[string]ProviderCreds
}

Snapshot is a read-only config snapshot assembled from DB for downstream consumption. It replaces the old *Config for code that needs provider/model information for a specific agent.

func (*Snapshot) LogPath

func (s *Snapshot) LogPath() string

LogPath returns the log file path inside the workspace.

func (*Snapshot) ResolveModel

func (s *Snapshot) ResolveModel() ai.Model

ResolveModel returns the ai.Model for the default (strong) tier.

func (*Snapshot) ResolveModelID

func (s *Snapshot) ResolveModelID(tier string) string

ResolveModelID returns the model ID string for the given tier, falling back to Model if the tier-specific value is not set.

func (*Snapshot) ResolveModelTier

func (s *Snapshot) ResolveModelTier(tier string) ai.Model

ResolveModelTier returns the ai.Model for the given tier, constructing a minimal Model from the snapshot's provider and model information. It parses the provider from the model ref and looks up per-provider credentials from the Providers map.

func (*Snapshot) ResolveProviderCreds

func (s *Snapshot) ResolveProviderCreds(providerID string) ProviderCreds

ResolveProviderCreds returns the API key and base URL for the given provider ID, falling back to the default Provider credentials.

func (*Snapshot) SkillsPath

func (s *Snapshot) SkillsPath() string

SkillsPath returns the per-workspace agent-level skills directory.

type Store

type Store interface {
	// Providers
	ListProviders(ctx context.Context) ([]Provider, error)
	GetProvider(ctx context.Context, id string) (Provider, error)
	CreateProvider(ctx context.Context, p Provider) error
	UpdateProvider(ctx context.Context, p Provider) error
	DeleteProvider(ctx context.Context, id string) error

	// Agents
	ListAgents(ctx context.Context) ([]Agent, error)
	ListEnabledAgents(ctx context.Context) ([]Agent, error)
	GetAgent(ctx context.Context, id string) (Agent, error)
	CreateAgent(ctx context.Context, a Agent) error
	UpdateAgent(ctx context.Context, a Agent) error
	DeleteAgent(ctx context.Context, id string) error

	// Channels
	ListChannels(ctx context.Context) ([]Channel, error)
	ListChannelsByType(ctx context.Context, channelType string) ([]Channel, error)
	GetChannel(ctx context.Context, id string) (Channel, error)
	UpsertChannel(ctx context.Context, ch Channel) error
	DeleteChannel(ctx context.Context, id string) error

	// Plugins
	ListPlugins(ctx context.Context) ([]Plugin, error)
	ListPluginsByKind(ctx context.Context, kind string) ([]Plugin, error)
	ListEnabledPlugins(ctx context.Context) ([]Plugin, error)
	GetPlugin(ctx context.Context, id string) (Plugin, error)
	UpsertPlugin(ctx context.Context, p Plugin) error
	SetPluginEnabled(ctx context.Context, id string, enabled bool) error
	SetPluginConfig(ctx context.Context, id string, config map[string]any) error
	DeletePlugin(ctx context.Context, id string) error

	// Chat Agents (group -> agent mapping)
	GetChatAgent(ctx context.Context, channelID, platform, chatID string) (string, error) // returns agentID
	SetChatAgent(ctx context.Context, channelID, platform, chatID, agentID string) error
	DeleteChatAgent(ctx context.Context, channelID, platform, chatID string) error

	// Settings (key-value JSON)
	GetSetting(ctx context.Context, key string) (string, error) // returns JSON string
	SetSetting(ctx context.Context, key, value string) error

	// Snapshot assembles a read-only config snapshot for an agent.
	Snapshot(ctx context.Context, agentID string) (*Snapshot, error)

	// Bootstrap
	SeedDefaults(ctx context.Context) error
}

Store provides typed access to configuration stored in the database.

Jump to

Keyboard shortcuts

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