mcp-vector-search 0.5.1__py3-none-any.whl → 0.6.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.
- mcp_vector_search/__init__.py +2 -2
- mcp_vector_search/cli/commands/index.py +11 -4
- mcp_vector_search/cli/commands/init.py +28 -8
- mcp_vector_search/cli/commands/install.py +9 -9
- mcp_vector_search/cli/commands/reset.py +1 -1
- mcp_vector_search/cli/commands/search.py +42 -0
- mcp_vector_search/cli/commands/status.py +33 -0
- mcp_vector_search/cli/didyoumean.py +1 -2
- mcp_vector_search/cli/history.py +6 -3
- mcp_vector_search/cli/main.py +12 -7
- mcp_vector_search/cli/suggestions.py +2 -1
- mcp_vector_search/config/constants.py +24 -0
- mcp_vector_search/config/defaults.py +4 -0
- mcp_vector_search/config/settings.py +4 -0
- mcp_vector_search/core/database.py +1 -1
- mcp_vector_search/core/factory.py +11 -3
- mcp_vector_search/core/indexer.py +80 -5
- mcp_vector_search/core/search.py +195 -88
- mcp_vector_search/parsers/base.py +5 -7
- mcp_vector_search/parsers/dart.py +2 -2
- mcp_vector_search/parsers/text.py +2 -1
- mcp_vector_search/parsers/utils.py +265 -0
- mcp_vector_search/utils/gitignore.py +1 -1
- {mcp_vector_search-0.5.1.dist-info → mcp_vector_search-0.6.1.dist-info}/METADATA +4 -2
- {mcp_vector_search-0.5.1.dist-info → mcp_vector_search-0.6.1.dist-info}/RECORD +28 -26
- {mcp_vector_search-0.5.1.dist-info → mcp_vector_search-0.6.1.dist-info}/WHEEL +0 -0
- {mcp_vector_search-0.5.1.dist-info → mcp_vector_search-0.6.1.dist-info}/entry_points.txt +0 -0
- {mcp_vector_search-0.5.1.dist-info → mcp_vector_search-0.6.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
"""Shared utilities for language parsers.
|
|
2
|
+
|
|
3
|
+
This module contains common functionality used across multiple parsers
|
|
4
|
+
to reduce code duplication and improve maintainability.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from re import Pattern
|
|
9
|
+
|
|
10
|
+
from ..config.constants import DEFAULT_CHUNK_SIZE
|
|
11
|
+
from ..core.models import CodeChunk
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def split_into_lines(content: str) -> list[str]:
|
|
15
|
+
"""Split content into lines, handling different line endings.
|
|
16
|
+
|
|
17
|
+
Args:
|
|
18
|
+
content: Text content to split
|
|
19
|
+
|
|
20
|
+
Returns:
|
|
21
|
+
List of lines with line endings preserved
|
|
22
|
+
"""
|
|
23
|
+
# Handle different line endings and preserve them
|
|
24
|
+
return content.splitlines(keepends=True)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def get_line_range(lines: list[str], start_line: int, end_line: int) -> str:
|
|
28
|
+
"""Get content from a range of lines.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
lines: List of lines
|
|
32
|
+
start_line: Starting line number (1-indexed)
|
|
33
|
+
end_line: Ending line number (1-indexed, inclusive)
|
|
34
|
+
|
|
35
|
+
Returns:
|
|
36
|
+
Joined content from the line range
|
|
37
|
+
"""
|
|
38
|
+
# Convert to 0-indexed
|
|
39
|
+
start_idx = max(0, start_line - 1)
|
|
40
|
+
end_idx = min(len(lines), end_line)
|
|
41
|
+
|
|
42
|
+
return "".join(lines[start_idx:end_idx])
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def find_block_end(lines: list[str], start_line: int, indent_char: str = " ") -> int:
|
|
46
|
+
"""Find the end of a code block based on indentation.
|
|
47
|
+
|
|
48
|
+
This is a simple heuristic that looks for the next line with equal or
|
|
49
|
+
lower indentation level than the starting line.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
lines: List of lines
|
|
53
|
+
start_line: Starting line number (1-indexed)
|
|
54
|
+
indent_char: Character used for indentation (space or tab)
|
|
55
|
+
|
|
56
|
+
Returns:
|
|
57
|
+
End line number (1-indexed)
|
|
58
|
+
"""
|
|
59
|
+
if start_line > len(lines):
|
|
60
|
+
return len(lines)
|
|
61
|
+
|
|
62
|
+
# Get indentation of starting line
|
|
63
|
+
start_idx = start_line - 1
|
|
64
|
+
start_indent = len(lines[start_idx]) - len(lines[start_idx].lstrip())
|
|
65
|
+
|
|
66
|
+
# Find next line with same or lower indentation
|
|
67
|
+
for i in range(start_idx + 1, len(lines)):
|
|
68
|
+
line = lines[i]
|
|
69
|
+
if line.strip(): # Skip empty lines
|
|
70
|
+
current_indent = len(line) - len(line.lstrip())
|
|
71
|
+
if current_indent <= start_indent:
|
|
72
|
+
return i # Return 0-indexed position, will be used as end_line
|
|
73
|
+
|
|
74
|
+
return len(lines)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def create_simple_chunks(
|
|
78
|
+
content: str, file_path: Path, chunk_size: int = DEFAULT_CHUNK_SIZE
|
|
79
|
+
) -> list[CodeChunk]:
|
|
80
|
+
"""Create simple line-based chunks from content.
|
|
81
|
+
|
|
82
|
+
This is a fallback chunking strategy when more sophisticated
|
|
83
|
+
parsing is not available.
|
|
84
|
+
|
|
85
|
+
Args:
|
|
86
|
+
content: File content
|
|
87
|
+
file_path: Path to source file
|
|
88
|
+
chunk_size: Number of lines per chunk
|
|
89
|
+
|
|
90
|
+
Returns:
|
|
91
|
+
List of code chunks
|
|
92
|
+
"""
|
|
93
|
+
lines = split_into_lines(content)
|
|
94
|
+
chunks = []
|
|
95
|
+
|
|
96
|
+
for i in range(0, len(lines), chunk_size):
|
|
97
|
+
start_line = i + 1
|
|
98
|
+
end_line = min(i + chunk_size, len(lines))
|
|
99
|
+
|
|
100
|
+
chunk_content = get_line_range(lines, start_line, end_line)
|
|
101
|
+
|
|
102
|
+
if chunk_content.strip():
|
|
103
|
+
chunk = CodeChunk(
|
|
104
|
+
content=chunk_content,
|
|
105
|
+
start_line=start_line,
|
|
106
|
+
end_line=end_line,
|
|
107
|
+
file_path=str(file_path),
|
|
108
|
+
chunk_type="block",
|
|
109
|
+
metadata={"source": "simple_chunking"},
|
|
110
|
+
)
|
|
111
|
+
chunks.append(chunk)
|
|
112
|
+
|
|
113
|
+
return chunks
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def extract_docstring(lines: list[str], start_line: int) -> str | None:
|
|
117
|
+
"""Extract docstring/comment block starting from a given line.
|
|
118
|
+
|
|
119
|
+
Supports Python docstrings (triple quotes), JavaDoc (/** */),
|
|
120
|
+
and hash-based comments (# or //).
|
|
121
|
+
|
|
122
|
+
Args:
|
|
123
|
+
lines: List of lines
|
|
124
|
+
start_line: Line number to start looking (1-indexed)
|
|
125
|
+
|
|
126
|
+
Returns:
|
|
127
|
+
Docstring content or None if not found
|
|
128
|
+
"""
|
|
129
|
+
if start_line > len(lines):
|
|
130
|
+
return None
|
|
131
|
+
|
|
132
|
+
start_idx = start_line - 1
|
|
133
|
+
|
|
134
|
+
# Check for Python-style docstring
|
|
135
|
+
triple_double = '"""'
|
|
136
|
+
triple_single = "'''"
|
|
137
|
+
for quote in [triple_double, triple_single]:
|
|
138
|
+
if quote in lines[start_idx]:
|
|
139
|
+
# Multi-line docstring
|
|
140
|
+
docstring_lines = []
|
|
141
|
+
in_docstring = False
|
|
142
|
+
|
|
143
|
+
for line in lines[start_idx:]:
|
|
144
|
+
if quote in line:
|
|
145
|
+
if in_docstring:
|
|
146
|
+
# End of docstring
|
|
147
|
+
docstring_lines.append(line[: line.index(quote) + 3])
|
|
148
|
+
break
|
|
149
|
+
else:
|
|
150
|
+
# Start of docstring
|
|
151
|
+
in_docstring = True
|
|
152
|
+
docstring_lines.append(line)
|
|
153
|
+
if line.count(quote) >= 2:
|
|
154
|
+
# Single-line docstring
|
|
155
|
+
break
|
|
156
|
+
elif in_docstring:
|
|
157
|
+
docstring_lines.append(line)
|
|
158
|
+
|
|
159
|
+
if docstring_lines:
|
|
160
|
+
return "".join(docstring_lines).strip()
|
|
161
|
+
|
|
162
|
+
# Check for JavaDoc-style comment
|
|
163
|
+
if start_idx > 0 and "/**" in lines[start_idx - 1]:
|
|
164
|
+
comment_lines = []
|
|
165
|
+
for i in range(start_idx - 1, -1, -1):
|
|
166
|
+
comment_lines.insert(0, lines[i])
|
|
167
|
+
if "/**" in lines[i]:
|
|
168
|
+
break
|
|
169
|
+
|
|
170
|
+
for i in range(start_idx, len(lines)):
|
|
171
|
+
if "*/" in lines[i]:
|
|
172
|
+
comment_lines.append(lines[i])
|
|
173
|
+
break
|
|
174
|
+
comment_lines.append(lines[i])
|
|
175
|
+
|
|
176
|
+
return "".join(comment_lines).strip()
|
|
177
|
+
|
|
178
|
+
# Check for hash/slash comments on previous lines
|
|
179
|
+
comment_lines = []
|
|
180
|
+
for i in range(start_idx - 1, -1, -1):
|
|
181
|
+
line = lines[i].strip()
|
|
182
|
+
if line.startswith("#") or line.startswith("//"):
|
|
183
|
+
comment_lines.insert(0, lines[i])
|
|
184
|
+
elif line:
|
|
185
|
+
break
|
|
186
|
+
|
|
187
|
+
if comment_lines:
|
|
188
|
+
return "".join(comment_lines).strip()
|
|
189
|
+
|
|
190
|
+
return None
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
def extract_imports_with_pattern(
|
|
194
|
+
content: str, pattern: Pattern[str], chunk_type: str = "import"
|
|
195
|
+
) -> list[str]:
|
|
196
|
+
"""Extract import/require/use statements using a regex pattern.
|
|
197
|
+
|
|
198
|
+
Args:
|
|
199
|
+
content: Source code content
|
|
200
|
+
pattern: Compiled regex pattern to match imports
|
|
201
|
+
chunk_type: Type of import (import, require, use, etc.)
|
|
202
|
+
|
|
203
|
+
Returns:
|
|
204
|
+
List of import statements
|
|
205
|
+
"""
|
|
206
|
+
imports = []
|
|
207
|
+
for match in pattern.finditer(content):
|
|
208
|
+
import_line = match.group(0).strip()
|
|
209
|
+
imports.append(import_line)
|
|
210
|
+
return imports
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
def find_code_blocks_with_patterns(
|
|
214
|
+
content: str, lines: list[str], patterns: dict[str, Pattern[str]], file_path: Path
|
|
215
|
+
) -> list[CodeChunk]:
|
|
216
|
+
"""Find code blocks (functions, classes, etc.) using regex patterns.
|
|
217
|
+
|
|
218
|
+
This is a generic fallback parser that can be configured with different
|
|
219
|
+
patterns for different languages.
|
|
220
|
+
|
|
221
|
+
Args:
|
|
222
|
+
content: Source code content
|
|
223
|
+
lines: Pre-split lines
|
|
224
|
+
patterns: Dictionary mapping block types to compiled regex patterns
|
|
225
|
+
file_path: Path to source file
|
|
226
|
+
|
|
227
|
+
Returns:
|
|
228
|
+
List of code chunks
|
|
229
|
+
"""
|
|
230
|
+
chunks = []
|
|
231
|
+
|
|
232
|
+
for block_type, pattern in patterns.items():
|
|
233
|
+
for match in pattern.finditer(content):
|
|
234
|
+
# Extract the name from the first capturing group
|
|
235
|
+
name = match.group(1) if match.groups() else "unknown"
|
|
236
|
+
|
|
237
|
+
# Find line number
|
|
238
|
+
match_pos = match.start()
|
|
239
|
+
start_line = content[:match_pos].count("\n") + 1
|
|
240
|
+
|
|
241
|
+
# Find end of block using indentation
|
|
242
|
+
end_line = find_block_end(lines, start_line)
|
|
243
|
+
|
|
244
|
+
# Get block content
|
|
245
|
+
block_content = get_line_range(lines, start_line, end_line)
|
|
246
|
+
|
|
247
|
+
if block_content.strip():
|
|
248
|
+
# Extract docstring
|
|
249
|
+
docstring = extract_docstring(lines, start_line + 1)
|
|
250
|
+
|
|
251
|
+
chunk = CodeChunk(
|
|
252
|
+
content=block_content,
|
|
253
|
+
start_line=start_line,
|
|
254
|
+
end_line=end_line,
|
|
255
|
+
file_path=str(file_path),
|
|
256
|
+
chunk_type=block_type,
|
|
257
|
+
metadata={
|
|
258
|
+
"name": name,
|
|
259
|
+
"docstring": docstring,
|
|
260
|
+
"source": "regex_fallback",
|
|
261
|
+
},
|
|
262
|
+
)
|
|
263
|
+
chunks.append(chunk)
|
|
264
|
+
|
|
265
|
+
return chunks
|
|
@@ -123,7 +123,7 @@ class GitignoreParser:
|
|
|
123
123
|
with open(gitignore_path, encoding="utf-8", errors="ignore") as f:
|
|
124
124
|
lines = f.readlines()
|
|
125
125
|
|
|
126
|
-
for
|
|
126
|
+
for _line_num, line in enumerate(lines, 1):
|
|
127
127
|
line = line.strip()
|
|
128
128
|
|
|
129
129
|
# Skip empty lines and comments
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mcp-vector-search
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.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
|
|
@@ -44,6 +44,7 @@ Requires-Dist: click-didyoumean>=0.3.0
|
|
|
44
44
|
Requires-Dist: httpx>=0.25.0
|
|
45
45
|
Requires-Dist: loguru>=0.7.0
|
|
46
46
|
Requires-Dist: mcp>=1.12.4
|
|
47
|
+
Requires-Dist: packaging>=23.0
|
|
47
48
|
Requires-Dist: pydantic-settings>=2.1.0
|
|
48
49
|
Requires-Dist: pydantic>=2.5.0
|
|
49
50
|
Requires-Dist: rich>=13.0.0
|
|
@@ -62,7 +63,7 @@ Description-Content-Type: text/markdown
|
|
|
62
63
|
[](https://www.python.org/downloads/)
|
|
63
64
|
[](https://opensource.org/licenses/MIT)
|
|
64
65
|
|
|
65
|
-
> ⚠️ **Alpha Release (v0.0
|
|
66
|
+
> ⚠️ **Alpha Release (v0.6.0)**: This is an early-stage project under active development. Expect breaking changes and rough edges. Feedback and contributions are welcome!
|
|
66
67
|
|
|
67
68
|
A modern, fast, and intelligent code search tool that understands your codebase through semantic analysis and AST parsing. Built with Python, powered by ChromaDB, and designed for developer productivity.
|
|
68
69
|
|
|
@@ -73,6 +74,7 @@ A modern, fast, and intelligent code search tool that understands your codebase
|
|
|
73
74
|
- **AST-Aware Parsing**: Understands code structure (functions, classes, methods)
|
|
74
75
|
- **Multi-Language Support**: 8 languages - Python, JavaScript, TypeScript, Dart/Flutter, PHP, Ruby, HTML, and Markdown/Text (with extensible architecture)
|
|
75
76
|
- **Real-time Indexing**: File watching with automatic index updates
|
|
77
|
+
- **Automatic Version Tracking**: Smart reindexing on tool upgrades
|
|
76
78
|
- **Local-First**: Complete privacy with on-device processing
|
|
77
79
|
- **Zero Configuration**: Auto-detects project structure and languages
|
|
78
80
|
|
|
@@ -1,60 +1,62 @@
|
|
|
1
|
-
mcp_vector_search/__init__.py,sha256=
|
|
1
|
+
mcp_vector_search/__init__.py,sha256=7RjW6QzohQ-IjqQ-eJnvKjAlZ7tIsfxbJILz4NVfxFA,299
|
|
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=
|
|
4
|
+
mcp_vector_search/cli/didyoumean.py,sha256=F_ss-EX4F9RgnMsEhdTwLpyNCah9SqnBZc2tBtzASck,15918
|
|
5
5
|
mcp_vector_search/cli/export.py,sha256=iluxuRT2KELdKlQeDAlVkteiel4GGrng153UAw9H0as,10804
|
|
6
|
-
mcp_vector_search/cli/history.py,sha256=
|
|
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=
|
|
8
|
+
mcp_vector_search/cli/main.py,sha256=VsW2U-E-_9jB6UfA4vTE0K-d657WZyLyIM2hvXgre9c,17057
|
|
9
9
|
mcp_vector_search/cli/output.py,sha256=7ShIk_UKzhDzRGxI6JluPu0gGkbmKOevqgIAKR4oCa0,12560
|
|
10
|
-
mcp_vector_search/cli/suggestions.py,sha256=
|
|
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=EHLqToCXrZs3gjIAg7pV8Bq8yVslUXWC4AnTcZQgSPQ,11337
|
|
14
|
-
mcp_vector_search/cli/commands/index.py,sha256=
|
|
15
|
-
mcp_vector_search/cli/commands/init.py,sha256=
|
|
16
|
-
mcp_vector_search/cli/commands/install.py,sha256=
|
|
14
|
+
mcp_vector_search/cli/commands/index.py,sha256=haEj8MfCzHvv4wGaPryd01aJKFt_AGGT-zwyvSnp9fQ,15639
|
|
15
|
+
mcp_vector_search/cli/commands/init.py,sha256=1kK2YmWnMCnAmWjI3Om3d_NE89APisL-vvUFfKcyp2I,26408
|
|
16
|
+
mcp_vector_search/cli/commands/install.py,sha256=phk7Eb7UOU5IsRfJyaDPdOfdUWli9gyA4cHjhgXcNEI,24609
|
|
17
17
|
mcp_vector_search/cli/commands/mcp.py,sha256=FKZNxYrDc7HfPTFBUEypCv-8atsrHEdbtU6Yfg9QUMA,18569
|
|
18
|
-
mcp_vector_search/cli/commands/reset.py,sha256=
|
|
19
|
-
mcp_vector_search/cli/commands/search.py,sha256=
|
|
20
|
-
mcp_vector_search/cli/commands/status.py,sha256=
|
|
18
|
+
mcp_vector_search/cli/commands/reset.py,sha256=bsIT6zjDf6gsvIkVaRaUClYzlTyNe--8t0NWkBY0ldU,13724
|
|
19
|
+
mcp_vector_search/cli/commands/search.py,sha256=JFEkXQjevx2XZJhHTH8xy7G7XVcH5nGazJfacKSyEA4,20650
|
|
20
|
+
mcp_vector_search/cli/commands/status.py,sha256=7ro6M3aifV0cuCqqxJ278P9g-fbhzvjoOABUoitMrPo,18929
|
|
21
21
|
mcp_vector_search/cli/commands/watch.py,sha256=2pyWRoo4fIppFnyQ4sW4IBLHmpb_IwnTjRnzHkVBPcQ,8927
|
|
22
22
|
mcp_vector_search/config/__init__.py,sha256=r_qAQkU5gc0EQ2pv8EQARACe4klhrR_WRJqCb9lfGc0,54
|
|
23
|
-
mcp_vector_search/config/
|
|
24
|
-
mcp_vector_search/config/
|
|
23
|
+
mcp_vector_search/config/constants.py,sha256=afXR6SvLLd8QYY4MG4s1vq-hCJiQsE5PhnE-XG9lvb4,1092
|
|
24
|
+
mcp_vector_search/config/defaults.py,sha256=CYeUOd5cTvyKDZpimgYEku28jeKo5w013dHiXxXP5kY,5128
|
|
25
|
+
mcp_vector_search/config/settings.py,sha256=m8o8j-tvWcuzrnNL6YWbi2fFbcB3lZY1kMNinJJUFCM,4328
|
|
25
26
|
mcp_vector_search/core/__init__.py,sha256=bWKtKmmaFs7gG5XPCbrx77UYIVeO1FF8wIJxpj1dLNw,48
|
|
26
27
|
mcp_vector_search/core/auto_indexer.py,sha256=0S4lZXaUgqEytMSA2FxQsh5hN7V1mbSLYVzEf_dslYQ,10307
|
|
27
28
|
mcp_vector_search/core/connection_pool.py,sha256=Yo-gUQQbHawtuvh6OcJiAlbbvWQGQBd31QZOvs498fg,11224
|
|
28
|
-
mcp_vector_search/core/database.py,sha256=
|
|
29
|
+
mcp_vector_search/core/database.py,sha256=4CDqtmxtg1EsajZP36Xwc43jD_84szVfq5SFLpJh3eg,35515
|
|
29
30
|
mcp_vector_search/core/embeddings.py,sha256=wSMUNxZcuGPMxxQ1AbKqA1a3-0c6AiOqmuuI7OqTyaQ,10578
|
|
30
31
|
mcp_vector_search/core/exceptions.py,sha256=3bCjT8wmrLz_0e_Tayr90049zNTKYFWZa19kl0saKz8,1597
|
|
31
|
-
mcp_vector_search/core/factory.py,sha256=
|
|
32
|
+
mcp_vector_search/core/factory.py,sha256=tM6Ft-V9buF7nn9xbRMU1ngji-BJOKt6BhtfQhFLmF4,10384
|
|
32
33
|
mcp_vector_search/core/git_hooks.py,sha256=xOfPpzgKoNTwM-vbhAihUucgudBQk45bCAVR5zJOFlQ,10878
|
|
33
|
-
mcp_vector_search/core/indexer.py,sha256=
|
|
34
|
+
mcp_vector_search/core/indexer.py,sha256=MlsMDcGvl1ww6wAtCeTVU5AkaBM-z2LP4HGXErKoDHM,18331
|
|
34
35
|
mcp_vector_search/core/models.py,sha256=fnZxvUkd9Afxmdwtw2BJX7uik6rQTwuWBTTqTeqDi0A,6697
|
|
35
36
|
mcp_vector_search/core/project.py,sha256=RNeLBZZw6SO5mXqCwYfhStTGuVgeMq1US5UftG0SBYk,10069
|
|
36
37
|
mcp_vector_search/core/scheduler.py,sha256=PBSlu-ieDYCXOMGYY7QKv9UReFEDPHNmwnUv_xb4vxg,11761
|
|
37
|
-
mcp_vector_search/core/search.py,sha256=
|
|
38
|
+
mcp_vector_search/core/search.py,sha256=9OC8-KwWdbw4y4QPQ-VXfz0encVHTJWYLtah3_chqG8,33682
|
|
38
39
|
mcp_vector_search/core/watcher.py,sha256=-DFRCnuUfcqcTrkZPQqfJSvxKAxnpt-axgEj1V-B0O4,10862
|
|
39
40
|
mcp_vector_search/mcp/__init__.py,sha256=gfKR0QV7Jqvj5y0LMBe9gSghd5_rPsvm_rml0ryQtoY,158
|
|
40
41
|
mcp_vector_search/mcp/__main__.py,sha256=KgwB59HM5pRLe2Aj-fvDFcTp95lyT0wfmS3ENcx9gPc,571
|
|
41
42
|
mcp_vector_search/mcp/server.py,sha256=YmHyvJqg_CjxEN356ShFrTPLgDKzaLXyrt8tNHVryEY,28322
|
|
42
43
|
mcp_vector_search/parsers/__init__.py,sha256=jr0Yqz1xMok4lnG7_aXnkZThGuefrlAj8PWVbfeT3QQ,228
|
|
43
|
-
mcp_vector_search/parsers/base.py,sha256
|
|
44
|
-
mcp_vector_search/parsers/dart.py,sha256=
|
|
44
|
+
mcp_vector_search/parsers/base.py,sha256=kOurwRR4xlyIje9rHLlEVa-OCl1LK8ih_fAFWHFg78g,5395
|
|
45
|
+
mcp_vector_search/parsers/dart.py,sha256=li2JP0vwpSsZnMNq0PweZCD_o-y1jUwubHlSA8nm8KQ,21816
|
|
45
46
|
mcp_vector_search/parsers/html.py,sha256=nzEVDV4oCBp3wpL8vp6WWx5eqiB39agu9E048JkuRJQ,13010
|
|
46
47
|
mcp_vector_search/parsers/javascript.py,sha256=P7fT_tXCzUuXATTkTx_DyD4EuG0_KjIDlay09MhkKTE,9824
|
|
47
48
|
mcp_vector_search/parsers/php.py,sha256=1QjnE8SAQF86VQ7pNfn1Pmpg5Dni4M7KCLU7212DkXM,24774
|
|
48
49
|
mcp_vector_search/parsers/python.py,sha256=IB4gQ6DD6Oqvws5p3LQtHTJOtmH6f9FWmO9fQRfGQx4,15688
|
|
49
50
|
mcp_vector_search/parsers/registry.py,sha256=L00EUp58ff_xatgQW-cBvE0AVBQi7cGtvr6zWV_NYbc,6457
|
|
50
51
|
mcp_vector_search/parsers/ruby.py,sha256=xNn_z8txAWL7E1ULcFMiqn5idFhf5GQn8N3x1yE-c2k,23818
|
|
51
|
-
mcp_vector_search/parsers/text.py,sha256=
|
|
52
|
+
mcp_vector_search/parsers/text.py,sha256=jvMdFspbmrrOR1GSGzf2gvBDCXz1cPN_xemoDK4fUvM,6084
|
|
53
|
+
mcp_vector_search/parsers/utils.py,sha256=10vT-GJSeDUoGSIslz8zq4RyavFiMtizCmcnn9cbQqE,8103
|
|
52
54
|
mcp_vector_search/utils/__init__.py,sha256=Eq6lY-oPMfCt-GpPUbg9QbmTHuQVmTaVDBMU2183KVw,887
|
|
53
|
-
mcp_vector_search/utils/gitignore.py,sha256=
|
|
55
|
+
mcp_vector_search/utils/gitignore.py,sha256=bzie3V5gOGIN7j3FNVLLCx8O_hfZJDUqqAy5T3lT3Ek,7685
|
|
54
56
|
mcp_vector_search/utils/timing.py,sha256=THC7mfbTYnUpnnDcblgQacYMzbEkfFoIShx6plmhCgg,11285
|
|
55
57
|
mcp_vector_search/utils/version.py,sha256=d7fS-CLemxb8UzZ9j18zH0Y0Ud097ljKKYYOPulnGPE,1138
|
|
56
|
-
mcp_vector_search-0.
|
|
57
|
-
mcp_vector_search-0.
|
|
58
|
-
mcp_vector_search-0.
|
|
59
|
-
mcp_vector_search-0.
|
|
60
|
-
mcp_vector_search-0.
|
|
58
|
+
mcp_vector_search-0.6.1.dist-info/METADATA,sha256=C_UHz8WxHNfvbm2YMNmvhvC8PFFaF4nBCueGUq1pKQA,19120
|
|
59
|
+
mcp_vector_search-0.6.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
60
|
+
mcp_vector_search-0.6.1.dist-info/entry_points.txt,sha256=y3Ygtc_JiBchNEIL-tPABo7EbzBExGAxwGdkkeP5D2I,86
|
|
61
|
+
mcp_vector_search-0.6.1.dist-info/licenses/LICENSE,sha256=FqZUgGJH_tZKZLQsMCpXaLawRyLmyFKRVfMwYyEcyTs,1072
|
|
62
|
+
mcp_vector_search-0.6.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|