settings

package
v0.20.0 Latest Latest
Warning

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

Go to latest
Published: Sep 15, 2026 License: AGPL-3.0 Imports: 20 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DefaultLanguage          = "auto"
	DefaultCommandUILanguage = "auto"
	DefaultReasoningEffort   = "medium"
	ChatRuntimeModel         = string(runtimekind.Model)
	ChatRuntimeACPAgent      = string(runtimekind.ACPAgent)
	ChatRuntimeCodex         = string(runtimekind.Codex)
	ChatRuntimeClaudeCode    = string(runtimekind.ClaudeCode)
	DefaultACPProjectPath    = "/data"
	DefaultACPProjectMode    = "project"
)

Variables

View Source
var (
	ErrModelIDAmbiguous            = errors.New("model_id is ambiguous across providers")
	ErrInvalidModelRef             = errors.New("invalid model reference")
	ErrReasoningOptionsUnavailable = errors.New("reasoning options unavailable")
)

Functions

This section is empty.

Types

type InvalidReasoningEffortError

type InvalidReasoningEffortError struct {
	Effort  string
	Options reasoning.Options
}

func (*InvalidReasoningEffortError) Error

type ReasoningOptionsResolver

type ReasoningOptionsResolver interface {
	ResolveReasoningOptions(context.Context, string) (reasoning.Options, error)
}

type Service

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

func NewService

func NewService(log *slog.Logger, queries dbstore.Queries, aclService *acl.Service, networkService *netctl.Service) *Service

func (*Service) Delete

func (s *Service) Delete(ctx context.Context, botID string) error

func (*Service) GetBot

func (s *Service) GetBot(ctx context.Context, botID string) (Settings, error)

func (*Service) GetCommandUILanguage

func (s *Service) GetCommandUILanguage(ctx context.Context, botID string) (string, error)

GetCommandUILanguage returns just the command_ui_language setting for a bot. Avoids the second getDefaultEffect query that GetBot triggers — the locale is resolved once per slash command + once per interactive callback tap, so keeping it single-query matters for paginated lists where users tap Prev/Next repeatedly. Returns the raw value (caller is responsible for i18n.Resolve to map "auto"/unknown → server default).

func (*Service) SetBotAgents

func (s *Service) SetBotAgents(service *botagents.Service)

func (*Service) SetReasoningOptionsResolver

func (s *Service) SetReasoningOptionsResolver(resolver ReasoningOptionsResolver)

func (*Service) UpsertBot

func (s *Service) UpsertBot(ctx context.Context, botID string, req UpsertRequest) (Settings, error)

type Settings

type Settings struct {
	ChatModelID          string `json:"chat_model_id"`
	DefaultBotAgentID    string `json:"default_bot_agent_id,omitempty"`
	ChatRuntime          string `json:"chat_runtime"`
	ChatACPAgentID       string `json:"chat_acp_agent_id,omitempty"`
	ChatACPProjectPath   string `json:"chat_acp_project_path,omitempty"`
	ChatACPProjectMode   string `json:"chat_acp_project_mode,omitempty"`
	ImageModelID         string `json:"image_model_id"`
	SearchProviderID     string `json:"search_provider_id"`
	FetchProviderID      string `json:"fetch_provider_id"`
	MemoryProviderID     string `json:"memory_provider_id"`
	TtsModelID           string `json:"tts_model_id"`
	TranscriptionModelID string `json:"transcription_model_id"`
	VideoModelID         string `json:"video_model_id"`
	Language             string `json:"language"`
	CommandUILanguage    string `json:"command_ui_language"`
	AclDefaultEffect     string `json:"acl_default_effect"`
	Timezone             string `json:"timezone"`
	// ReasoningEffort is the single on/off source for reasoning:
	// models.ReasoningEffortDisable means no reasoning, any other value is a tier.
	ReasoningEffort         string             `json:"reasoning_effort"`
	CompactionEnabled       bool               `json:"compaction_enabled"`
	CompactionThreshold     int                `json:"compaction_threshold"`
	CompactionTargetPercent *int               `json:"compaction_target_percent" extensions:"x-nullable"`
	CompactionModelID       string             `json:"compaction_model_id,omitempty"`
	DiscussProbeModelID     string             `json:"discuss_probe_model_id,omitempty"`
	PersistFullToolResults  bool               `json:"persist_full_tool_results"`
	ShowToolCallsInIM       bool               `json:"show_tool_calls_in_im"`
	ToolApprovalConfig      ToolApprovalConfig `json:"tool_approval_config"`
	DisplayEnabled          bool               `json:"display_enabled"`
	OverlayEnabled          bool               `json:"overlay_enabled"`
	OverlayProvider         string             `json:"overlay_provider,omitempty"`
	OverlayConfig           map[string]any     `json:"overlay_config,omitempty"`
}

type ToolApprovalConfig

type ToolApprovalConfig struct {
	Enabled bool                   `json:"enabled"`
	Read    ToolApprovalFilePolicy `json:"read"`
	Write   ToolApprovalFilePolicy `json:"write"`
	Exec    ToolApprovalExecPolicy `json:"exec"`
}

func DefaultToolApprovalConfig

func DefaultToolApprovalConfig() ToolApprovalConfig

func NormalizeToolApprovalConfig

func NormalizeToolApprovalConfig(cfg ToolApprovalConfig) ToolApprovalConfig

func (*ToolApprovalConfig) UnmarshalJSON

func (c *ToolApprovalConfig) UnmarshalJSON(data []byte) error

type ToolApprovalExecPolicy

type ToolApprovalExecPolicy struct {
	Mode                ToolApprovalMode `json:"mode,omitempty"`
	RequireApproval     bool             `json:"require_approval"`
	BypassCommands      []string         `json:"bypass_commands"`
	ForceReviewCommands []string         `json:"force_review_commands"`
}

type ToolApprovalFilePolicy

type ToolApprovalFilePolicy struct {
	Mode             ToolApprovalMode `json:"mode,omitempty"`
	RequireApproval  bool             `json:"require_approval"`
	BypassGlobs      []string         `json:"bypass_globs"`
	ForceReviewGlobs []string         `json:"force_review_globs"`
}

type ToolApprovalMode

type ToolApprovalMode string
const (
	ToolApprovalAllow ToolApprovalMode = "allow"
	ToolApprovalAsk   ToolApprovalMode = "ask"
	ToolApprovalDeny  ToolApprovalMode = "deny"
)

type UpsertRequest

type UpsertRequest struct {
	// Reference fields below use pointer semantics so autosaving clients can
	// clear a selection: nil = keep current, "" = clear, value = set. The
	// service mirrors each into a `<field>_set` SQL flag (same pattern as
	// FetchProviderID / CompactionModelID); plain strings would make ""
	// indistinguishable from "not sent".
	ChatModelID          *string `json:"chat_model_id,omitempty"`
	DefaultBotAgentID    *string `json:"default_bot_agent_id,omitempty"`
	ChatRuntime          *string `json:"chat_runtime,omitempty"`
	ChatACPAgentID       *string `json:"chat_acp_agent_id,omitempty"`
	ChatACPProjectPath   *string `json:"chat_acp_project_path,omitempty"`
	ChatACPProjectMode   *string `json:"chat_acp_project_mode,omitempty"`
	ImageModelID         *string `json:"image_model_id,omitempty"`
	SearchProviderID     *string `json:"search_provider_id,omitempty"`
	FetchProviderID      *string `json:"fetch_provider_id,omitempty"`
	MemoryProviderID     *string `json:"memory_provider_id,omitempty"`
	TtsModelID           *string `json:"tts_model_id,omitempty"`
	TranscriptionModelID *string `json:"transcription_model_id,omitempty"`
	VideoModelID         *string `json:"video_model_id,omitempty"`
	// Language follows the same pointer rule; "" normalizes to DefaultLanguage
	// ("auto") rather than clearing the column.
	Language                *string             `json:"language,omitempty"`
	CommandUILanguage       string              `json:"command_ui_language,omitempty"`
	AclDefaultEffect        string              `json:"acl_default_effect,omitempty"`
	Timezone                *string             `json:"timezone,omitempty"`
	ReasoningEffort         *string             `json:"reasoning_effort,omitempty"`
	CompactionEnabled       *bool               `json:"compaction_enabled,omitempty"`
	CompactionThreshold     *int                `json:"compaction_threshold,omitempty"`
	CompactionTargetPercent *int                `json:"compaction_target_percent,omitempty"`
	CompactionModelID       *string             `json:"compaction_model_id,omitempty"`
	DiscussProbeModelID     string              `json:"discuss_probe_model_id,omitempty"`
	PersistFullToolResults  *bool               `json:"persist_full_tool_results,omitempty"`
	ShowToolCallsInIM       *bool               `json:"show_tool_calls_in_im,omitempty"`
	ToolApprovalConfig      *ToolApprovalConfig `json:"tool_approval_config,omitempty"`
	DisplayEnabled          *bool               `json:"display_enabled,omitempty"`
	OverlayEnabled          *bool               `json:"overlay_enabled,omitempty"`
	OverlayProvider         *string             `json:"overlay_provider,omitempty"`
	OverlayConfig           map[string]any      `json:"overlay_config,omitempty"`
}

Jump to

Keyboard shortcuts

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