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.

Files changed (121) hide show
  1. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/PKG-INFO +144 -55
  2. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/README.md +140 -48
  3. cicada_mcp-0.2.0/cicada/ascii_art.py +60 -0
  4. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/clean.py +195 -60
  5. cicada_mcp-0.2.0/cicada/cli.py +757 -0
  6. cicada_mcp-0.2.0/cicada/colors.py +27 -0
  7. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/command_logger.py +14 -16
  8. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/dead_code_analyzer.py +12 -19
  9. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/extractors/base.py +3 -3
  10. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/extractors/call.py +11 -15
  11. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/extractors/dependency.py +39 -51
  12. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/extractors/doc.py +8 -9
  13. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/extractors/function.py +12 -24
  14. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/extractors/module.py +11 -15
  15. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/extractors/spec.py +8 -12
  16. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/find_dead_code.py +15 -39
  17. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/formatter.py +37 -91
  18. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/git_helper.py +22 -34
  19. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/indexer.py +165 -132
  20. cicada_mcp-0.2.0/cicada/interactive_setup.py +490 -0
  21. cicada_mcp-0.2.0/cicada/keybert_extractor.py +286 -0
  22. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/keyword_search.py +22 -30
  23. cicada_mcp-0.2.0/cicada/keyword_test.py +127 -0
  24. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/lightweight_keyword_extractor.py +5 -13
  25. cicada_mcp-0.2.0/cicada/mcp_entry.py +683 -0
  26. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/mcp_server.py +110 -232
  27. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/parser.py +9 -9
  28. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/pr_finder.py +15 -19
  29. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/pr_indexer/cli.py +4 -9
  30. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/pr_indexer/github_api_client.py +22 -37
  31. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/pr_indexer/indexer.py +17 -29
  32. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/pr_indexer/line_mapper.py +8 -12
  33. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/pr_indexer/pr_index_builder.py +22 -34
  34. cicada_mcp-0.2.0/cicada/setup.py +455 -0
  35. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/utils/__init__.py +9 -9
  36. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/utils/call_site_formatter.py +4 -6
  37. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/utils/function_grouper.py +4 -4
  38. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/utils/hash_utils.py +12 -15
  39. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/utils/index_utils.py +15 -15
  40. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/utils/path_utils.py +24 -29
  41. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/utils/signature_builder.py +3 -3
  42. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/utils/subprocess_runner.py +17 -19
  43. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/utils/text_utils.py +1 -2
  44. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/version_check.py +2 -5
  45. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada_mcp.egg-info/PKG-INFO +144 -55
  46. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada_mcp.egg-info/SOURCES.txt +15 -7
  47. cicada_mcp-0.2.0/cicada_mcp.egg-info/entry_points.txt +4 -0
  48. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada_mcp.egg-info/requires.txt +3 -7
  49. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/pyproject.toml +64 -76
  50. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_acceptance.py +3 -10
  51. cicada_mcp-0.2.0/tests/test_ascii_art.py +281 -0
  52. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_call_sites.py +22 -7
  53. cicada_mcp-0.2.0/tests/test_clean.py +742 -0
  54. cicada_mcp-0.2.0/tests/test_cli.py +719 -0
  55. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_command_logger.py +4 -4
  56. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_dead_code_analyzer.py +2 -3
  57. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_e2e.py +3 -3
  58. cicada_mcp-0.2.0/tests/test_extractors_base.py +538 -0
  59. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_find_dead_code.py +30 -49
  60. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_formatter.py +40 -61
  61. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_git_extended_history.py +4 -4
  62. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_git_helper.py +88 -5
  63. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_github_api_client.py +23 -52
  64. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_hash_utils.py +56 -3
  65. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_index_utils.py +7 -5
  66. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_indexer_comprehensive.py +276 -130
  67. cicada_mcp-0.2.0/tests/test_interactive_setup.py +1457 -0
  68. cicada_mcp-0.2.0/tests/test_keybert_extractor.py +585 -0
  69. cicada_mcp-0.2.0/tests/test_keyword_search.py +475 -0
  70. cicada_mcp-0.2.0/tests/test_lightweight_keyword_extractor.py +400 -0
  71. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_line_mapper.py +5 -8
  72. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_mcp_e2e.py +6 -17
  73. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_mcp_git_integration.py +6 -12
  74. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_mcp_logging_integration.py +8 -10
  75. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_mcp_pr_tools.py +1 -1
  76. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_mcp_server_core.py +7 -17
  77. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_mcp_server_formatting.py +13 -18
  78. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_mcp_server_pr_history.py +24 -29
  79. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_module_usage_categories.py +3 -7
  80. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_multi_editor_setup.py +18 -42
  81. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_parser_comprehensive.py +3 -4
  82. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_path_utils.py +7 -5
  83. cicada_mcp-0.2.0/tests/test_pr_finder.py +538 -0
  84. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_pr_index_builder.py +5 -7
  85. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_pr_indexer_unit.py +9 -20
  86. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_search_function.py +22 -7
  87. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_server_cli.py +1 -3
  88. cicada_mcp-0.2.0/tests/test_setup.py +1093 -0
  89. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_signal_handling.py +5 -4
  90. cicada_mcp-0.2.0/tests/test_signature_builder.py +220 -0
  91. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_storage.py +6 -5
  92. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_subprocess_runner.py +7 -7
  93. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_test_files_filter.py +24 -3
  94. cicada_mcp-0.2.0/tests/test_text_utils.py +153 -0
  95. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_version_check.py +11 -21
  96. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_with_aliases.py +6 -3
  97. cicada_mcp-0.1.5/cicada/install.py +0 -741
  98. cicada_mcp-0.1.5/cicada/setup.py +0 -346
  99. cicada_mcp-0.1.5/cicada_mcp.egg-info/entry_points.txt +0 -9
  100. cicada_mcp-0.1.5/tests/test_claude_md_update.py +0 -103
  101. cicada_mcp-0.1.5/tests/test_clean.py +0 -403
  102. cicada_mcp-0.1.5/tests/test_install_comprehensive.py +0 -651
  103. cicada_mcp-0.1.5/tests/test_install_detection.py +0 -122
  104. cicada_mcp-0.1.5/tests/test_install_summary.py +0 -239
  105. cicada_mcp-0.1.5/tests/test_intelligent_mcp_config.py +0 -106
  106. cicada_mcp-0.1.5/tests/test_keyword_search.py +0 -1071
  107. cicada_mcp-0.1.5/tests/test_pr_finder.py +0 -98
  108. cicada_mcp-0.1.5/tests/test_setup.py +0 -451
  109. cicada_mcp-0.1.5/tests/test_stdout_redirect.py +0 -77
  110. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/LICENSE +0 -0
  111. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/__init__.py +0 -0
  112. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/extractors/__init__.py +6 -6
  113. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/mcp_tools.py +0 -0
  114. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/pr_indexer/__init__.py +3 -3
  115. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada/utils/storage.py +0 -0
  116. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada_mcp.egg-info/dependency_links.txt +0 -0
  117. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/cicada_mcp.egg-info/top_level.txt +0 -0
  118. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/setup.cfg +0 -0
  119. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_gitignore_integration.py +0 -0
  120. {cicada_mcp-0.1.5 → cicada_mcp-0.2.0}/tests/test_parser.py +0 -0
  121. {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.1.5
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
- Provides-Extra: dev
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
  [![Elixir](https://img.shields.io/badge/Elixir-Support-purple.svg)](https://elixir-lang.org/)
61
58
  [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](http://makeapullrequest.com)
62
59
 
63
- [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=cicada&config=eyJjb21tYW5kIjoidXZ4IC0tZnJvbSBnaXQraHR0cHM6Ly9naXRodWIuY29tL3dlbmRlL2NpY2FkYS5naXRAbGF0ZXN0IGNpY2FkYS1zZXJ2ZXIgLiJ9)
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
+ [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](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 git+https://github.com/wende/cicada.git@latest
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-index` - Re-index code with custom options (medium/large spaCy models)
143
- - `cicada-index-pr` - Index pull requests for PR attribution
144
- - `cicada-install` - Legacy setup (creates `.cicada/` in repo)
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 git+https://github.com/wende/cicada.git@latest cicada claude
225
+ uvx --from cicada-mcp cicada claude
155
226
 
156
227
  # For Cursor
157
- uvx --from git+https://github.com/wende/cicada.git@latest cicada cursor
228
+ uvx --from cicada-mcp cicada cursor
158
229
 
159
230
  # For VS Code
160
- uvx --from git+https://github.com/wende/cicada.git@latest cicada vs
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-index`, `cicada-index-pr`)
166
- - ✅ Fine-tuned keyword extraction with medium/large spaCy models
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
- [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=cicada&config=eyJjb21tYW5kIjoidXZ4IC0tZnJvbSBnaXQraHR0cHM6Ly9naXRodWIuY29tL3dlbmRlL2NpY2FkYS5naXRAbGF0ZXN0IGNpY2FkYS1zZXJ2ZXIgLiJ9)
248
+ [![Install MCP Server](https://cursor.com/deeplink/mcp-install-dark.svg)](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 --from git+https://github.com/wende/cicada.git@latest cicada-mcp ./path/to/your/codebase
254
+ claude mcp add cicada -- uvx cicada-mcp ./path/to/your/codebase
184
255
 
185
256
  # Option 2: Using setup script
186
- uvx --from git+https://github.com/wende/cicada.git@latest cicada claude
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 git+https://github.com/wende/cicada.git@latest cicada-index .
264
+ uvx --from cicada-mcp cicada-index .
194
265
 
195
266
  # Generate GitHub PR lookup database
196
- uvx --from git+https://github.com/wende/cicada.git@latest cicada-index-pr .
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-index-pr .
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 git+https://github.com/wende/cicada.git@latest cicada claude
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-index-pr .
363
+ cicada index-pr .
285
364
 
286
365
  # Or with uvx
287
- uvx --from git+https://github.com/wende/cicada.git@latest cicada-index-pr .
366
+ uvx --from cicada-mcp cicada-index-pr .
288
367
  ```
289
368
 
290
- ### Legacy Installation
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 `--extract-keywords`
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-index`** - Index Elixir codebase
466
+ **`cicada index`** - Index Elixir codebase
394
467
  ```bash
395
- cicada-index # Index current directory
396
- cicada-index --output .cicada/index.json
397
- cicada-index --extract-keywords # Include NLP keyword extraction
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-index-pr`** - Index GitHub pull requests
477
+ **`cicada index-pr`** - Index GitHub pull requests
405
478
  ```bash
406
- cicada-index-pr . # Index PRs for current repo
407
- cicada-index-pr . --clean # Full rebuild from scratch
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-find-dead-code`** - Find unused functions (CLI version)
489
+ **`cicada find-dead-code`** - Find unused functions (CLI version)
417
490
  ```bash
418
- cicada-find-dead-code # Show high confidence only
419
- cicada-find-dead-code --min-confidence low # Show all candidates
420
- cicada-find-dead-code --format json # JSON output
421
- cicada-find-dead-code --index path/to/index.json
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) - Semantic search across documentation with wildcard support
536
+ - **NLP Keyword search** (EXPERIMENTAL) - Basic semantic search across documentation
448
537
 
449
- ### v0.2 (Potential Future Enhancements)
450
- - Incremental code re-indexing
538
+ ### v0.3 (Potential Future Enhancements)
451
539
  - Enhanced keyword search with BM25 ranking
452
- - RAG with KeyBERT option (??)
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-index /path/to/project
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-index-pr .
684
+ cicada index-pr .
596
685
 
597
686
  # Clean rebuild (re-index everything from scratch)
598
- cicada-index-pr . --clean
687
+ cicada index-pr . --clean
599
688
  ```
600
689
 
601
690
  **Common issues:**
602
- - "No PR index found" → Run `cicada-index-pr .`
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