Claude/sync with main - #1
Merged
sergitorres-codere merged 67 commits intoNov 5, 2025
Merged
Conversation
- added CLI commands for plugin operations (add, remove, update, list, verify)
- implemented git2-based repository cloning with shallow fetch and credential handling
- created manifest parsers for marketplace.json and plugin.json with validation
- added lockfile system for tracking installed plugins and file ownership
- implemented file operations with conflict detection and namespace isolation
- created MCP.json merger for plugin server configuration
- added error types with recovery suggestions for all failure modes
- wrote 21 unit tests for manifest parsing, git operations, and file handling
Plugin namespace: .claude/{commands,agents,hooks}/{plugin-name}/
Git operations: shallow clones (depth=1), SSH agent, netrc, env credentials
Checksums: SHA256 for integrity verification
- implemented add_plugin with full marketplace clone and plugin extraction - added remove_plugin with lockfile cleanup and file removal - created copy_plugin_payload for entire plugin directory copying - updated calculate_dest_path to handle nested paths and ./ prefix - added timestamping with chrono for lockfile entries - created integration tests for install, remove, list, and verify flows - added agent documentation for plugin-implementer workflow Tests: 22 unit tests + 5 integration tests passing
- added backup/restore flow for existing plugins before modification - added rollback_install to revert partial installations on error - added ExistingPluginBackup struct to track replaced files and MCP state - modified merger to return McpMergeOutcome for rollback support - added restore_mcp_backup to revert .mcp.json changes - modified fsops copy functions to accept conflict_owner callback - added file conflict detection via owner lookup in lockfile - modified resolver to skip shallow clone for local repositories - added CLI subcommand parsing tests - extended integration tests with error and conflict scenarios
- added remote commit check via ls-remote before cloning repository - skipped .mcp.json writes when merged content matches existing file - renamed added_keys to owned_keys to reflect actual semantics - added test coverage for early exit path and file preservation
- added ResolvedPluginSource enum to track plugin locations (marketplace path vs git) - added LockfilePluginSource to persist source metadata in lockfile - added MarketplacePluginSource enum supporting path and git descriptor formats - added MarketplaceMetadata with pluginRoot for relative path resolution - added pluginRoot metadata support for nested plugin directories - added git source descriptor with url/repo/ref/subdir fields - added github source shorthand (owner/repo) that expands to git URL - added strict mode toggle to allow plugins without plugin.json manifests - added scripts field to PluginManifest for script path declarations - added source field to PluginLockEntry for tracking plugin origin - replaced simple source path with resolved source during prepare_plugin - refactored update_plugin to resolve remote commits based on lockfile source - refactored verification to exclude .mcp.json from integrity checks - added path sanitization and validation for relative plugin sources - added marketplace resolution tests covering pluginRoot, git sources, and strict mode Tests: All passing (16 integration, 14 parser, 3 marketplace resolution)
- added optional file_path field to Symbol struct - populate file_path in get_symbol and get_symbols_by_file - populate file_path in get_symbol_context - use file_path in retrieve_describe when available - updated CompactSymbol deserialization to skip file_path - added with_file_path builder method - updated all test Symbol constructions with file_path: None
…tic search - Add model field to SemanticConfig (AllMiniLML6V2, MultilingualE5Small, ParaphraseMultilingualMiniLML12V2) - Update embedding initialization to use configured model - Document configuration in README - Default to AllMiniLML6V2 for English codebases Enables users to choose embedding models based on their codebase language mix.
Fixes bug where object property functions calling same-named functions
were not tracked in relationship graph.
- Extend context inference to handle arrow functions in object properties
- Update relationship compatibility to allow Constant/Variable as callers
- Add integration test for object property call tracking
Example pattern now tracked:
const actions = {
submitForm: () => submitForm(data) // Now detected
}
- updated dimension mismatch error to show re-index command - added note to config comments about re-indexing requirement
…nships display - extracted symbol_location() method to eliminate duplicate location logic - replaced inline file path formatting with centralized helper in SymbolContext - expanded relationships output to show kind and location for all referenced symbols - added multiline signature formatting with proper indentation - removed debug eprintln statements from semantic search initialization - unified location display to show line ranges (start-end) consistently
- added documentation hub at docs/README.md with section navigation - updated README.md with new documentation link Documentation changes since last release: - docs: reorganize documentation structure for pre-release - refactor(symbol): consolidate location formatting and enhance relationships display - docs(semantic): clarify model switching requires re-indexing - fix(typescript): track calls from object property functions - feat: configurable embedding model support for multilingual semantic search - feat(symbol): add file path field with line number - feat(plugins): add marketplace resolution for external sources - perf(plugins): skip I/O when update detects no changes - chore(plugins): cleanup and tests - feat(plugins): add transactional installs with rollback - feat(plugins): implement plugin install/remove flow - feat(plugins): add plugin management infrastructure for Claude Code Tests passing. Version bumped to 0.5.3 in Cargo.toml.
- changed to if let Some(ref existing) pattern to avoid partial move - allows previous_entry reuse later in function - fixes clippy::unnecessary-unwrap warning in CI
- bumped version from 0.5.26 to 0.6.0 in Cargo.toml - updated CHANGELOG.md with v0.6.0 release notes - added documentation hub at docs/README.md - added logotype header for branding - updated all documentation with navigation footers Plugin Management System: - install, remove, and manage plugins - transactional installs with automatic rollback - smart update detection skips I/O when no changes - marketplace resolution for external sources Documentation Hub: - centralized navigation at docs/README.md - organized sections with cross-references - navigation footers across all pages Symbol Display Enhancements: - file paths with line numbers for navigation - enhanced relationship formatting Fixes: - TypeScript call tracking from object property functions - clippy::unnecessary-unwrap in plugin installation Tests passing. Ready for release.
…pendency detection - introduced ImportBinding model with ImportOrigin enum (Internal, External, Unknown) - added ResolutionScope::populate_imports to load import metadata into contexts - added ResolutionScope::register_import_binding to track resolved import bindings - added ResolutionScope::is_external_import to detect external dependencies - modified LanguageBehavior::build_resolution_context to classify imports via classify_import_origin - changed import resolution to only inject Internal imports with resolved SymbolId into scope - implemented populate_imports, register_import_binding for all language contexts - added import storage methods to DocumentIndex (store_import, get_imports_for_file, delete_imports_for_file, get_all_imports) - added Tantivy schema fields for import persistence (import_file_id, import_path, import_alias, import_is_glob, import_is_type_only) - merged persisted imports (Tantivy) with in-memory imports (BehaviorState) during context building - added symbol_id parameter to CLI retrieve commands (calls, callers, describe) for unambiguous lookups - added symbol_id parameter to MCP tools (get_calls, find_callers, analyze_impact) for unambiguous lookups - modified CLI and MCP handlers to return error listing all symbol_id matches when name is ambiguous - added [symbol_id:N] to all symbol display output (headers, calls, callers relationships) - changed relationship metadata from Option<String> to Option<RelationshipMetadata> with call site locations - changed Symbol.file_path from Option<Box<str>> to Box<str> with default "<unknown>" - added integration test proving external indicatif::ProgressBar no longer resolves to local ProgressBar::new
… queries - Add symbol_id parameter to retrieve commands (calls, callers, describe) - Add symbol_id parameter to MCP tools (get_calls, find_callers, analyze_impact) - Update CLI help text with symbol_id examples - Update documentation with symbol_id workflows - Update plugin scripts to display and accept symbol_id - Update dependency versions (clap 4.5.50, memmap2 0.9.9, indicatif 0.18.1) - Bump version to v0.6.1 for release Enables unambiguous symbol lookup workflow: 1. Search returns [symbol_id:123] 2. Use symbol_id:123 for precise follow-up queries 3. Eliminates disambiguation, saves tokens
- Added CHANGELOG entry for v0.6.1 release - Documents symbol_id parameter support across CLI and MCP tools - Documents import binding system for external dependency detection - Documents plugin script updates for all three plugin versions - Documents dependency updates (clap, memmap2, indicatif, rmcp)
- Added rustup update stable to all CI scripts (quick-check, full-test, auto-fix) - Scripts now sync Rust version with GitHub Actions before running checks - Created CI parity guide at contributing/development/ci-local-remote-parity.md - Added guide reference to contributing/README.md Quick Links - Updated plugin installation docs with marketplace setup commands - Fixed clippy::cloned_ref_to_slice_refs in test_external_import_resolution.rs - Replaced .clone() with std::slice::from_ref() in 4 locations Prevents local-pass/remote-fail scenarios by ensuring identical Rust versions.
…splay - added fallback for using_directive when tree-sitter-c-sharp lacks name field - fallback iterates child nodes for qualified_name or identifier - fixed stats timing by calling stop_timing() before display - fixed symbol count by using self.symbol_count() instead of accumulated count Tested on Humanizer codebase (523 C# files): - relationship resolution improved by +13 (753 → 766) - stats now show accurate timing (10.69s) and symbol count (5,445) Co-authored-by: Sergi Torres <sergio.torres@codere.com> Related: bartolli#57
- enhanced comprehensive.cs with structs, records, delegates, indexers, operators - added file_scoped_namespace.cs for C# 10+ file-scoped namespace syntax - added benchmark csharp command with code generation - generates 500 static classes, 50 classes, 25 interfaces for performance testing - benchmark accepts custom files: codanna benchmark csharp --file path.cs Tested benchmark on generated code: - parses 1,927 symbols in ~18ms - achieves 103,528 symbols/second (10.4x faster than target) Coverage improvement: - C# nodes tested: 108 → 142 (31% increase) - audit coverage: 94% of important node types Co-authored-by: Sergi Torres <sergio.torres@codere.com> Related: bartolli#57
- TypeScript alias test accepts both enhanced and original paths - Tantivy debug test checks for path components instead of exact format - Avoids Windows backslash escaping issues in path assertions - Tests now pass on both Unix and Windows platforms Both tests verified passing on current platform (MacOS). Co-authored-by: Sergi Torres <sergio.torres@codere.com> Related: bartolli#57
- tag-triggered workflow extracts version from Cargo.toml - builds 8 binaries: 4 platforms × 2 variants (full/slim) - full variant includes --all-features for MCP server support - slim variant is minimal CLI only (codanna mcp command included) - generates SHA256/SHA512 checksums for verification - creates dist-manifest.json with download URLs and checksums - manifest enables universal installer script (https://setup.codanna.sh) - publishes draft GitHub releases automatically Platforms: - Linux x64 (GNU) - macOS x64 (Intel) - macOS ARM64 (Apple Silicon) - Windows x64 Workflow stages: 1. info - extracts version from Cargo.toml 2. build - parallel builds all variants 3. upload - creates GitHub release with all artifacts Co-authored-by: Sergi Torres <sergio.torres@codere.com> Related: bartolli#57
- binary release workflow with dual variants - C# import extraction and benchmark improvements - Windows test compatibility fixes - preparation for universal installer (https://setup.codanna.sh)
- added vendored-openssl feature to git2 dependency - resolves cross-compilation failures in GitHub release workflow
- added symbol_id parameter parsing in main.rs command handler - added symbol_id:XXX prefix detection in retrieve_symbol function - added direct lookup via get_symbol() for symbol_id format - updated help text with symbol_id:1771 example - updated error messages to mention symbol_id option
- extracted add_paths_to_settings helper for shared logic between index and add-dir - fixed force flag to trigger fresh index regardless of path source - added path cleanup in remove_paths to sync indexed_paths set - skipped auto-sync when force flag is present to avoid redundant work - added gdscript behavior tests for import extraction and behavior API
Based on contribution by nguyenchiencong with significant improvements: GDScript Foundation: - added GDScript parser with tree-sitter integration - implemented basic behavior and resolution - created audit reports and grammar analysis - added example files and initial tests Enhancements: - integrated StatefulBehavior architecture (+335 lines in behavior.rs) - added sophisticated relative path resolution (./file.gd, ../dir/file.gd) - implemented res:// protocol handling for GDScript modules - enhanced parser symbol extraction - added test suite (+650 lines): - test_behavior_api.rs: class hierarchies, exports, signals - test_import_extraction.rs: import resolution tests - fixed index command force flag and path tracking - extracted add_paths_to_settings helper for shared logic - added path cleanup in remove_paths to sync indexed_paths
- added GDScript language support with parser, behavior, and tests - added symbol_id parameter support to retrieve symbol command - fixed index command force flag to trigger complete re-index - fixed automatic path persistence when CLI paths provided to index - fixed indexed_paths cleanup in remove_paths to maintain tracking state - fixed Windows file URL handling in marketplace resolution tests - updated CHANGELOG.md with release notes
* feat: add relationship tracking for GDScript * fix: run autofix
- changed vec![] to array in method_call test data - marked gdscript semantic search test as ignored to avoid 86MB model download in CI
…racking - created language-architecture.md with design principles and resolution patterns - created language-patterns.md with implementation patterns from TypeScript/Rust - created development README.md as documentation index - updated language-support.md with accurate resolution implementation status - removed outdated parsers_api.md (superseded by new docs) - renamed grammar-node-types.json to node-types.json across all languages - added grammar-versions.lock to track tree-sitter grammar commits and ABI versions - added update-grammar-lock.sh to generate/update lockfile automatically - added check-grammar-updates.sh to detect remote grammar updates - updated setup.sh to copy node-types.json and update lockfile - updated abi15_grammar_audit.rs to use new node-types.json filename - documented grammar version tracking system in tree-sitter README All languages now have custom resolution contexts (no generic fallback). Resolution orders verified: TypeScript (hoisting), Rust (crate), Python (LEGB), Go (package). Lockfile tracks commit hash, timestamp, ABI version, and repo URL for each grammar.
- removed unused from_persistence() method from MCP server - removed IndexPersistence import from MCP module - moved generate_mcp_guidance() to module top - added guidance to MCP tool responses Release v0.6.6
- added symbol_id extraction to find_callers JSON data collection - added symbol_id extraction to get_calls JSON data collection - added symbol_id extraction to analyze_impact JSON data collection - updated error handlers to show symbol_id in messages when applicable - fixed empty impact result identifier to handle symbol_id format - prioritized symbol_id lookup (unambiguous) over name-based lookup Closes bartolli#63
- added profile system workflow overview - added provider management commands (add, remove, list) - added profile management commands (install, update, remove, list, status, sync, verify) - added provider source types table (GitHub, git URL, local path) - added profile workflow example - added profile structure documentation - updated command table with profile command - updated notes section with profile storage locations
- added save/restore pattern to handle_class_declaration - added save/restore pattern to handle_object_declaration - added save/restore pattern to handle_function_declaration - pinned tree-sitter-kotlin to commit 57fb4560 in Cargo.toml - created test_nested_scopes.rs with 3 tests for context tracking Fixes nested scope context loss where methods defined after nested classes would lose parent class context.
- added Kotlin parser with symbol extraction for classes, objects, functions, properties, interfaces - implemented context save/restore pattern in handle_class_declaration, handle_object_declaration, handle_function_declaration - pinned tree-sitter-kotlin to commit 57fb4560 for reproducible builds - created test_nested_scopes.rs with 3 tests for context tracking - fixed nested scope context loss where methods after nested classes would lose parent class context - updated documents to include Kotlin in supported languages list
- added find_uses extraction for JSX component references - mapped symbol names to IDs during extraction phase - changed add_relationships_by_name to accept optional from_id - modified resolve_relationships to skip lookups when from_id exists - added test_jsx_uses.rs for JSX component relationship tests - changed Settings::add_indexed_path to skip children when parent exists - changed Settings::add_indexed_path to replace children when adding parent - added indexed_paths_cache field to Settings for O(1) ancestor checks - changed SimpleIndexer::add_indexed_path to deduplicate descendant paths - added seed_indexer_with_config_paths to CLI for force-rebuild support - changed index command to reuse cached results and print skip messages - disabled release profile optimizations in Cargo.toml for faster dev builds - updated cli-reference.md with idempotent behavior and skip messages
- added progress parameter to sync_with_config for --progress flag support - changed sync state tracking from bool to Option<bool> for tri-state logic (None = metadata unavailable, Some(false) = no changes, Some(true) = changes applied) - added progress bar display for file removal during sync - wrapped DEBUG output in debug flag checks (persistence.rs and simple.rs) - routed sync failures through error handling system with exit codes - added recovery steps for metadata load failures - added SkipReason enum to distinguish file vs directory path skip cases - updated cli-reference.md to document single-file path behavior
sergitorres-codere
pushed a commit
that referenced
this pull request
Nov 5, 2025
Implemented comprehensive type usage tracking for C# parser to enable dependency analysis like "IRepository is used by UserService". Changes: - Added extract_type_uses_recursive() to traverse AST and identify type references - Tracks parameter types in methods and constructors - Tracks return types in methods - Tracks field and property types - Tracks base classes and interface implementations - Tracks generic type arguments (e.g., List<User>) - Filters out primitive types (int, string, bool, etc.) - Added helper methods for extracting types from various C# constructs - Added comprehensive tests for type usage tracking Tracking includes: - Method parameter types: void DoWork(Helper helper) - Return types: Helper GetHelper() - Field/property types: private Helper _helper - Base classes/interfaces: class Foo : IBar - Generic type arguments: List<User>, Dictionary<int, Product> Tests verify: - Basic type usage (fields, parameters, return types) - Generic type tracking with type arguments - Proper filtering of primitive types - Correct context attribution (method/class names, not AST node types) Resolves issue #1 from the Critical Issues list (line 1971-1987).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.