Releases: idep-editor/idep
Releases · idep-editor/idep
v0.1.2 - LSP Diagnostics in TUI
[0.1.2] - 2025-04-28
Added
- LSP Diagnostics in TUI — Full language server protocol integration for error/warning display
- Auto-start LSP server on file open (rust-analyzer, typescript-language-server, pylsp)
didOpennotification on file load,didChange(debounced 500ms) on edit,didSaveon:w- Error/warning count in status bar (e.g., "E:2 W:1")
- Inline diagnostic markers (● E / ● W) at end of affected lines
- Diagnostic detail panel (toggle with
Space+d) showing full messages with line numbers - Integration tests for rust-analyzer diagnostics flow
Changed
- Performance: shared tokio runtime across all LSP operations (eliminates per-call runtime creation)
- Improved error handling: LSP failures now show status messages instead of failing silently
Fixed
- Debounce timer now cleared on save to prevent redundant
didChangeafterdidSave - Code review issues: runtime reuse, error propagation, stale timer handling
v0.1.1 - Syntax Highlighting
Changelog
All notable changes to Idep are documented here.
Format follows Keep a Changelog.
[Unreleased]
Added
Changed
Fixed
[0.1.1] - 2025-04-21
Added
- Syntax Highlighting — Tree-sitter based token-level highlighting for TUI
- Languages: Rust, TypeScript, Python, TOML, Markdown
- Cached highlighting to avoid re-parsing on scroll (performance for 10k+ line files)
- Default dark theme with semantic colors (keywords, strings, comments, etc.)
- PRODUCT.md — Product definition with target user persona, non-goals, success criteria
- ARCHITECTURE.md — Contributor-facing architecture overview
- Documentation updates — README comparison table refinements, status table updates
Changed
- Plugin API freeze deferred from v0.3.0 to v0.3.4 (API now marked experimental)
Fixed
- Char offset double-conversion bug on cursor line rendering
- Cache collision detection (O(1) source.len() vs O(n) lines().count())
- Cursor tracking on highlighted lines (added cursor_rendered flag)
[v0.1.0] — 2026-04-17
Added
- Terminal UI Editor (
idep-tui) — fully functional terminal-based text editor - Normal mode navigation:
h/j/k/l(arrows),w/b(word movement),0/$(line bounds),gg/G(file bounds) - Line editing:
dddelete line,u/Ctrl+rundo/redo with history - Insert mode: character insertion,
Backspace,Enter,Ctrl+ssave - Command mode:
:wsave,:qquit,:wqsave+quit,:q!force quit - Buffer undo/redo history in
idep-core::Buffer— configurable depth (default 100) - Status bar showing cursor position, mode, filename, and status messages
- Mouse support: scroll and click-to-position cursor
- Signal handling: graceful
Ctrl+Cshutdown - WSL2 platform verification — Windows Terminal 1.18+ compatibility documented
Changed
idep-core::Bufferis now single source of truth for all text operations- Optimized
delete_line()to use ropey API directly (eliminates redundant allocations)
Testing
- 10 new undo/redo tests for Buffer history functionality
- WSL2 integration tests for terminal rendering and mouse support
- All 28 idep-core tests passing
Fixed
- Status message persistence — now clears on keypress
- Empty command handling —
:Enterno longer shows "unknown command" - Clippy warnings for collapsible match arms and unnecessary sort_by
[v0.0.9] — 2026-04-05
Added
- RAG Context Engine for intelligent codebase context gathering
ContextEnginestruct with query, workspace root, and cursor position supportContextEngine::gather()method combining multiple context sources:- Current file content (always included)
- AST subtree around cursor using Tree-sitter
- Top-k similar chunks from vector index
- Recent edit history (last N saves)
- Context serialization to prompt-friendly text blocks
- Token budget manager with configurable max context tokens (default 4096)
- Priority-based context truncation: cursor context > similar chunks > history
- Chat with RAG integration via
ChatSession::send_with_context() - Chat history export with
ChatSession::export()JSON serialization - Anthropic native message format replacing legacy prompt building
- Context window management with intelligent history truncation
Fixed
- Message format compatibility for Anthropic Claude API
- Context injection timing to ensure proper prompt construction
- Token counting accuracy for context budget management
- Priority truncation logic to preserve most relevant context
- AST subtree extraction for precise cursor context
Testing
- 4 new integration tests for RAG context functionality
- 3 new context engine tests covering creation and serialization
- 4 new chat format tests for native message building
- Context priority truncation tests verifying budget management
- RAG function reference tests ensuring accurate codebase responses
- All 27 idep-ai tests passing with comprehensive coverage
Performance
- Context gathering: <100ms for typical project queries
- Token budget management: O(n) truncation with priority ordering
- RAG response quality: Demonstrably references correct codebase chunks
[v0.0.8] — 2026-03-26
Added
- Vector store with similarity search using brute-force cosine similarity
VectorStorestruct with 384-dimension embedding storage and ID mappingVectorStore::add()for validated embedding insertion with auto-incrementing IDsVectorStore::find_similar()for top-k semantic similarity search with cosine scoringScoredChunkstruct combining chunk ID with similarity score- Persistent index storage with JSON serialization for vectors and ID mapping
VectorStore::save()andVectorStore::load()for disk persistence and recovery- Chunk metadata store for tracking CodeChunk metadata alongside embeddings
ChunkStorewith CRUD operations (get, insert, delete) and JSON persistence- Project indexer integrating chunking, embedding, and storage pipeline
ProjectIndexer::index_project()for full project indexing with .gitignore respectProjectIndexer::reindex_file()for diff-based file re-indexing- Stable project hashing for consistent index storage at
~/.idep/index/<project-hash>/ - Naive line-based chunking with 512-char chunks and 5-line overlap
- Comprehensive error handling with graceful failure recovery during indexing
- Performance benchmark for 50k LOC projects with extrapolation estimates
Fixed
- Critical data consistency issues in reindexing by implementing VectorStore::delete()
- Path normalization bugs using canonicalize() for reliable file comparison
- Unbounded chunk size vulnerability for lines longer than 512 characters
- Index directory validation with proper path canonicalization and directory checks
- Load index consistency with validation for file existence and count matching
- Embedding pipeline resilience to skip failed files instead of crashing entire indexing
- Chunk overlap calculation bug preventing infinite loops in edge cases
- VectorStore ID type consistency unified to u64 across all operations
Performance
- Indexing rate: 72.4 LOC/sec (embedding-limited)
- Search performance: 568ms for semantic similarity queries
- Estimated 50k LOC indexing time: ~11.5 minutes
- Memory efficiency: JSON-based persistence with minimal overhead
- Scalability: Linear performance characteristics suitable for large codebases
Testing
- 17 comprehensive tests covering all major functionality
- Round-trip persistence tests for VectorStore and ChunkStore
- Project indexing tests with .gitignore validation and reindexing
- Performance benchmark with extrapolation to 50k LOC
- Error handling tests for edge cases and failure scenarios
- All tests passing with no regressions
Changed
- Workspace version bumped to 0.0.8
- Made
EmbedPipeline.embedderpublic for benchmark access - Added serde derives to
CodeChunkandChunkKindfor persistence - Enhanced error messages with detailed context and path information
[v0.0.7] — 2026-03-22
Added
- Local embeddings pipeline with fastembed v5 and AllMiniLML6V2 model
Embedderstruct with automatic model download and caching to~/.idep/models/Embedder::embed_batch()method with 384-dimension assertion for AllMiniLML6V2EmbedPipelinefor batch processing with configurable batch size (default 32)EmbeddedChunkstruct combining CodeChunk with Vec embedding- Progress callbacks for large batch embedding operations via
run_with_progress() - Comprehensive test suite:
- Unit test: embed batch of 10 strings, verify 384-dimension shape
- Benchmark: time to embed 100 chunks of ~200 tokens each
- Network independence test: verifies no outbound network calls after initial download
- Pipeline tests: verifies one embedding per chunk, custom batch sizes, progress callbacks
- Model cache exclusion from git via .gitignore (
.fastembed_cache/,*.onnx,*.lock) - Internal workspace dependencies for cross-crate integration
Changed
- Added
PartialEqtoChunkKindfor testing pipeline functionality - Workspace version bumped to 0.0.7
- All 62 tests passing across all crates
[v0.0.6] — 2026-03-19
Added
- Tree-sitter AST chunking for Rust, TypeScript, and Python with labeled spans and names
AstChunkerandChunktypes, integrated into indexer with AST-first chunking- TypeScript/Python chunk extraction tests (functions, classes, interfaces, type aliases)
- Oversized chunk splitting with default max size (512 chars)
Fixed
- Graceful fallback to naive line chunking for unsupported languages or parse failures
- Deterministic chunk naming propagation into CodeChunk
Changed
- Indexer now uses AST chunking by default, with configurable fallback chunk size
[v0.0.5] — 2026-03-19
Added
- LSP diagnostics:
textDocument/publishDiagnosticshandling and per-document diagnostic storage with retrieval API - Hover support:
textDocument/hoverrequest builder, response parsing, and plain-text extraction - Goto definition:
textDocument/definitionbuilder and normalizedLocationlist fromLocation/LocationLink - WSL URI normalization applied consistently for all textDocument requests and diagnostics storage
- Integration tests for Rust Analyzer: completions, hover, goto-definition, and diagnostics
Fixed
- Normalized diagnostic URI lookups to avoid client/server URI format mismatches (WSL path forms)
- Cleared stale diagnostics on
didCloseand added regression tests - Added backend timeout guard for integration notification polling to avoid indefinite hangs
Changed
DocumentManagernow routes a...
v0.1.0 — Terminal UI Editor
[v0.1.0] — 2026-04-17
Added
- Terminal UI Editor (
idep-tui) — fully functional terminal-based text editor - Normal mode navigation:
h/j/k/l(arrows),w/b(word movement),0/$(line bounds),gg/G(file bounds) - Line editing:
dddelete line,u/Ctrl+rundo/redo with history - Insert mode: character insertion,
Backspace,Enter,Ctrl+ssave - Command mode:
:wsave,:qquit,:wqsave+quit,:q!force quit - Buffer undo/redo history in
idep-core::Buffer— configurable depth (default 100) - Status bar showing cursor position, mode, filename, and status messages
- Mouse support: scroll and click-to-position cursor
- Signal handling: graceful
Ctrl+Cshutdown - WSL2 platform verification — Windows Terminal 1.18+ compatibility documented
Changed
idep-core::Bufferis now single source of truth for all text operations- Optimized
delete_line()to use ropey API directly (eliminates redundant allocations)
Testing
- 10 new undo/redo tests for Buffer history functionality
- WSL2 integration tests for terminal rendering and mouse support
- All 28 idep-core tests passing
Fixed
- Status message persistence — now clears on keypress
- Empty command handling —
:Enterno longer shows "unknown command" - Clippy warnings for collapsible match arms and unnecessary sort_by
See CHANGELOG.md for full details.
v0.0.9
[v0.0.9] — 2026-04-05
Added
- RAG Context Engine for intelligent codebase context gathering
ContextEnginestruct with query, workspace root, and cursor position supportContextEngine::gather()method combining multiple context sources:- Current file content (always included)
- AST subtree around cursor using Tree-sitter
- Top-k similar chunks from vector index
- Recent edit history (last N saves)
- Context serialization to prompt-friendly text blocks
- Token budget manager with configurable max context tokens (default 4096)
- Priority-based context truncation: cursor context > similar chunks > history
- Chat with RAG integration via
ChatSession::send_with_context() - Chat history export with
ChatSession::export()JSON serialization - Anthropic native message format replacing legacy prompt building
- Context window management with intelligent history truncation
Fixed
- Message format compatibility for Anthropic Claude API
- Context injection timing to ensure proper prompt construction
- Token counting accuracy for context budget management
- Priority truncation logic to preserve most relevant context
- AST subtree extraction for precise cursor context
Testing
- 4 new integration tests for RAG context functionality
- 3 new context engine tests covering creation and serialization
- 4 new chat format tests for native message building
- Context priority truncation tests verifying budget management
- RAG function reference tests ensuring accurate codebase responses
- All 27 idep-ai tests passing with comprehensive coverage
Performance
- Context gathering: <100ms for typical project queries
- Token budget management: O(n) truncation with priority ordering
- RAG response quality: Demonstrably references correct codebase chunks
v0.0.8
Added
- Vector store with similarity search using brute-force cosine similarity
VectorStorestruct with 384-dimension embedding storage and ID mappingVectorStore::add()for validated embedding insertion with auto-incrementing IDsVectorStore::find_similar()for top-k semantic similarity search with cosine scoringScoredChunkstruct combining chunk ID with similarity score- Persistent index storage with JSON serialization for vectors and ID mapping
VectorStore::save()andVectorStore::load()for disk persistence and recovery- Chunk metadata store for tracking CodeChunk metadata alongside embeddings
ChunkStorewith CRUD operations (get, insert, delete) and JSON persistence- Project indexer integrating chunking, embedding, and storage pipeline
ProjectIndexer::index_project()for full project indexing with .gitignore respectProjectIndexer::reindex_file()for diff-based file re-indexing- Stable project hashing for consistent index storage at
~/.idep/index/<project-hash>/ - Naive line-based chunking with 512-char chunks and 5-line overlap
- Comprehensive error handling with graceful failure recovery during indexing
- Performance benchmark for 50k LOC projects with extrapolation estimates
Fixed
- Critical data consistency issues in reindexing by implementing VectorStore::delete()
- Path normalization bugs using canonicalize() for reliable file comparison
- Unbounded chunk size vulnerability for lines longer than 512 characters
- Index directory validation with proper path canonicalization and directory checks
- Load index consistency with validation for file existence and count matching
- Embedding pipeline resilience to skip failed files instead of crashing entire indexing
- Chunk overlap calculation bug preventing infinite loops in edge cases
- VectorStore ID type consistency unified to u64 across all operations
Performance
- Indexing rate: 72.4 LOC/sec (embedding-limited)
- Search performance: 568ms for semantic similarity queries
- Estimated 50k LOC indexing time: ~11.5 minutes
- Memory efficiency: JSON-based persistence with minimal overhead
- Scalability: Linear performance characteristics suitable for large codebases
Testing
- 17 comprehensive tests covering all major functionality
- Round-trip persistence tests for VectorStore and ChunkStore
- Project indexing tests with .gitignore validation and reindexing
- Performance benchmark with extrapolation to 50k LOC
- Error handling tests for edge cases and failure scenarios
- All tests passing with no regressions
Changed
- Workspace version bumped to 0.0.8
- Made
EmbedPipeline.embedderpublic for benchmark access - Added serde derives to
CodeChunkandChunkKindfor persistence - Enhanced error messages with detailed context and path information
v0.0.7
Added
- Local embeddings pipeline with fastembed v5 and AllMiniLML6V2 model
Embedderstruct with automatic model download and caching to~/.idep/models/Embedder::embed_batch()method with 384-dimension assertion for AllMiniLML6V2EmbedPipelinefor batch processing with configurable batch size (default 32)EmbeddedChunkstruct combining CodeChunk with Vec embedding- Progress callbacks for large batch embedding operations via
run_with_progress() - Comprehensive test suite:
- Unit test: embed batch of 10 strings, verify 384-dimension shape
- Benchmark: time to embed 100 chunks of ~200 tokens each
- Network independence test: verifies no outbound network calls after initial download
- Pipeline tests: verifies one embedding per chunk, custom batch sizes, progress callbacks
- Model cache exclusion from git via .gitignore (
.fastembed_cache/,*.onnx,*.lock) - Internal workspace dependencies for cross-crate integration
Changed
- Added
PartialEqtoChunkKindfor testing pipeline functionality - Workspace version bumped to 0.0.7
- All 62 tests passing across all crates
v0.0.6
Added
- Tree-sitter AST chunking for Rust, TypeScript, and Python with labeled spans and names
AstChunkerandChunktypes, integrated into indexer with AST-first chunking- TypeScript/Python chunk extraction tests (functions, classes, interfaces, type aliases)
- Oversized chunk splitting with default max size (512 chars)
Fixed
- Graceful fallback to naive line chunking for unsupported languages or parse failures
- Deterministic chunk naming propagation into CodeChunk
Changed
- Indexer now uses AST chunking by default, with configurable fallback chunk size
v0.0.5
Added
- LSP diagnostics:
textDocument/publishDiagnosticshandling and per-document diagnostic storage with retrieval API - Hover support:
textDocument/hoverrequest builder, response parsing, and plain-text extraction - Goto definition:
textDocument/definitionbuilder and normalizedLocationlist fromLocation/LocationLink - WSL URI normalization applied consistently for all textDocument requests and diagnostics storage
- Integration tests for Rust Analyzer: completions, hover, goto-definition, and diagnostics
Fixed
- Normalized diagnostic URI lookups to avoid client/server URI format mismatches (WSL path forms)
- Cleared stale diagnostics on
didCloseand added regression tests - Added backend timeout guard for integration notification polling to avoid indefinite hangs
Changed
DocumentManagernow routes all provider URIs throughto_server_uri()before sending and queryingLspClienthover text helper returns plain text forMarkupContentandMarkedStringvariants- Completed all v0.0.5 TODO milestones in
TODO.md
v0.0.4
Added
- LSP document synchronization:
didOpen,didChange,didSave,didClosenotifications - LSP completions:
textDocument/completionrequest builder with full round-trip support CompletionParamsconstruction with URI, position, and context- Completion response parsing for
CompletionListandCompletionItem[] Buffer::apply_completion()withtextEditrange handling (delete range before insert)Buffer::apply_text_edit()for proper LSP range replacement- Completion ranking: sort by
sort_text(server intent), then label length, deterministic deduplication viaBTreeMap completion.rsmodule for bridging LSP results to buffer- rust-analyzer integration test for real completion requests
- Document sync test with Python mock server (gated by python3 availability)
Fixed
- textEdit range bug: Completions now properly delete the specified range before inserting, preventing doubled text (e.g., "fn fo" + "fn foo" → "fn foo")
- Dead code shadow in
update_cursor(removed variable re-declaration) - Cursor positioning: clamp to last character index (line_len - 1), accounting for trailing newlines
Changed
- Moved
rank_completionsfromLspClienttocompletion.rsmodule (better organization) - Completion ranking now respects
sort_textfield per LSP spec - Updated Claude workflow to use
claude-code-action@v1with custom prompt and model settings - Expanded
CLAUDE.mdwith full SDLC coverage, SemVer guidance, and deployment context
v0.0.3 — LSP Client Lifecycle
Highlights
- LSP client lifecycle: spawn, shutdown (graceful + force-kill timeout), restart with backoff, stderr capture.
- JSON-RPC transport over stdio: Content-Length framing, pending response tracking, notification broadcast; round-trip and malformed-message tests.
- Initialize handshake helper: client capabilities, stored InitializeResult; rust-analyzer integration test gated by RUN_RA_INT=1.
- WSL2 path handling: Windows ↔ /mnt/ URI normalization, round-trip tests; rust-analyzer path integration scaffold gated by RUN_WSL_RA_TEST=1.
- CI: installs rust-analyzer component; initialize→shutdown sequence test.
Technical notes
- rust-analyzer integration test gate: set RUN_RA_INT=1.
- WSL integration test gate: set RUN_WSL_RA_TEST=1 (requires /mnt/c and rust-analyzer).