Skip to content

Releases: idep-editor/idep

v0.1.2 - LSP Diagnostics in TUI

28 Apr 04:30
59b8066

Choose a tag to compare

[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)
    • didOpen notification on file load, didChange (debounced 500ms) on edit, didSave on :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 didChange after didSave
  • Code review issues: runtime reuse, error propagation, stale timer handling

v0.1.1 - Syntax Highlighting

21 Apr 06:29
636e01e

Choose a tag to compare

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: dd delete line, u/Ctrl+r undo/redo with history
  • Insert mode: character insertion, Backspace, Enter, Ctrl+s save
  • Command mode: :w save, :q quit, :wq save+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+C shutdown
  • WSL2 platform verification — Windows Terminal 1.18+ compatibility documented

Changed

  • idep-core::Buffer is 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 — :Enter no 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
  • ContextEngine struct with query, workspace root, and cursor position support
  • ContextEngine::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
  • VectorStore struct with 384-dimension embedding storage and ID mapping
  • VectorStore::add() for validated embedding insertion with auto-incrementing IDs
  • VectorStore::find_similar() for top-k semantic similarity search with cosine scoring
  • ScoredChunk struct combining chunk ID with similarity score
  • Persistent index storage with JSON serialization for vectors and ID mapping
  • VectorStore::save() and VectorStore::load() for disk persistence and recovery
  • Chunk metadata store for tracking CodeChunk metadata alongside embeddings
  • ChunkStore with 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 respect
  • ProjectIndexer::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.embedder public for benchmark access
  • Added serde derives to CodeChunk and ChunkKind for 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
  • Embedder struct with automatic model download and caching to ~/.idep/models/
  • Embedder::embed_batch() method with 384-dimension assertion for AllMiniLML6V2
  • EmbedPipeline for batch processing with configurable batch size (default 32)
  • EmbeddedChunk struct 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 PartialEq to ChunkKind for 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
  • AstChunker and Chunk types, 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/publishDiagnostics handling and per-document diagnostic storage with retrieval API
  • Hover support: textDocument/hover request builder, response parsing, and plain-text extraction
  • Goto definition: textDocument/definition builder and normalized Location list from Location / 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 didClose and added regression tests
  • Added backend timeout guard for integration notification polling to avoid indefinite hangs

Changed

  • DocumentManager now routes a...
Read more

v0.1.0 — Terminal UI Editor

17 Apr 14:45
4de83b8

Choose a tag to compare

[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: dd delete line, u/Ctrl+r undo/redo with history
  • Insert mode: character insertion, Backspace, Enter, Ctrl+s save
  • Command mode: :w save, :q quit, :wq save+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+C shutdown
  • WSL2 platform verification — Windows Terminal 1.18+ compatibility documented

Changed

  • idep-core::Buffer is 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 — :Enter no longer shows "unknown command"
  • Clippy warnings for collapsible match arms and unnecessary sort_by

See CHANGELOG.md for full details.

v0.0.9

05 Apr 14:16

Choose a tag to compare

[v0.0.9] — 2026-04-05

Added

  • RAG Context Engine for intelligent codebase context gathering
  • ContextEngine struct with query, workspace root, and cursor position support
  • ContextEngine::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

26 Mar 05:33

Choose a tag to compare

Added

  • Vector store with similarity search using brute-force cosine similarity
  • VectorStore struct with 384-dimension embedding storage and ID mapping
  • VectorStore::add() for validated embedding insertion with auto-incrementing IDs
  • VectorStore::find_similar() for top-k semantic similarity search with cosine scoring
  • ScoredChunk struct combining chunk ID with similarity score
  • Persistent index storage with JSON serialization for vectors and ID mapping
  • VectorStore::save() and VectorStore::load() for disk persistence and recovery
  • Chunk metadata store for tracking CodeChunk metadata alongside embeddings
  • ChunkStore with 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 respect
  • ProjectIndexer::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.embedder public for benchmark access
  • Added serde derives to CodeChunk and ChunkKind for persistence
  • Enhanced error messages with detailed context and path information

v0.0.7

22 Mar 03:40

Choose a tag to compare

Added

  • Local embeddings pipeline with fastembed v5 and AllMiniLML6V2 model
  • Embedder struct with automatic model download and caching to ~/.idep/models/
  • Embedder::embed_batch() method with 384-dimension assertion for AllMiniLML6V2
  • EmbedPipeline for batch processing with configurable batch size (default 32)
  • EmbeddedChunk struct 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 PartialEq to ChunkKind for testing pipeline functionality
  • Workspace version bumped to 0.0.7
  • All 62 tests passing across all crates

v0.0.6

19 Mar 07:21

Choose a tag to compare

Added

  • Tree-sitter AST chunking for Rust, TypeScript, and Python with labeled spans and names
  • AstChunker and Chunk types, 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

19 Mar 02:55

Choose a tag to compare

Added

  • LSP diagnostics: textDocument/publishDiagnostics handling and per-document diagnostic storage with retrieval API
  • Hover support: textDocument/hover request builder, response parsing, and plain-text extraction
  • Goto definition: textDocument/definition builder and normalized Location list from Location / 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 didClose and added regression tests
  • Added backend timeout guard for integration notification polling to avoid indefinite hangs

Changed

  • DocumentManager now routes all provider URIs through to_server_uri() before sending and querying
  • LspClient hover text helper returns plain text for MarkupContent and MarkedString variants
  • Completed all v0.0.5 TODO milestones in TODO.md

v0.0.4

18 Mar 02:02

Choose a tag to compare

Added

  • LSP document synchronization: didOpen, didChange, didSave, didClose notifications
  • LSP completions: textDocument/completion request builder with full round-trip support
  • CompletionParams construction with URI, position, and context
  • Completion response parsing for CompletionList and CompletionItem[]
  • Buffer::apply_completion() with textEdit range 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 via BTreeMap
  • completion.rs module 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_completions from LspClient to completion.rs module (better organization)
  • Completion ranking now respects sort_text field per LSP spec
  • Updated Claude workflow to use claude-code-action@v1 with custom prompt and model settings
  • Expanded CLAUDE.md with full SDLC coverage, SemVer guidance, and deployment context

v0.0.3 — LSP Client Lifecycle

13 Mar 15:33

Choose a tag to compare

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).