yams/docs/changelogs/v0.4.md
2025-09-11 11:28:42 -04:00

252 lines
13 KiB
Markdown

# Changelog Archive: v0.4.x Series
## [v0.4.8] - 2025-08-21
### Added
- **Shell Wildcard Expansion Support**
- `add` command now accepts multiple file paths from shell expansion
- Commands like `yams add *.md` now work correctly without "arguments were not expected" errors
- Properly handles shell wildcard expansion (e.g., `*.cpp`, `*.md`, `*.txt`)
- **Dynamic Plugin Loading**
- Implemented PluginLoader class for runtime plugin loading
- Added automatic plugin discovery from standard directories
- Support for YAMS_PLUGIN_DIR environment variable
- Onnx model provider now loads dynamically as a plugin
- Daemon automatically loads plugins on startup
- Created comprehensive test suite for plugin loader
### Fixed
- **Tag Storage and Filtering**
- Fixed tag filtering in `list` command not working (`--tags` option)
- Tags are now properly parsed as comma-separated values when stored
- Fixed tag filtering logic to correctly match against stored comma-separated tag values
- Multiple tags in filter work with OR logic (e.g., `--tags "work,important"` shows documents with either tag)
- **Daemon Path Resolution**
- Fixed "Added 0 documents" issue when using relative paths with daemon
- CLI now converts relative paths to absolute paths before sending to daemon
- Added proper error messages for invalid paths and non-recursive directory attempts
- Daemon now returns helpful error messages instead of silently returning 0
- **Feature Parity Between CLI and Daemon**
- Added all missing fields to GrepRequest for complete CLI feature parity
- Added all missing fields to SearchRequest for complete CLI feature parity
- Updated serialization/deserialization for both request types
- CLI commands now pass all parameters to daemon requests
- Ensures consistent behavior whether using daemon or local execution
- **Wildcard Pattern Matching Bug**
- Fixed broken wildcard pattern matching in `add` and `restore` commands
- Replaced regex-based implementation with efficient iterative algorithm
- Patterns like `*.sol`, `*.cpp`, `*.js` now work correctly
- Dots and other special characters in patterns are now handled properly
- **Linux Build Errors**
- Fixed missing `#include <cstring>` in compression_benchmark.cpp for `std::strlen`
- Fixed C++ compiler flag `-Wnon-virtual-dtor` being incorrectly applied to C files
- Used CMake generator expression `$<$<COMPILE_LANGUAGE:CXX>:-Wnon-virtual-dtor>` for language-specific flags
- Fixed missing Rabin chunker header include in ingestion_benchmark.cpp
- Fixed GCOptions struct initializer warnings by adding progressCallback field
- Fixed query parser benchmark Result access patterns (use `.value()` instead of `*result`)
- Fixed metadata benchmark Database constructor usage pattern
- Fixed benchmark API calls to use storeBytes() instead of non-existent addContent()
- **Vector Index Loading**
- Fixed empty error message when vector index file doesn't exist
- Added proper file existence check before attempting to load
- Shows debug message instead of warning for missing index file on startup
## [v0.4.7] - 2025-08-21
### Fixed
- **Release Workflow Build Failures**
- Fixed `std::from_chars` compilation error on macOS hosted runners (Xcode 15.2)
- Replaced `std::from_chars` with portable `std::stoull` in http_adapter_curl.cpp for parsing Content-Length headers
- Fixed missing benchmark package in Linux self-hosted validation builds
- Added proper Conan options (`-o build_tests=True -o build_benchmarks=True`) to validation build step
- Ensures compatibility with older macOS standard libraries that lack full C++20 support
## [v0.4.6] - 2025-08-21
### Changed
- **MCP Server Tool Naming**
- Simplified tool names to match CLI commands for better consistency
- Tools now use generic names: `search`, `grep`, `download`, `get`, `list`, `store`, `add`, `delete`, `cat`, `update`, `stats`
### Fixed
- Added proper lifetime management for io_uring operations to prevent accessing freed memory
- Implemented operation tracking and cancellation to ensure clean shutdown
- **Storage Backend Improvements**
- Fixed FilesystemBackend sharding to use hash-based approach for consistent key distribution
- Replaced key-prefix sharding with SHA256 hash-based sharding to avoid path conflicts
- **Chunking Deduplication**
- Fixed RabinChunker deduplication by resetting window state at chunk boundaries
- Ensures identical data patterns produce identical chunks for proper deduplication
- **Code Improvements**
- Added automatic configuration correction for invalid chunking configs (when min > max)
- Enhanced preprocessText() to trim leading/trailing whitespace
- Improved paragraph boundary detection to point after "\n\n" markers
- **CI/CD**
- Fixed release workflow by changing preset from `conan-validation` to `conan-release`
### Known Issues
- **Temporarily Disabled Tests** (to be fixed in v0.5.0)
- VectorIndexManager: removeVector, index persistence, HNSW operations not implemented
- ModelManagement: Registry initialization issues in test environment
- OnnxRuntime: Tests timeout waiting for non-existent model files
- All disabled tests are marked with TODO(v0.5.0) comments for tracking
## [v0.4.5] - 2025-08-21
### Fixed
- **MCP Server**
- Added mutex protection to StdioTransport for thread-safe I/O operations
- Fixed potential JSON response interleaving when multiple clients connect
- Prevents "Expected ',' or ']' after array element" errors in concurrent scenarios
- Fixed missing includes for file operations
- **Test Failures**
- Fixed FilesystemBackend::list() key reconstruction from sharded paths
- Fixed ManifestManager statistics by moving static counters to member variables
- Fixed file type detection consistency in CommandIntegrationTest
- **Detection Module**
- Ensured FileSignature creation uses consistent methods for isBinary and fileType
- Fixed mismatch between FileSignature fields and classification methods
## [v0.4.4] - 2025-08-21
**CI version bump**
## [v0.4.3] - 2025-08-20
### Fixed
- **Build System**
- Updated GTest from 1.14.0 to 1.15.0 for Conan 2.0 compatibility
- **Homebrew Formula**
- Fixed documentation URL in Homebrew formula to point to correct repository
### Known Issues
- Daemon may crash when processing certain stats requests (investigation ongoing)
## [v0.4.2] - 2025-08-20
### Added
- **Linux Package Support**
- Added AppImage support for universal Linux distribution
- Integrated package building into GitHub release workflow
### Fixed
- **Linux Build Compilation**
- Fixed C++ template name lookup issues in `message_serializer.cpp` for GCC 13
- Added namespace qualification to 31 deserialize calls for proper template resolution
- Fixed missing `<utility>` header in `async_socket.h` and `connection_pool.h` for `std::exchange`
- Fixed missing `<netinet/in.h>` header in `async_socket.cpp` for `IPPROTO_TCP` constant
- **Position-Independent Code (-fPIC) Linker Errors**
- Fixed shared library linking errors by enabling PIC for all static libraries in dependency chain
- Added `POSITION_INDEPENDENT_CODE ON` property to 11 static libraries
- Resolved `yams_onnx_plugin.so` build failure on Linux x86_64
- **Missing Symbol Linker Errors**
- Fixed undefined reference to `HybridFuzzySearch` by linking `yams_metadata` to `yams::search`
- Resolved circular dependency issues in library linking order
- **CLI Output Cleanup**
- Changed TextExtractorFactory initialization logging from info to debug level
- Removed spurious log messages from normal CLI output
- **Homebrew Formula**
- Fixed documentation URL in Homebrew formula to point to correct repository
## [v0.4.1] - 2025-08-20
### Added
- **Smart Text Extraction by Default**
- CLI commands now extract text from PDFs, HTML, and other supported formats by default
- `cat` command: Shows readable text instead of binary data for PDFs and HTML files
- `get` command: Auto-detects output destination - extracts text for terminal, raw for files
- `--raw` flag added to both commands for accessing original content when needed
- `--extract` flag for `get` command to force text extraction even when piping
### Changed
- **MCP Server Text Extraction**
- Now uses `TextExtractorFactory` for all supported file types (not just HTML)
- PDF text extraction works correctly in MCP tools
- Consistent text extraction behavior across CLI and MCP interfaces
### Fixed
- **PDF Text Extraction in MCP**
- Fixed issue where PDF files returned empty content in MCP tools
- MCP server now properly extracts text from PDFs using PDFium
- Added missing `HtmlTextExtractor` to build system
- **Compilation Issues**
- Fixed missing `HtmlTextExtractor` in CMakeLists.txt
- Fixed ErrorCode enum references in HTML text extractor
- Fixed regex_replace lambda usage for C++ standard compliance
- IPC Response variant construction
- GitHub Actions release workflow: wrap embedded multi-line Python f-string code in bash here-docs and pass JSON file path via argv in the benchmarks block to avoid shell syntax errors on runners.
## [v0.4.0] - 2025-08-20
### Added
- **Universal Content Handler System**
- New `IContentHandler` interface supporting all file types with metadata extraction
- `ContentHandlerRegistry` with thread-safe handler management
- `TextContentHandler` adapter wrapping existing PlainTextExtractor
- `PdfContentHandler` wrapper for existing PdfExtractor
- `BinaryContentHandler` as universal fallback for unknown file types
- Updated DocumentIndexer to use new ContentHandlerRegistry system
- Maintained backward compatibility with legacy TextExtractor system
- **High-Performance Daemon Architecture**
- New `yams-daemon` background service for persistent resource management
- Unix domain socket IPC with zero-copy transfers for large payloads
- Automatic daemon lifecycle management with configurable policies
- `yams daemon start/stop/status/restart` command suite
- Auto-start on first command if daemon enabled in config
- Shared EmbeddingGenerator across all operations eliminates model loading overhead
- VectorIndexManager cached in daemon memory
- **Robust Downloader Module**
- New download module with libcurl adapter, repo-local staging
- SHA-256 integrity verification and rate limiting
- Atomic finalize into CAS (store-only by default)
- New `yams download` command returning JSON {hash, stored_path, size_bytes}
- Progress output (human/json) with no user-path writes unless export requested
- **Configuration v2 Architecture**
- New `[daemon]` section for service configuration
- `[daemon.models]` for model lifecycle management
- `[daemon.lifecycle]` for auto-start and shutdown policies
- `[daemon.ipc]` for communication tuning
- Backward compatible with direct mode (no daemon)
- **Enhanced Search Capabilities**
- `--literal-text` flag for search and grep commands
- Treats query patterns as literal text instead of regex/operators
- Works across all search engines (fuzzy, hybrid, metadata, vector)
- Example: `yams search "call(" --literal-text` safely searches for parentheses
### Changed
- **Performance Architecture**
- All CLI commands can leverage shared daemon resources
- Shared result renderer system across CLI and daemon
- Deferred initialization eliminates startup overhead
- **MCP Integration Improvements**
- Removed HTTP transport support, now stdio-only for cleaner local integration
- Improved EmbeddingGenerator lifecycle with lazy loading
- Better resource management with on-demand initialization
### Fixed
- **Daemon Integration Issues**
- Eliminated "Failed to preload model" warnings
- Fixed daemon configuration defaults for missing config sections
- Daemon now gracefully handles missing `[daemon]` sections in config files
- **Configuration System**
- ConfigMigrator properly handles v1 to v2 migrations without breaking existing configs
- **MCP Schema Compliance**
- Fixed "Expected object, received null" error in tool definitions
- Removed empty `properties: {}` fields from tools with no parameters
- MCP server now loads correctly without schema validation errors
- **Search Engine Robustness**
- Special characters in search queries no longer break FTS5
- Automatic sanitization prevents syntax errors from `()[]{}*"` characters
- All search paths (fuzzy, hybrid, metadata) handle special characters safely
- Raw query strings flow through pipeline unchanged until FTS5 level
- **Critical Compilation Errors**
- Fixed `ChunkingStrategy` enum reference mismatch in document chunker (FixedSize → FIXED_SIZE)
- Fixed constructor initialization order in VectorIndexOptimizer to match member declaration order
- Fixed compression level configuration in RecoveryManager (now uses level 3 per performance benchmarks)
- **Code Quality Issues**
- Fixed hundreds of uninitialized variable errors identified by cppcheck analysis
- Eliminated critical errors in recovery_manager.cpp, error_handler.cpp, and metadata_api.cpp
- Added proper RAII initialization patterns across vector and compression components
- **Build System Stability**
- All modules now compile successfully without errors
- Fixed warning configurations that were breaking dependency builds
- Improved cross-platform compilation compatibility