codevault 1.4.1 → 1.6.0

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.
Files changed (211) hide show
  1. package/.env.example +79 -44
  2. package/README.md +115 -343
  3. package/package.json +4 -4
  4. package/dist/chunking/file-grouper.d.ts +0 -39
  5. package/dist/chunking/file-grouper.d.ts.map +0 -1
  6. package/dist/chunking/file-grouper.js +0 -181
  7. package/dist/chunking/file-grouper.js.map +0 -1
  8. package/dist/chunking/semantic-chunker.d.ts +0 -37
  9. package/dist/chunking/semantic-chunker.d.ts.map +0 -1
  10. package/dist/chunking/semantic-chunker.js +0 -172
  11. package/dist/chunking/semantic-chunker.js.map +0 -1
  12. package/dist/chunking/token-counter.d.ts +0 -28
  13. package/dist/chunking/token-counter.d.ts.map +0 -1
  14. package/dist/chunking/token-counter.js +0 -207
  15. package/dist/chunking/token-counter.js.map +0 -1
  16. package/dist/cli/commands/ask-cmd.d.ts +0 -3
  17. package/dist/cli/commands/ask-cmd.d.ts.map +0 -1
  18. package/dist/cli/commands/ask-cmd.js +0 -130
  19. package/dist/cli/commands/ask-cmd.js.map +0 -1
  20. package/dist/cli/commands/config-cmd.d.ts +0 -3
  21. package/dist/cli/commands/config-cmd.d.ts.map +0 -1
  22. package/dist/cli/commands/config-cmd.js +0 -245
  23. package/dist/cli/commands/config-cmd.js.map +0 -1
  24. package/dist/cli/commands/context.d.ts +0 -3
  25. package/dist/cli/commands/context.d.ts.map +0 -1
  26. package/dist/cli/commands/context.js +0 -98
  27. package/dist/cli/commands/context.js.map +0 -1
  28. package/dist/cli/commands/interactive-config.d.ts +0 -2
  29. package/dist/cli/commands/interactive-config.d.ts.map +0 -1
  30. package/dist/cli/commands/interactive-config.js +0 -304
  31. package/dist/cli/commands/interactive-config.js.map +0 -1
  32. package/dist/cli.d.ts +0 -3
  33. package/dist/cli.d.ts.map +0 -1
  34. package/dist/cli.js +0 -398
  35. package/dist/cli.js.map +0 -1
  36. package/dist/codemap/io.d.ts +0 -5
  37. package/dist/codemap/io.d.ts.map +0 -1
  38. package/dist/codemap/io.js +0 -30
  39. package/dist/codemap/io.js.map +0 -1
  40. package/dist/config/apply-env.d.ts +0 -15
  41. package/dist/config/apply-env.d.ts.map +0 -1
  42. package/dist/config/apply-env.js +0 -107
  43. package/dist/config/apply-env.js.map +0 -1
  44. package/dist/config/loader.d.ts +0 -57
  45. package/dist/config/loader.d.ts.map +0 -1
  46. package/dist/config/loader.js +0 -304
  47. package/dist/config/loader.js.map +0 -1
  48. package/dist/config/types.d.ts +0 -48
  49. package/dist/config/types.d.ts.map +0 -1
  50. package/dist/config/types.js +0 -2
  51. package/dist/config/types.js.map +0 -1
  52. package/dist/context/packs.d.ts +0 -33
  53. package/dist/context/packs.d.ts.map +0 -1
  54. package/dist/context/packs.js +0 -180
  55. package/dist/context/packs.js.map +0 -1
  56. package/dist/core/batch-indexer.d.ts +0 -44
  57. package/dist/core/batch-indexer.d.ts.map +0 -1
  58. package/dist/core/batch-indexer.js +0 -161
  59. package/dist/core/batch-indexer.js.map +0 -1
  60. package/dist/core/indexer.d.ts +0 -3
  61. package/dist/core/indexer.d.ts.map +0 -1
  62. package/dist/core/indexer.js +0 -624
  63. package/dist/core/indexer.js.map +0 -1
  64. package/dist/core/metadata.d.ts +0 -19
  65. package/dist/core/metadata.d.ts.map +0 -1
  66. package/dist/core/metadata.js +0 -161
  67. package/dist/core/metadata.js.map +0 -1
  68. package/dist/core/search.d.ts +0 -7
  69. package/dist/core/search.d.ts.map +0 -1
  70. package/dist/core/search.js +0 -542
  71. package/dist/core/search.js.map +0 -1
  72. package/dist/core/symbol-extractor.d.ts +0 -3
  73. package/dist/core/symbol-extractor.d.ts.map +0 -1
  74. package/dist/core/symbol-extractor.js +0 -78
  75. package/dist/core/symbol-extractor.js.map +0 -1
  76. package/dist/core/types.d.ts +0 -104
  77. package/dist/core/types.d.ts.map +0 -1
  78. package/dist/core/types.js +0 -2
  79. package/dist/core/types.js.map +0 -1
  80. package/dist/database/db.d.ts +0 -63
  81. package/dist/database/db.d.ts.map +0 -1
  82. package/dist/database/db.js +0 -205
  83. package/dist/database/db.js.map +0 -1
  84. package/dist/indexer/merkle.d.ts +0 -13
  85. package/dist/indexer/merkle.d.ts.map +0 -1
  86. package/dist/indexer/merkle.js +0 -86
  87. package/dist/indexer/merkle.js.map +0 -1
  88. package/dist/indexer/update.d.ts +0 -19
  89. package/dist/indexer/update.d.ts.map +0 -1
  90. package/dist/indexer/update.js +0 -40
  91. package/dist/indexer/update.js.map +0 -1
  92. package/dist/indexer/watch.d.ts +0 -21
  93. package/dist/indexer/watch.d.ts.map +0 -1
  94. package/dist/indexer/watch.js +0 -222
  95. package/dist/indexer/watch.js.map +0 -1
  96. package/dist/languages/rules.d.ts +0 -11
  97. package/dist/languages/rules.d.ts.map +0 -1
  98. package/dist/languages/rules.js +0 -371
  99. package/dist/languages/rules.js.map +0 -1
  100. package/dist/languages/tree-sitter-loader.d.ts +0 -27
  101. package/dist/languages/tree-sitter-loader.d.ts.map +0 -1
  102. package/dist/languages/tree-sitter-loader.js +0 -76
  103. package/dist/languages/tree-sitter-loader.js.map +0 -1
  104. package/dist/mcp/tools/ask-codebase.d.ts +0 -85
  105. package/dist/mcp/tools/ask-codebase.d.ts.map +0 -1
  106. package/dist/mcp/tools/ask-codebase.js +0 -125
  107. package/dist/mcp/tools/ask-codebase.js.map +0 -1
  108. package/dist/mcp/tools/use-context-pack.d.ts +0 -57
  109. package/dist/mcp/tools/use-context-pack.d.ts.map +0 -1
  110. package/dist/mcp/tools/use-context-pack.js +0 -91
  111. package/dist/mcp/tools/use-context-pack.js.map +0 -1
  112. package/dist/mcp-server.d.ts +0 -3
  113. package/dist/mcp-server.d.ts.map +0 -1
  114. package/dist/mcp-server.js +0 -518
  115. package/dist/mcp-server.js.map +0 -1
  116. package/dist/providers/base.d.ts +0 -39
  117. package/dist/providers/base.d.ts.map +0 -1
  118. package/dist/providers/base.js +0 -199
  119. package/dist/providers/base.js.map +0 -1
  120. package/dist/providers/chat-llm.d.ts +0 -41
  121. package/dist/providers/chat-llm.d.ts.map +0 -1
  122. package/dist/providers/chat-llm.js +0 -155
  123. package/dist/providers/chat-llm.js.map +0 -1
  124. package/dist/providers/index.d.ts +0 -6
  125. package/dist/providers/index.d.ts.map +0 -1
  126. package/dist/providers/index.js +0 -23
  127. package/dist/providers/index.js.map +0 -1
  128. package/dist/providers/ollama.d.ts +0 -13
  129. package/dist/providers/ollama.d.ts.map +0 -1
  130. package/dist/providers/ollama.js +0 -50
  131. package/dist/providers/ollama.js.map +0 -1
  132. package/dist/providers/openai.d.ts +0 -14
  133. package/dist/providers/openai.d.ts.map +0 -1
  134. package/dist/providers/openai.js +0 -122
  135. package/dist/providers/openai.js.map +0 -1
  136. package/dist/providers/token-counter.d.ts +0 -2
  137. package/dist/providers/token-counter.d.ts.map +0 -1
  138. package/dist/providers/token-counter.js +0 -18
  139. package/dist/providers/token-counter.js.map +0 -1
  140. package/dist/ranking/api-reranker.d.ts +0 -18
  141. package/dist/ranking/api-reranker.d.ts.map +0 -1
  142. package/dist/ranking/api-reranker.js +0 -134
  143. package/dist/ranking/api-reranker.js.map +0 -1
  144. package/dist/ranking/symbol-boost.d.ts +0 -15
  145. package/dist/ranking/symbol-boost.d.ts.map +0 -1
  146. package/dist/ranking/symbol-boost.js +0 -154
  147. package/dist/ranking/symbol-boost.js.map +0 -1
  148. package/dist/search/bm25.d.ts +0 -17
  149. package/dist/search/bm25.d.ts.map +0 -1
  150. package/dist/search/bm25.js +0 -56
  151. package/dist/search/bm25.js.map +0 -1
  152. package/dist/search/hybrid.d.ts +0 -21
  153. package/dist/search/hybrid.d.ts.map +0 -1
  154. package/dist/search/hybrid.js +0 -50
  155. package/dist/search/hybrid.js.map +0 -1
  156. package/dist/search/scope.d.ts +0 -5
  157. package/dist/search/scope.d.ts.map +0 -1
  158. package/dist/search/scope.js +0 -107
  159. package/dist/search/scope.js.map +0 -1
  160. package/dist/storage/encrypted-chunks.d.ts +0 -40
  161. package/dist/storage/encrypted-chunks.d.ts.map +0 -1
  162. package/dist/storage/encrypted-chunks.js +0 -237
  163. package/dist/storage/encrypted-chunks.js.map +0 -1
  164. package/dist/symbols/extract.d.ts +0 -15
  165. package/dist/symbols/extract.d.ts.map +0 -1
  166. package/dist/symbols/extract.js +0 -187
  167. package/dist/symbols/extract.js.map +0 -1
  168. package/dist/symbols/graph.d.ts +0 -3
  169. package/dist/symbols/graph.d.ts.map +0 -1
  170. package/dist/symbols/graph.js +0 -89
  171. package/dist/symbols/graph.js.map +0 -1
  172. package/dist/synthesis/markdown-formatter.d.ts +0 -13
  173. package/dist/synthesis/markdown-formatter.d.ts.map +0 -1
  174. package/dist/synthesis/markdown-formatter.js +0 -104
  175. package/dist/synthesis/markdown-formatter.js.map +0 -1
  176. package/dist/synthesis/prompt-builder.d.ts +0 -21
  177. package/dist/synthesis/prompt-builder.d.ts.map +0 -1
  178. package/dist/synthesis/prompt-builder.js +0 -129
  179. package/dist/synthesis/prompt-builder.js.map +0 -1
  180. package/dist/synthesis/synthesizer.d.ts +0 -30
  181. package/dist/synthesis/synthesizer.d.ts.map +0 -1
  182. package/dist/synthesis/synthesizer.js +0 -210
  183. package/dist/synthesis/synthesizer.js.map +0 -1
  184. package/dist/types/ast.d.ts +0 -3
  185. package/dist/types/ast.d.ts.map +0 -1
  186. package/dist/types/ast.js +0 -2
  187. package/dist/types/ast.js.map +0 -1
  188. package/dist/types/codemap.d.ts +0 -58
  189. package/dist/types/codemap.d.ts.map +0 -1
  190. package/dist/types/codemap.js +0 -224
  191. package/dist/types/codemap.js.map +0 -1
  192. package/dist/types/context-pack.d.ts +0 -47
  193. package/dist/types/context-pack.d.ts.map +0 -1
  194. package/dist/types/context-pack.js +0 -44
  195. package/dist/types/context-pack.js.map +0 -1
  196. package/dist/types/search.d.ts +0 -15
  197. package/dist/types/search.d.ts.map +0 -1
  198. package/dist/types/search.js +0 -11
  199. package/dist/types/search.js.map +0 -1
  200. package/dist/utils/cli-ui.d.ts +0 -44
  201. package/dist/utils/cli-ui.d.ts.map +0 -1
  202. package/dist/utils/cli-ui.js +0 -139
  203. package/dist/utils/cli-ui.js.map +0 -1
  204. package/dist/utils/indexer-with-progress.d.ts +0 -10
  205. package/dist/utils/indexer-with-progress.d.ts.map +0 -1
  206. package/dist/utils/indexer-with-progress.js +0 -58
  207. package/dist/utils/indexer-with-progress.js.map +0 -1
  208. package/dist/utils/rate-limiter.d.ts +0 -34
  209. package/dist/utils/rate-limiter.d.ts.map +0 -1
  210. package/dist/utils/rate-limiter.js +0 -179
  211. package/dist/utils/rate-limiter.js.map +0 -1
package/README.md CHANGED
@@ -9,12 +9,13 @@ CodeVault is an intelligent code indexing and search system that enables AI assi
9
9
  - **🔍 Semantic Search**: Find code by meaning, not just keywords using vector embeddings
10
10
  - **🤖 MCP Integration**: Native support for Claude Desktop and other MCP clients
11
11
  - **💬 LLM-Synthesized Answers**: Ask questions in natural language, get markdown responses with code citations
12
+ - **🗣️ Interactive Chat Mode**: Have multi-turn conversations about your codebase with conversation history
12
13
  - **🎯 Symbol-Aware Ranking**: Boost results based on function signatures, parameters, and relationships
13
14
  - **⚡ Hybrid Retrieval**: Combines vector embeddings with BM25 keyword matching via Reciprocal Rank Fusion
14
15
  - **🚀 Batch Processing**: Efficient API usage with configurable batching (50 chunks/batch by default)
15
16
  - **📦 Smart Chunking**: Token-aware semantic code splitting with overlap for optimal context
16
17
  - **🔄 Context Packs**: Save and reuse search scopes for different features/modules
17
- - **🏠 Local-First**: Works with local models (Ollama) or cloud APIs (OpenAI, Nebius)
18
+ - **🏠 Local-First**: Works with local models (Ollama) or cloud APIs (OpenAI, Nebius, OpenRouter)
18
19
  - **🔐 Optional Encryption**: AES-256-GCM encryption for indexed code chunks
19
20
  - **⚙️ Global Configuration**: One-time setup with interactive wizard for CLI convenience
20
21
  - **📊 Multi-Language Support**: 25+ programming languages via Tree-sitter
@@ -29,8 +30,8 @@ CodeVault is an intelligent code indexing and search system that enables AI assi
29
30
  #### NPM (Global - Recommended)
30
31
 
31
32
  ```bash
32
- # Install latest beta
33
- npm install -g codevault@beta
33
+ # Install latest version
34
+ npm install -g codevault
34
35
 
35
36
  # Interactive configuration setup (one-time)
36
37
  codevault config init
@@ -45,7 +46,7 @@ codevault index
45
46
  ```bash
46
47
  git clone https://github.com/shariqriazz/codevault.git
47
48
  cd codevault
48
- npm npm install --legacy-peer-deps
49
+ npm install --legacy-peer-deps
49
50
  npm run build
50
51
  npm link
51
52
  ```
@@ -70,57 +71,49 @@ Guides you through:
70
71
 
71
72
  Configuration saved to `~/.codevault/config.json`
72
73
 
73
- #### Option 2: Manual CLI Configuration
74
+ #### Option 2: Quick Setup with Nebius (Qwen Embeddings)
74
75
 
75
76
  ```bash
76
- # Set API key
77
- codevault config set providers.openai.apiKey sk-your-key-here
78
- codevault config set providers.openai.model text-embedding-3-large
79
-
80
- # View configuration
81
- codevault config list
82
-
83
- # See all config sources
84
- codevault config list --sources
77
+ # Set up Nebius for embeddings (Qwen3-Embedding-8B)
78
+ codevault config set providers.openai.apiKey your-nebius-api-key
79
+ codevault config set providers.openai.baseUrl https://api.studio.nebius.com/v1
80
+ codevault config set providers.openai.model Qwen/Qwen3-Embedding-8B
81
+ codevault config set providers.openai.dimensions 4096
82
+ codevault config set maxTokens 32000
83
+
84
+ # Set up OpenRouter for chat (Claude Sonnet 4.5)
85
+ codevault config set chatLLM.openai.apiKey your-openrouter-api-key
86
+ codevault config set chatLLM.openai.baseUrl https://openrouter.ai/api/v1
87
+ codevault config set chatLLM.openai.model anthropic/claude-sonnet-4.5
88
+
89
+ # Optional: Enable reranking with Novita (Qwen3-Reranker)
90
+ codevault config set reranker.apiUrl https://api.novita.ai/openai/v1/rerank
91
+ codevault config set reranker.apiKey your-novita-api-key
92
+ codevault config set reranker.model qwen/qwen3-reranker-8b
85
93
  ```
86
94
 
87
95
  #### Option 3: Environment Variables (MCP / CI/CD)
88
96
 
89
97
  ```bash
90
- # Embedding Provider (OpenAI-compatible APIs)
91
- export CODEVAULT_EMBEDDING_API_KEY=sk-your-key-here
92
- export CODEVAULT_EMBEDDING_BASE_URL=https://api.openai.com/v1
93
- export CODEVAULT_EMBEDDING_MODEL=text-embedding-3-large
94
-
95
- # Ollama (local, no API key needed)
96
- export CODEVAULT_OLLAMA_EMBEDDING_MODEL=nomic-embed-text
97
-
98
- # Custom settings
99
- export CODEVAULT_EMBEDDING_MAX_TOKENS=8192
100
- export CODEVAULT_EMBEDDING_DIMENSIONS=3072
101
- export CODEVAULT_EMBEDDING_RATE_LIMIT_RPM=10000
102
- export CODEVAULT_EMBEDDING_RATE_LIMIT_TPM=600000
103
- ```
104
-
105
- **Note:** Old variable names are still supported for backward compatibility:
106
- - `OPENAI_API_KEY` → `CODEVAULT_EMBEDDING_API_KEY`
107
- - `OPENAI_BASE_URL` → `CODEVAULT_EMBEDDING_BASE_URL`
108
- - `CODEVAULT_OPENAI_EMBEDDING_MODEL` → `CODEVAULT_EMBEDDING_MODEL`
109
- - `CODEVAULT_OLLAMA_MODEL` → `CODEVAULT_OLLAMA_EMBEDDING_MODEL`
110
- - `CODEVAULT_MAX_TOKENS` → `CODEVAULT_EMBEDDING_MAX_TOKENS`
111
- - `CODEVAULT_DIMENSIONS` → `CODEVAULT_EMBEDDING_DIMENSIONS`
112
- - `CODEVAULT_RATE_LIMIT_RPM` → `CODEVAULT_EMBEDDING_RATE_LIMIT_RPM`
113
- - `CODEVAULT_RATE_LIMIT_TPM` → `CODEVAULT_EMBEDDING_RATE_LIMIT_TPM`
114
-
115
- #### Option 4: Project-Specific Config
116
-
117
- ```bash
118
- # Set local config (project-specific)
119
- codevault config set --local provider ollama
120
- codevault config set --local providers.ollama.model nomic-embed-text
98
+ # Embedding Provider (Nebius + Qwen)
99
+ export CODEVAULT_EMBEDDING_API_KEY=your-nebius-api-key
100
+ export CODEVAULT_EMBEDDING_BASE_URL=https://api.studio.nebius.com/v1
101
+ export CODEVAULT_EMBEDDING_MODEL=Qwen/Qwen3-Embedding-8B
102
+ export CODEVAULT_EMBEDDING_DIMENSIONS=4096
103
+ export CODEVAULT_EMBEDDING_MAX_TOKENS=32000
104
+
105
+ # Chat LLM (OpenRouter + Claude)
106
+ export CODEVAULT_CHAT_API_KEY=your-openrouter-api-key
107
+ export CODEVAULT_CHAT_BASE_URL=https://openrouter.ai/api/v1
108
+ export CODEVAULT_CHAT_MODEL=anthropic/claude-sonnet-4.5
109
+
110
+ # Reranking (Novita + Qwen)
111
+ export CODEVAULT_RERANK_API_URL=https://api.novita.ai/openai/v1/rerank
112
+ export CODEVAULT_RERANK_API_KEY=your-novita-api-key
113
+ export CODEVAULT_RERANK_MODEL=qwen/qwen3-reranker-8b
121
114
  ```
122
115
 
123
- See [`CONFIGURATION.md`](CONFIGURATION.md) for complete configuration guide.
116
+ See [Configuration Guide](docs/CONFIGURATION.md) for complete details.
124
117
 
125
118
  ### Index Your Project
126
119
 
@@ -128,18 +121,16 @@ See [`CONFIGURATION.md`](CONFIGURATION.md) for complete configuration guide.
128
121
  # Using global config (if set via codevault config init)
129
122
  codevault index
130
123
 
131
- # Using Ollama (local, no API key required)
132
- codevault index --provider ollama
133
-
134
- # Using OpenAI with custom settings
135
- export OPENAI_API_KEY=your-key-here
136
- codevault index --provider openai
137
-
138
- # Using Qwen (via Nebius AI Studio)
139
- export CODEVAULT_EMBEDDING_API_KEY=your-nebius-api-key
124
+ # Using Nebius + Qwen embeddings
125
+ export CODEVAULT_EMBEDDING_API_KEY=your-key
140
126
  export CODEVAULT_EMBEDDING_BASE_URL=https://api.studio.nebius.com/v1
141
127
  export CODEVAULT_EMBEDDING_MODEL=Qwen/Qwen3-Embedding-8B
142
- codevault index --provider openai
128
+ codevault index
129
+
130
+ # Using local Ollama
131
+ export CODEVAULT_EMBEDDING_BASE_URL=http://localhost:11434/v1
132
+ export CODEVAULT_EMBEDDING_MODEL=nomic-embed-text
133
+ codevault index
143
134
 
144
135
  # With encryption
145
136
  export CODEVAULT_ENCRYPTION_KEY=$(openssl rand -base64 32)
@@ -165,229 +156,87 @@ codevault search-with-code "database connection" --limit 5
165
156
  codevault ask "How does authentication work in this codebase?"
166
157
  codevault ask "How do I add a new payment provider?" --multi-query --stream
167
158
 
159
+ # Start interactive chat (NEW!)
160
+ codevault chat
161
+ # Features:
162
+ # - Multi-turn conversations with history
163
+ # - Maintains context across questions
164
+ # - Commands: /help, /history, /clear, /stats, /exit
165
+ # - Configurable history window (--max-history)
166
+
168
167
  # View project stats
169
168
  codevault info
170
169
  ```
171
170
 
172
171
  ### Use with Claude Desktop
173
172
 
174
- Add to your `claude_desktop_config.json`:
173
+ See complete setup guide: **[MCP Setup Guide](docs/MCP_SETUP.md)**
174
+
175
+ **Quick setup** - Add to your `claude_desktop_config.json`:
175
176
 
176
177
  ```json
177
178
  {
178
179
  "mcpServers": {
179
180
  "codevault": {
180
181
  "command": "npx",
181
- "args": ["-y", "codevault@beta", "mcp"],
182
+ "args": ["-y", "codevault", "mcp"],
182
183
  "env": {
183
- "CODEVAULT_EMBEDDING_API_KEY": "your-api-key-here",
184
- "CODEVAULT_EMBEDDING_MODEL": "text-embedding-3-large"
184
+ "CODEVAULT_EMBEDDING_API_KEY": "your-nebius-api-key",
185
+ "CODEVAULT_EMBEDDING_BASE_URL": "https://api.studio.nebius.com/v1",
186
+ "CODEVAULT_EMBEDDING_MODEL": "Qwen/Qwen3-Embedding-8B",
187
+ "CODEVAULT_EMBEDDING_DIMENSIONS": "4096",
188
+ "CODEVAULT_CHAT_API_KEY": "your-openrouter-api-key",
189
+ "CODEVAULT_CHAT_BASE_URL": "https://openrouter.ai/api/v1",
190
+ "CODEVAULT_CHAT_MODEL": "anthropic/claude-sonnet-4.5",
191
+ "CODEVAULT_RERANK_API_URL": "https://api.novita.ai/openai/v1/rerank",
192
+ "CODEVAULT_RERANK_API_KEY": "your-novita-api-key",
193
+ "CODEVAULT_RERANK_MODEL": "qwen/qwen3-reranker-8b"
185
194
  }
186
195
  }
187
196
  }
188
197
  }
189
198
  ```
190
199
 
191
- Or use local installation:
192
-
193
- ```json
194
- {
195
- "mcpServers": {
196
- "codevault": {
197
- "command": "node",
198
- "args": ["/path/to/codevault/dist/mcp-server.js"],
199
- "env": {
200
- "CODEVAULT_EMBEDDING_API_KEY": "your-api-key-here"
201
- }
202
- }
203
- }
204
- }
205
- ```
200
+ **Example configs:**
201
+ - [NPX (Recommended)](examples/claude-desktop-config-npx.example.json)
202
+ - [Full Options](examples/claude-desktop-config.example.json)
203
+ - [Ollama Local](examples/claude-desktop-ollama.example.json)
206
204
 
207
205
  ## 📖 Documentation
208
206
 
209
- ### CLI Commands
207
+ - **[Configuration Guide](docs/CONFIGURATION.md)** - Complete configuration options
208
+ - **[MCP Setup Guide](docs/MCP_SETUP.md)** - Claude Desktop integration
209
+ - **[Ask Feature Guide](docs/ASK_FEATURE.md)** - LLM-synthesized Q&A
210
+ - **[CLI Reference](docs/CLI_REFERENCE.md)** - All commands and options
211
+ - **[API Providers](docs/PROVIDERS.md)** - Embedding, chat, and reranking providers
212
+ - **[Advanced Features](docs/ADVANCED.md)** - Chunking, encryption, context packs
213
+
214
+ ### Quick Links
210
215
 
211
216
  ```bash
212
217
  # Configuration Management
213
218
  codevault config init # Interactive setup wizard
214
219
  codevault config set <key> <value> # Set global config value
215
- codevault config set --local <key> <val> # Set project config value
216
- codevault config get <key> # Get config value
217
220
  codevault config list # Show merged config
218
- codevault config list --sources # Show all config sources
219
- codevault config unset <key> # Remove config value
220
- codevault config path # Show config file paths
221
221
 
222
222
  # Indexing
223
223
  codevault index [path] # Index project
224
- codevault index --provider openai # Use specific provider
225
- codevault index --encrypt on # Enable encryption
226
224
  codevault update [path] # Update existing index
227
225
  codevault watch [path] # Watch for changes
228
- codevault watch --debounce 1000 # Custom debounce interval
229
226
 
230
227
  # Searching
231
- codevault search <query> [path] # Search code (metadata only)
232
- --limit <num> # Max results (default: 10)
233
- --provider <name> # Embedding provider
234
- --path_glob <pattern> # Filter by file pattern
235
- --tags <tag...> # Filter by tags
236
- --lang <language...> # Filter by language
237
- --reranker <off|api> # Enable API reranking
238
- --hybrid <on|off> # Hybrid search (default: on)
239
- --bm25 <on|off> # BM25 keyword search (default: on)
240
- --symbol_boost <on|off> # Symbol boosting (default: on)
241
-
228
+ codevault search <query> # Search code (metadata only)
242
229
  codevault search-with-code <query> # Search with full code chunks
243
- --max-code-size <bytes> # Max code size per chunk
244
-
245
- # Ask Questions (LLM Synthesis)
246
- codevault ask <question> # Ask a question, get synthesized answer
247
- -p, --provider <name> # Embedding provider
248
- -c, --chat-provider <name> # Chat LLM provider (auto|openai|ollama)
249
- -k, --max-chunks <num> # Max code chunks to analyze (default: 10)
250
- --path_glob <pattern...> # Filter by file pattern
251
- --tags <tag...> # Filter by tags
252
- --lang <language...> # Filter by language
253
- --reranker <on|off> # Use API reranking (default: on)
254
- --multi-query # Break complex questions into sub-queries
255
- --temperature <num> # LLM temperature 0-2 (default: 0.7)
256
- --stream # Stream response in real-time
257
- --citations # Add citation footer
258
- --no-metadata # Hide search metadata
230
+ codevault ask <question> # Ask questions, get synthesized answers
231
+ codevault chat # Interactive conversation mode (NEW!)
259
232
 
260
233
  # Context Packs
261
234
  codevault context list # List saved contexts
262
- codevault context show <name> # Show context pack details
263
235
  codevault context use <name> # Activate context pack
264
236
 
265
237
  # Utilities
266
238
  codevault info # Project statistics
267
239
  codevault mcp # Start MCP server
268
- codevault --version # Show version
269
- ```
270
-
271
- ### MCP Tools
272
-
273
- When used via MCP, CodeVault provides these tools:
274
-
275
- - **`search_code`**: Semantic search returning metadata (paths, symbols, scores, SHAs)
276
- - **`search_code_with_chunks`**: Search + retrieve full code for each result
277
- - **`get_code_chunk`**: Get specific code chunk by SHA
278
- - **`ask_codebase`**: ✨ Ask questions and get LLM-synthesized answers with code citations
279
- - **`index_project`**: Index a new project
280
- - **`update_project`**: Update existing index
281
- - **`get_project_stats`**: Get project overview and statistics
282
- - **`use_context_pack`**: Apply saved search context/scope
283
-
284
- ### Supported Languages
285
-
286
- - **Web**: JavaScript, TypeScript, TSX, HTML, CSS, JSON, Markdown
287
- - **Backend**: Python, PHP, Go, Java, Kotlin, C#, Ruby, Scala, Swift
288
- - **Systems**: C, C++, Rust
289
- - **Functional**: Haskell, OCaml, Elixir
290
- - **Scripting**: Bash, Lua
291
-
292
- ### Embedding Providers
293
-
294
- | Provider | Model | Dimensions | Context | Best For | API Key Required |
295
- |----------|-------|------------|---------|----------|------------------|
296
- | **ollama** | nomic-embed-text | 768 | 8K | Local, no API costs | ❌ No |
297
- | **openai** | text-embedding-3-large | 3072 | 8K | Highest quality | ✅ Yes |
298
- | **openai** | text-embedding-3-small | 1536 | 8K | Faster, cheaper | ✅ Yes |
299
- | **openai** | Qwen/Qwen3-Embedding-8B | 4096 | 32K | Large context, high quality | ✅ Yes (Nebius) |
300
- | **custom** | Your choice | Custom | Custom | Any OpenAI-compatible API | ✅ Yes |
301
-
302
- ### Environment Variables
303
-
304
- ```bash
305
- # Embedding Provider Configuration
306
- CODEVAULT_EMBEDDING_API_KEY=sk-... # API key for embeddings
307
- CODEVAULT_EMBEDDING_BASE_URL=https://api.openai.com/v1 # Embedding API endpoint
308
- CODEVAULT_EMBEDDING_MODEL=text-embedding-3-large # Embedding model name
309
- CODEVAULT_OLLAMA_EMBEDDING_MODEL=nomic-embed-text # Ollama embedding model
310
-
311
- # Embedding Chunking Configuration
312
- CODEVAULT_EMBEDDING_MAX_TOKENS=8192 # Max tokens per embedding chunk
313
- CODEVAULT_EMBEDDING_DIMENSIONS=3072 # Embedding vector dimensions
314
-
315
- # Embedding API Rate Limiting
316
- CODEVAULT_EMBEDDING_RATE_LIMIT_RPM=10000 # Embedding API requests/min
317
- CODEVAULT_EMBEDDING_RATE_LIMIT_TPM=600000 # Embedding API tokens/min
318
-
319
- # Encryption
320
- CODEVAULT_ENCRYPTION_KEY=... # 32-byte key (base64 or hex)
321
-
322
- # API Reranking (Optional)
323
- # Novita Qwen3-Reranker (32K context, great for code)
324
- CODEVAULT_RERANK_API_URL=https://api.novita.ai/openai/v1/rerank
325
- CODEVAULT_RERANK_API_KEY=your-novita-key
326
- CODEVAULT_RERANK_MODEL=qwen/qwen3-reranker-8b
327
-
328
- # Or Cohere (4K context, $25 free credits)
329
- # CODEVAULT_RERANK_API_URL=https://api.cohere.ai/v1/rerank
330
- # CODEVAULT_RERANK_API_KEY=your-cohere-key
331
- # CODEVAULT_RERANK_MODEL=rerank-english-v3.0
332
-
333
- # Memory Management
334
- CODEVAULT_CACHE_CLEAR_INTERVAL=3600000 # Cache cleanup interval (ms)
335
- ```
336
-
337
- ### Ask Questions (LLM Synthesis)
338
-
339
- The `ask` command combines semantic search with LLM synthesis to answer natural language questions about your codebase:
340
-
341
- ```bash
342
- # Basic question
343
- codevault ask "How does authentication work in this codebase?"
344
-
345
- # With filters
346
- codevault ask "How do I add Stripe checkout?" --tags stripe --lang php
347
-
348
- # Complex question with multi-query
349
- codevault ask "What are the main components and how do they interact?" --multi-query
350
-
351
- # Streaming response
352
- codevault ask "Explain the database connection pooling" --stream
353
-
354
- # With custom settings
355
- codevault ask "How does error handling work?" \
356
- --chat-provider openai \
357
- --temperature 0.5 \
358
- --max-chunks 15 \
359
- --reranker on
360
-
361
- # Using Ollama for local processing
362
- codevault ask "What routes are available?" --chat-provider ollama
363
- ```
364
-
365
- **How it works:**
366
- 1. 🔍 Searches codebase using embeddings (+ optional reranking)
367
- 2. 📚 Retrieves top N most relevant code chunks
368
- 3. 🤖 Sends context to LLM with structured prompt
369
- 4. 📝 LLM synthesizes natural language answer with code citations
370
- 5. ✨ Returns formatted markdown with file references
371
-
372
- **Example Output:**
373
- ```markdown
374
- # How Authentication Works
375
-
376
- The authentication system uses a middleware-based approach...
377
-
378
- The main authentication flow is handled by `AuthMiddleware` in [`src/middleware/auth.ts`](src/middleware/auth.ts):
379
-
380
- ```typescript
381
- export function authenticate(req, res, next) {
382
- // Token validation logic
383
- ...
384
- }
385
- ```
386
-
387
- Key components:
388
- - **Session Management**: [`src/auth/session.ts`](src/auth/session.ts)
389
- - **Token Validation**: [`src/auth/token.ts`](src/auth/token.ts)
390
- - **User Model**: [`src/models/user.ts`](src/models/user.ts)
391
240
  ```
392
241
 
393
242
  ## 🏗️ Architecture
@@ -410,115 +259,37 @@ Key components:
410
259
  - Optionally applies API reranking
411
260
  - Returns ranked results with metadata
412
261
 
413
- 3. **Retrieval Phase**
414
- - Fetches code chunks by SHA
415
- - Decompresses and decrypts (if encrypted)
416
- - Returns full code with context
417
-
418
- ### Project Structure
419
-
420
- ```
421
- .codevault/
422
- ├── codevault.db # SQLite: embeddings + metadata
423
- ├── chunks/ # Compressed code chunks
424
- │ ├── <sha>.gz # Plain compressed
425
- │ └── <sha>.gz.enc # Encrypted compressed
426
- └── contextpacks/ # Saved search contexts
427
- └── feature-auth.json # Example context pack
428
-
429
- codevault.codemap.json # Lightweight index (symbol graph)
430
-
431
- ~/.codevault/ # Global CLI configuration
432
- └── config.json # User-wide settings
433
- ```
434
-
435
- ### Advanced Features
436
-
437
- #### Batch Processing
438
-
439
- Embeddings are generated in batches of 50 for optimal API efficiency:
440
-
441
- ```typescript
442
- // Automatic batching - no configuration needed
443
- // Processes 50 chunks per API call
444
- // Falls back to individual processing on error
445
- ```
446
-
447
- #### Smart Chunking
448
-
449
- Token-aware semantic chunking with configurable limits:
450
-
451
- - Respects function/class boundaries
452
- - Applies overlap for context continuity
453
- - Subdivides large functions intelligently
454
- - Merges small chunks when beneficial
455
-
456
- #### Symbol-Aware Ranking
457
-
458
- Boosts search results based on:
459
- - Exact symbol name matches
460
- - Function signature matches
461
- - Parameter name matches
462
- - Symbol neighbor relationships (calls, imports)
463
-
464
- #### Hybrid Search
465
-
466
- Combines multiple ranking signals:
467
- - Vector similarity (semantic understanding)
468
- - BM25 keyword matching (exact term matches)
469
- - Symbol boost (code structure awareness)
470
- - Reciprocal Rank Fusion (combines rankings)
262
+ 3. **LLM Synthesis Phase** (Ask Feature)
263
+ - Searches for relevant code chunks
264
+ - Retrieves full code content
265
+ - Builds context prompt with metadata
266
+ - Generates natural language answer via chat LLM
267
+ - Returns markdown with code citations
471
268
 
472
- #### Context Packs
269
+ 4. **Interactive Chat Phase** (Chat Feature)
270
+ - Maintains conversation history (last N turns)
271
+ - Performs fresh semantic search for each question
272
+ - Combines conversation context + new code chunks
273
+ - Generates conversational responses with continuity
274
+ - Supports commands: /help, /history, /clear, /stats
473
275
 
474
- Save search scopes for reuse:
475
-
476
- ```json
477
- {
478
- "key": "feature-auth",
479
- "name": "Authentication Feature",
480
- "description": "Login, signup, password reset",
481
- "scope": {
482
- "path_glob": ["src/auth/**", "src/middleware/auth.ts"],
483
- "tags": ["auth", "security"],
484
- "lang": ["typescript", "javascript"]
485
- }
486
- }
487
- ```
488
-
489
- Usage:
490
- ```bash
491
- codevault context use feature-auth
492
- codevault search "token validation" # Scoped to auth files
493
- ```
494
-
495
- #### File Watching
496
-
497
- Real-time index updates with intelligent debouncing:
498
-
499
- ```bash
500
- codevault watch --debounce 500
501
- ```
502
-
503
- - Detects file changes, additions, deletions
504
- - Batches rapid changes (debouncing)
505
- - Updates only affected chunks
506
- - Preserves index consistency
507
-
508
- #### Encryption
509
-
510
- AES-256-GCM encryption for code chunks:
276
+ ### Supported Languages
511
277
 
512
- ```bash
513
- # Generate secure key
514
- export CODEVAULT_ENCRYPTION_KEY=$(openssl rand -base64 32)
278
+ - **Web**: JavaScript, TypeScript, TSX, HTML, CSS, JSON, Markdown
279
+ - **Backend**: Python, PHP, Go, Java, Kotlin, C#, Ruby, Scala, Swift
280
+ - **Systems**: C, C++, Rust
281
+ - **Functional**: Haskell, OCaml, Elixir
282
+ - **Scripting**: Bash, Lua
515
283
 
516
- # Index with encryption
517
- codevault index --encrypt on
284
+ ### Recommended Providers
518
285
 
519
- # Files stored as .gz.enc instead of .gz
520
- # Automatic decryption on read (requires key)
521
- ```
286
+ | Purpose | Provider | Model | Context | Best For |
287
+ |---------|----------|-------|---------|----------|
288
+ | **Embeddings** | Nebius | Qwen/Qwen3-Embedding-8B | 32K | High quality, large context |
289
+ | **Embeddings** | Ollama | nomic-embed-text | 8K | Local, privacy-focused |
290
+ | **Chat LLM** | OpenRouter | anthropic/claude-sonnet-4.5 | 200K | Best code understanding |
291
+ | **Chat LLM** | Ollama | qwen2.5-coder:7b | 32K | Local, code-specialized |
292
+ | **Reranking** | Novita | qwen/qwen3-reranker-8b | 32K | Best for code reranking |
522
293
 
523
294
  ## 🔧 Performance & Optimization
524
295
 
@@ -597,8 +368,6 @@ MIT License - see [LICENSE](LICENSE) file for details.
597
368
  - **GitHub**: https://github.com/shariqriazz/codevault
598
369
  - **NPM**: https://www.npmjs.com/package/codevault
599
370
  - **Issues**: https://github.com/shariqriazz/codevault/issues
600
- - **Configuration Guide**: [CONFIGURATION.md](CONFIGURATION.md)
601
- - **Ask Feature Guide**: [ASK_FEATURE.md](ASK_FEATURE.md)
602
371
 
603
372
  ## 🙏 Acknowledgments
604
373
 
@@ -607,9 +376,12 @@ Built with:
607
376
  - [Tree-sitter](https://tree-sitter.github.io/) - Parsing infrastructure
608
377
  - [OpenAI](https://openai.com/) - Embedding models
609
378
  - [Ollama](https://ollama.ai/) - Local model support
379
+ - [Nebius AI Studio](https://nebius.com/) - Qwen embeddings
380
+ - [OpenRouter](https://openrouter.ai/) - LLM access
381
+ - [Novita AI](https://novita.ai/) - Reranking API
610
382
 
611
383
  ---
612
384
 
613
- **Version**: 1.3.0-beta.7
385
+ **Version**: 1.6.0
614
386
  **Built by**: Shariq Riaz
615
- **Last Updated**: January 2025
387
+ **Last Updated**: November 2025
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codevault",
3
- "version": "1.4.1",
3
+ "version": "1.6.0",
4
4
  "description": "AI-powered semantic code search via Model Context Protocol",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -48,6 +48,7 @@
48
48
  "@modelcontextprotocol/sdk": "^1.20.2",
49
49
  "@tree-sitter-grammars/tree-sitter-kotlin": "^1.1.0",
50
50
  "@tree-sitter-grammars/tree-sitter-markdown": "^0.3.2",
51
+ "better-sqlite3": "^11.10.0",
51
52
  "chalk": "^5.6.2",
52
53
  "chokidar": "^4.0.3",
53
54
  "cli-progress": "^3.12.0",
@@ -55,10 +56,8 @@
55
56
  "dotenv": "^17.2.3",
56
57
  "fast-glob": "^3.3.3",
57
58
  "micromatch": "^4.0.8",
58
- "ollama": "^0.6.0",
59
59
  "openai": "^6.7.0",
60
60
  "ora": "^9.0.0",
61
- "sqlite3": "^5.1.7",
62
61
  "tiktoken": "^1.0.22",
63
62
  "tree-sitter": "^0.25.0",
64
63
  "tree-sitter-bash": "^0.25.0",
@@ -87,10 +86,11 @@
87
86
  "zod": "^4.1.12"
88
87
  },
89
88
  "devDependencies": {
89
+ "@types/better-sqlite3": "^7.6.13",
90
90
  "@types/chokidar": "^1.7.5",
91
91
  "@types/cli-progress": "^3.11.6",
92
92
  "@types/micromatch": "^4.0.10",
93
- "@types/node": "^24.9.1",
93
+ "@types/node": "^24.10.0",
94
94
  "typescript": "^5.9.3"
95
95
  }
96
96
  }
@@ -1,39 +0,0 @@
1
- import type { ModelProfile } from '../providers/base.js';
2
- import type { TreeSitterNode } from '../types/ast.js';
3
- interface LanguageRule {
4
- subdivisionTypes?: Record<string, string[]>;
5
- [key: string]: any;
6
- }
7
- interface NodeAnalysis {
8
- node: TreeSitterNode;
9
- size: number;
10
- code: string;
11
- }
12
- interface SemanticGroup {
13
- type: string;
14
- containerType?: string;
15
- nodes: TreeSitterNode[];
16
- analyses: NodeAnalysis[];
17
- parentNode: TreeSitterNode | null;
18
- }
19
- export interface NodeGroup {
20
- nodes: TreeSitterNode[];
21
- totalSize: number;
22
- groupInfo: SemanticGroup[];
23
- }
24
- export declare function groupNodesForChunking(nodes: TreeSitterNode[], source: string, profile: ModelProfile, rule: LanguageRule): Promise<NodeGroup[]>;
25
- export interface CombinedChunk {
26
- code: string;
27
- node: TreeSitterNode & {
28
- type: string;
29
- };
30
- metadata: {
31
- isGroup: boolean;
32
- nodeCount: number;
33
- totalSize: number;
34
- groupTypes: string[];
35
- };
36
- }
37
- export declare function createCombinedChunk(nodeGroup: NodeGroup, source: string, filerel: string): CombinedChunk | null;
38
- export {};
39
- //# sourceMappingURL=file-grouper.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-grouper.d.ts","sourceRoot":"","sources":["../../src/chunking/file-grouper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,UAAU,YAAY;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAUD,UAAU,YAAY;IACpB,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,aAAa,EAAE,CAAC;CAC5B;AA2KD,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,cAAc,EAAE,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,SAAS,EAAE,CAAC,CAkBtB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,cAAc,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,QAAQ,EAAE;QACR,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;CACH;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CA4B/G"}