Files
lukaszraczylo 7b979a3f95 fix: prevent internal prompts and duplicates in memory database
- Add server-side detection of SDK processor's internal system prompt
  in handleSessionInit, since CLAUDE_MNEMONIC_INTERNAL env var is not
  propagated by Claude Code to hook subprocesses
- Add cross-session duplicate detection (FindRecentPromptByTextGlobal)
  to catch same prompt text arriving from different session IDs
- Add hooks, mcpServers, and commands references to plugin.json per
  Claude Code plugin spec
- Remove MCP server injection from register-plugin.sh (now in plugin.json)
- Use ${CLAUDE_PLUGIN_ROOT} for statusline path instead of hardcoded path
- Add python3 fallback for plugin registration when jq is unavailable
- Replace hardcoded 1.0.0 version in findWorkerBinary with glob lookup
- Add cache copy verification in register-plugin.sh
- Add update-version Makefile target to keep metadata in sync
2026-03-07 01:28:04 +00:00

73 lines
3.3 KiB
Go

// Package db defines database interfaces for the claude-mnemonic stores.
package db
import (
"context"
"github.com/lukaszraczylo/claude-mnemonic/pkg/models"
)
// ObservationReader defines read operations for observations.
type ObservationReader interface {
GetObservationByID(ctx context.Context, id int64) (*models.Observation, error)
GetObservationsByIDs(ctx context.Context, ids []int64, orderBy string, limit int) ([]*models.Observation, error)
GetRecentObservations(ctx context.Context, project string, limit int) ([]*models.Observation, error)
GetActiveObservations(ctx context.Context, project string, limit int) ([]*models.Observation, error)
GetAllRecentObservations(ctx context.Context, limit int) ([]*models.Observation, error)
GetAllObservations(ctx context.Context) ([]*models.Observation, error)
SearchObservationsFTS(ctx context.Context, query, project string, limit int) ([]*models.Observation, error)
GetObservationCount(ctx context.Context, project string) (int, error)
}
// ObservationWriter defines write operations for observations.
type ObservationWriter interface {
StoreObservation(ctx context.Context, sdkSessionID, project string, obs *models.ParsedObservation, promptNumber int, discoveryTokens int64) (int64, int64, error)
DeleteObservations(ctx context.Context, ids []int64) (int64, error)
}
// ObservationStore combines read and write operations for observations.
type ObservationStore interface {
ObservationReader
ObservationWriter
}
// SummaryReader defines read operations for summaries.
type SummaryReader interface {
GetSummariesByIDs(ctx context.Context, ids []int64, orderBy string, limit int) ([]*models.SessionSummary, error)
GetRecentSummaries(ctx context.Context, project string, limit int) ([]*models.SessionSummary, error)
GetAllRecentSummaries(ctx context.Context, limit int) ([]*models.SessionSummary, error)
GetAllSummaries(ctx context.Context) ([]*models.SessionSummary, error)
}
// SummaryWriter defines write operations for summaries.
type SummaryWriter interface {
StoreSummary(ctx context.Context, sdkSessionID, project string, summary *models.ParsedSummary, promptNumber int, discoveryTokens int64) (int64, int64, error)
}
// SummaryStore combines read and write operations for summaries.
type SummaryStore interface {
SummaryReader
SummaryWriter
}
// PromptReader defines read operations for prompts.
type PromptReader interface {
GetPromptsByIDs(ctx context.Context, ids []int64, orderBy string, limit int) ([]*models.UserPromptWithSession, error)
GetAllRecentUserPrompts(ctx context.Context, limit int) ([]*models.UserPromptWithSession, error)
GetAllPrompts(ctx context.Context) ([]*models.UserPromptWithSession, error)
GetRecentUserPromptsByProject(ctx context.Context, project string, limit int) ([]*models.UserPromptWithSession, error)
FindRecentPromptByText(ctx context.Context, claudeSessionID, promptText string, withinSeconds int) (int64, int, bool)
FindRecentPromptByTextGlobal(ctx context.Context, promptText string, withinSeconds int) (int64, int, bool)
}
// PromptWriter defines write operations for prompts.
type PromptWriter interface {
SaveUserPromptWithMatches(ctx context.Context, claudeSessionID string, promptNumber int, promptText string, matchedObservations int) (int64, error)
}
// PromptStore combines read and write operations for prompts.
type PromptStore interface {
PromptReader
PromptWriter
}