hanzo-mcp 0.8.8__py3-none-any.whl → 0.8.13__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 hanzo-mcp might be problematic. Click here for more details.
- hanzo_mcp/__init__.py +1 -3
- hanzo_mcp/analytics/posthog_analytics.py +4 -17
- hanzo_mcp/bridge.py +9 -25
- hanzo_mcp/cli.py +8 -17
- hanzo_mcp/cli_enhanced.py +5 -14
- hanzo_mcp/cli_plugin.py +3 -9
- hanzo_mcp/config/settings.py +6 -20
- hanzo_mcp/config/tool_config.py +2 -4
- hanzo_mcp/core/base_agent.py +88 -88
- hanzo_mcp/core/model_registry.py +238 -210
- hanzo_mcp/dev_server.py +5 -15
- hanzo_mcp/prompts/__init__.py +2 -6
- hanzo_mcp/prompts/project_todo_reminder.py +3 -9
- hanzo_mcp/prompts/tool_explorer.py +1 -3
- hanzo_mcp/prompts/utils.py +7 -21
- hanzo_mcp/server.py +6 -7
- hanzo_mcp/tools/__init__.py +13 -29
- hanzo_mcp/tools/agent/__init__.py +2 -1
- hanzo_mcp/tools/agent/agent.py +10 -30
- hanzo_mcp/tools/agent/agent_tool.py +6 -17
- hanzo_mcp/tools/agent/agent_tool_v1_deprecated.py +15 -42
- hanzo_mcp/tools/agent/claude_desktop_auth.py +3 -9
- hanzo_mcp/tools/agent/cli_agent_base.py +7 -24
- hanzo_mcp/tools/agent/cli_tools.py +76 -75
- hanzo_mcp/tools/agent/code_auth.py +1 -3
- hanzo_mcp/tools/agent/code_auth_tool.py +2 -6
- hanzo_mcp/tools/agent/critic_tool.py +8 -24
- hanzo_mcp/tools/agent/iching_tool.py +12 -36
- hanzo_mcp/tools/agent/network_tool.py +7 -18
- hanzo_mcp/tools/agent/prompt.py +1 -5
- hanzo_mcp/tools/agent/review_tool.py +10 -25
- hanzo_mcp/tools/agent/swarm_alias.py +1 -3
- hanzo_mcp/tools/agent/swarm_tool.py +16 -41
- hanzo_mcp/tools/agent/swarm_tool_v1_deprecated.py +11 -39
- hanzo_mcp/tools/agent/unified_cli_tools.py +38 -38
- hanzo_mcp/tools/common/batch_tool.py +15 -45
- hanzo_mcp/tools/common/config_tool.py +9 -28
- hanzo_mcp/tools/common/context.py +1 -3
- hanzo_mcp/tools/common/critic_tool.py +1 -3
- hanzo_mcp/tools/common/decorators.py +2 -6
- hanzo_mcp/tools/common/enhanced_base.py +2 -6
- hanzo_mcp/tools/common/fastmcp_pagination.py +4 -12
- hanzo_mcp/tools/common/forgiving_edit.py +9 -28
- hanzo_mcp/tools/common/mode.py +1 -5
- hanzo_mcp/tools/common/paginated_base.py +3 -11
- hanzo_mcp/tools/common/paginated_response.py +10 -30
- hanzo_mcp/tools/common/pagination.py +3 -9
- hanzo_mcp/tools/common/permissions.py +3 -9
- hanzo_mcp/tools/common/personality.py +9 -34
- hanzo_mcp/tools/common/plugin_loader.py +3 -15
- hanzo_mcp/tools/common/stats.py +7 -19
- hanzo_mcp/tools/common/thinking_tool.py +1 -3
- hanzo_mcp/tools/common/tool_disable.py +2 -6
- hanzo_mcp/tools/common/tool_list.py +2 -6
- hanzo_mcp/tools/common/validation.py +1 -3
- hanzo_mcp/tools/config/config_tool.py +7 -13
- hanzo_mcp/tools/config/index_config.py +1 -3
- hanzo_mcp/tools/config/mode_tool.py +5 -15
- hanzo_mcp/tools/database/database_manager.py +3 -9
- hanzo_mcp/tools/database/graph.py +1 -3
- hanzo_mcp/tools/database/graph_add.py +3 -9
- hanzo_mcp/tools/database/graph_query.py +11 -34
- hanzo_mcp/tools/database/graph_remove.py +3 -9
- hanzo_mcp/tools/database/graph_search.py +6 -20
- hanzo_mcp/tools/database/graph_stats.py +11 -33
- hanzo_mcp/tools/database/sql.py +4 -12
- hanzo_mcp/tools/database/sql_query.py +6 -10
- hanzo_mcp/tools/database/sql_search.py +2 -6
- hanzo_mcp/tools/database/sql_stats.py +5 -15
- hanzo_mcp/tools/editor/neovim_command.py +1 -3
- hanzo_mcp/tools/editor/neovim_session.py +7 -13
- hanzo_mcp/tools/filesystem/__init__.py +2 -3
- hanzo_mcp/tools/filesystem/ast_multi_edit.py +14 -43
- hanzo_mcp/tools/filesystem/base.py +4 -12
- hanzo_mcp/tools/filesystem/batch_search.py +35 -115
- hanzo_mcp/tools/filesystem/content_replace.py +4 -12
- hanzo_mcp/tools/filesystem/diff.py +2 -10
- hanzo_mcp/tools/filesystem/directory_tree.py +9 -27
- hanzo_mcp/tools/filesystem/directory_tree_paginated.py +5 -15
- hanzo_mcp/tools/filesystem/edit.py +6 -18
- hanzo_mcp/tools/filesystem/find.py +3 -9
- hanzo_mcp/tools/filesystem/find_files.py +2 -6
- hanzo_mcp/tools/filesystem/git_search.py +9 -24
- hanzo_mcp/tools/filesystem/grep.py +9 -27
- hanzo_mcp/tools/filesystem/multi_edit.py +6 -18
- hanzo_mcp/tools/filesystem/read.py +8 -26
- hanzo_mcp/tools/filesystem/rules_tool.py +6 -17
- hanzo_mcp/tools/filesystem/search_tool.py +18 -62
- hanzo_mcp/tools/filesystem/symbols_tool.py +5 -15
- hanzo_mcp/tools/filesystem/tree.py +1 -3
- hanzo_mcp/tools/filesystem/watch.py +1 -3
- hanzo_mcp/tools/filesystem/write.py +1 -3
- hanzo_mcp/tools/jupyter/base.py +6 -20
- hanzo_mcp/tools/jupyter/jupyter.py +4 -12
- hanzo_mcp/tools/jupyter/notebook_edit.py +11 -35
- hanzo_mcp/tools/jupyter/notebook_read.py +2 -6
- hanzo_mcp/tools/llm/consensus_tool.py +8 -24
- hanzo_mcp/tools/llm/llm_manage.py +2 -6
- hanzo_mcp/tools/llm/llm_tool.py +17 -58
- hanzo_mcp/tools/llm/llm_unified.py +18 -59
- hanzo_mcp/tools/llm/provider_tools.py +1 -3
- hanzo_mcp/tools/lsp/lsp_tool.py +5 -17
- hanzo_mcp/tools/mcp/mcp_add.py +3 -5
- hanzo_mcp/tools/mcp/mcp_remove.py +1 -1
- hanzo_mcp/tools/mcp/mcp_stats.py +1 -3
- hanzo_mcp/tools/mcp/mcp_tool.py +9 -23
- hanzo_mcp/tools/memory/__init__.py +33 -40
- hanzo_mcp/tools/memory/knowledge_tools.py +7 -25
- hanzo_mcp/tools/memory/memory_tools.py +7 -19
- hanzo_mcp/tools/search/find_tool.py +10 -32
- hanzo_mcp/tools/search/unified_search.py +27 -81
- hanzo_mcp/tools/shell/__init__.py +2 -2
- hanzo_mcp/tools/shell/auto_background.py +2 -6
- hanzo_mcp/tools/shell/base.py +1 -5
- hanzo_mcp/tools/shell/base_process.py +5 -7
- hanzo_mcp/tools/shell/bash_session.py +7 -24
- hanzo_mcp/tools/shell/bash_session_executor.py +5 -15
- hanzo_mcp/tools/shell/bash_tool.py +3 -7
- hanzo_mcp/tools/shell/command_executor.py +26 -79
- hanzo_mcp/tools/shell/logs.py +4 -16
- hanzo_mcp/tools/shell/npx.py +2 -8
- hanzo_mcp/tools/shell/npx_tool.py +1 -3
- hanzo_mcp/tools/shell/pkill.py +4 -12
- hanzo_mcp/tools/shell/process_tool.py +2 -8
- hanzo_mcp/tools/shell/processes.py +5 -17
- hanzo_mcp/tools/shell/run_background.py +1 -3
- hanzo_mcp/tools/shell/run_command.py +1 -3
- hanzo_mcp/tools/shell/run_command_windows.py +1 -3
- hanzo_mcp/tools/shell/session_manager.py +2 -6
- hanzo_mcp/tools/shell/session_storage.py +2 -6
- hanzo_mcp/tools/shell/streaming_command.py +7 -23
- hanzo_mcp/tools/shell/uvx.py +4 -14
- hanzo_mcp/tools/shell/uvx_background.py +2 -6
- hanzo_mcp/tools/shell/uvx_tool.py +1 -3
- hanzo_mcp/tools/shell/zsh_tool.py +12 -20
- hanzo_mcp/tools/todo/todo.py +1 -3
- hanzo_mcp/tools/todo/todo_read.py +3 -9
- hanzo_mcp/tools/todo/todo_write.py +6 -18
- hanzo_mcp/tools/vector/__init__.py +3 -9
- hanzo_mcp/tools/vector/ast_analyzer.py +6 -20
- hanzo_mcp/tools/vector/git_ingester.py +10 -30
- hanzo_mcp/tools/vector/index_tool.py +3 -9
- hanzo_mcp/tools/vector/infinity_store.py +11 -30
- hanzo_mcp/tools/vector/mock_infinity.py +159 -0
- hanzo_mcp/tools/vector/project_manager.py +4 -12
- hanzo_mcp/tools/vector/vector.py +2 -6
- hanzo_mcp/tools/vector/vector_index.py +8 -8
- hanzo_mcp/tools/vector/vector_search.py +7 -21
- {hanzo_mcp-0.8.8.dist-info → hanzo_mcp-0.8.13.dist-info}/METADATA +2 -2
- hanzo_mcp-0.8.13.dist-info/RECORD +193 -0
- hanzo_mcp-0.8.8.dist-info/RECORD +0 -192
- {hanzo_mcp-0.8.8.dist-info → hanzo_mcp-0.8.13.dist-info}/WHEEL +0 -0
- {hanzo_mcp-0.8.8.dist-info → hanzo_mcp-0.8.13.dist-info}/entry_points.txt +0 -0
- {hanzo_mcp-0.8.8.dist-info → hanzo_mcp-0.8.13.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"""Mock implementation of infinity_embedded for testing on unsupported platforms."""
|
|
2
|
+
|
|
3
|
+
import random
|
|
4
|
+
from typing import Any, Dict, List
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class MockTable:
|
|
9
|
+
"""Mock implementation of an Infinity table."""
|
|
10
|
+
|
|
11
|
+
def __init__(self, name: str, schema: Dict[str, Any]):
|
|
12
|
+
self.name = name
|
|
13
|
+
self.schema = schema
|
|
14
|
+
self.data = []
|
|
15
|
+
self._id_counter = 0
|
|
16
|
+
|
|
17
|
+
def insert(self, records: List[Dict[str, Any]]):
|
|
18
|
+
"""Insert records into the table."""
|
|
19
|
+
for record in records:
|
|
20
|
+
# Add an internal ID if not present
|
|
21
|
+
if "id" not in record:
|
|
22
|
+
record["_internal_id"] = self._id_counter
|
|
23
|
+
self._id_counter += 1
|
|
24
|
+
self.data.append(record)
|
|
25
|
+
|
|
26
|
+
def delete(self, condition: str):
|
|
27
|
+
"""Delete records matching condition."""
|
|
28
|
+
# Simple implementation - just clear for now
|
|
29
|
+
self.data = [r for r in self.data if not self._eval_condition(r, condition)]
|
|
30
|
+
|
|
31
|
+
def output(self, columns: List[str]):
|
|
32
|
+
"""Start a query chain."""
|
|
33
|
+
return MockQuery(self, columns)
|
|
34
|
+
|
|
35
|
+
def _eval_condition(self, record: Dict[str, Any], condition: str) -> bool:
|
|
36
|
+
"""Evaluate a simple condition."""
|
|
37
|
+
# Very basic implementation
|
|
38
|
+
if "=" in condition:
|
|
39
|
+
field, value = condition.split("=", 1)
|
|
40
|
+
field = field.strip()
|
|
41
|
+
value = value.strip().strip("'\"")
|
|
42
|
+
return str(record.get(field, "")) == value
|
|
43
|
+
return False
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class MockQuery:
|
|
47
|
+
"""Mock query builder."""
|
|
48
|
+
|
|
49
|
+
def __init__(self, table: MockTable, columns: List[str]):
|
|
50
|
+
self.table = table
|
|
51
|
+
self.columns = columns
|
|
52
|
+
self.filters = []
|
|
53
|
+
self.vector_search = None
|
|
54
|
+
self.limit_value = None
|
|
55
|
+
|
|
56
|
+
def filter(self, condition: str):
|
|
57
|
+
"""Add a filter condition."""
|
|
58
|
+
self.filters.append(condition)
|
|
59
|
+
return self
|
|
60
|
+
|
|
61
|
+
def match_dense(self, column: str, vector: List[float], dtype: str, metric: str, limit: int):
|
|
62
|
+
"""Add vector search."""
|
|
63
|
+
self.vector_search = {
|
|
64
|
+
"column": column,
|
|
65
|
+
"vector": vector,
|
|
66
|
+
"dtype": dtype,
|
|
67
|
+
"metric": metric,
|
|
68
|
+
"limit": limit,
|
|
69
|
+
}
|
|
70
|
+
self.limit_value = limit
|
|
71
|
+
return self
|
|
72
|
+
|
|
73
|
+
def to_pl(self):
|
|
74
|
+
"""Execute query and return polars-like result."""
|
|
75
|
+
results = self.table.data.copy()
|
|
76
|
+
|
|
77
|
+
# Apply filters
|
|
78
|
+
for condition in self.filters:
|
|
79
|
+
results = [r for r in results if self.table._eval_condition(r, condition)]
|
|
80
|
+
|
|
81
|
+
# Apply vector search (mock similarity)
|
|
82
|
+
if self.vector_search:
|
|
83
|
+
# Add mock scores
|
|
84
|
+
for r in results:
|
|
85
|
+
r["score"] = random.uniform(0.5, 1.0)
|
|
86
|
+
# Sort by score
|
|
87
|
+
results.sort(key=lambda x: x.get("score", 0), reverse=True)
|
|
88
|
+
# Limit results
|
|
89
|
+
if self.limit_value:
|
|
90
|
+
results = results[: self.limit_value]
|
|
91
|
+
|
|
92
|
+
# Return mock polars DataFrame
|
|
93
|
+
return MockDataFrame(results)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
class MockDataFrame:
|
|
97
|
+
"""Mock polars DataFrame."""
|
|
98
|
+
|
|
99
|
+
def __init__(self, data: List[Dict[str, Any]]):
|
|
100
|
+
self.data = data
|
|
101
|
+
|
|
102
|
+
def __len__(self):
|
|
103
|
+
return len(self.data)
|
|
104
|
+
|
|
105
|
+
def iter_rows(self, named: bool = False):
|
|
106
|
+
"""Iterate over rows."""
|
|
107
|
+
if named:
|
|
108
|
+
return iter(self.data)
|
|
109
|
+
else:
|
|
110
|
+
# Return tuples
|
|
111
|
+
if not self.data:
|
|
112
|
+
return iter([])
|
|
113
|
+
keys = list(self.data[0].keys())
|
|
114
|
+
return iter([tuple(row.get(k) for k in keys) for row in self.data])
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
class MockDatabase:
|
|
118
|
+
"""Mock implementation of an Infinity database."""
|
|
119
|
+
|
|
120
|
+
def __init__(self, name: str):
|
|
121
|
+
self.name = name
|
|
122
|
+
self.tables = {}
|
|
123
|
+
|
|
124
|
+
def create_table(self, name: str, schema: Dict[str, Any]) -> MockTable:
|
|
125
|
+
"""Create a new table."""
|
|
126
|
+
table = MockTable(name, schema)
|
|
127
|
+
self.tables[name] = table
|
|
128
|
+
return table
|
|
129
|
+
|
|
130
|
+
def get_table(self, name: str) -> MockTable:
|
|
131
|
+
"""Get an existing table."""
|
|
132
|
+
if name not in self.tables:
|
|
133
|
+
raise KeyError(f"Table {name} not found")
|
|
134
|
+
return self.tables[name]
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
class MockInfinity:
|
|
138
|
+
"""Mock implementation of Infinity connection."""
|
|
139
|
+
|
|
140
|
+
def __init__(self, path: str):
|
|
141
|
+
self.path = Path(path)
|
|
142
|
+
self.databases = {}
|
|
143
|
+
# Ensure directory exists
|
|
144
|
+
self.path.mkdir(parents=True, exist_ok=True)
|
|
145
|
+
|
|
146
|
+
def get_database(self, name: str) -> MockDatabase:
|
|
147
|
+
"""Get or create a database."""
|
|
148
|
+
if name not in self.databases:
|
|
149
|
+
self.databases[name] = MockDatabase(name)
|
|
150
|
+
return self.databases[name]
|
|
151
|
+
|
|
152
|
+
def disconnect(self):
|
|
153
|
+
"""Disconnect from Infinity."""
|
|
154
|
+
pass
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def connect(path: str) -> MockInfinity:
|
|
158
|
+
"""Connect to Infinity (mock implementation)."""
|
|
159
|
+
return MockInfinity(path)
|
|
@@ -153,9 +153,7 @@ class ProjectVectorManager:
|
|
|
153
153
|
|
|
154
154
|
return None
|
|
155
155
|
|
|
156
|
-
def get_vector_store(
|
|
157
|
-
self, project_info: Optional[ProjectInfo] = None
|
|
158
|
-
) -> InfinityVectorStore:
|
|
156
|
+
def get_vector_store(self, project_info: Optional[ProjectInfo] = None) -> InfinityVectorStore:
|
|
159
157
|
"""Get vector store for a project or global store.
|
|
160
158
|
|
|
161
159
|
Args:
|
|
@@ -178,9 +176,7 @@ class ProjectVectorManager:
|
|
|
178
176
|
|
|
179
177
|
if project_key not in self.vector_stores:
|
|
180
178
|
# Get index path based on configuration
|
|
181
|
-
index_path = self.index_config.get_index_path(
|
|
182
|
-
"vector", str(project_info.root_path)
|
|
183
|
-
)
|
|
179
|
+
index_path = self.index_config.get_index_path("vector", str(project_info.root_path))
|
|
184
180
|
index_path.mkdir(parents=True, exist_ok=True)
|
|
185
181
|
|
|
186
182
|
self.vector_stores[project_key] = InfinityVectorStore(
|
|
@@ -270,9 +266,7 @@ class ProjectVectorManager:
|
|
|
270
266
|
search_tasks.append(
|
|
271
267
|
asyncio.get_event_loop().run_in_executor(
|
|
272
268
|
self.executor,
|
|
273
|
-
lambda: global_store.search(
|
|
274
|
-
query, limit_per_project, score_threshold
|
|
275
|
-
),
|
|
269
|
+
lambda: global_store.search(query, limit_per_project, score_threshold),
|
|
276
270
|
)
|
|
277
271
|
)
|
|
278
272
|
project_names.append("global")
|
|
@@ -287,9 +281,7 @@ class ProjectVectorManager:
|
|
|
287
281
|
search_tasks.append(
|
|
288
282
|
asyncio.get_event_loop().run_in_executor(
|
|
289
283
|
self.executor,
|
|
290
|
-
lambda vs=vector_store: vs.search(
|
|
291
|
-
query, limit_per_project, score_threshold
|
|
292
|
-
),
|
|
284
|
+
lambda vs=vector_store: vs.search(query, limit_per_project, score_threshold),
|
|
293
285
|
)
|
|
294
286
|
)
|
|
295
287
|
project_names.append(project_info.name)
|
hanzo_mcp/tools/vector/vector.py
CHANGED
|
@@ -249,9 +249,7 @@ vector --action clear --path ./old_code
|
|
|
249
249
|
output.append(f"Chunks created: {stats.get('chunks_created', 0)}")
|
|
250
250
|
if stats.get("git_commits"):
|
|
251
251
|
output.append(f"Git commits indexed: {stats['git_commits']}")
|
|
252
|
-
output.append(
|
|
253
|
-
f"Total documents: {project.get_stats().get('total_documents', 0)}"
|
|
254
|
-
)
|
|
252
|
+
output.append(f"Total documents: {project.get_stats().get('total_documents', 0)}")
|
|
255
253
|
|
|
256
254
|
return "\n".join(output)
|
|
257
255
|
|
|
@@ -283,9 +281,7 @@ vector --action clear --path ./old_code
|
|
|
283
281
|
if stats.get("projects"):
|
|
284
282
|
output.append(f"\nProjects indexed: {len(stats['projects'])}")
|
|
285
283
|
for proj in stats["projects"]:
|
|
286
|
-
output.append(
|
|
287
|
-
f" - {proj['name']}: {proj['documents']} docs, {proj['size_mb']:.1f} MB"
|
|
288
|
-
)
|
|
284
|
+
output.append(f" - {proj['name']}: {proj['documents']} docs, {proj['size_mb']:.1f} MB")
|
|
289
285
|
|
|
290
286
|
return "\n".join(output)
|
|
291
287
|
|
|
@@ -90,18 +90,18 @@ directories alongside them. Use this to build searchable knowledge bases per pro
|
|
|
90
90
|
return f"Error: File does not exist: {file_path}"
|
|
91
91
|
|
|
92
92
|
# Index file using project-aware manager
|
|
93
|
-
doc_ids, project_info = (
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
metadata=metadata,
|
|
99
|
-
)
|
|
93
|
+
doc_ids, project_info = self.project_manager.add_file_to_appropriate_store(
|
|
94
|
+
file_path=file_path,
|
|
95
|
+
chunk_size=chunk_size,
|
|
96
|
+
chunk_overlap=chunk_overlap,
|
|
97
|
+
metadata=metadata,
|
|
100
98
|
)
|
|
101
99
|
|
|
102
100
|
file_name = Path(file_path).name
|
|
103
101
|
if project_info:
|
|
104
|
-
return
|
|
102
|
+
return (
|
|
103
|
+
f"Successfully indexed {file_name} with {len(doc_ids)} chunks in project '{project_info.name}'"
|
|
104
|
+
)
|
|
105
105
|
else:
|
|
106
106
|
return f"Successfully indexed {file_name} with {len(doc_ids)} chunks in global database"
|
|
107
107
|
|
|
@@ -135,9 +135,7 @@ Use 'grep' for exact text/pattern matching, 'vector_search' for semantic similar
|
|
|
135
135
|
break
|
|
136
136
|
|
|
137
137
|
if project_info:
|
|
138
|
-
vector_store = self.project_manager.get_vector_store(
|
|
139
|
-
project_info
|
|
140
|
-
)
|
|
138
|
+
vector_store = self.project_manager.get_vector_store(project_info)
|
|
141
139
|
results = vector_store.search(
|
|
142
140
|
query=query,
|
|
143
141
|
limit=limit,
|
|
@@ -145,9 +143,7 @@ Use 'grep' for exact text/pattern matching, 'vector_search' for semantic similar
|
|
|
145
143
|
)
|
|
146
144
|
for result in results:
|
|
147
145
|
result.document.metadata = result.document.metadata or {}
|
|
148
|
-
result.document.metadata["search_project"] =
|
|
149
|
-
project_info.name
|
|
150
|
-
)
|
|
146
|
+
result.document.metadata["search_project"] = project_info.name
|
|
151
147
|
else:
|
|
152
148
|
return f"Project '{search_scope}' not found"
|
|
153
149
|
else:
|
|
@@ -155,14 +151,10 @@ Use 'grep' for exact text/pattern matching, 'vector_search' for semantic similar
|
|
|
155
151
|
import os
|
|
156
152
|
|
|
157
153
|
current_dir = os.getcwd()
|
|
158
|
-
project_info = self.project_manager.get_project_for_path(
|
|
159
|
-
current_dir
|
|
160
|
-
)
|
|
154
|
+
project_info = self.project_manager.get_project_for_path(current_dir)
|
|
161
155
|
|
|
162
156
|
if project_info:
|
|
163
|
-
vector_store = self.project_manager.get_vector_store(
|
|
164
|
-
project_info
|
|
165
|
-
)
|
|
157
|
+
vector_store = self.project_manager.get_vector_store(project_info)
|
|
166
158
|
results = vector_store.search(
|
|
167
159
|
query=query,
|
|
168
160
|
limit=limit,
|
|
@@ -170,9 +162,7 @@ Use 'grep' for exact text/pattern matching, 'vector_search' for semantic similar
|
|
|
170
162
|
)
|
|
171
163
|
for result in results:
|
|
172
164
|
result.document.metadata = result.document.metadata or {}
|
|
173
|
-
result.document.metadata["search_project"] =
|
|
174
|
-
project_info.name
|
|
175
|
-
)
|
|
165
|
+
result.document.metadata["search_project"] = project_info.name
|
|
176
166
|
else:
|
|
177
167
|
# Fall back to global store
|
|
178
168
|
global_store = self.project_manager._get_global_store()
|
|
@@ -190,9 +180,7 @@ Use 'grep' for exact text/pattern matching, 'vector_search' for semantic similar
|
|
|
190
180
|
|
|
191
181
|
# Filter by file if requested
|
|
192
182
|
if file_filter:
|
|
193
|
-
results = [
|
|
194
|
-
r for r in results if file_filter in (r.document.file_path or "")
|
|
195
|
-
]
|
|
183
|
+
results = [r for r in results if file_filter in (r.document.file_path or "")]
|
|
196
184
|
|
|
197
185
|
# Format results
|
|
198
186
|
output_lines = [f"Found {len(results)} results for query: '{query}'\n"]
|
|
@@ -220,9 +208,7 @@ Use 'grep' for exact text/pattern matching, 'vector_search' for semantic similar
|
|
|
220
208
|
if k not in ["chunk_number", "total_chunks", "search_project"]
|
|
221
209
|
}
|
|
222
210
|
if relevant_metadata:
|
|
223
|
-
output_lines.append(
|
|
224
|
-
f"Metadata: {json.dumps(relevant_metadata, indent=2)}"
|
|
225
|
-
)
|
|
211
|
+
output_lines.append(f"Metadata: {json.dumps(relevant_metadata, indent=2)}")
|
|
226
212
|
|
|
227
213
|
# Add content if requested
|
|
228
214
|
if include_content:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hanzo-mcp
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.13
|
|
4
4
|
Summary: The Zen of Hanzo MCP: One server to rule them all. The ultimate MCP that orchestrates all others.
|
|
5
5
|
Author-email: Hanzo Industries Inc <dev@hanzo.ai>
|
|
6
6
|
License: MIT
|
|
@@ -34,7 +34,7 @@ Requires-Dist: ffind>=1.3.0
|
|
|
34
34
|
Provides-Extra: dev
|
|
35
35
|
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
36
36
|
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
|
|
37
|
-
Requires-Dist: ruff>=0.
|
|
37
|
+
Requires-Dist: ruff>=0.13.0; extra == "dev"
|
|
38
38
|
Requires-Dist: black>=23.3.0; extra == "dev"
|
|
39
39
|
Requires-Dist: sphinx>=8.0.0; extra == "dev"
|
|
40
40
|
Requires-Dist: sphinx-rtd-theme>=3.0.0; extra == "dev"
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
hanzo_mcp/__init__.py,sha256=zZ5LH4TALzJxNuCe0qqo9KFdAahFvCXozndgfTiqYSo,862
|
|
2
|
+
hanzo_mcp/__main__.py,sha256=EvDEygOjvP6S_CrZSL8E4qgGUcO_xfmzEIbsLEHPaK4,130
|
|
3
|
+
hanzo_mcp/bridge.py,sha256=ObrWXK01tthz7SmlGie7S-W5bn8xT9M-utCBbDie6wc,14853
|
|
4
|
+
hanzo_mcp/cli.py,sha256=ZljeP_yS-LcPRQ4E-A3g91VYoYvee1Kh-t6wUva6tSA,14751
|
|
5
|
+
hanzo_mcp/cli_enhanced.py,sha256=iwYreGC6GiCqfFWDlRzMOmDqHKVm_qD7YD6I2nOxlpY,15942
|
|
6
|
+
hanzo_mcp/cli_plugin.py,sha256=WvqxDrErFXlgv5ZejMsrN78FsPLq9Gi_DoteFTPlcXU,3143
|
|
7
|
+
hanzo_mcp/compute_nodes.py,sha256=mFHQdxyo_SEeiwrQaPg-V9q2xmMRQiO7X_NePrWhSZ4,6315
|
|
8
|
+
hanzo_mcp/dev_server.py,sha256=uBGdvpK8rXPgLSoYv1quOIrCQnsUf02FwmYcTu8SvSI,8231
|
|
9
|
+
hanzo_mcp/server.py,sha256=gXKCVza7lyB5iLCfmKhOwzG42qtbGqZTtq6ZZcrIDME,10449
|
|
10
|
+
hanzo_mcp/server_enhanced.py,sha256=bBrObdysyda6Ggf-E3aL7UwktUNzYO_HG1V45Av5r-E,2003
|
|
11
|
+
hanzo_mcp/types.py,sha256=4YjIJmM7byrsY4eN10pbhIUpFMQ-fZrpK6scgt-U9dU,648
|
|
12
|
+
hanzo_mcp/analytics/__init__.py,sha256=ANyntTooBrpa_uvwE6KbYxB9uda610UT10pt2rrLiUU,213
|
|
13
|
+
hanzo_mcp/analytics/posthog_analytics.py,sha256=KwVgaCgU7wejf5pnbZx0WbNpyhEY2m81e0cIT77TpuU,10616
|
|
14
|
+
hanzo_mcp/config/__init__.py,sha256=1ifMucAN-htFEGdRpiC1T809Q03Bd7YUE5ATOHNi6Po,505
|
|
15
|
+
hanzo_mcp/config/settings.py,sha256=doZFlgwVyQHH4PMThHB6U2USTA0TfzqFag8n1JiFeK4,18859
|
|
16
|
+
hanzo_mcp/config/tool_config.py,sha256=N2yQSb3D5TtA_EDHxGaY_UFotAqonXMOXLwyBUjv_EU,6828
|
|
17
|
+
hanzo_mcp/core/base_agent.py,sha256=FtiGT9qP6Qg-5HoBxZK77LUo4zMUJDbZxiykmleTAO8,14795
|
|
18
|
+
hanzo_mcp/core/model_registry.py,sha256=DdV8e8jIFDqDvV2T6u_kvxL2WAqjuXvpfZDPHP6P8hE,13811
|
|
19
|
+
hanzo_mcp/prompts/__init__.py,sha256=flgM_MHLT49lrUqEhIzFj5amY0P6LMDp0-u1sDwz184,7648
|
|
20
|
+
hanzo_mcp/prompts/compact_conversation.py,sha256=nvD068KEesiMcevxxMBeIJh6AqT7YHOqyH6RepRFFfA,4206
|
|
21
|
+
hanzo_mcp/prompts/create_release.py,sha256=1Z8xSTtz5vAm0rWFnERpFu7wIYExT4iXhM6nGmQaM-s,1374
|
|
22
|
+
hanzo_mcp/prompts/enhanced_prompts.py,sha256=wkTMt9TaH8dW9ZxyqdXzyAYBkAWsubXw00Ewvl9pN8s,16908
|
|
23
|
+
hanzo_mcp/prompts/example_custom_prompt.py,sha256=HcUt3qSbKHlp7CgpP1pWa6gb1G441nxLtCVsa42qxw0,1671
|
|
24
|
+
hanzo_mcp/prompts/project_system.py,sha256=FgWxRaX7rPQwDZT3n69yBwLkQv4uJ4jcUZjKzikjR9A,8230
|
|
25
|
+
hanzo_mcp/prompts/project_todo_reminder.py,sha256=95Y32uI2LBfOPQ464K_8nDXNyIojQSOR0PkKQ1_EYy4,3586
|
|
26
|
+
hanzo_mcp/prompts/tool_explorer.py,sha256=Heysi9xgEU0UHCFZc44yDFi2a5pgED1ZiTeHlLtZuOI,16397
|
|
27
|
+
hanzo_mcp/prompts/utils.py,sha256=ubi8yrZH2NKPtJXilwhR6pUGSsO0lyKxP_T0SmQtFwM,9695
|
|
28
|
+
hanzo_mcp/tools/__init__.py,sha256=RZVr_s1Jnc1cCGcDU2FYKtPqZrTWa-ME9umPixl2YaU,19038
|
|
29
|
+
hanzo_mcp/tools/agent/__init__.py,sha256=88hWP8ontfRrFAefWxK5f5CiF9MqFZadLRVyso-8jPs,4781
|
|
30
|
+
hanzo_mcp/tools/agent/agent.py,sha256=CNiR4LA3E1vJcD5OUfzAEgPNVcHMYPy29B98TP948f4,12947
|
|
31
|
+
hanzo_mcp/tools/agent/agent_tool.py,sha256=gP68MnrI8zdtcI7HqSDc_fj213vw3-G97_napfoZXhU,16712
|
|
32
|
+
hanzo_mcp/tools/agent/agent_tool_v1_deprecated.py,sha256=IeM5jz8NlIyJi5Q8AKuyyvbfY5CzhTujRpUd9EuV54Q,26118
|
|
33
|
+
hanzo_mcp/tools/agent/clarification_protocol.py,sha256=QYJTmDSJVRDyZMow80TxWmnJurxuLo1MaIFge8t_Yvk,8041
|
|
34
|
+
hanzo_mcp/tools/agent/clarification_tool.py,sha256=up40UJLY5JrS6D3yBD1lW1vSrh79JNa3LoKrrNmAmwg,2449
|
|
35
|
+
hanzo_mcp/tools/agent/claude_cli_tool.py,sha256=55Wc0LKgYCtDKQ02NXOYPMhx-sW7fL_NSCx0upsvvb4,3812
|
|
36
|
+
hanzo_mcp/tools/agent/claude_desktop_auth.py,sha256=h-pUQRpJvaO-r4w_iQ4yU7rk2xOMdUmy2dFT9xctc4E,16161
|
|
37
|
+
hanzo_mcp/tools/agent/cli_agent_base.py,sha256=4F2iOk6nvB63wcxb1ZLuZyK2USWRFizZvcnBWdMes28,6190
|
|
38
|
+
hanzo_mcp/tools/agent/cli_tools.py,sha256=eOFOlyWX_BExduAuBppTwQXbYGKhKlMC1pOAFhwFNVs,16116
|
|
39
|
+
hanzo_mcp/tools/agent/code_auth.py,sha256=97g3qqBBJNfGdoUppVhc2-BzvyWJVQUe9sYUYS9cBmQ,13902
|
|
40
|
+
hanzo_mcp/tools/agent/code_auth_tool.py,sha256=blxLpYxamH-BXSySWp8D1zDdqC82GUBhd8U7pGSPugU,6105
|
|
41
|
+
hanzo_mcp/tools/agent/codex_cli_tool.py,sha256=9jyB4cTtdcK50g6oapk7Bo4n8C8bAO2B9RuHHLOtP54,3697
|
|
42
|
+
hanzo_mcp/tools/agent/critic_tool.py,sha256=u0Ww3z4OoIviCsW0pTtmrHT_d-fjwi5FbuzYtgwRSj8,13775
|
|
43
|
+
hanzo_mcp/tools/agent/gemini_cli_tool.py,sha256=4PE7qYGlFC6_u0T2_Yh3WfBqZjuZM4UY2rPBkKtwaEU,3927
|
|
44
|
+
hanzo_mcp/tools/agent/grok_cli_tool.py,sha256=YH1qweHDWDm-Yo84gcw_bL2w_vIdhSc6f7LNJlAHSeQ,3761
|
|
45
|
+
hanzo_mcp/tools/agent/iching_tool.py,sha256=v29rVUM2yaY1vlpab00G3RsUuFEfE_RwPixGGe1tOUU,23314
|
|
46
|
+
hanzo_mcp/tools/agent/network_tool.py,sha256=rD9kEAqBY8SCh1Spey6ifhlIfRAbGEbDSZowoTFZPVw,8340
|
|
47
|
+
hanzo_mcp/tools/agent/prompt.py,sha256=16UWq8cxCPDWru5V8izcBqqorEohCxhQkh4KLPzcibI,6782
|
|
48
|
+
hanzo_mcp/tools/agent/review_tool.py,sha256=XfAdte_fHIKD-LFOQGmmfBnA-Ub35MSdijV-BNXCzbo,16582
|
|
49
|
+
hanzo_mcp/tools/agent/swarm_alias.py,sha256=pbTtNXuwiWwXlywNeAgNmgTo5DdfpE5SRKtnwPD5-no,2970
|
|
50
|
+
hanzo_mcp/tools/agent/swarm_tool.py,sha256=nkTjGof-E3O0kaCtWGbpDx5wY5vapsCbwJlWvk2JxEI,22152
|
|
51
|
+
hanzo_mcp/tools/agent/swarm_tool_v1_deprecated.py,sha256=bo5QmIiIEOERGL2moPqIYoe7bDmyJkBLzv00D2e0pDE,20200
|
|
52
|
+
hanzo_mcp/tools/agent/tool_adapter.py,sha256=rLItgdKvvfzJL4chNIrNK_I5kSCm6ocmi83RQm93NgA,3191
|
|
53
|
+
hanzo_mcp/tools/agent/unified_cli_tools.py,sha256=aG_OE93fxI5r15AyFW8EuQIRozpnI4y6nyPulTaoU3A,8127
|
|
54
|
+
hanzo_mcp/tools/common/__init__.py,sha256=2gXIERXM7sALINWfDBbH_khzBRatvwQSWgpAvKlfy4o,1283
|
|
55
|
+
hanzo_mcp/tools/common/base.py,sha256=W46BbEhaPZ4fD1fTBpSt59kYjhV4-ALnS_83KOO2yHA,5875
|
|
56
|
+
hanzo_mcp/tools/common/batch_tool.py,sha256=B3qoXi71mCjdgbSvaibkMaPeVTbRanDpr_OG2FnBbDo,15697
|
|
57
|
+
hanzo_mcp/tools/common/config_tool.py,sha256=jJcILCRd5lXYDNp97BmKcSOcjCuHDDaqYqsscOF4X40,15886
|
|
58
|
+
hanzo_mcp/tools/common/context.py,sha256=xcSsG_wg-UdeaSCXLeGVBWvIv_m9-tTV_Rh6N5yVYvg,5126
|
|
59
|
+
hanzo_mcp/tools/common/context_fix.py,sha256=UNRpm_83x0iCsme7Y0D8NyvtJpyoS-7pcbXHaAnvp28,763
|
|
60
|
+
hanzo_mcp/tools/common/critic_tool.py,sha256=ueD_bBxxWsHQkf99_YpNiBYeFYoRL-vf4taEZRViPXw,6227
|
|
61
|
+
hanzo_mcp/tools/common/decorators.py,sha256=tqv5AqR4_bj5vPPM63nURqwP3X_udsJBDLXz4FNIBtI,6529
|
|
62
|
+
hanzo_mcp/tools/common/enhanced_base.py,sha256=qcYI0_cAt2Hj1RUXv_2Qg9pW5VLIxPwjsQ88ZHf31pI,3529
|
|
63
|
+
hanzo_mcp/tools/common/fastmcp_pagination.py,sha256=GrxSA346dIWFXy16vek5AqUoQByiorLA2IVLENuktIw,11588
|
|
64
|
+
hanzo_mcp/tools/common/forgiving_edit.py,sha256=QceOLOl3f96F64YF_Y-t5H9MZmFRbibJ6xfwqp7fVG8,9070
|
|
65
|
+
hanzo_mcp/tools/common/mode.py,sha256=_vGGnRx4DMSrmAj43xEe9I80MUsr3htmUbMvUBtTIWE,3212
|
|
66
|
+
hanzo_mcp/tools/common/mode_loader.py,sha256=Q5PtbGoLEpcGnZchoGPrlf6HA1kZK32PLziu0_c1ukY,3206
|
|
67
|
+
hanzo_mcp/tools/common/paginated_base.py,sha256=fea1MIwghSPEg9MVs1un3XqF2xIHbbKywcrBPPsLdng,8437
|
|
68
|
+
hanzo_mcp/tools/common/paginated_response.py,sha256=Y2PfXlnFYuKMir9BvYcKBc3nVgX6k7l5gs1eFGmiQF0,9942
|
|
69
|
+
hanzo_mcp/tools/common/pagination.py,sha256=vLO-DwjgzhlHmykkMdy5AAzEak5htv8qgxETnpsnqG4,6033
|
|
70
|
+
hanzo_mcp/tools/common/permissions.py,sha256=hsCYWDG7pcLHBm4aOAOf9htuotcqgB4Vwj2290kjIbg,7774
|
|
71
|
+
hanzo_mcp/tools/common/personality.py,sha256=MiT8QlOGzWGYlWuGgxokFcQU6bUbTWdpsEFBrTyB360,37315
|
|
72
|
+
hanzo_mcp/tools/common/plugin_loader.py,sha256=dVmwi-_sYfnTqIK_MbD1rBBp5I6Av8A6bF6-VAsOqSA,8701
|
|
73
|
+
hanzo_mcp/tools/common/stats.py,sha256=6QppW1BuSSj_IbadXGlPNoAVDuh9Azn9K76p8ZUvoH4,9565
|
|
74
|
+
hanzo_mcp/tools/common/test_helpers.py,sha256=rrepQmWvqRc3gyNkqBARjGBOFtFolUTQAU4vIfP1If8,1076
|
|
75
|
+
hanzo_mcp/tools/common/thinking_tool.py,sha256=3_gAOrkVG05LqirtYmiNSklz8NygNMbK1dR7frbD3Vo,5006
|
|
76
|
+
hanzo_mcp/tools/common/tool_disable.py,sha256=wkcXmxuz8uhfg48OaSYDD4SqpaTPSI3MAM6Ch_TQj9o,4238
|
|
77
|
+
hanzo_mcp/tools/common/tool_enable.py,sha256=MuDypR93ZKIllb6DexRN7md5yivFGYoIyByJY2nMkgg,4971
|
|
78
|
+
hanzo_mcp/tools/common/tool_list.py,sha256=lbwLGysOP2vFx74C9F0bY_a1A1Vr_oMV5t6wBgIdYwA,9389
|
|
79
|
+
hanzo_mcp/tools/common/truncate.py,sha256=D_RSTh0ZaEuuY-mwvgv46OEA9FtQRbJYcIOk_eVG4HM,3110
|
|
80
|
+
hanzo_mcp/tools/common/validation.py,sha256=u-7iTVxPAQn1ZRGfy7OQ6nAaJVmvzeB7RoU5-cbJY3Q,1687
|
|
81
|
+
hanzo_mcp/tools/config/__init__.py,sha256=Elxh2EV-SZ43XJGFBkMmE1Kb-ANZWTDnBTQyNOq8baA,313
|
|
82
|
+
hanzo_mcp/tools/config/config_tool.py,sha256=_TI_W-znQo7ro6U05ontUCUyU8ki-Pw-KyVzWsHlZbM,12275
|
|
83
|
+
hanzo_mcp/tools/config/index_config.py,sha256=NknWv5CjfTmBh9fNsvJQ4l-TBF_5IMVo5MObia1DrPE,6167
|
|
84
|
+
hanzo_mcp/tools/config/mode_tool.py,sha256=HS4yOkGv_vbTD0PRa5R-jTneQGnsRCW7UIuO7bUG3Ho,10777
|
|
85
|
+
hanzo_mcp/tools/database/__init__.py,sha256=UJEQWCeqUmyWu1npfy2T2dYT1rI7RawXqHwVhrmVhE8,2145
|
|
86
|
+
hanzo_mcp/tools/database/database_manager.py,sha256=xQzVWXlgTefso3y0yCqeZUKJ5W-mLFSi-TZJKvvaP8g,8436
|
|
87
|
+
hanzo_mcp/tools/database/graph.py,sha256=hQv36D-L6NTg_7AhYHOFLl-56mLave0qqLb4IGNAg6c,16955
|
|
88
|
+
hanzo_mcp/tools/database/graph_add.py,sha256=nvM0hXuvDzCKXGAtgBUnWGiHzIXtidUdJZQKnlR5PzU,7748
|
|
89
|
+
hanzo_mcp/tools/database/graph_query.py,sha256=sgA9oK9okyOf3GmlRi7PA_HjNgVBz1OF6FxWEY6BldQ,19462
|
|
90
|
+
hanzo_mcp/tools/database/graph_remove.py,sha256=A8Yy-BwCLG_DrcqZWKuU3-fvF6YmKFks3wnczkUh2Hk,8432
|
|
91
|
+
hanzo_mcp/tools/database/graph_search.py,sha256=HX_dMVFeWYJavmzYPWto79oz2ZHRJeJbvdvvWiYLvO4,12426
|
|
92
|
+
hanzo_mcp/tools/database/graph_stats.py,sha256=Pt-gNDMbR3K8zx-jrGy12JbDj_c0yUmEWgNa0PxkOhc,12722
|
|
93
|
+
hanzo_mcp/tools/database/sql.py,sha256=tSbxeHEq3ErQUjJnZHEQt91nghNld1vEo0sLRjkzAII,15484
|
|
94
|
+
hanzo_mcp/tools/database/sql_query.py,sha256=KvzhqHA8kSV7hAjMGaIcnXOp6_eslUjt77b0pkHkycM,7174
|
|
95
|
+
hanzo_mcp/tools/database/sql_search.py,sha256=MLL4isK3hO2Vl7TFBkCvtNyo1Z4GAYMB7MREz-kvbgI,9616
|
|
96
|
+
hanzo_mcp/tools/database/sql_stats.py,sha256=DPr9wDw5cQNmlX6qrbTXDcfs-somAx3Ufs3bcfPP31U,8699
|
|
97
|
+
hanzo_mcp/tools/editor/__init__.py,sha256=UfwWP23OUFmd6dYRwm2fKfaYDlignQ2gfi32yRson08,331
|
|
98
|
+
hanzo_mcp/tools/editor/neovim_command.py,sha256=OAmgF2bOoWbksvWAO5ZB-bP7p-y35AWHeBbfU3S8-0c,8024
|
|
99
|
+
hanzo_mcp/tools/editor/neovim_edit.py,sha256=AQjdxmAAAdZ4vA6C5FuMgLAqE-R29F8o3K0o1N5DTRI,8590
|
|
100
|
+
hanzo_mcp/tools/editor/neovim_session.py,sha256=oegYqCQdTTkQxoL9a5qB--UsaK_pmBBBazmI8QUW1cY,11659
|
|
101
|
+
hanzo_mcp/tools/filesystem/__init__.py,sha256=bj4xfqzZuABKzGi1G0qgk5IIDsFlOa6k2nQLYLc28dc,8532
|
|
102
|
+
hanzo_mcp/tools/filesystem/ast_multi_edit.py,sha256=kxJL-Nicav9Tn6BcDPBFKGq67XLWhtYgF1NV7UlhzK4,22180
|
|
103
|
+
hanzo_mcp/tools/filesystem/ast_tool.py,sha256=w_jk1K4TilYsm8tM5M0EQN7KBP_myd5B5NmZjdlEtjM,7286
|
|
104
|
+
hanzo_mcp/tools/filesystem/base.py,sha256=2lJLa4vmSGZz57v8KKVMI9_oLF4_-NYiYZVnm-GsyoQ,3762
|
|
105
|
+
hanzo_mcp/tools/filesystem/batch_search.py,sha256=gLu_OiIyftunm-8M-EJBcxRrqQds20i1jbMjQrX1jMg,32732
|
|
106
|
+
hanzo_mcp/tools/filesystem/content_replace.py,sha256=TvaPqnLrfpl6pwVPRKOq66pYW-NciX81r6HCwHdi15U,9783
|
|
107
|
+
hanzo_mcp/tools/filesystem/diff.py,sha256=j4n1ApCFr5Fz_KJnBptIZ_t6tXQSiLQ_tTyKtKfZtdk,7545
|
|
108
|
+
hanzo_mcp/tools/filesystem/directory_tree.py,sha256=en1p09wq1OQwJSLJ662URGdfxcT5q8vHIyyBbNrrHTw,10766
|
|
109
|
+
hanzo_mcp/tools/filesystem/directory_tree_paginated.py,sha256=csmnRAXdMHRKhcaKQeGH_msFgU_wsC0OnZrc67YYhZo,11489
|
|
110
|
+
hanzo_mcp/tools/filesystem/edit.py,sha256=s24Q4o0YWgiFr7tvxY7liSbs1Jn55GrejjJCpcJetLk,10415
|
|
111
|
+
hanzo_mcp/tools/filesystem/find.py,sha256=IVwbsMXDg7i-fYUlYVCaoAJMZNQFK_nKF11Z9-quTrs,15573
|
|
112
|
+
hanzo_mcp/tools/filesystem/find_files.py,sha256=Fny56a7Jst7T09iT_NnkBAy3RmB_EcAm8GnfklJvDJA,10742
|
|
113
|
+
hanzo_mcp/tools/filesystem/git_search.py,sha256=GMC26-PQZHkk0yFtzeOXXqq64JMSievSyH63yfu9MkM,16389
|
|
114
|
+
hanzo_mcp/tools/filesystem/grep.py,sha256=rk6NtE673_PLCOXZAC_Pa9-h9kP070wQU4GWJ6PohSc,16952
|
|
115
|
+
hanzo_mcp/tools/filesystem/multi_edit.py,sha256=guH9kKyph8PgyosAIK-kQSSN78nm6mzaUTB-sxT8qFc,13946
|
|
116
|
+
hanzo_mcp/tools/filesystem/read.py,sha256=bPY5iIsv3pHnj3dDszaxTWiHH-paIiMlKry3J4DVRjY,9296
|
|
117
|
+
hanzo_mcp/tools/filesystem/rules_tool.py,sha256=psJ114sUQO-d0ff86WWSF4ILsiZxSAHI7lfAnPbmdY8,8291
|
|
118
|
+
hanzo_mcp/tools/filesystem/search_tool.py,sha256=envNmNQUGhj81AvuXW7By14TksmKOh_dW4g5cPjLW6Y,25741
|
|
119
|
+
hanzo_mcp/tools/filesystem/symbols_tool.py,sha256=Q9KCkVdVzeAJCLqpYkrO8acEsR1zifd8bxJwYey2UL4,15865
|
|
120
|
+
hanzo_mcp/tools/filesystem/tree.py,sha256=nYjgDGL2y9Qy_mnizwAUfUf0LwDl5qMz1HTgLEj0qhc,7191
|
|
121
|
+
hanzo_mcp/tools/filesystem/unix_aliases.py,sha256=N4vy9SXtecCNtggv2zjFk8CmHvhuqTvR6Ha_KT1UE_g,3031
|
|
122
|
+
hanzo_mcp/tools/filesystem/watch.py,sha256=42O4HBnkzvokxK8ZGtjEnSiM2-s4rsY_41ZKrJYYCG4,6859
|
|
123
|
+
hanzo_mcp/tools/filesystem/write.py,sha256=hf2Jra9B1bQoZXip9ssQ7_-Q2UPMiF0uVAEjN4dJmXg,4686
|
|
124
|
+
hanzo_mcp/tools/jupyter/__init__.py,sha256=-7uAomIx8tboZ9gcal7t2MRvgZ9A3cltIYA4perfZVE,2646
|
|
125
|
+
hanzo_mcp/tools/jupyter/base.py,sha256=4O8iMBNqlrCNFEbsihpHyX_nyUqLV7w3AWb_0kcKD14,9788
|
|
126
|
+
hanzo_mcp/tools/jupyter/jupyter.py,sha256=haMwxZ1yRieyQ3q1Ksem2ACm9hxL7i7Dh4pmwjkZPPo,14131
|
|
127
|
+
hanzo_mcp/tools/jupyter/notebook_edit.py,sha256=Vz6isDmVJfZUvSb3xLi27AXYC9crEIImHP3GshiS7Gw,11377
|
|
128
|
+
hanzo_mcp/tools/jupyter/notebook_read.py,sha256=9pcslhUwuQK5Vpfi9ZUraSwkOk0YRGtaVQj6bkXsC3o,5120
|
|
129
|
+
hanzo_mcp/tools/llm/__init__.py,sha256=4j8X6wqwchBEur0KYqsmPebRw8ZthDj9StpC41csk0M,1524
|
|
130
|
+
hanzo_mcp/tools/llm/consensus_tool.py,sha256=ym13XafwEWLz4FJtsD4ivUaghgd-daqjs_diFRncRaI,11321
|
|
131
|
+
hanzo_mcp/tools/llm/llm_manage.py,sha256=i4AKypbBNWs0FmMXsKZMm0bN5eI1Rl2SmGWBbiKuGjA,15954
|
|
132
|
+
hanzo_mcp/tools/llm/llm_tool.py,sha256=_UK94gyz_xg_ClXAWq7lDfoMKcqgxVAo8ssdoCL_9Gg,29573
|
|
133
|
+
hanzo_mcp/tools/llm/llm_unified.py,sha256=YCkKmof8eEEgv-nygfkT2zVVJPxxPAvq5AmtNdLrb40,28833
|
|
134
|
+
hanzo_mcp/tools/llm/provider_tools.py,sha256=LpWsBphq1LaJofpPKQxsBXPCD69uUDAsTbLhzOPIH1E,11389
|
|
135
|
+
hanzo_mcp/tools/lsp/__init__.py,sha256=2Z1edOMrLV6gi1dyGgUyN3lN4HOWynf73Eye_eBk2Xo,150
|
|
136
|
+
hanzo_mcp/tools/lsp/lsp_tool.py,sha256=GDmveLFV-k3UKpzV9XaET2WOVMV_t7B3IxBb204_RhM,19261
|
|
137
|
+
hanzo_mcp/tools/mcp/__init__.py,sha256=Rml2im2dg4wNra4nsDH09q73G-yoifQrXL9iYhPmfTg,347
|
|
138
|
+
hanzo_mcp/tools/mcp/mcp_add.py,sha256=adtPhgJZEYaD9supRsJ4ujzZr8e3LnVOWXH_45m8xzw,7825
|
|
139
|
+
hanzo_mcp/tools/mcp/mcp_remove.py,sha256=5HyM0mQWoYg_f5J9Huhh7XdiQCrfYXEWg8t7k6G3G1w,3233
|
|
140
|
+
hanzo_mcp/tools/mcp/mcp_stats.py,sha256=f3UNVnppBbNHMizZ1W3Goxed5YRmLs30m3zqURUiucs,5273
|
|
141
|
+
hanzo_mcp/tools/mcp/mcp_tool.py,sha256=fUL01Zr6yI6FH_Yrxx3vtonQlEfAX5g61fp2ET_vq2Q,16549
|
|
142
|
+
hanzo_mcp/tools/memory/__init__.py,sha256=GQ17ESC6ecPkBEDtAnOYPfHQaXRrs9sr-jv8sUcvKcw,3167
|
|
143
|
+
hanzo_mcp/tools/memory/knowledge_tools.py,sha256=V_NMijCKkwauGIgt_9xFPWEvfAx45P3jOQm5oqo_F6c,17501
|
|
144
|
+
hanzo_mcp/tools/memory/memory_tools.py,sha256=z2fVkc8zmMFvmQNzbTPn2FJxbbw3CWKavZYgHVGvtws,13517
|
|
145
|
+
hanzo_mcp/tools/search/__init__.py,sha256=7z0GUOmKrJyI7MCbLIvO5zbWHknaNf6kCowi2CtoNNw,292
|
|
146
|
+
hanzo_mcp/tools/search/find_tool.py,sha256=ft8SgdsLDV-m_ubXW7E3PpGZf94E0-53oKwRdoUjVME,23231
|
|
147
|
+
hanzo_mcp/tools/search/unified_search.py,sha256=DsAl75K3hQrCtDh_ooB4chF9son0rgZFkA6zStNj638,34996
|
|
148
|
+
hanzo_mcp/tools/shell/__init__.py,sha256=wxzLRZ8_YN4DmhR3pSpvgWSxnRpCq6U9YCsLszSMIHQ,2343
|
|
149
|
+
hanzo_mcp/tools/shell/auto_background.py,sha256=c1zm2Tpv2XRo_zWbNrphOW1_x8mq8HH-lfG_lXOuhTw,8211
|
|
150
|
+
hanzo_mcp/tools/shell/base.py,sha256=k6iCixqFHOYBiq_0723yGyV6QgQuRYt3ipxtruTzyBI,5778
|
|
151
|
+
hanzo_mcp/tools/shell/base_process.py,sha256=2UVZ-OD82z0mMu71aEM9hAXw5iEATGIM8x7ZvcBO8-4,10413
|
|
152
|
+
hanzo_mcp/tools/shell/bash_session.py,sha256=OPWajWdEan9-LBCdQGgh-hCP7bNXh_OuehaNrEXIz3Q,27058
|
|
153
|
+
hanzo_mcp/tools/shell/bash_session_executor.py,sha256=vHduqxC8H4iJqmuQrWaN0FnykOHTPDZQSHQPeJBaYkI,10714
|
|
154
|
+
hanzo_mcp/tools/shell/bash_tool.py,sha256=gnINuifEYTwRsoO3b0vWNgtNT35whwBbW-JRld6WK6k,3685
|
|
155
|
+
hanzo_mcp/tools/shell/command_executor.py,sha256=4Xl6wVg-DuHQKecSxEbCOV2OqtP9v4ijuFBWvrua8Zg,35440
|
|
156
|
+
hanzo_mcp/tools/shell/logs.py,sha256=4qEtn1HjcnjTuJ1wmH8zywB48SWvXCaC1edaZZxjJOw,8218
|
|
157
|
+
hanzo_mcp/tools/shell/npx.py,sha256=EtrgyDu1UySN995fFAznL8rNLpjkMYGXIj98L59VBCc,4965
|
|
158
|
+
hanzo_mcp/tools/shell/npx_background.py,sha256=_hFAw8tDXGHC8BTd-g5gOq0izFoOubQv0F_TjKz0zq0,7107
|
|
159
|
+
hanzo_mcp/tools/shell/npx_tool.py,sha256=sOsfdu8CWNPdq7ph0jytcA_rfKBMCqcF3NbdpzVNsMU,2870
|
|
160
|
+
hanzo_mcp/tools/shell/open.py,sha256=1SyHlQabZSS4nRqP8r8126sEgB_lYyWWgbcI3oc5sMo,3538
|
|
161
|
+
hanzo_mcp/tools/shell/pkill.py,sha256=Or6hLDZ5v0MB99dLl1paguM41xfEsvIwFBhZCE6IYEU,8428
|
|
162
|
+
hanzo_mcp/tools/shell/process_tool.py,sha256=pv-yAHXQ_ZEFTjfUxCqvfoLLhZUk_n_DP8btdaNTPBU,4700
|
|
163
|
+
hanzo_mcp/tools/shell/processes.py,sha256=zRNc7IAMoHWIxZgo5Np8r9ARgeyrnC_KLMb5tXEB1Po,8773
|
|
164
|
+
hanzo_mcp/tools/shell/run_background.py,sha256=XEtYhKDXhhd8IU4yNBqVGtI9UwMBbMc8e_nK8GzbgQo,9602
|
|
165
|
+
hanzo_mcp/tools/shell/run_command.py,sha256=JgmR6k7SOcQ17PNL4GqSRtjgMqND_BLSLKBp8Q_1nQY,16082
|
|
166
|
+
hanzo_mcp/tools/shell/run_command_windows.py,sha256=E8YpjE4bXtTmjXLy-LwTCWLHptC6LNx1gocKXpJ3DtY,15307
|
|
167
|
+
hanzo_mcp/tools/shell/session_manager.py,sha256=Fc91zVr65u_5fIXoVq0rhbbQQ9Vmo1gxsUSaroC8F40,6481
|
|
168
|
+
hanzo_mcp/tools/shell/session_storage.py,sha256=gWdZnAYSZE_v_aWgPnw8UalW-k1baoa-7Y3CpPxJ4OE,10095
|
|
169
|
+
hanzo_mcp/tools/shell/streaming_command.py,sha256=i1hj4ewxvhw84EsskXhlJzZod752zAYgVo5pR7aMNP4,22317
|
|
170
|
+
hanzo_mcp/tools/shell/uvx.py,sha256=G42ZTDg-sht9nPB5jO1gZtdWI1mrTA8treJnoXcAhXA,6414
|
|
171
|
+
hanzo_mcp/tools/shell/uvx_background.py,sha256=HC0apbPuNN2s7lCjyUilpbrq59nCUg-b5CS4Y8JTPUo,8590
|
|
172
|
+
hanzo_mcp/tools/shell/uvx_tool.py,sha256=M6WwAsWvpwyciPVCLZK0KVfUfzcPBugmraNrOttN6Zw,2906
|
|
173
|
+
hanzo_mcp/tools/shell/zsh_tool.py,sha256=cMtSQT4wl3xMOSf05_WDyW3QpMHBI0_skaP4ccRiptQ,8075
|
|
174
|
+
hanzo_mcp/tools/todo/__init__.py,sha256=4rXjfj95vB7KJFTdt3g2WOffiyzgixUnf1UckyTizGY,1579
|
|
175
|
+
hanzo_mcp/tools/todo/base.py,sha256=k0CFZy59YlLAJBVzVA4tr-qGkQ1l5yF04kcmziwQWec,10666
|
|
176
|
+
hanzo_mcp/tools/todo/todo.py,sha256=oANlSDSCKNqx2gzfTD0rp71STOTIfWl3PJpANCrbZfM,8748
|
|
177
|
+
hanzo_mcp/tools/todo/todo_read.py,sha256=JA73FjAAW7EjeUNtgnkNlb97W_d_H4ePoY69S4U_ay4,4564
|
|
178
|
+
hanzo_mcp/tools/todo/todo_write.py,sha256=3meQg2pCjNw7uJkL3yrzso6nwPFBgIaVbyVQwsiADGY,15122
|
|
179
|
+
hanzo_mcp/tools/vector/__init__.py,sha256=SdsTQJbiAxcHnGhMVoUX2KgFWs50_JvX0SqS_Ejk_hY,3952
|
|
180
|
+
hanzo_mcp/tools/vector/ast_analyzer.py,sha256=nz_fa5sEJEwPhzxeJT6qFqOhybuei0hG5i2jcx2zW30,15747
|
|
181
|
+
hanzo_mcp/tools/vector/git_ingester.py,sha256=gHbdouUec_DPIolC79V1p9jj-m7uq4ulko3N5RnXKd4,15611
|
|
182
|
+
hanzo_mcp/tools/vector/index_tool.py,sha256=it3l15Bd-D5G-oSPaN_ehI9YwOlY4sFXV494RB0LsJY,13474
|
|
183
|
+
hanzo_mcp/tools/vector/infinity_store.py,sha256=xfd2qT59lJVM_N1LTuCyUuVvYE9NxH41DMa4eyJCaqc,28383
|
|
184
|
+
hanzo_mcp/tools/vector/mock_infinity.py,sha256=54V-Ed7lWufP8gMo8rU6cLpJl50j-20-H6ouUpgPxAg,4830
|
|
185
|
+
hanzo_mcp/tools/vector/project_manager.py,sha256=usxOldFajm7UN-74yN7Qa5Xw7Or6EWmOrBtvhJAUESI,13073
|
|
186
|
+
hanzo_mcp/tools/vector/vector.py,sha256=ETcukhy5hGDngEWa-zDZMmZxeh4fBds-yyPQeWHiBms,9871
|
|
187
|
+
hanzo_mcp/tools/vector/vector_index.py,sha256=UWCsWr_7ijv4sEeyLlBfLrxyT_HIS4z9WfIsQVR1Vic,4176
|
|
188
|
+
hanzo_mcp/tools/vector/vector_search.py,sha256=q9MA0clubMAqmaShfLSr_PHSpB7z0zkOAAJbfyM4DFI,9303
|
|
189
|
+
hanzo_mcp-0.8.13.dist-info/METADATA,sha256=-CVgX--0k5fceIyD5tc3d6hI1BJE2EhhhKFNvMm3GP0,8975
|
|
190
|
+
hanzo_mcp-0.8.13.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
191
|
+
hanzo_mcp-0.8.13.dist-info/entry_points.txt,sha256=ML30pedHV5wjthfztzMMz3uYhNdR_6inzYY5pSqNME4,142
|
|
192
|
+
hanzo_mcp-0.8.13.dist-info/top_level.txt,sha256=eGFANatA0MHWiVlpS56fTYRIShtibrSom1uXI6XU0GU,10
|
|
193
|
+
hanzo_mcp-0.8.13.dist-info/RECORD,,
|