codebaseindex

package
v0.0.149 Latest Latest
Warning

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

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

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CombinedExtensions

func CombinedExtensions(adapters []Adapter) []string

CombinedExtensions returns all file extensions from the given adapters

func CombinedIgnoreDirs

func CombinedIgnoreDirs(adapters []Adapter) []string

CombinedIgnoreDirs returns all ignore dirs from the given adapters

func CombinedIgnoreGlobs

func CombinedIgnoreGlobs(adapters []Adapter) []string

CombinedIgnoreGlobs returns all ignore globs from the given adapters

func CompressAggregatedContent added in v0.0.149

func CompressAggregatedContent(contents []string) string

CompressAggregatedContent deduplicates sections across multiple index contents. It splits each content by ## markdown headers, hashes each section after whitespace normalization, and removes duplicate sections (keeping the first occurrence). This is useful when aggregating multiple codebase indexes that share common boilerplate sections like "Repository Layout" or "Key Entry Points".

func Decrypt

func Decrypt(data []byte, password string) ([]byte, error)

Decrypt decrypts encrypted data

func DecryptFromFile

func DecryptFromFile(inputPath string, password string) ([]byte, error)

DecryptFromFile decrypts content from an encrypted file

func IsEncrypted

func IsEncrypted(data []byte) bool

IsEncrypted checks if data appears to be encrypted

Types

type Adapter

type Adapter interface {
	// Name returns the adapter identifier (e.g., "go", "python")
	Name() string

	// DetectionFiles returns files that indicate this language is used
	// (e.g., "go.mod", "requirements.txt")
	DetectionFiles() []string

	// FileExtensions returns file extensions this adapter handles
	// (e.g., ".go", ".py")
	FileExtensions() []string

	// IgnoreDirs returns directories to ignore for this language
	// (e.g., "vendor", "node_modules")
	IgnoreDirs() []string

	// IgnoreGlobs returns glob patterns to ignore
	// (e.g., "*.generated.go", "*.min.js")
	IgnoreGlobs() []string

	// EntrypointPatterns returns file patterns that indicate entrypoints
	// (e.g., "main.go", "index.ts")
	EntrypointPatterns() []string

	// ConfigPatterns returns file patterns that indicate config files
	// (e.g., "go.mod", "package.json")
	ConfigPatterns() []string

	// ExtractSymbols extracts symbols from file content
	// Only first maxBytes of content is provided for performance
	ExtractSymbols(path string, content []byte) (*SymbolInfo, error)

	// ScoreFile returns a score modifier for file prioritization
	// Higher scores = more important files
	ScoreFile(path string, depth int, isEntrypoint, isConfig bool) int
}

Adapter defines the interface for language-specific indexing adapters

type AdapterOverride

type AdapterOverride struct {
	IgnoreDirs      []string
	IgnoreGlobs     []string
	PriorityFiles   []string
	ReplaceDefaults bool
}

AdapterOverride allows customization of adapter behavior

type ChangeSet

type ChangeSet struct {
	Added    []*FileEntry
	Modified []*FileEntry
	Deleted  []string
}

ChangeSet represents files that changed since last index

type Config

type Config struct {
	// Root path to scan (defaults to current directory)
	Root string

	// Output configuration
	OutputPath    string
	OutputFormat  OutputFormat // summary, structured, or full
	Store         StoreLocation
	Encrypt       bool
	EncryptionKey string

	// Expose configuration
	ExposeVariable bool
	MemoryEnabled  bool
	MemoryKey      string

	// Adapter overrides per language
	AdapterOverrides map[string]*AdapterOverride

	// Processing options
	MaxOutputKB   int
	HashAlgorithm HashAlgorithm
	Incremental   bool
	Verbose       bool

	// qmd integration (optional)
	Qmd *QmdConfig

	// Derived values (computed at runtime)
	RepoFileSlug string // lowercase slug for filenames
	RepoVarSlug  string // uppercase slug for variables
}

Config represents the parsed configuration for codebase indexing

func DefaultConfig

func DefaultConfig() *Config

DefaultConfig returns a Config with sensible defaults

type DiffResult added in v0.0.143

type DiffResult struct {
	Added      []string
	Modified   []string
	Deleted    []string
	Unchanged  int
	StoredAt   time.Time
	StoredHash string
}

DiffResult contains the results of comparing current state to stored index

type DirNode

type DirNode struct {
	Name     string
	Path     string
	Children []*DirNode
	Files    []string // File names only (not full entries)
	Depth    int
}

DirNode represents a directory in the tree structure

type FileEntry

type FileEntry struct {
	// Relative path from repo root
	Path string

	// File metadata
	Size    int64
	ModTime time.Time
	Hash    string // xxhash or sha256 depending on config

	// Token estimation (Size / 4 as rough approximation)
	EstimatedTokens int

	// Scoring
	Score        int
	Depth        int
	IsEntrypoint bool
	IsConfig     bool
	IsGenerated  bool

	// Language association
	Language string

	// Extracted symbols (populated during extraction phase)
	Symbols *SymbolInfo
}

FileEntry represents a single file in the repository

func (*FileEntry) TokenBudgetCategory added in v0.0.111

func (f *FileEntry) TokenBudgetCategory() string

TokenBudgetCategory returns the token budget category for a file Uses shared thresholds from filescan package

type FileMetadata added in v0.0.143

type FileMetadata struct {
	Path    string `json:"path"`
	Hash    string `json:"hash"`
	Size    int64  `json:"size"`
	ModTime int64  `json:"mod_time"` // Unix timestamp
}

FileMetadata stores per-file metadata for diffing

type FlutterAdapter

type FlutterAdapter struct{}

FlutterAdapter handles Flutter/Dart codebases

func (*FlutterAdapter) ConfigPatterns

func (a *FlutterAdapter) ConfigPatterns() []string

func (*FlutterAdapter) DetectionFiles

func (a *FlutterAdapter) DetectionFiles() []string

func (*FlutterAdapter) EntrypointPatterns

func (a *FlutterAdapter) EntrypointPatterns() []string

func (*FlutterAdapter) ExtractSymbols

func (a *FlutterAdapter) ExtractSymbols(path string, content []byte) (*SymbolInfo, error)

func (*FlutterAdapter) FileExtensions

func (a *FlutterAdapter) FileExtensions() []string

func (*FlutterAdapter) IgnoreDirs

func (a *FlutterAdapter) IgnoreDirs() []string

func (*FlutterAdapter) IgnoreGlobs

func (a *FlutterAdapter) IgnoreGlobs() []string

func (*FlutterAdapter) Name

func (a *FlutterAdapter) Name() string

func (*FlutterAdapter) ScoreFile

func (a *FlutterAdapter) ScoreFile(path string, depth int, isEntrypoint, isConfig bool) int

type FunctionInfo

type FunctionInfo struct {
	Name       string
	Signature  string
	IsExported bool
	IsMethod   bool
	Receiver   string // For methods
	Comments   string
}

FunctionInfo describes a function or method

type GoAdapter

type GoAdapter struct{}

GoAdapter handles Go codebases

func (*GoAdapter) ConfigPatterns

func (a *GoAdapter) ConfigPatterns() []string

func (*GoAdapter) DetectionFiles

func (a *GoAdapter) DetectionFiles() []string

func (*GoAdapter) EntrypointPatterns

func (a *GoAdapter) EntrypointPatterns() []string

func (*GoAdapter) ExtractSymbols

func (a *GoAdapter) ExtractSymbols(path string, content []byte) (*SymbolInfo, error)

func (*GoAdapter) FileExtensions

func (a *GoAdapter) FileExtensions() []string

func (*GoAdapter) IgnoreDirs

func (a *GoAdapter) IgnoreDirs() []string

func (*GoAdapter) IgnoreGlobs

func (a *GoAdapter) IgnoreGlobs() []string

func (*GoAdapter) Name

func (a *GoAdapter) Name() string

func (*GoAdapter) ScoreFile

func (a *GoAdapter) ScoreFile(path string, depth int, isEntrypoint, isConfig bool) int

type HashAlgorithm

type HashAlgorithm string

HashAlgorithm specifies the hashing algorithm to use

const (
	HashXXHash  HashAlgorithm = "xxhash"
	HashSHA256  HashAlgorithm = "sha256"
	DefaultHash HashAlgorithm = HashXXHash
)

type IndexMetadata added in v0.0.143

type IndexMetadata struct {
	GeneratedAt time.Time      `json:"generated_at"`
	RepoName    string         `json:"repo_name"`
	ContentHash string         `json:"content_hash"`
	FileCount   int            `json:"file_count"`
	Files       []FileMetadata `json:"files"`
	Languages   []string       `json:"languages"`
}

IndexMetadata stores metadata about an index for diffing

type Manager

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

Manager orchestrates the codebase indexing process

func NewManager

func NewManager(config *Config, verbose bool) (*Manager, error)

NewManager creates a new index manager with the given configuration

func (*Manager) ComputeChangeSet added in v0.0.143

func (m *Manager) ComputeChangeSet(diff *DiffResult) *ChangeSet

ComputeChangeSet builds a ChangeSet from diff result for incremental updates

func (*Manager) Diff added in v0.0.143

func (m *Manager) Diff(storedIndexPath string) (*DiffResult, error)

Diff compares the current state of the repository against a stored index

func (*Manager) Generate

func (m *Manager) Generate() (*Result, error)

Generate creates the codebase index

func (*Manager) GetConfig

func (m *Manager) GetConfig() *Config

GetConfig returns the current configuration

func (*Manager) SaveMetadata added in v0.0.143

func (m *Manager) SaveMetadata(result *Result, candidates []*FileEntry) error

SaveMetadata saves index metadata for future diffing

type OutputFormat added in v0.0.135

type OutputFormat string

OutputFormat specifies the format/verbosity of the generated index

const (
	// FormatSummary generates a compact overview (1-2KB)
	// Contains: repo purpose, main areas, key entry points
	// Best for: quick context, agent system prompts
	FormatSummary OutputFormat = "summary"

	// FormatStructured generates a categorized index (10-50KB)
	// Contains: files grouped by domain/purpose, semantic sections
	// Best for: agentic loops that need to understand codebase areas
	FormatStructured OutputFormat = "structured"

	// FormatFull generates the complete index (50-200KB)
	// Contains: all files, symbols, detailed tree structure
	// Best for: comprehensive analysis, initial exploration
	FormatFull OutputFormat = "full"

	// DefaultFormat is the default output format
	DefaultFormat OutputFormat = FormatStructured
)

type PythonAdapter

type PythonAdapter struct{}

PythonAdapter handles Python codebases

func (*PythonAdapter) ConfigPatterns

func (a *PythonAdapter) ConfigPatterns() []string

func (*PythonAdapter) DetectionFiles

func (a *PythonAdapter) DetectionFiles() []string

func (*PythonAdapter) EntrypointPatterns

func (a *PythonAdapter) EntrypointPatterns() []string

func (*PythonAdapter) ExtractSymbols

func (a *PythonAdapter) ExtractSymbols(path string, content []byte) (*SymbolInfo, error)

func (*PythonAdapter) FileExtensions

func (a *PythonAdapter) FileExtensions() []string

func (*PythonAdapter) IgnoreDirs

func (a *PythonAdapter) IgnoreDirs() []string

func (*PythonAdapter) IgnoreGlobs

func (a *PythonAdapter) IgnoreGlobs() []string

func (*PythonAdapter) Name

func (a *PythonAdapter) Name() string

func (*PythonAdapter) ScoreFile

func (a *PythonAdapter) ScoreFile(path string, depth int, isEntrypoint, isConfig bool) int

type QmdConfig added in v0.0.129

type QmdConfig struct {
	// Collection name to register with qmd
	Collection string `yaml:"collection"`

	// Whether to run qmd embed after registration
	Embed bool `yaml:"embed"`

	// Context description for the collection
	Context string `yaml:"context"`

	// File mask for indexing (default: "**/*.md")
	Mask string `yaml:"mask"`

	// Enable TurboQuant vector quantization on embeddings
	Quantize bool `yaml:"quantize,omitempty"`

	// Quantization bit width: 1-4 (default: 2)
	QuantizeBits int `yaml:"quantize_bits,omitempty"`
}

QmdConfig holds configuration for qmd integration

type Registry

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

Registry manages available adapters and language detection

func NewRegistry

func NewRegistry() *Registry

NewRegistry creates a new adapter registry with default adapters

func (*Registry) All

func (r *Registry) All() []Adapter

All returns all registered adapters

func (*Registry) Detect

func (r *Registry) Detect(repoPath string) []Adapter

Detect identifies which adapters apply to the given repository

func (*Registry) Get

func (r *Registry) Get(name string) (Adapter, bool)

Get retrieves an adapter by name

func (*Registry) GetByNames

func (r *Registry) GetByNames(names []string) []Adapter

GetByNames retrieves adapters by name, returning only those found

func (*Registry) Register

func (r *Registry) Register(a Adapter)

Register adds an adapter to the registry

type Result

type Result struct {
	// The generated markdown content (primary format)
	Content string

	// Additional format outputs (generated on demand)
	Summary    string // Always generated - compact overview for agents
	Structured string // Categorized index if format != summary
	Full       string // Complete index if format == full

	// Path where the index was written
	OutputPath string

	// Hash of the plaintext content
	ContentHash string

	// Whether the index was updated (for incremental mode)
	Updated bool

	// Format used for Content
	Format OutputFormat

	// Metadata
	GeneratedAt time.Time
	RepoName    string
	Languages   []string
	FileCount   int
	Duration    time.Duration

	// Categorization (populated during structured/full generation)
	Categories map[string][]string // category -> file paths
}

Result represents the output of index generation

type ScanResult

type ScanResult struct {
	// All files found (before candidate selection)
	Files []*FileEntry

	// Selected candidate files for indexing
	Candidates []*FileEntry

	// Directory structure summary
	DirTree *DirNode

	// Statistics
	TotalFiles    int
	TotalDirs     int
	IgnoredFiles  int
	IgnoredDirs   int
	TotalBytes    int64
	ProcessedTime time.Duration
}

ScanResult holds the results of repository scanning

type StoreLocation

type StoreLocation string

StoreLocation specifies where to store the index

const (
	StoreRepo   StoreLocation = "repo"
	StoreConfig StoreLocation = "config"
	StoreBoth   StoreLocation = "both"
)

type SymbolInfo

type SymbolInfo struct {
	// Package/module declaration
	Package string

	// Imports/dependencies
	Imports []string

	// Functions and methods
	Functions []FunctionInfo

	// Types (structs, classes, interfaces)
	Types []TypeInfo

	// Constants and variables
	Constants []string
	Variables []string

	// Framework/library indicators
	Frameworks []string

	// Risk indicators (auth, crypto, db, concurrency)
	RiskTags []string
}

SymbolInfo holds extracted symbols from a file

type TypeInfo

type TypeInfo struct {
	Name       string
	Kind       string // struct, interface, class, enum, etc.
	IsExported bool
	Fields     []string
	Methods    []string
	Comments   string
}

TypeInfo describes a type definition

type TypeScriptAdapter

type TypeScriptAdapter struct{}

TypeScriptAdapter handles TypeScript/JavaScript codebases

func (*TypeScriptAdapter) ConfigPatterns

func (a *TypeScriptAdapter) ConfigPatterns() []string

func (*TypeScriptAdapter) DetectionFiles

func (a *TypeScriptAdapter) DetectionFiles() []string

func (*TypeScriptAdapter) EntrypointPatterns

func (a *TypeScriptAdapter) EntrypointPatterns() []string

func (*TypeScriptAdapter) ExtractSymbols

func (a *TypeScriptAdapter) ExtractSymbols(path string, content []byte) (*SymbolInfo, error)

func (*TypeScriptAdapter) FileExtensions

func (a *TypeScriptAdapter) FileExtensions() []string

func (*TypeScriptAdapter) IgnoreDirs

func (a *TypeScriptAdapter) IgnoreDirs() []string

func (*TypeScriptAdapter) IgnoreGlobs

func (a *TypeScriptAdapter) IgnoreGlobs() []string

func (*TypeScriptAdapter) Name

func (a *TypeScriptAdapter) Name() string

func (*TypeScriptAdapter) ScoreFile

func (a *TypeScriptAdapter) ScoreFile(path string, depth int, isEntrypoint, isConfig bool) int

Jump to

Keyboard shortcuts

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