store

package
v0.27.0 Latest Latest
Warning

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

Go to latest
Published: Apr 28, 2026 License: Apache-2.0 Imports: 13 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func RegisterBackend

func RegisterBackend(name string, factory BackendFactory)

RegisterBackend allows external modules (e.g. kombify) to register custom backends. Called from init() in private modules -- SpeechKit itself never knows about kombify.

Types

type AudioAsset

type AudioAsset struct {
	StorageKind AudioStorageKind `json:"storageKind"`
	Path        string           `json:"path,omitempty"`
	MimeType    string           `json:"mimeType"`
	SizeBytes   int64            `json:"sizeBytes"`
	DurationMs  int64            `json:"durationMs"`
}

type AudioStorageKind

type AudioStorageKind string
const (
	AudioStorageLocalFile AudioStorageKind = "local-file"
)

type BackendFactory

type BackendFactory func(cfg StoreConfig) (Store, error)

BackendFactory creates a Store from config.

type ListOpts

type ListOpts struct {
	Limit    int
	Offset   int
	Language string
	After    time.Time
}

ListOpts controls pagination and filtering for list queries.

type PostgresStore

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

PostgresStore implements Store using PostgreSQL for metadata and the local filesystem for optional raw WAV persistence.

func NewPostgresStore

func NewPostgresStore(cfg StoreConfig) (*PostgresStore, error)

NewPostgresStore creates a PostgreSQL-backed store.

func (*PostgresStore) Close

func (s *PostgresStore) Close() error

func (*PostgresStore) DeleteQuickNote

func (s *PostgresStore) DeleteQuickNote(ctx context.Context, id int64) error

func (*PostgresStore) GetQuickNote

func (s *PostgresStore) GetQuickNote(ctx context.Context, id int64) (*QuickNote, error)

func (*PostgresStore) GetTranscription

func (s *PostgresStore) GetTranscription(ctx context.Context, id int64) (*Transcription, error)

func (*PostgresStore) ListQuickNotes

func (s *PostgresStore) ListQuickNotes(ctx context.Context, opts ListOpts) ([]QuickNote, error)

func (*PostgresStore) ListTranscriptions

func (s *PostgresStore) ListTranscriptions(ctx context.Context, opts ListOpts) ([]Transcription, error)

func (*PostgresStore) ListUserDictionaryEntries added in v0.22.4

func (s *PostgresStore) ListUserDictionaryEntries(ctx context.Context, language string) ([]UserDictionaryEntry, error)

func (*PostgresStore) ListVoiceAgentSessions added in v0.24.0

func (s *PostgresStore) ListVoiceAgentSessions(ctx context.Context, opts ListOpts) ([]VoiceAgentSession, error)

func (*PostgresStore) PinQuickNote

func (s *PostgresStore) PinQuickNote(ctx context.Context, id int64, pinned bool) error

func (*PostgresStore) QuickNoteCount

func (s *PostgresStore) QuickNoteCount(ctx context.Context) (int, error)

func (*PostgresStore) RecordUserDictionaryUsage added in v0.22.4

func (s *PostgresStore) RecordUserDictionaryUsage(ctx context.Context, canonical, language string) error

func (*PostgresStore) ReplaceUserDictionaryEntries added in v0.22.4

func (s *PostgresStore) ReplaceUserDictionaryEntries(ctx context.Context, language string, entries []UserDictionaryEntry) error

func (*PostgresStore) SaveQuickNote

func (s *PostgresStore) SaveQuickNote(ctx context.Context, text, language, provider string, durationMs, latencyMs int64, audioData []byte) (int64, error)

func (*PostgresStore) SaveTranscription

func (s *PostgresStore) SaveTranscription(ctx context.Context, text, language, provider, model string, durationMs, latencyMs int64, audioData []byte) error

func (*PostgresStore) SaveVoiceAgentSession added in v0.24.0

func (s *PostgresStore) SaveVoiceAgentSession(ctx context.Context, session VoiceAgentSession) (int64, error)

func (*PostgresStore) SemanticCapabilities

func (s *PostgresStore) SemanticCapabilities(context.Context) SemanticCapabilities

func (*PostgresStore) Stats

func (s *PostgresStore) Stats(ctx context.Context) (Stats, error)

func (*PostgresStore) TranscriptionCount

func (s *PostgresStore) TranscriptionCount(ctx context.Context) (int, error)

func (*PostgresStore) UpdateQuickNote

func (s *PostgresStore) UpdateQuickNote(ctx context.Context, id int64, text string) error

func (*PostgresStore) UpdateQuickNoteCapture

func (s *PostgresStore) UpdateQuickNoteCapture(ctx context.Context, id int64, text, provider string, durationMs, latencyMs int64, audioData []byte) error

type QuickNote

type QuickNote struct {
	ID         int64
	Text       string
	Language   string
	Provider   string
	DurationMs int64
	LatencyMs  int64
	AudioPath  string
	Audio      *AudioAsset
	Pinned     bool
	CreatedAt  time.Time
	UpdatedAt  time.Time
}

QuickNote represents a user-created dictation note.

type SQLiteStore

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

SQLiteStore implements Store using a local SQLite database. Uses modernc.org/sqlite (pure Go, no CGo required).

func NewSQLiteStore

func NewSQLiteStore(cfg StoreConfig) (*SQLiteStore, error)

NewSQLiteStore opens or creates a SQLite feedback database.

func (*SQLiteStore) Close

func (s *SQLiteStore) Close() error

func (*SQLiteStore) DB added in v0.26.0

func (s *SQLiteStore) DB() *sql.DB

DB exposes the underlying *sql.DB so adjacent packages can build their own table-scoped persisters (e.g. the persona catalog in internal/server/persona) without the base Store interface needing to enumerate every optional capability. Callers must treat the returned handle as read-mostly: it is owned by the Store and must not be closed.

func (*SQLiteStore) DeleteQuickNote

func (s *SQLiteStore) DeleteQuickNote(ctx context.Context, id int64) error

func (*SQLiteStore) GetQuickNote

func (s *SQLiteStore) GetQuickNote(ctx context.Context, id int64) (*QuickNote, error)

func (*SQLiteStore) GetTranscription

func (s *SQLiteStore) GetTranscription(ctx context.Context, id int64) (*Transcription, error)

func (*SQLiteStore) ListQuickNotes

func (s *SQLiteStore) ListQuickNotes(ctx context.Context, opts ListOpts) ([]QuickNote, error)

func (*SQLiteStore) ListTranscriptions

func (s *SQLiteStore) ListTranscriptions(ctx context.Context, opts ListOpts) ([]Transcription, error)

func (*SQLiteStore) ListUserDictionaryEntries added in v0.22.4

func (s *SQLiteStore) ListUserDictionaryEntries(ctx context.Context, language string) ([]UserDictionaryEntry, error)

func (*SQLiteStore) ListVoiceAgentSessions added in v0.24.0

func (s *SQLiteStore) ListVoiceAgentSessions(ctx context.Context, opts ListOpts) ([]VoiceAgentSession, error)

func (*SQLiteStore) PinQuickNote

func (s *SQLiteStore) PinQuickNote(ctx context.Context, id int64, pinned bool) error

func (*SQLiteStore) QuickNoteCount

func (s *SQLiteStore) QuickNoteCount(ctx context.Context) (int, error)

func (*SQLiteStore) RecordUserDictionaryUsage added in v0.22.4

func (s *SQLiteStore) RecordUserDictionaryUsage(ctx context.Context, canonical, language string) error

func (*SQLiteStore) ReplaceUserDictionaryEntries added in v0.22.4

func (s *SQLiteStore) ReplaceUserDictionaryEntries(ctx context.Context, language string, entries []UserDictionaryEntry) error

func (*SQLiteStore) SaveQuickNote

func (s *SQLiteStore) SaveQuickNote(ctx context.Context, text, language, provider string, durationMs, latencyMs int64, audioData []byte) (int64, error)

func (*SQLiteStore) SaveTranscription

func (s *SQLiteStore) SaveTranscription(ctx context.Context, text, language, provider, model string, durationMs, latencyMs int64, audioData []byte) error

func (*SQLiteStore) SaveVoiceAgentSession added in v0.24.0

func (s *SQLiteStore) SaveVoiceAgentSession(ctx context.Context, session VoiceAgentSession) (int64, error)

func (*SQLiteStore) SemanticCapabilities

func (s *SQLiteStore) SemanticCapabilities(context.Context) SemanticCapabilities

func (*SQLiteStore) Stats

func (s *SQLiteStore) Stats(ctx context.Context) (Stats, error)

func (*SQLiteStore) TranscriptionCount

func (s *SQLiteStore) TranscriptionCount(ctx context.Context) (int, error)

func (*SQLiteStore) UpdateQuickNote

func (s *SQLiteStore) UpdateQuickNote(ctx context.Context, id int64, text string) error

func (*SQLiteStore) UpdateQuickNoteCapture

func (s *SQLiteStore) UpdateQuickNoteCapture(ctx context.Context, id int64, text, provider string, durationMs, latencyMs int64, audioData []byte) error

type SemanticCapabilities

type SemanticCapabilities struct {
	Provider     SemanticProvider `json:"provider"`
	FullText     bool             `json:"fullText"`
	Embeddings   bool             `json:"embeddings"`
	VectorSearch bool             `json:"vectorSearch"`
}

type SemanticCapabilityProvider

type SemanticCapabilityProvider interface {
	SemanticCapabilities(ctx context.Context) SemanticCapabilities
}

SemanticCapabilityProvider is an optional extension for stores that can advertise indexing/vector capabilities without forcing every backend to implement semantic features immediately.

type SemanticProvider

type SemanticProvider string
const (
	SemanticProviderNone SemanticProvider = "none"
)

type Stats

type Stats struct {
	Transcriptions        int
	QuickNotes            int
	TotalWords            int
	TotalAudioDurationMs  int64
	AverageWordsPerMinute float64
	AverageLatencyMs      int64
}

type Store

type Store interface {
	// Transcriptions
	SaveTranscription(ctx context.Context, text, language, provider, model string, durationMs, latencyMs int64, audioData []byte) error
	GetTranscription(ctx context.Context, id int64) (*Transcription, error)
	ListTranscriptions(ctx context.Context, opts ListOpts) ([]Transcription, error)
	TranscriptionCount(ctx context.Context) (int, error)

	// Quick Notes
	SaveQuickNote(ctx context.Context, text, language, provider string, durationMs, latencyMs int64, audioData []byte) (int64, error)
	GetQuickNote(ctx context.Context, id int64) (*QuickNote, error)
	ListQuickNotes(ctx context.Context, opts ListOpts) ([]QuickNote, error)
	UpdateQuickNote(ctx context.Context, id int64, text string) error
	UpdateQuickNoteCapture(ctx context.Context, id int64, text, provider string, durationMs, latencyMs int64, audioData []byte) error
	PinQuickNote(ctx context.Context, id int64, pinned bool) error
	DeleteQuickNote(ctx context.Context, id int64) error
	QuickNoteCount(ctx context.Context) (int, error)
	Stats(ctx context.Context) (Stats, error)

	// Lifecycle
	Close() error
}

Store is the central storage abstraction. Each backend (SQLite, PostgreSQL, kombify Cloud) implements this interface.

func New

func New(cfg StoreConfig) (Store, error)

New creates a Store backend based on the config.

type StoreConfig

type StoreConfig struct {
	Backend                 string `toml:"backend"` // "sqlite" | "postgres" | registered name
	SQLitePath              string `toml:"sqlite_path"`
	PostgresDSN             string `toml:"postgres_dsn"`
	SaveAudio               bool   `toml:"save_audio"`
	AudioRetentionDays      int    `toml:"audio_retention_days"`
	MaxAudioStorageMB       int    `toml:"max_audio_storage_mb"`
	TranscriptionModelHints map[string]string
}

StoreConfig holds configuration for store backend selection.

type Transcription

type Transcription struct {
	ID         int64
	Text       string
	Language   string
	Provider   string
	Model      string
	DurationMs int64
	LatencyMs  int64
	AudioPath  string
	Audio      *AudioAsset
	CreatedAt  time.Time
}

Transcription represents a saved transcription record.

type UserDictionaryEntry added in v0.22.4

type UserDictionaryEntry struct {
	ID         int64
	Spoken     string
	Canonical  string
	Language   string
	Source     string
	Enabled    bool
	UsageCount int
	CreatedAt  time.Time
	UpdatedAt  time.Time
}

type UserDictionaryStore added in v0.22.4

type UserDictionaryStore interface {
	ReplaceUserDictionaryEntries(ctx context.Context, language string, entries []UserDictionaryEntry) error
	ListUserDictionaryEntries(ctx context.Context, language string) ([]UserDictionaryEntry, error)
	RecordUserDictionaryUsage(ctx context.Context, canonical, language string) error
}

UserDictionaryStore is an optional extension for stores that persist user-specific dictation terms outside config.toml.

type VoiceAgentSession added in v0.24.0

type VoiceAgentSession struct {
	ID                int64                    `json:"id"`
	StartedAt         time.Time                `json:"startedAt"`
	EndedAt           time.Time                `json:"endedAt"`
	Language          string                   `json:"language"`
	ProviderProfileID string                   `json:"providerProfileId,omitempty"`
	RuntimeKind       string                   `json:"runtimeKind,omitempty"`
	Transcript        string                   `json:"transcript,omitempty"`
	Turns             []VoiceAgentTurn         `json:"turns,omitempty"`
	Summary           VoiceAgentSessionSummary `json:"summary"`
	CreatedAt         time.Time                `json:"createdAt"`
}

type VoiceAgentSessionStore added in v0.24.0

type VoiceAgentSessionStore interface {
	SaveVoiceAgentSession(ctx context.Context, session VoiceAgentSession) (int64, error)
	ListVoiceAgentSessions(ctx context.Context, opts ListOpts) ([]VoiceAgentSession, error)
}

VoiceAgentSessionStore is an optional extension for backends that persist Voice Agent dialogue summaries.

type VoiceAgentSessionSummary added in v0.24.0

type VoiceAgentSessionSummary struct {
	Title         string   `json:"title,omitempty"`
	Summary       string   `json:"summary"`
	Ideas         []string `json:"ideas,omitempty"`
	Decisions     []string `json:"decisions,omitempty"`
	OpenQuestions []string `json:"openQuestions,omitempty"`
	NextSteps     []string `json:"nextSteps,omitempty"`
	RawText       string   `json:"rawText,omitempty"`
}

type VoiceAgentTurn added in v0.24.0

type VoiceAgentTurn struct {
	Role      string    `json:"role"`
	Text      string    `json:"text"`
	CreatedAt time.Time `json:"createdAt,omitempty"`
}

Jump to

Keyboard shortcuts

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