mcp-vector-search 0.12.0__py3-none-any.whl → 0.12.1__py3-none-any.whl

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 mcp-vector-search might be problematic. Click here for more details.

@@ -236,9 +236,12 @@ class ProjectManager:
236
236
  count += 1
237
237
  return count
238
238
 
239
- def get_project_info(self) -> ProjectInfo:
239
+ def get_project_info(self, file_count: int | None = None) -> ProjectInfo:
240
240
  """Get comprehensive project information.
241
241
 
242
+ Args:
243
+ file_count: Optional pre-computed file count (avoids expensive filesystem scan)
244
+
242
245
  Returns:
243
246
  Project information
244
247
  """
@@ -247,13 +250,19 @@ class ProjectManager:
247
250
 
248
251
  is_initialized = self.is_initialized()
249
252
  languages = []
250
- file_count = 0
253
+ computed_file_count = 0
251
254
 
252
255
  if is_initialized:
253
256
  try:
254
257
  config = self.config
255
258
  languages = config.languages
256
- file_count = self.count_indexable_files(config.file_extensions)
259
+ # Use provided file_count if available to avoid filesystem scan
260
+ if file_count is not None:
261
+ computed_file_count = file_count
262
+ else:
263
+ computed_file_count = self.count_indexable_files(
264
+ config.file_extensions
265
+ )
257
266
  except Exception:
258
267
  # Ignore errors when getting detailed info
259
268
  pass
@@ -265,7 +274,7 @@ class ProjectManager:
265
274
  index_path=index_path,
266
275
  is_initialized=is_initialized,
267
276
  languages=languages,
268
- file_count=file_count,
277
+ file_count=computed_file_count,
269
278
  )
270
279
 
271
280
  def _iter_source_files(self) -> list[Path]:
@@ -301,7 +310,9 @@ class ProjectManager:
301
310
  """
302
311
  # First check gitignore rules if available
303
312
  # PERFORMANCE: Pass is_directory hint to avoid redundant stat() calls
304
- if self.gitignore_parser and self.gitignore_parser.is_ignored(path, is_directory=is_directory):
313
+ if self.gitignore_parser and self.gitignore_parser.is_ignored(
314
+ path, is_directory=is_directory
315
+ ):
305
316
  return True
306
317
 
307
318
  # Check if any parent directory is in ignore patterns
@@ -79,7 +79,7 @@ class BaseParser(ABC):
79
79
  if language is None:
80
80
  language = self.language
81
81
 
82
- if not hasattr(node, 'children'):
82
+ if not hasattr(node, "children"):
83
83
  return 1.0
84
84
 
85
85
  complexity = 1.0 # Base complexity
@@ -87,39 +87,75 @@ class BaseParser(ABC):
87
87
  # Language-specific decision node types
88
88
  decision_nodes = {
89
89
  "python": {
90
- "if_statement", "elif_clause", "while_statement", "for_statement",
91
- "except_clause", "with_statement", "conditional_expression",
92
- "boolean_operator" # and, or
90
+ "if_statement",
91
+ "elif_clause",
92
+ "while_statement",
93
+ "for_statement",
94
+ "except_clause",
95
+ "with_statement",
96
+ "conditional_expression",
97
+ "boolean_operator", # and, or
93
98
  },
94
99
  "javascript": {
95
- "if_statement", "while_statement", "for_statement", "for_in_statement",
96
- "switch_case", "catch_clause", "conditional_expression", "ternary_expression"
100
+ "if_statement",
101
+ "while_statement",
102
+ "for_statement",
103
+ "for_in_statement",
104
+ "switch_case",
105
+ "catch_clause",
106
+ "conditional_expression",
107
+ "ternary_expression",
97
108
  },
98
109
  "typescript": {
99
- "if_statement", "while_statement", "for_statement", "for_in_statement",
100
- "switch_case", "catch_clause", "conditional_expression", "ternary_expression"
110
+ "if_statement",
111
+ "while_statement",
112
+ "for_statement",
113
+ "for_in_statement",
114
+ "switch_case",
115
+ "catch_clause",
116
+ "conditional_expression",
117
+ "ternary_expression",
101
118
  },
102
119
  "dart": {
103
- "if_statement", "while_statement", "for_statement", "for_in_statement",
104
- "switch_case", "catch_clause", "conditional_expression"
120
+ "if_statement",
121
+ "while_statement",
122
+ "for_statement",
123
+ "for_in_statement",
124
+ "switch_case",
125
+ "catch_clause",
126
+ "conditional_expression",
105
127
  },
106
128
  "php": {
107
- "if_statement", "elseif_clause", "while_statement", "foreach_statement",
108
- "for_statement", "switch_case", "catch_clause", "ternary_expression"
129
+ "if_statement",
130
+ "elseif_clause",
131
+ "while_statement",
132
+ "foreach_statement",
133
+ "for_statement",
134
+ "switch_case",
135
+ "catch_clause",
136
+ "ternary_expression",
109
137
  },
110
138
  "ruby": {
111
- "if", "unless", "while", "until", "for", "case", "rescue",
112
- "conditional"
113
- }
139
+ "if",
140
+ "unless",
141
+ "while",
142
+ "until",
143
+ "for",
144
+ "case",
145
+ "rescue",
146
+ "conditional",
147
+ },
114
148
  }
115
149
 
116
- nodes_to_count = decision_nodes.get(language, decision_nodes.get("python", set()))
150
+ nodes_to_count = decision_nodes.get(
151
+ language, decision_nodes.get("python", set())
152
+ )
117
153
 
118
154
  def count_decision_points(n):
119
155
  nonlocal complexity
120
- if hasattr(n, 'type') and n.type in nodes_to_count:
156
+ if hasattr(n, "type") and n.type in nodes_to_count:
121
157
  complexity += 1
122
- if hasattr(n, 'children'):
158
+ if hasattr(n, "children"):
123
159
  for child in n.children:
124
160
  count_decision_points(child)
125
161
 
@@ -54,7 +54,7 @@ class JavaScriptParser(BaseParser):
54
54
 
55
55
  if self._use_tree_sitter:
56
56
  try:
57
- tree = self._parser.parse(content.encode('utf-8'))
57
+ tree = self._parser.parse(content.encode("utf-8"))
58
58
  return self._extract_chunks_from_tree(tree, content, file_path)
59
59
  except Exception as e:
60
60
  logger.warning(f"Tree-sitter parsing failed for {file_path}: {e}")
@@ -77,10 +77,14 @@ class JavaScriptParser(BaseParser):
77
77
  extracted = False
78
78
 
79
79
  if node_type == "function_declaration":
80
- chunks.extend(self._extract_function(node, lines, file_path, current_class))
80
+ chunks.extend(
81
+ self._extract_function(node, lines, file_path, current_class)
82
+ )
81
83
  extracted = True
82
84
  elif node_type == "arrow_function":
83
- chunks.extend(self._extract_arrow_function(node, lines, file_path, current_class))
85
+ chunks.extend(
86
+ self._extract_arrow_function(node, lines, file_path, current_class)
87
+ )
84
88
  extracted = True
85
89
  elif node_type == "class_declaration":
86
90
  class_chunks = self._extract_class(node, lines, file_path)
@@ -92,18 +96,22 @@ class JavaScriptParser(BaseParser):
92
96
  visit_node(child, class_name)
93
97
  extracted = True
94
98
  elif node_type == "method_definition":
95
- chunks.extend(self._extract_method(node, lines, file_path, current_class))
99
+ chunks.extend(
100
+ self._extract_method(node, lines, file_path, current_class)
101
+ )
96
102
  extracted = True
97
103
  elif node_type == "lexical_declaration":
98
104
  # const/let declarations might be arrow functions
99
- extracted_chunks = self._extract_variable_function(node, lines, file_path, current_class)
105
+ extracted_chunks = self._extract_variable_function(
106
+ node, lines, file_path, current_class
107
+ )
100
108
  if extracted_chunks:
101
109
  chunks.extend(extracted_chunks)
102
110
  extracted = True
103
111
 
104
112
  # Only recurse into children if we didn't extract this node
105
113
  # This prevents double-extraction of arrow functions in variable declarations
106
- if not extracted and hasattr(node, 'children'):
114
+ if not extracted and hasattr(node, "children"):
107
115
  for child in node.children:
108
116
  visit_node(child, current_class)
109
117
 
@@ -163,7 +171,7 @@ class JavaScriptParser(BaseParser):
163
171
  ) -> list[CodeChunk]:
164
172
  """Extract arrow function from AST."""
165
173
  # Arrow functions often don't have explicit names, try to get from parent
166
- parent = getattr(node, 'parent', None)
174
+ parent = getattr(node, "parent", None)
167
175
  function_name = None
168
176
 
169
177
  if parent and parent.type == "variable_declarator":
@@ -219,7 +227,9 @@ class JavaScriptParser(BaseParser):
219
227
  docstring = self._extract_jsdoc_from_node(child, lines)
220
228
 
221
229
  # Calculate complexity
222
- complexity = self._calculate_complexity(subchild, "javascript")
230
+ complexity = self._calculate_complexity(
231
+ subchild, "javascript"
232
+ )
223
233
 
224
234
  # Extract parameters
225
235
  parameters = self._extract_js_parameters(subchild)
@@ -319,8 +329,8 @@ class JavaScriptParser(BaseParser):
319
329
 
320
330
  def _get_node_text(self, node) -> str:
321
331
  """Get text content of a node."""
322
- if hasattr(node, 'text'):
323
- return node.text.decode('utf-8')
332
+ if hasattr(node, "text"):
333
+ return node.text.decode("utf-8")
324
334
  return ""
325
335
 
326
336
  def _extract_js_parameters(self, node) -> list[dict]:
@@ -330,12 +340,13 @@ class JavaScriptParser(BaseParser):
330
340
  for child in node.children:
331
341
  if child.type == "formal_parameters":
332
342
  for param_node in child.children:
333
- if param_node.type in ("identifier", "required_parameter", "optional_parameter", "rest_parameter"):
334
- param_info = {
335
- "name": None,
336
- "type": None,
337
- "default": None
338
- }
343
+ if param_node.type in (
344
+ "identifier",
345
+ "required_parameter",
346
+ "optional_parameter",
347
+ "rest_parameter",
348
+ ):
349
+ param_info = {"name": None, "type": None, "default": None}
339
350
 
340
351
  # Extract parameter details
341
352
  if param_node.type == "identifier":
@@ -347,10 +358,20 @@ class JavaScriptParser(BaseParser):
347
358
  param_info["name"] = self._get_node_text(subchild)
348
359
  elif subchild.type == "type_annotation":
349
360
  param_info["type"] = self._get_node_text(subchild)
350
- elif "default" in subchild.type or subchild.type == "number":
351
- param_info["default"] = self._get_node_text(subchild)
352
-
353
- if param_info["name"] and param_info["name"] not in ("(", ")", ",", "..."):
361
+ elif (
362
+ "default" in subchild.type
363
+ or subchild.type == "number"
364
+ ):
365
+ param_info["default"] = self._get_node_text(
366
+ subchild
367
+ )
368
+
369
+ if param_info["name"] and param_info["name"] not in (
370
+ "(",
371
+ ")",
372
+ ",",
373
+ "...",
374
+ ):
354
375
  # Clean up rest parameters
355
376
  if param_info["name"].startswith("..."):
356
377
  param_info["name"] = param_info["name"][3:]
@@ -452,12 +452,12 @@ class PythonParser(BaseParser):
452
452
  for child in node.children:
453
453
  if child.type == "parameters":
454
454
  for param_node in child.children:
455
- if param_node.type in ("identifier", "typed_parameter", "default_parameter"):
456
- param_info = {
457
- "name": None,
458
- "type": None,
459
- "default": None
460
- }
455
+ if param_node.type in (
456
+ "identifier",
457
+ "typed_parameter",
458
+ "default_parameter",
459
+ ):
460
+ param_info = {"name": None, "type": None, "default": None}
461
461
 
462
462
  # Extract parameter name
463
463
  if param_node.type == "identifier":
@@ -470,9 +470,17 @@ class PythonParser(BaseParser):
470
470
  elif subchild.type == "type":
471
471
  param_info["type"] = self._get_node_text(subchild)
472
472
  elif "default" in subchild.type:
473
- param_info["default"] = self._get_node_text(subchild)
474
-
475
- if param_info["name"] and param_info["name"] not in ("self", "cls", "(", ")", ","):
473
+ param_info["default"] = self._get_node_text(
474
+ subchild
475
+ )
476
+
477
+ if param_info["name"] and param_info["name"] not in (
478
+ "self",
479
+ "cls",
480
+ "(",
481
+ ")",
482
+ ",",
483
+ ):
476
484
  parameters.append(param_info)
477
485
  return parameters
478
486
 
@@ -485,8 +493,8 @@ class PythonParser(BaseParser):
485
493
 
486
494
  def _get_node_text(self, node) -> str:
487
495
  """Get text content of a node."""
488
- if hasattr(node, 'text'):
489
- return node.text.decode('utf-8')
496
+ if hasattr(node, "text"):
497
+ return node.text.decode("utf-8")
490
498
  return ""
491
499
 
492
500
  def get_supported_extensions(self) -> list[str]:
@@ -162,14 +162,15 @@ class ParserRegistry:
162
162
  info[language] = {
163
163
  "class": parser.__class__.__name__,
164
164
  "extensions": parser.get_supported_extensions(),
165
- "language": parser.language,
165
+ "language": getattr(parser, "language", None) or language,
166
166
  }
167
167
 
168
168
  # Add fallback parser info
169
+ fallback_lang = getattr(self._fallback_parser, "language", None) or "unknown"
169
170
  info["fallback"] = {
170
171
  "class": self._fallback_parser.__class__.__name__,
171
172
  "extensions": ["*"],
172
- "language": self._fallback_parser.language,
173
+ "language": fallback_lang,
173
174
  }
174
175
 
175
176
  return info
@@ -233,7 +233,9 @@ def create_gitignore_parser(project_root: Path) -> GitignoreParser:
233
233
  return GitignoreParser(project_root)
234
234
 
235
235
 
236
- def is_path_gitignored(path: Path, project_root: Path, is_directory: bool | None = None) -> bool:
236
+ def is_path_gitignored(
237
+ path: Path, project_root: Path, is_directory: bool | None = None
238
+ ) -> bool:
237
239
  """Quick function to check if a path is gitignored.
238
240
 
239
241
  Args:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-vector-search
3
- Version: 0.12.0
3
+ Version: 0.12.1
4
4
  Summary: CLI-first semantic code search with MCP integration
5
5
  Project-URL: Homepage, https://github.com/bobmatnyc/mcp-vector-search
6
6
  Project-URL: Documentation, https://mcp-vector-search.readthedocs.io
@@ -39,6 +39,7 @@ Classifier: Topic :: Software Development :: Code Generators
39
39
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
40
40
  Requires-Python: >=3.11
41
41
  Requires-Dist: aiofiles>=23.0.0
42
+ Requires-Dist: authlib>=1.6.4
42
43
  Requires-Dist: chromadb>=0.5.0
43
44
  Requires-Dist: click-didyoumean>=0.3.0
44
45
  Requires-Dist: httpx>=0.25.0
@@ -110,49 +111,68 @@ cd mcp-vector-search
110
111
  uv sync && uv pip install -e .
111
112
  ```
112
113
 
113
- ### Complete Setup with Install Command
114
+ ### Complete Setup (One Command)
114
115
 
115
- The new **enhanced install command** provides a complete one-step setup:
116
+ The **hierarchical install command** (v0.13.0) provides complete project setup and MCP integration management:
116
117
 
117
118
  ```bash
118
- # Interactive setup with MCP configuration
119
+ # Quick setup (recommended)
119
120
  mcp-vector-search install
120
121
 
121
- # Setup without MCP configuration
122
- mcp-vector-search install --no-mcp
122
+ # This will:
123
+ # 1. Initialize your project configuration
124
+ # 2. Automatically index your codebase
125
+ # 3. Provide next-step hints for MCP integration
123
126
 
124
- # Setup for specific MCP tool
125
- mcp-vector-search install --mcp-tool "Claude Code"
126
-
127
- # Setup without automatic indexing
128
- mcp-vector-search install --no-index
127
+ # Install with all MCP integrations at once
128
+ mcp-vector-search install --with-mcp
129
129
 
130
130
  # Custom file extensions
131
131
  mcp-vector-search install --extensions .py,.js,.ts,.dart
132
+
133
+ # Skip automatic indexing
134
+ mcp-vector-search install --no-auto-index
132
135
  ```
133
136
 
134
- The install command:
135
- - Initializes your project configuration
136
- - Detects and configures MCP tools (Claude Code, Cursor, Windsurf, VS Code)
137
- - Automatically indexes your codebase
138
- - Provides rich progress indicators and next-step hints
137
+ ### Add MCP Integration for AI Tools
139
138
 
140
- ### Basic Usage
139
+ ```bash
140
+ # Add Claude Code integration (project-scoped)
141
+ mcp-vector-search install claude-code
142
+
143
+ # Add Cursor IDE integration (global)
144
+ mcp-vector-search install cursor
145
+
146
+ # Add Claude Desktop integration (global)
147
+ mcp-vector-search install claude-desktop
148
+
149
+ # See all available platforms
150
+ mcp-vector-search install list
151
+ ```
152
+
153
+ ### Remove MCP Integrations
141
154
 
142
155
  ```bash
143
- # Initialize your project
144
- mcp-vector-search init
156
+ # Remove specific platform
157
+ mcp-vector-search uninstall claude-code
145
158
 
146
- # Index your codebase
147
- mcp-vector-search index
159
+ # Remove all integrations
160
+ mcp-vector-search uninstall --all
148
161
 
162
+ # List configured integrations
163
+ mcp-vector-search uninstall list
164
+ ```
165
+
166
+ ### Basic Usage
167
+
168
+ ```bash
149
169
  # Search your code
150
170
  mcp-vector-search search "authentication logic"
151
171
  mcp-vector-search search "database connection setup"
152
172
  mcp-vector-search search "error handling patterns"
153
173
 
154
- # Setup automatic reindexing (recommended)
155
- mcp-vector-search auto-index setup --method all
174
+ # Index your codebase (if not done during install)
175
+ mcp-vector-search index
156
176
 
157
177
  # Check project status
158
178
  mcp-vector-search status
@@ -191,7 +211,50 @@ See [docs/VERSIONING_WORKFLOW.md](docs/VERSIONING_WORKFLOW.md) for complete docu
191
211
 
192
212
  ### Commands
193
213
 
194
- #### `init` - Initialize Project
214
+ #### `install` - Install Project and MCP Integrations (v0.13.0)
215
+ ```bash
216
+ # Quick setup (recommended)
217
+ mcp-vector-search install
218
+
219
+ # Install with all MCP integrations
220
+ mcp-vector-search install --with-mcp
221
+
222
+ # Custom file extensions
223
+ mcp-vector-search install --extensions .py,.js,.ts
224
+
225
+ # Skip automatic indexing
226
+ mcp-vector-search install --no-auto-index
227
+
228
+ # Platform-specific MCP integration
229
+ mcp-vector-search install claude-code # Project-scoped
230
+ mcp-vector-search install claude-desktop # Global
231
+ mcp-vector-search install cursor # Global
232
+ mcp-vector-search install windsurf # Global
233
+ mcp-vector-search install vscode # Global
234
+
235
+ # List available platforms
236
+ mcp-vector-search install list
237
+ ```
238
+
239
+ #### `uninstall` - Remove MCP Integrations (v0.13.0)
240
+ ```bash
241
+ # Remove specific platform
242
+ mcp-vector-search uninstall claude-code
243
+
244
+ # Remove all integrations
245
+ mcp-vector-search uninstall --all
246
+
247
+ # List configured integrations
248
+ mcp-vector-search uninstall list
249
+
250
+ # Skip backup creation
251
+ mcp-vector-search uninstall claude-code --no-backup
252
+
253
+ # Alias (same as uninstall)
254
+ mcp-vector-search remove claude-code
255
+ ```
256
+
257
+ #### `init` - Initialize Project (Simple)
195
258
  ```bash
196
259
  # Basic initialization
197
260
  mcp-vector-search init
@@ -1,25 +1,27 @@
1
- mcp_vector_search/__init__.py,sha256=XMtvUz8Fx117CAJKiBO-AUwnBj066mJTSqmdfyZZxEM,300
1
+ mcp_vector_search/__init__.py,sha256=x50WkrKjIL9FUVrHMUHOyx99aKCd-VPkQ4dT60f0tlA,300
2
2
  mcp_vector_search/py.typed,sha256=lCKeV9Qcn9sGtbRsgg-LJO2ZwWRuknnnlmomq3bJFH0,43
3
3
  mcp_vector_search/cli/__init__.py,sha256=TNB7CaOASz8u3yHWLbNmo8-GtHF0qwUjVKWAuNphKgo,40
4
- mcp_vector_search/cli/didyoumean.py,sha256=F_ss-EX4F9RgnMsEhdTwLpyNCah9SqnBZc2tBtzASck,15918
4
+ mcp_vector_search/cli/didyoumean.py,sha256=8yF15w74xq9uUT46ww-XNidBs7cSPVYV7mKiMS4bRqY,16318
5
5
  mcp_vector_search/cli/export.py,sha256=iluxuRT2KELdKlQeDAlVkteiel4GGrng153UAw9H0as,10804
6
6
  mcp_vector_search/cli/history.py,sha256=6wRrSfxpUe9hJXuaEeVxOVkFlcpqkIiGfwzDgd5N6c8,9323
7
7
  mcp_vector_search/cli/interactive.py,sha256=T7P4dAdvbglznzQYgiePv5YNyOx9FeE57Y3OKYnnbYE,12744
8
- mcp_vector_search/cli/main.py,sha256=oFyuocKZK9fN4XY1xejPgI3lMo4E0dplJ4SasfLZluo,14770
8
+ mcp_vector_search/cli/main.py,sha256=K04RHtxfZUPRYWJDnqs6LmsBU9WoBVXIiAOIwBg400U,15783
9
9
  mcp_vector_search/cli/output.py,sha256=7ShIk_UKzhDzRGxI6JluPu0gGkbmKOevqgIAKR4oCa0,12560
10
10
  mcp_vector_search/cli/suggestions.py,sha256=h-UaxoLcHmFbhZSm0WG7nKJXAIRIqhv7aGsXijp7vA8,13273
11
11
  mcp_vector_search/cli/commands/__init__.py,sha256=vQls-YKZ54YEwmf7g1dL0T2SS9D4pdQljXzsUChG_V4,42
12
12
  mcp_vector_search/cli/commands/auto_index.py,sha256=imVVbxWRlA128NPdK9BetNNl3ELrsdq-hqcsLqyAmoM,12712
13
13
  mcp_vector_search/cli/commands/config.py,sha256=mKE8gUgAOqCM__4yzEEu9HJPbx9X15lN264zkDJBRxg,12399
14
14
  mcp_vector_search/cli/commands/demo.py,sha256=MVfEkYmA2abRFwAbk-lpa6P14_SLJBHZAuHb9d6d02U,10630
15
- mcp_vector_search/cli/commands/index.py,sha256=2coH6Q5dgjSVn84rCR6nI3H9kVc6-V1BK3m4Z_4szp4,24401
15
+ mcp_vector_search/cli/commands/index.py,sha256=QZZ8Io4Rg4ueS9WquXA_jFAfqAaxNwXK_e7v5orOcnE,24117
16
16
  mcp_vector_search/cli/commands/init.py,sha256=2kdjtIPPeutKUXs65-6W1VQPF_BQrbV6_U3TCE7U5mw,23242
17
- mcp_vector_search/cli/commands/install.py,sha256=phk7Eb7UOU5IsRfJyaDPdOfdUWli9gyA4cHjhgXcNEI,24609
17
+ mcp_vector_search/cli/commands/install.py,sha256=jZJp0mykQIpgF_vbUyqmO2GUlV2Dkjjukka-tcx30B4,22149
18
+ mcp_vector_search/cli/commands/install_old.py,sha256=phk7Eb7UOU5IsRfJyaDPdOfdUWli9gyA4cHjhgXcNEI,24609
18
19
  mcp_vector_search/cli/commands/mcp.py,sha256=Mk4g43R9yRiJVMxsDFUsZldKqY0yi2coQmhAqIMPklo,38958
19
20
  mcp_vector_search/cli/commands/reset.py,sha256=bsIT6zjDf6gsvIkVaRaUClYzlTyNe--8t0NWkBY0ldU,13724
20
21
  mcp_vector_search/cli/commands/search.py,sha256=yyou7wO9qZ_w2oiKdyOrk2WUxvkFpc-Up8hpflxYlyw,24802
21
- mcp_vector_search/cli/commands/status.py,sha256=sa_0QHioCmPF5A7obqV2ls-9kmX_JYo7nq3XUe1dmrg,19630
22
- mcp_vector_search/cli/commands/visualize.py,sha256=AGzpyKAsIZObHkDLiDJCi8D7Qn1CfQOrXZKAVXEZLJM,41547
22
+ mcp_vector_search/cli/commands/status.py,sha256=-Ke58000-bi74T0J-dy1zaD3C2TuZBSdERm9mIm3kXI,19814
23
+ mcp_vector_search/cli/commands/uninstall.py,sha256=XjFoSJlQkM1GPg7zaK65jOvb-hb87F2Ciyldbn8y2jc,14953
24
+ mcp_vector_search/cli/commands/visualize.py,sha256=1KlMP6upluYFWeu54Y7btHYBc73Qok-jKBdva0EoHm8,51677
23
25
  mcp_vector_search/cli/commands/watch.py,sha256=2pyWRoo4fIppFnyQ4sW4IBLHmpb_IwnTjRnzHkVBPcQ,8927
24
26
  mcp_vector_search/config/__init__.py,sha256=r_qAQkU5gc0EQ2pv8EQARACe4klhrR_WRJqCb9lfGc0,54
25
27
  mcp_vector_search/config/constants.py,sha256=afXR6SvLLd8QYY4MG4s1vq-hCJiQsE5PhnE-XG9lvb4,1092
@@ -27,16 +29,16 @@ mcp_vector_search/config/defaults.py,sha256=CYeUOd5cTvyKDZpimgYEku28jeKo5w013dHi
27
29
  mcp_vector_search/config/settings.py,sha256=m8o8j-tvWcuzrnNL6YWbi2fFbcB3lZY1kMNinJJUFCM,4328
28
30
  mcp_vector_search/core/__init__.py,sha256=bWKtKmmaFs7gG5XPCbrx77UYIVeO1FF8wIJxpj1dLNw,48
29
31
  mcp_vector_search/core/auto_indexer.py,sha256=0S4lZXaUgqEytMSA2FxQsh5hN7V1mbSLYVzEf_dslYQ,10307
30
- mcp_vector_search/core/connection_pool.py,sha256=Yo-gUQQbHawtuvh6OcJiAlbbvWQGQBd31QZOvs498fg,11224
31
- mcp_vector_search/core/database.py,sha256=GYGdVop2wuYxR9aTiRu-SApG3AwgEASLJlOGACB8hVw,46493
32
- mcp_vector_search/core/directory_index.py,sha256=WBgk3cm7fmTuchnD4t2haxqJ6S0a6MrUCkOYdwL_48Q,10982
32
+ mcp_vector_search/core/connection_pool.py,sha256=Ls6zenjS6lGNiQvaPtpVEB4g7J-Yt2b_bM89FiS_io4,12668
33
+ mcp_vector_search/core/database.py,sha256=5mA1CoJTFsfgfdcvCeijpYBzs_BvdWVmwEzdy_qpff8,46489
34
+ mcp_vector_search/core/directory_index.py,sha256=kCHyltX0b3ZgAm21BSBU_NI_DlyIJ9xq7TrnkFmCmb4,11207
33
35
  mcp_vector_search/core/embeddings.py,sha256=wSMUNxZcuGPMxxQ1AbKqA1a3-0c6AiOqmuuI7OqTyaQ,10578
34
36
  mcp_vector_search/core/exceptions.py,sha256=3bCjT8wmrLz_0e_Tayr90049zNTKYFWZa19kl0saKz8,1597
35
37
  mcp_vector_search/core/factory.py,sha256=tM6Ft-V9buF7nn9xbRMU1ngji-BJOKt6BhtfQhFLmF4,10384
36
38
  mcp_vector_search/core/git_hooks.py,sha256=xOfPpzgKoNTwM-vbhAihUucgudBQk45bCAVR5zJOFlQ,10878
37
- mcp_vector_search/core/indexer.py,sha256=2qyYbxSMUgHhgkV3E1rxplKl-Pf-A_FMxm5W0Ek9q3M,34521
38
- mcp_vector_search/core/models.py,sha256=ydd1UOJd7ln_x85J-HMyKuDcLpXFyg7rfvhcX_qkH0Q,11601
39
- mcp_vector_search/core/project.py,sha256=l81uc5B4CB8VXDbcHzF-_CagxIERDh23tH0iNqTePTs,10403
39
+ mcp_vector_search/core/indexer.py,sha256=QtIpVI9b7KxpR4k9Fn5ocyhoTtw0a-VT9Mo6WUPHAYQ,35942
40
+ mcp_vector_search/core/models.py,sha256=p_Wheg4qNAC5cPwcuIQr9_GhR8MFDpIdEYeC_rRYuLw,11618
41
+ mcp_vector_search/core/project.py,sha256=X-Xs10_L0onNv23zrVcR94aZvN77nhYMNxjQ7mmRqKM,10838
40
42
  mcp_vector_search/core/scheduler.py,sha256=PBSlu-ieDYCXOMGYY7QKv9UReFEDPHNmwnUv_xb4vxg,11761
41
43
  mcp_vector_search/core/search.py,sha256=9OC8-KwWdbw4y4QPQ-VXfz0encVHTJWYLtah3_chqG8,33682
42
44
  mcp_vector_search/core/watcher.py,sha256=-DFRCnuUfcqcTrkZPQqfJSvxKAxnpt-axgEj1V-B0O4,10862
@@ -44,24 +46,24 @@ mcp_vector_search/mcp/__init__.py,sha256=gfKR0QV7Jqvj5y0LMBe9gSghd5_rPsvm_rml0ry
44
46
  mcp_vector_search/mcp/__main__.py,sha256=KgwB59HM5pRLe2Aj-fvDFcTp95lyT0wfmS3ENcx9gPc,571
45
47
  mcp_vector_search/mcp/server.py,sha256=YmHyvJqg_CjxEN356ShFrTPLgDKzaLXyrt8tNHVryEY,28322
46
48
  mcp_vector_search/parsers/__init__.py,sha256=jr0Yqz1xMok4lnG7_aXnkZThGuefrlAj8PWVbfeT3QQ,228
47
- mcp_vector_search/parsers/base.py,sha256=KS0bJeGoZamdqGS7KdAOGFxO_P_-TsjrlBnuzeu8B5U,8768
49
+ mcp_vector_search/parsers/base.py,sha256=dtezuhVgs9dAWlRYT23GGONyckWzTqkEj7Vcwor8C1k,9341
48
50
  mcp_vector_search/parsers/dart.py,sha256=li2JP0vwpSsZnMNq0PweZCD_o-y1jUwubHlSA8nm8KQ,21816
49
51
  mcp_vector_search/parsers/html.py,sha256=nzEVDV4oCBp3wpL8vp6WWx5eqiB39agu9E048JkuRJQ,13010
50
- mcp_vector_search/parsers/javascript.py,sha256=BPBesLTf3wAMw6di7bx2HclDkxc0am2Bp4uLHXQ1BxI,23789
52
+ mcp_vector_search/parsers/javascript.py,sha256=uJMLTbY5NGDSf0817bZ6dQQuQMXLUfIEZzyPuxLxoBY,24337
51
53
  mcp_vector_search/parsers/php.py,sha256=1QjnE8SAQF86VQ7pNfn1Pmpg5Dni4M7KCLU7212DkXM,24774
52
- mcp_vector_search/parsers/python.py,sha256=1KwubEIpyxHPCnlxN8EMb745A14JJ7J4YO2iVOeuHfs,19092
53
- mcp_vector_search/parsers/registry.py,sha256=L00EUp58ff_xatgQW-cBvE0AVBQi7cGtvr6zWV_NYbc,6457
54
+ mcp_vector_search/parsers/python.py,sha256=SiiFySPqZuSMgoctElZCMm18XEA3p1x1qdm1uvYlj_4,19322
55
+ mcp_vector_search/parsers/registry.py,sha256=_a5TwQ19xRb8bQUJhybL04PdmIEXhZ0-6687QvZvE_M,6556
54
56
  mcp_vector_search/parsers/ruby.py,sha256=xNn_z8txAWL7E1ULcFMiqn5idFhf5GQn8N3x1yE-c2k,23818
55
57
  mcp_vector_search/parsers/text.py,sha256=jvMdFspbmrrOR1GSGzf2gvBDCXz1cPN_xemoDK4fUvM,6084
56
58
  mcp_vector_search/parsers/utils.py,sha256=10vT-GJSeDUoGSIslz8zq4RyavFiMtizCmcnn9cbQqE,8103
57
59
  mcp_vector_search/utils/__init__.py,sha256=Eq6lY-oPMfCt-GpPUbg9QbmTHuQVmTaVDBMU2183KVw,887
58
- mcp_vector_search/utils/gitignore.py,sha256=UFu0YTjdy1CHArNhOT6s43-Q6wjIqRH2G90E9GuFotA,8684
60
+ mcp_vector_search/utils/gitignore.py,sha256=hJHt5YsfEvLIfweaa968tGTavcbxqh3X5nSaeWOS_FA,8690
59
61
  mcp_vector_search/utils/monorepo.py,sha256=leTYx4ffN4IO0wDg7OWYfXMWMPp2Q_uEHl5WQFNk5Hs,8657
60
62
  mcp_vector_search/utils/timing.py,sha256=THC7mfbTYnUpnnDcblgQacYMzbEkfFoIShx6plmhCgg,11285
61
63
  mcp_vector_search/utils/version.py,sha256=d7fS-CLemxb8UzZ9j18zH0Y0Ud097ljKKYYOPulnGPE,1138
62
64
  mcp_vector_search/visualization/index.html,sha256=OHbMTjsyFXj0s8vKd9MjCgfIEflWfSlNNBTDUzOxgfM,22899
63
- mcp_vector_search-0.12.0.dist-info/METADATA,sha256=l06Me377kppL0--MOLuyZzsAKU7UyO8vH60WLXFPi0I,19121
64
- mcp_vector_search-0.12.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
65
- mcp_vector_search-0.12.0.dist-info/entry_points.txt,sha256=y3Ygtc_JiBchNEIL-tPABo7EbzBExGAxwGdkkeP5D2I,86
66
- mcp_vector_search-0.12.0.dist-info/licenses/LICENSE,sha256=FqZUgGJH_tZKZLQsMCpXaLawRyLmyFKRVfMwYyEcyTs,1072
67
- mcp_vector_search-0.12.0.dist-info/RECORD,,
65
+ mcp_vector_search-0.12.1.dist-info/METADATA,sha256=cO-orPU1CPd1VxYtrbNPdMPxhTWmAWfF_f7wE6C3Qw0,20606
66
+ mcp_vector_search-0.12.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
67
+ mcp_vector_search-0.12.1.dist-info/entry_points.txt,sha256=y3Ygtc_JiBchNEIL-tPABo7EbzBExGAxwGdkkeP5D2I,86
68
+ mcp_vector_search-0.12.1.dist-info/licenses/LICENSE,sha256=FqZUgGJH_tZKZLQsMCpXaLawRyLmyFKRVfMwYyEcyTs,1072
69
+ mcp_vector_search-0.12.1.dist-info/RECORD,,