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.

Files changed (154) hide show
  1. hanzo_mcp/__init__.py +1 -3
  2. hanzo_mcp/analytics/posthog_analytics.py +4 -17
  3. hanzo_mcp/bridge.py +9 -25
  4. hanzo_mcp/cli.py +8 -17
  5. hanzo_mcp/cli_enhanced.py +5 -14
  6. hanzo_mcp/cli_plugin.py +3 -9
  7. hanzo_mcp/config/settings.py +6 -20
  8. hanzo_mcp/config/tool_config.py +2 -4
  9. hanzo_mcp/core/base_agent.py +88 -88
  10. hanzo_mcp/core/model_registry.py +238 -210
  11. hanzo_mcp/dev_server.py +5 -15
  12. hanzo_mcp/prompts/__init__.py +2 -6
  13. hanzo_mcp/prompts/project_todo_reminder.py +3 -9
  14. hanzo_mcp/prompts/tool_explorer.py +1 -3
  15. hanzo_mcp/prompts/utils.py +7 -21
  16. hanzo_mcp/server.py +6 -7
  17. hanzo_mcp/tools/__init__.py +13 -29
  18. hanzo_mcp/tools/agent/__init__.py +2 -1
  19. hanzo_mcp/tools/agent/agent.py +10 -30
  20. hanzo_mcp/tools/agent/agent_tool.py +6 -17
  21. hanzo_mcp/tools/agent/agent_tool_v1_deprecated.py +15 -42
  22. hanzo_mcp/tools/agent/claude_desktop_auth.py +3 -9
  23. hanzo_mcp/tools/agent/cli_agent_base.py +7 -24
  24. hanzo_mcp/tools/agent/cli_tools.py +76 -75
  25. hanzo_mcp/tools/agent/code_auth.py +1 -3
  26. hanzo_mcp/tools/agent/code_auth_tool.py +2 -6
  27. hanzo_mcp/tools/agent/critic_tool.py +8 -24
  28. hanzo_mcp/tools/agent/iching_tool.py +12 -36
  29. hanzo_mcp/tools/agent/network_tool.py +7 -18
  30. hanzo_mcp/tools/agent/prompt.py +1 -5
  31. hanzo_mcp/tools/agent/review_tool.py +10 -25
  32. hanzo_mcp/tools/agent/swarm_alias.py +1 -3
  33. hanzo_mcp/tools/agent/swarm_tool.py +16 -41
  34. hanzo_mcp/tools/agent/swarm_tool_v1_deprecated.py +11 -39
  35. hanzo_mcp/tools/agent/unified_cli_tools.py +38 -38
  36. hanzo_mcp/tools/common/batch_tool.py +15 -45
  37. hanzo_mcp/tools/common/config_tool.py +9 -28
  38. hanzo_mcp/tools/common/context.py +1 -3
  39. hanzo_mcp/tools/common/critic_tool.py +1 -3
  40. hanzo_mcp/tools/common/decorators.py +2 -6
  41. hanzo_mcp/tools/common/enhanced_base.py +2 -6
  42. hanzo_mcp/tools/common/fastmcp_pagination.py +4 -12
  43. hanzo_mcp/tools/common/forgiving_edit.py +9 -28
  44. hanzo_mcp/tools/common/mode.py +1 -5
  45. hanzo_mcp/tools/common/paginated_base.py +3 -11
  46. hanzo_mcp/tools/common/paginated_response.py +10 -30
  47. hanzo_mcp/tools/common/pagination.py +3 -9
  48. hanzo_mcp/tools/common/permissions.py +3 -9
  49. hanzo_mcp/tools/common/personality.py +9 -34
  50. hanzo_mcp/tools/common/plugin_loader.py +3 -15
  51. hanzo_mcp/tools/common/stats.py +7 -19
  52. hanzo_mcp/tools/common/thinking_tool.py +1 -3
  53. hanzo_mcp/tools/common/tool_disable.py +2 -6
  54. hanzo_mcp/tools/common/tool_list.py +2 -6
  55. hanzo_mcp/tools/common/validation.py +1 -3
  56. hanzo_mcp/tools/config/config_tool.py +7 -13
  57. hanzo_mcp/tools/config/index_config.py +1 -3
  58. hanzo_mcp/tools/config/mode_tool.py +5 -15
  59. hanzo_mcp/tools/database/database_manager.py +3 -9
  60. hanzo_mcp/tools/database/graph.py +1 -3
  61. hanzo_mcp/tools/database/graph_add.py +3 -9
  62. hanzo_mcp/tools/database/graph_query.py +11 -34
  63. hanzo_mcp/tools/database/graph_remove.py +3 -9
  64. hanzo_mcp/tools/database/graph_search.py +6 -20
  65. hanzo_mcp/tools/database/graph_stats.py +11 -33
  66. hanzo_mcp/tools/database/sql.py +4 -12
  67. hanzo_mcp/tools/database/sql_query.py +6 -10
  68. hanzo_mcp/tools/database/sql_search.py +2 -6
  69. hanzo_mcp/tools/database/sql_stats.py +5 -15
  70. hanzo_mcp/tools/editor/neovim_command.py +1 -3
  71. hanzo_mcp/tools/editor/neovim_session.py +7 -13
  72. hanzo_mcp/tools/filesystem/__init__.py +2 -3
  73. hanzo_mcp/tools/filesystem/ast_multi_edit.py +14 -43
  74. hanzo_mcp/tools/filesystem/base.py +4 -12
  75. hanzo_mcp/tools/filesystem/batch_search.py +35 -115
  76. hanzo_mcp/tools/filesystem/content_replace.py +4 -12
  77. hanzo_mcp/tools/filesystem/diff.py +2 -10
  78. hanzo_mcp/tools/filesystem/directory_tree.py +9 -27
  79. hanzo_mcp/tools/filesystem/directory_tree_paginated.py +5 -15
  80. hanzo_mcp/tools/filesystem/edit.py +6 -18
  81. hanzo_mcp/tools/filesystem/find.py +3 -9
  82. hanzo_mcp/tools/filesystem/find_files.py +2 -6
  83. hanzo_mcp/tools/filesystem/git_search.py +9 -24
  84. hanzo_mcp/tools/filesystem/grep.py +9 -27
  85. hanzo_mcp/tools/filesystem/multi_edit.py +6 -18
  86. hanzo_mcp/tools/filesystem/read.py +8 -26
  87. hanzo_mcp/tools/filesystem/rules_tool.py +6 -17
  88. hanzo_mcp/tools/filesystem/search_tool.py +18 -62
  89. hanzo_mcp/tools/filesystem/symbols_tool.py +5 -15
  90. hanzo_mcp/tools/filesystem/tree.py +1 -3
  91. hanzo_mcp/tools/filesystem/watch.py +1 -3
  92. hanzo_mcp/tools/filesystem/write.py +1 -3
  93. hanzo_mcp/tools/jupyter/base.py +6 -20
  94. hanzo_mcp/tools/jupyter/jupyter.py +4 -12
  95. hanzo_mcp/tools/jupyter/notebook_edit.py +11 -35
  96. hanzo_mcp/tools/jupyter/notebook_read.py +2 -6
  97. hanzo_mcp/tools/llm/consensus_tool.py +8 -24
  98. hanzo_mcp/tools/llm/llm_manage.py +2 -6
  99. hanzo_mcp/tools/llm/llm_tool.py +17 -58
  100. hanzo_mcp/tools/llm/llm_unified.py +18 -59
  101. hanzo_mcp/tools/llm/provider_tools.py +1 -3
  102. hanzo_mcp/tools/lsp/lsp_tool.py +5 -17
  103. hanzo_mcp/tools/mcp/mcp_add.py +3 -5
  104. hanzo_mcp/tools/mcp/mcp_remove.py +1 -1
  105. hanzo_mcp/tools/mcp/mcp_stats.py +1 -3
  106. hanzo_mcp/tools/mcp/mcp_tool.py +9 -23
  107. hanzo_mcp/tools/memory/__init__.py +33 -40
  108. hanzo_mcp/tools/memory/knowledge_tools.py +7 -25
  109. hanzo_mcp/tools/memory/memory_tools.py +7 -19
  110. hanzo_mcp/tools/search/find_tool.py +10 -32
  111. hanzo_mcp/tools/search/unified_search.py +27 -81
  112. hanzo_mcp/tools/shell/__init__.py +2 -2
  113. hanzo_mcp/tools/shell/auto_background.py +2 -6
  114. hanzo_mcp/tools/shell/base.py +1 -5
  115. hanzo_mcp/tools/shell/base_process.py +5 -7
  116. hanzo_mcp/tools/shell/bash_session.py +7 -24
  117. hanzo_mcp/tools/shell/bash_session_executor.py +5 -15
  118. hanzo_mcp/tools/shell/bash_tool.py +3 -7
  119. hanzo_mcp/tools/shell/command_executor.py +26 -79
  120. hanzo_mcp/tools/shell/logs.py +4 -16
  121. hanzo_mcp/tools/shell/npx.py +2 -8
  122. hanzo_mcp/tools/shell/npx_tool.py +1 -3
  123. hanzo_mcp/tools/shell/pkill.py +4 -12
  124. hanzo_mcp/tools/shell/process_tool.py +2 -8
  125. hanzo_mcp/tools/shell/processes.py +5 -17
  126. hanzo_mcp/tools/shell/run_background.py +1 -3
  127. hanzo_mcp/tools/shell/run_command.py +1 -3
  128. hanzo_mcp/tools/shell/run_command_windows.py +1 -3
  129. hanzo_mcp/tools/shell/session_manager.py +2 -6
  130. hanzo_mcp/tools/shell/session_storage.py +2 -6
  131. hanzo_mcp/tools/shell/streaming_command.py +7 -23
  132. hanzo_mcp/tools/shell/uvx.py +4 -14
  133. hanzo_mcp/tools/shell/uvx_background.py +2 -6
  134. hanzo_mcp/tools/shell/uvx_tool.py +1 -3
  135. hanzo_mcp/tools/shell/zsh_tool.py +12 -20
  136. hanzo_mcp/tools/todo/todo.py +1 -3
  137. hanzo_mcp/tools/todo/todo_read.py +3 -9
  138. hanzo_mcp/tools/todo/todo_write.py +6 -18
  139. hanzo_mcp/tools/vector/__init__.py +3 -9
  140. hanzo_mcp/tools/vector/ast_analyzer.py +6 -20
  141. hanzo_mcp/tools/vector/git_ingester.py +10 -30
  142. hanzo_mcp/tools/vector/index_tool.py +3 -9
  143. hanzo_mcp/tools/vector/infinity_store.py +11 -30
  144. hanzo_mcp/tools/vector/mock_infinity.py +159 -0
  145. hanzo_mcp/tools/vector/project_manager.py +4 -12
  146. hanzo_mcp/tools/vector/vector.py +2 -6
  147. hanzo_mcp/tools/vector/vector_index.py +8 -8
  148. hanzo_mcp/tools/vector/vector_search.py +7 -21
  149. {hanzo_mcp-0.8.8.dist-info → hanzo_mcp-0.8.13.dist-info}/METADATA +2 -2
  150. hanzo_mcp-0.8.13.dist-info/RECORD +193 -0
  151. hanzo_mcp-0.8.8.dist-info/RECORD +0 -192
  152. {hanzo_mcp-0.8.8.dist-info → hanzo_mcp-0.8.13.dist-info}/WHEEL +0 -0
  153. {hanzo_mcp-0.8.8.dist-info → hanzo_mcp-0.8.13.dist-info}/entry_points.txt +0 -0
  154. {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)
@@ -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
- self.project_manager.add_file_to_appropriate_store(
95
- file_path=file_path,
96
- chunk_size=chunk_size,
97
- chunk_overlap=chunk_overlap,
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 f"Successfully indexed {file_name} with {len(doc_ids)} chunks in project '{project_info.name}'"
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.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.1.0; extra == "dev"
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,,