cicada-mcp 0.1.5__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cicada-mcp might be problematic. Click here for more details.
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/PKG-INFO +144 -55
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/README.md +140 -48
- cicada_mcp-0.2.0/cicada/ascii_art.py +60 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/clean.py +195 -60
- cicada_mcp-0.2.0/cicada/cli.py +757 -0
- cicada_mcp-0.2.0/cicada/colors.py +27 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/command_logger.py +14 -16
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/dead_code_analyzer.py +12 -19
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/extractors/base.py +3 -3
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/extractors/call.py +11 -15
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/extractors/dependency.py +39 -51
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/extractors/doc.py +8 -9
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/extractors/function.py +12 -24
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/extractors/module.py +11 -15
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/extractors/spec.py +8 -12
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/find_dead_code.py +15 -39
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/formatter.py +37 -91
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/git_helper.py +22 -34
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/indexer.py +165 -132
- cicada_mcp-0.2.0/cicada/interactive_setup.py +490 -0
- cicada_mcp-0.2.0/cicada/keybert_extractor.py +286 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/keyword_search.py +22 -30
- cicada_mcp-0.2.0/cicada/keyword_test.py +127 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/lightweight_keyword_extractor.py +5 -13
- cicada_mcp-0.2.0/cicada/mcp_entry.py +683 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/mcp_server.py +110 -232
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/parser.py +9 -9
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/pr_finder.py +15 -19
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/pr_indexer/cli.py +4 -9
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/pr_indexer/github_api_client.py +22 -37
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/pr_indexer/indexer.py +17 -29
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/pr_indexer/line_mapper.py +8 -12
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/pr_indexer/pr_index_builder.py +22 -34
- cicada_mcp-0.2.0/cicada/setup.py +455 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/utils/__init__.py +9 -9
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/utils/call_site_formatter.py +4 -6
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/utils/function_grouper.py +4 -4
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/utils/hash_utils.py +12 -15
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/utils/index_utils.py +15 -15
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/utils/path_utils.py +24 -29
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/utils/signature_builder.py +3 -3
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/utils/subprocess_runner.py +17 -19
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/utils/text_utils.py +1 -2
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/version_check.py +2 -5
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada_mcp.egg-info/PKG-INFO +144 -55
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada_mcp.egg-info/SOURCES.txt +15 -7
- cicada_mcp-0.2.0/cicada_mcp.egg-info/entry_points.txt +4 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada_mcp.egg-info/requires.txt +3 -7
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/pyproject.toml +64 -76
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_acceptance.py +3 -10
- cicada_mcp-0.2.0/tests/test_ascii_art.py +281 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_call_sites.py +22 -7
- cicada_mcp-0.2.0/tests/test_clean.py +742 -0
- cicada_mcp-0.2.0/tests/test_cli.py +719 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_command_logger.py +4 -4
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_dead_code_analyzer.py +2 -3
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_e2e.py +3 -3
- cicada_mcp-0.2.0/tests/test_extractors_base.py +538 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_find_dead_code.py +30 -49
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_formatter.py +40 -61
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_git_extended_history.py +4 -4
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_git_helper.py +88 -5
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_github_api_client.py +23 -52
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_hash_utils.py +56 -3
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_index_utils.py +7 -5
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_indexer_comprehensive.py +276 -130
- cicada_mcp-0.2.0/tests/test_interactive_setup.py +1457 -0
- cicada_mcp-0.2.0/tests/test_keybert_extractor.py +585 -0
- cicada_mcp-0.2.0/tests/test_keyword_search.py +475 -0
- cicada_mcp-0.2.0/tests/test_lightweight_keyword_extractor.py +400 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_line_mapper.py +5 -8
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_mcp_e2e.py +6 -17
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_mcp_git_integration.py +6 -12
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_mcp_logging_integration.py +8 -10
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_mcp_pr_tools.py +1 -1
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_mcp_server_core.py +7 -17
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_mcp_server_formatting.py +13 -18
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_mcp_server_pr_history.py +24 -29
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_module_usage_categories.py +3 -7
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_multi_editor_setup.py +18 -42
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_parser_comprehensive.py +3 -4
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_path_utils.py +7 -5
- cicada_mcp-0.2.0/tests/test_pr_finder.py +538 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_pr_index_builder.py +5 -7
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_pr_indexer_unit.py +9 -20
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_search_function.py +22 -7
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_server_cli.py +1 -3
- cicada_mcp-0.2.0/tests/test_setup.py +1093 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_signal_handling.py +5 -4
- cicada_mcp-0.2.0/tests/test_signature_builder.py +220 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_storage.py +6 -5
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_subprocess_runner.py +7 -7
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_test_files_filter.py +24 -3
- cicada_mcp-0.2.0/tests/test_text_utils.py +153 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_version_check.py +11 -21
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_with_aliases.py +6 -3
- cicada_mcp-0.1.5/cicada/install.py +0 -741
- cicada_mcp-0.1.5/cicada/setup.py +0 -346
- cicada_mcp-0.1.5/cicada_mcp.egg-info/entry_points.txt +0 -9
- cicada_mcp-0.1.5/tests/test_claude_md_update.py +0 -103
- cicada_mcp-0.1.5/tests/test_clean.py +0 -403
- cicada_mcp-0.1.5/tests/test_install_comprehensive.py +0 -651
- cicada_mcp-0.1.5/tests/test_install_detection.py +0 -122
- cicada_mcp-0.1.5/tests/test_install_summary.py +0 -239
- cicada_mcp-0.1.5/tests/test_intelligent_mcp_config.py +0 -106
- cicada_mcp-0.1.5/tests/test_keyword_search.py +0 -1071
- cicada_mcp-0.1.5/tests/test_pr_finder.py +0 -98
- cicada_mcp-0.1.5/tests/test_setup.py +0 -451
- cicada_mcp-0.1.5/tests/test_stdout_redirect.py +0 -77
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/LICENSE +0 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/__init__.py +0 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/extractors/__init__.py +6 -6
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/mcp_tools.py +0 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/pr_indexer/__init__.py +3 -3
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/utils/storage.py +0 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada_mcp.egg-info/dependency_links.txt +0 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada_mcp.egg-info/top_level.txt +0 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/setup.cfg +0 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_gitignore_integration.py +0 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_parser.py +0 -0
- {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_pr_indexer_integration.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: cicada-mcp
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: An Elixir module search MCP server
|
|
5
5
|
Author-email: wende <wende@hey.com>
|
|
6
6
|
Maintainer-email: wende <wende@hey.com>
|
|
@@ -31,15 +31,12 @@ Requires-Dist: pyyaml>=6.0
|
|
|
31
31
|
Requires-Dist: tree-sitter>=0.20.0
|
|
32
32
|
Requires-Dist: tree-sitter-elixir>=0.1.0
|
|
33
33
|
Requires-Dist: gitpython>=3.1.0
|
|
34
|
+
Requires-Dist: keybert>=0.8.0
|
|
34
35
|
Requires-Dist: lemminflect>=0.2.3
|
|
35
36
|
Requires-Dist: rank-bm25>=0.2.2
|
|
37
|
+
Requires-Dist: simple-term-menu>=1.6.0
|
|
36
38
|
Requires-Dist: tomli>=2.0.0; python_version < "3.11"
|
|
37
|
-
|
|
38
|
-
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
39
|
-
Requires-Dist: pytest-asyncio>=0.24.0; extra == "dev"
|
|
40
|
-
Requires-Dist: pytest-cov>=6.0.0; extra == "dev"
|
|
41
|
-
Requires-Dist: black>=24.0.0; extra == "dev"
|
|
42
|
-
Requires-Dist: pyrefly>=0.1.0; extra == "dev"
|
|
39
|
+
Requires-Dist: gensim>=4.4.0
|
|
43
40
|
Dynamic: license-file
|
|
44
41
|
|
|
45
42
|
<div align="center">
|
|
@@ -60,7 +57,9 @@ Dynamic: license-file
|
|
|
60
57
|
[](https://elixir-lang.org/)
|
|
61
58
|
[](http://makeapullrequest.com)
|
|
62
59
|
|
|
63
|
-
|
|
60
|
+
> 🎉 **Version 0.2.0 Released!** Enhanced AI-powered keyword search with **15-25x faster** incremental indexing. [What's New →](#whats-new-in-v020)
|
|
61
|
+
|
|
62
|
+
[](https://cursor.com/en-US/install-mcp?name=cicada&config=eyJjb21tYW5kIjoidXZ4IGNpY2FkYS1tY3AgLiJ9)
|
|
64
63
|
|
|
65
64
|
[Installation](#installation) •
|
|
66
65
|
[Quick Start](#quick-start) •
|
|
@@ -96,6 +95,78 @@ CICADA is a Model Context Protocol (MCP) server that provides AI coding assistan
|
|
|
96
95
|
</table>
|
|
97
96
|
</div>
|
|
98
97
|
|
|
98
|
+
## What's New in v0.2.0
|
|
99
|
+
|
|
100
|
+
### 🤖 Enhanced AI Keyword Extraction
|
|
101
|
+
|
|
102
|
+
AI-powered semantic search is now production-ready with advanced NLP capabilities:
|
|
103
|
+
|
|
104
|
+
- **BERT Integration**: KeyBERT-based keyword extraction for superior semantic understanding
|
|
105
|
+
- **Configurable Model Tiers**: Choose between `fast`, `regular`, or `large` models to balance speed and accuracy
|
|
106
|
+
- **Smart Wildcard Search**: Use patterns like `create*` or `*_user` to find related concepts
|
|
107
|
+
- **Improved Relevance Scoring**: Better ranking of search results by semantic relevance
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
# Index with enhanced AI keyword extraction
|
|
111
|
+
cicada index --nlp --fast
|
|
112
|
+
|
|
113
|
+
# Search by concept, not just exact names
|
|
114
|
+
# AI will find: create_user, user_creation, new_user_account, etc.
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### ⚡ Incremental Indexing - Lightning Fast Updates
|
|
118
|
+
|
|
119
|
+
Say goodbye to slow reindexing! v0.2.0 introduces intelligent change detection that makes reindexing **15-25x faster**:
|
|
120
|
+
|
|
121
|
+
- **🚀 15-25x Speedup**: Only processes files that actually changed (MD5 hash-based detection)
|
|
122
|
+
- **💾 Interrupt Safety**: Ctrl-C gracefully saves progress - resume anytime without data loss
|
|
123
|
+
- **🎯 Perfect for AI Search**: Keyword extraction drops from 48.7s to 2.1s for typical updates
|
|
124
|
+
- **🔄 Zero Configuration**: Works automatically out of the box
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
# First run: full index + hash computation (~12s for 200 files)
|
|
128
|
+
cicada index --nlp
|
|
129
|
+
|
|
130
|
+
# Subsequent runs: lightning fast incremental updates
|
|
131
|
+
# Changed 5 files? Only 2.1s instead of 48.7s!
|
|
132
|
+
cicada index --nlp
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**Performance Benchmark** (200-file Phoenix app, 5 files changed):
|
|
136
|
+
|
|
137
|
+
| Operation | Before v0.2.0 | v0.2.0 Incremental | Speedup |
|
|
138
|
+
|-----------|---------------|-------------------|---------|
|
|
139
|
+
| Code indexing only | 12.3s | 0.8s | **15.4x faster** |
|
|
140
|
+
| With AI keyword extraction | 48.7s | 2.1s | **23.2x faster** |
|
|
141
|
+
|
|
142
|
+
### 🛡️ Production-Ready Features
|
|
143
|
+
|
|
144
|
+
- **Graceful Interruption**: Press Ctrl-C to cleanly save progress mid-indexing
|
|
145
|
+
- **Resume Capability**: Interrupted? Just run the same command again to continue
|
|
146
|
+
- **Smart Merging**: Automatically merges incremental changes with existing index
|
|
147
|
+
- **Backward Compatible**: Seamlessly upgrades from v0.1.x with no breaking changes
|
|
148
|
+
|
|
149
|
+
### Migration from v0.1.x
|
|
150
|
+
|
|
151
|
+
✅ **Zero Breaking Changes** - v0.2.0 is fully backward compatible
|
|
152
|
+
✅ **Automatic Upgrade** - Just install and run `cicada index` as usual
|
|
153
|
+
✅ **Graceful Fallback** - Missing hashes? Performs full index once automatically
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
# Update to v0.2.0
|
|
157
|
+
uv tool install git+https://github.com/wende/cicada.git@latest --force
|
|
158
|
+
|
|
159
|
+
# Run indexer - automatically enables incremental mode
|
|
160
|
+
cicada index --nlp
|
|
161
|
+
|
|
162
|
+
# Need to switch keyword extraction methods? Use --full for consistency
|
|
163
|
+
cicada index --rag --fast --full
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**[Read the complete incremental indexing guide →](docs/INCREMENTAL_INDEXING.md)**
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
99
170
|
### Key Features
|
|
100
171
|
|
|
101
172
|
- **AST-aware code search** - Find function definitions with full signatures, types, and documentation—no implementation bloat
|
|
@@ -119,7 +190,7 @@ curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
|
119
190
|
|
|
120
191
|
```bash
|
|
121
192
|
# Step 1: Install once
|
|
122
|
-
uv tool install
|
|
193
|
+
uv tool install cicada-mcp
|
|
123
194
|
|
|
124
195
|
# Step 2: Setup in each project (one command per project)
|
|
125
196
|
cd /path/to/your/elixir/project
|
|
@@ -139,9 +210,9 @@ cicada claude # or: cicada cursor, cicada vs
|
|
|
139
210
|
**Available commands after installation:**
|
|
140
211
|
- `cicada [claude|cursor|vs]` - One-command setup per project
|
|
141
212
|
- `cicada-mcp` - MCP server (auto-started by editor)
|
|
142
|
-
- `cicada
|
|
143
|
-
- `cicada
|
|
144
|
-
- `cicada-
|
|
213
|
+
- `cicada index` - Re-index code with custom options (--nlp or --rag)
|
|
214
|
+
- `cicada index-pr` - Index pull requests for PR attribution
|
|
215
|
+
- `cicada find-dead-code` - Find potentially unused functions
|
|
145
216
|
|
|
146
217
|
### Try Before Installing
|
|
147
218
|
|
|
@@ -151,19 +222,19 @@ Want to test Cicada first? Use `uvx` for a quick trial:
|
|
|
151
222
|
cd /path/to/your/elixir/project
|
|
152
223
|
|
|
153
224
|
# For Claude Code
|
|
154
|
-
uvx --from
|
|
225
|
+
uvx --from cicada-mcp cicada claude
|
|
155
226
|
|
|
156
227
|
# For Cursor
|
|
157
|
-
uvx --from
|
|
228
|
+
uvx --from cicada-mcp cicada cursor
|
|
158
229
|
|
|
159
230
|
# For VS Code
|
|
160
|
-
uvx --from
|
|
231
|
+
uvx --from cicada-mcp cicada vs
|
|
161
232
|
```
|
|
162
233
|
|
|
163
234
|
**Note:** `uvx` is perfect for trying Cicada, but **permanent installation is recommended** because:
|
|
164
235
|
- ✅ Faster MCP server startup (no temporary environment creation)
|
|
165
|
-
- ✅ Access to all CLI commands (`cicada
|
|
166
|
-
- ✅ Fine-tuned keyword extraction with
|
|
236
|
+
- ✅ Access to all CLI commands (`cicada index`, `cicada index-pr`)
|
|
237
|
+
- ✅ Fine-tuned keyword extraction with lemminflect or BERT models
|
|
167
238
|
- ✅ PR indexing features
|
|
168
239
|
- ✅ Custom re-indexing options
|
|
169
240
|
|
|
@@ -174,26 +245,26 @@ Once you're convinced, install permanently with `uv tool install` above!
|
|
|
174
245
|
**For Cursor:**
|
|
175
246
|
|
|
176
247
|
Click the install button at the top of this README or visit:
|
|
177
|
-
[](https://cursor.com/en-US/install-mcp?name=cicada&config=
|
|
248
|
+
[](https://cursor.com/en-US/install-mcp?name=cicada&config=eyJjb21tYW5kIjoidXZ4IGNpY2FkYS1tY3AgLiJ9)
|
|
178
249
|
|
|
179
250
|
**For Claude Code:**
|
|
180
251
|
|
|
181
252
|
```bash
|
|
182
253
|
# Option 1: Using claude mcp add command
|
|
183
|
-
claude mcp add cicada -- uvx
|
|
254
|
+
claude mcp add cicada -- uvx cicada-mcp ./path/to/your/codebase
|
|
184
255
|
|
|
185
256
|
# Option 2: Using setup script
|
|
186
|
-
uvx --from
|
|
257
|
+
uvx --from cicada-mcp cicada claude
|
|
187
258
|
```
|
|
188
259
|
|
|
189
260
|
**Then for both editors,** run these commands in your codebase to generate keyword lookup and GitHub PR lookup databases:
|
|
190
261
|
|
|
191
262
|
```bash
|
|
192
263
|
# Generate keyword lookup database
|
|
193
|
-
uvx --from
|
|
264
|
+
uvx --from cicada-mcp cicada-index .
|
|
194
265
|
|
|
195
266
|
# Generate GitHub PR lookup database
|
|
196
|
-
uvx --from
|
|
267
|
+
uvx --from cicada-mcp cicada-index-pr .
|
|
197
268
|
```
|
|
198
269
|
|
|
199
270
|
---
|
|
@@ -213,7 +284,7 @@ After installation, ask your AI coding assistant:
|
|
|
213
284
|
|
|
214
285
|
**For PR features**, first run:
|
|
215
286
|
```bash
|
|
216
|
-
cicada
|
|
287
|
+
cicada index-pr .
|
|
217
288
|
```
|
|
218
289
|
|
|
219
290
|
---
|
|
@@ -258,13 +329,21 @@ your-project/
|
|
|
258
329
|
}
|
|
259
330
|
```
|
|
260
331
|
|
|
332
|
+
✅ Fast startup, no paths, portable!
|
|
333
|
+
|
|
334
|
+
**Migration tip from v0.1.x:** If you have the old Python-based config, run:
|
|
335
|
+
```bash
|
|
336
|
+
uv tool install git+https://github.com/wende/cicada.git@v0.2.0 --force
|
|
337
|
+
cicada claude # Re-run to get optimized config
|
|
338
|
+
```
|
|
339
|
+
|
|
261
340
|
### Re-indexing
|
|
262
341
|
|
|
263
342
|
After code changes, re-run the setup command:
|
|
264
343
|
|
|
265
344
|
```bash
|
|
266
345
|
# Re-index for Claude Code
|
|
267
|
-
uvx --from
|
|
346
|
+
uvx --from cicada-mcp cicada claude
|
|
268
347
|
|
|
269
348
|
# Or if permanently installed
|
|
270
349
|
cicada claude
|
|
@@ -281,19 +360,14 @@ Index pull requests for PR-related features:
|
|
|
281
360
|
|
|
282
361
|
```bash
|
|
283
362
|
# After permanent installation
|
|
284
|
-
cicada
|
|
363
|
+
cicada index-pr .
|
|
285
364
|
|
|
286
365
|
# Or with uvx
|
|
287
|
-
uvx --from
|
|
366
|
+
uvx --from cicada-mcp cicada-index-pr .
|
|
288
367
|
```
|
|
289
368
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
If you prefer the old setup (stores files in `.cicada/` directory in your repo):
|
|
293
|
-
|
|
294
|
-
```bash
|
|
295
|
-
# Only available after permanent installation
|
|
296
|
-
cicada-install
|
|
369
|
+
# Clean rebuild (re-index everything from scratch)
|
|
370
|
+
cicada index-pr . --clean
|
|
297
371
|
```
|
|
298
372
|
|
|
299
373
|
**See also:** [PR Indexing Documentation](docs/PR_INDEXING.md)
|
|
@@ -356,7 +430,7 @@ CICADA provides 9 specialized tools for AI assistants to understand and navigate
|
|
|
356
430
|
- Wildcard pattern matching (`create*`, `*_user`)
|
|
357
431
|
- NLP-extracted keywords from docs
|
|
358
432
|
- Relevance scoring
|
|
359
|
-
- Requires: Index built with `--
|
|
433
|
+
- Requires: Index built with `--nlp` or `--rag`
|
|
360
434
|
|
|
361
435
|
**`find_dead_code`** - Identify potentially unused functions
|
|
362
436
|
- Three confidence levels (high, medium, low)
|
|
@@ -380,7 +454,6 @@ CICADA provides several command-line tools for setup, indexing, and analysis:
|
|
|
380
454
|
**`cicada`** - Initialize CICADA in your project
|
|
381
455
|
```bash
|
|
382
456
|
cicada # Setup in current directory
|
|
383
|
-
cicada --skip-install # Skip dependency installation
|
|
384
457
|
cicada /path/to/other/project # Setup in different directory
|
|
385
458
|
```
|
|
386
459
|
- Generates `.mcp.json` configuration
|
|
@@ -390,21 +463,21 @@ cicada /path/to/other/project # Setup in different directory
|
|
|
390
463
|
|
|
391
464
|
### Indexing Tools
|
|
392
465
|
|
|
393
|
-
**`cicada
|
|
466
|
+
**`cicada index`** - Index Elixir codebase
|
|
394
467
|
```bash
|
|
395
|
-
cicada
|
|
396
|
-
cicada
|
|
397
|
-
cicada
|
|
468
|
+
cicada index # Index current directory
|
|
469
|
+
cicada index --nlp # Use NLP keyword extraction (lemminflect)
|
|
470
|
+
cicada index --rag # Use BERT-based keyword extraction
|
|
398
471
|
```
|
|
399
472
|
- Parses all Elixir files using tree-sitter
|
|
400
473
|
- Extracts modules, functions, and call sites
|
|
401
474
|
- Resolves aliases for accurate tracking
|
|
402
475
|
- Optional keyword extraction for semantic search
|
|
403
476
|
|
|
404
|
-
**`cicada
|
|
477
|
+
**`cicada index-pr`** - Index GitHub pull requests
|
|
405
478
|
```bash
|
|
406
|
-
cicada
|
|
407
|
-
cicada
|
|
479
|
+
cicada index-pr . # Index PRs for current repo
|
|
480
|
+
cicada index-pr . --clean # Full rebuild from scratch
|
|
408
481
|
```
|
|
409
482
|
- Requires GitHub CLI (`gh`) authenticated
|
|
410
483
|
- Indexes PR metadata and review comments
|
|
@@ -413,12 +486,12 @@ cicada-index-pr . --clean # Full rebuild from scratch
|
|
|
413
486
|
|
|
414
487
|
### Analysis Tools
|
|
415
488
|
|
|
416
|
-
**`cicada
|
|
489
|
+
**`cicada find-dead-code`** - Find unused functions (CLI version)
|
|
417
490
|
```bash
|
|
418
|
-
cicada
|
|
419
|
-
cicada
|
|
420
|
-
cicada
|
|
421
|
-
cicada
|
|
491
|
+
cicada find-dead-code # Show high confidence only
|
|
492
|
+
cicada find-dead-code --min-confidence low # Show all candidates
|
|
493
|
+
cicada find-dead-code --format json # JSON output
|
|
494
|
+
cicada find-dead-code --index path/to/index.json
|
|
422
495
|
```
|
|
423
496
|
- Analyzes function usage across codebase
|
|
424
497
|
- Categorizes by confidence level
|
|
@@ -428,6 +501,22 @@ cicada-find-dead-code --index path/to/index.json
|
|
|
428
501
|
|
|
429
502
|
## Roadmap
|
|
430
503
|
|
|
504
|
+
### v0.2.0 (Released - October 2025) ✅
|
|
505
|
+
- **Enhanced AI Keyword Extraction** - Production-ready semantic search
|
|
506
|
+
- BERT integration with KeyBERT for superior keyword extraction
|
|
507
|
+
- Configurable model tiers (fast, regular, large)
|
|
508
|
+
- Wildcard pattern support (`create*`, `*_user`)
|
|
509
|
+
- Improved relevance scoring
|
|
510
|
+
- **Incremental Indexing** - 15-25x faster reindexing
|
|
511
|
+
- MD5-based change detection
|
|
512
|
+
- Processes only modified files
|
|
513
|
+
- Interrupt-safe with graceful Ctrl-C handling
|
|
514
|
+
- Resume capability for interrupted indexes
|
|
515
|
+
- **Production Hardening**
|
|
516
|
+
- Signal handlers (SIGINT, SIGTERM)
|
|
517
|
+
- Partial progress saving
|
|
518
|
+
- Automatic hash storage and management
|
|
519
|
+
|
|
431
520
|
### v0.1.1 (Released - October 2025) ✅
|
|
432
521
|
- Module and function search
|
|
433
522
|
- Call site tracking with alias resolution
|
|
@@ -444,12 +533,12 @@ cicada-find-dead-code --index path/to/index.json
|
|
|
444
533
|
- Intelligent .mcp.json auto-configuration
|
|
445
534
|
- `uv tool install` support
|
|
446
535
|
- **Automatic version update checking** - Notifies users when newer versions are available
|
|
447
|
-
- **NLP Keyword search** (EXPERIMENTAL) -
|
|
536
|
+
- **NLP Keyword search** (EXPERIMENTAL) - Basic semantic search across documentation
|
|
448
537
|
|
|
449
|
-
### v0.
|
|
450
|
-
- Incremental code re-indexing
|
|
538
|
+
### v0.3 (Potential Future Enhancements)
|
|
451
539
|
- Enhanced keyword search with BM25 ranking
|
|
452
|
-
-
|
|
540
|
+
- Directory tree hashing for faster change detection
|
|
541
|
+
- Caching optimizations for large codebases
|
|
453
542
|
|
|
454
543
|
### Long Term (Stretch Goals)
|
|
455
544
|
- Multi-language support (Python, TypeScript)
|
|
@@ -564,7 +653,7 @@ When reporting bugs or requesting features:
|
|
|
564
653
|
|
|
565
654
|
Run the indexer first:
|
|
566
655
|
```bash
|
|
567
|
-
cicada
|
|
656
|
+
cicada index /path/to/project
|
|
568
657
|
```
|
|
569
658
|
|
|
570
659
|
### "Module not found"
|
|
@@ -592,14 +681,14 @@ brew install gh # macOS
|
|
|
592
681
|
gh auth login
|
|
593
682
|
|
|
594
683
|
# Index PRs (first time or after new PRs)
|
|
595
|
-
cicada
|
|
684
|
+
cicada index-pr .
|
|
596
685
|
|
|
597
686
|
# Clean rebuild (re-index everything from scratch)
|
|
598
|
-
cicada
|
|
687
|
+
cicada index-pr . --clean
|
|
599
688
|
```
|
|
600
689
|
|
|
601
690
|
**Common issues:**
|
|
602
|
-
- "No PR index found" → Run `cicada
|
|
691
|
+
- "No PR index found" → Run `cicada index-pr .`
|
|
603
692
|
- "Not a GitHub repository" → Ensure repo has GitHub remote
|
|
604
693
|
- Slow indexing → Incremental updates are used by default
|
|
605
694
|
|