hanzo-mcp 0.9.0__py3-none-any.whl → 0.9.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 hanzo-mcp might be problematic. Click here for more details.

Files changed (135) hide show
  1. hanzo_mcp/__init__.py +1 -1
  2. hanzo_mcp/analytics/posthog_analytics.py +14 -1
  3. hanzo_mcp/cli.py +108 -4
  4. hanzo_mcp/server.py +11 -0
  5. hanzo_mcp/tools/__init__.py +3 -16
  6. hanzo_mcp/tools/agent/__init__.py +5 -0
  7. hanzo_mcp/tools/agent/agent.py +5 -0
  8. hanzo_mcp/tools/agent/agent_tool.py +3 -17
  9. hanzo_mcp/tools/agent/agent_tool_v1_deprecated.py +623 -0
  10. hanzo_mcp/tools/agent/clarification_tool.py +7 -1
  11. hanzo_mcp/tools/agent/claude_desktop_auth.py +16 -6
  12. hanzo_mcp/tools/agent/cli_agent_base.py +5 -0
  13. hanzo_mcp/tools/agent/cli_tools.py +26 -0
  14. hanzo_mcp/tools/agent/code_auth_tool.py +5 -0
  15. hanzo_mcp/tools/agent/critic_tool.py +7 -1
  16. hanzo_mcp/tools/agent/iching_tool.py +5 -0
  17. hanzo_mcp/tools/agent/network_tool.py +5 -0
  18. hanzo_mcp/tools/agent/review_tool.py +7 -1
  19. hanzo_mcp/tools/agent/swarm_alias.py +5 -0
  20. hanzo_mcp/tools/agent/swarm_tool.py +701 -0
  21. hanzo_mcp/tools/agent/swarm_tool_v1_deprecated.py +554 -0
  22. hanzo_mcp/tools/agent/unified_cli_tools.py +5 -0
  23. hanzo_mcp/tools/common/auto_timeout.py +234 -0
  24. hanzo_mcp/tools/common/base.py +4 -0
  25. hanzo_mcp/tools/common/batch_tool.py +5 -0
  26. hanzo_mcp/tools/common/config_tool.py +5 -0
  27. hanzo_mcp/tools/common/critic_tool.py +5 -0
  28. hanzo_mcp/tools/common/paginated_base.py +4 -0
  29. hanzo_mcp/tools/common/permissions.py +38 -12
  30. hanzo_mcp/tools/common/personality.py +673 -980
  31. hanzo_mcp/tools/common/stats.py +5 -0
  32. hanzo_mcp/tools/common/thinking_tool.py +5 -0
  33. hanzo_mcp/tools/common/timeout_parser.py +103 -0
  34. hanzo_mcp/tools/common/tool_disable.py +5 -0
  35. hanzo_mcp/tools/common/tool_enable.py +5 -0
  36. hanzo_mcp/tools/common/tool_list.py +5 -0
  37. hanzo_mcp/tools/config/config_tool.py +5 -0
  38. hanzo_mcp/tools/config/mode_tool.py +5 -0
  39. hanzo_mcp/tools/database/graph.py +5 -0
  40. hanzo_mcp/tools/database/graph_add.py +5 -0
  41. hanzo_mcp/tools/database/graph_query.py +5 -0
  42. hanzo_mcp/tools/database/graph_remove.py +5 -0
  43. hanzo_mcp/tools/database/graph_search.py +5 -0
  44. hanzo_mcp/tools/database/graph_stats.py +5 -0
  45. hanzo_mcp/tools/database/sql.py +5 -0
  46. hanzo_mcp/tools/database/sql_query.py +2 -0
  47. hanzo_mcp/tools/database/sql_search.py +5 -0
  48. hanzo_mcp/tools/database/sql_stats.py +5 -0
  49. hanzo_mcp/tools/editor/neovim_command.py +5 -0
  50. hanzo_mcp/tools/editor/neovim_edit.py +7 -2
  51. hanzo_mcp/tools/editor/neovim_session.py +5 -0
  52. hanzo_mcp/tools/filesystem/__init__.py +23 -26
  53. hanzo_mcp/tools/filesystem/ast_tool.py +2 -3
  54. hanzo_mcp/tools/filesystem/base.py +0 -16
  55. hanzo_mcp/tools/filesystem/batch_search.py +825 -0
  56. hanzo_mcp/tools/filesystem/content_replace.py +5 -3
  57. hanzo_mcp/tools/filesystem/diff.py +5 -0
  58. hanzo_mcp/tools/filesystem/directory_tree.py +34 -281
  59. hanzo_mcp/tools/filesystem/directory_tree_paginated.py +345 -0
  60. hanzo_mcp/tools/filesystem/edit.py +5 -4
  61. hanzo_mcp/tools/filesystem/find.py +177 -311
  62. hanzo_mcp/tools/filesystem/find_files.py +370 -0
  63. hanzo_mcp/tools/filesystem/git_search.py +5 -3
  64. hanzo_mcp/tools/filesystem/grep.py +454 -0
  65. hanzo_mcp/tools/filesystem/multi_edit.py +5 -4
  66. hanzo_mcp/tools/filesystem/read.py +11 -8
  67. hanzo_mcp/tools/filesystem/rules_tool.py +5 -3
  68. hanzo_mcp/tools/filesystem/search_tool.py +728 -0
  69. hanzo_mcp/tools/filesystem/symbols_tool.py +510 -0
  70. hanzo_mcp/tools/filesystem/tree.py +273 -0
  71. hanzo_mcp/tools/filesystem/watch.py +6 -1
  72. hanzo_mcp/tools/filesystem/write.py +12 -6
  73. hanzo_mcp/tools/jupyter/jupyter.py +30 -2
  74. hanzo_mcp/tools/jupyter/notebook_edit.py +298 -0
  75. hanzo_mcp/tools/jupyter/notebook_read.py +148 -0
  76. hanzo_mcp/tools/llm/consensus_tool.py +8 -6
  77. hanzo_mcp/tools/llm/llm_manage.py +5 -0
  78. hanzo_mcp/tools/llm/llm_tool.py +2 -0
  79. hanzo_mcp/tools/llm/llm_unified.py +5 -0
  80. hanzo_mcp/tools/llm/provider_tools.py +5 -0
  81. hanzo_mcp/tools/lsp/lsp_tool.py +475 -622
  82. hanzo_mcp/tools/mcp/mcp_add.py +7 -2
  83. hanzo_mcp/tools/mcp/mcp_remove.py +15 -2
  84. hanzo_mcp/tools/mcp/mcp_stats.py +5 -0
  85. hanzo_mcp/tools/mcp/mcp_tool.py +5 -0
  86. hanzo_mcp/tools/memory/knowledge_tools.py +14 -0
  87. hanzo_mcp/tools/memory/memory_tools.py +17 -0
  88. hanzo_mcp/tools/search/find_tool.py +5 -3
  89. hanzo_mcp/tools/search/unified_search.py +3 -1
  90. hanzo_mcp/tools/shell/__init__.py +2 -14
  91. hanzo_mcp/tools/shell/base_process.py +4 -2
  92. hanzo_mcp/tools/shell/bash_tool.py +2 -0
  93. hanzo_mcp/tools/shell/command_executor.py +7 -7
  94. hanzo_mcp/tools/shell/logs.py +5 -0
  95. hanzo_mcp/tools/shell/npx.py +5 -0
  96. hanzo_mcp/tools/shell/npx_background.py +5 -0
  97. hanzo_mcp/tools/shell/npx_tool.py +5 -0
  98. hanzo_mcp/tools/shell/open.py +5 -0
  99. hanzo_mcp/tools/shell/pkill.py +5 -0
  100. hanzo_mcp/tools/shell/process_tool.py +5 -0
  101. hanzo_mcp/tools/shell/processes.py +5 -0
  102. hanzo_mcp/tools/shell/run_background.py +5 -0
  103. hanzo_mcp/tools/shell/run_command.py +2 -0
  104. hanzo_mcp/tools/shell/run_command_windows.py +5 -0
  105. hanzo_mcp/tools/shell/streaming_command.py +5 -0
  106. hanzo_mcp/tools/shell/uvx.py +5 -0
  107. hanzo_mcp/tools/shell/uvx_background.py +5 -0
  108. hanzo_mcp/tools/shell/uvx_tool.py +5 -0
  109. hanzo_mcp/tools/shell/zsh_tool.py +3 -0
  110. hanzo_mcp/tools/todo/todo.py +5 -0
  111. hanzo_mcp/tools/todo/todo_read.py +142 -0
  112. hanzo_mcp/tools/todo/todo_write.py +367 -0
  113. hanzo_mcp/tools/vector/__init__.py +42 -95
  114. hanzo_mcp/tools/vector/index_tool.py +5 -0
  115. hanzo_mcp/tools/vector/vector.py +5 -0
  116. hanzo_mcp/tools/vector/vector_index.py +5 -0
  117. hanzo_mcp/tools/vector/vector_search.py +5 -0
  118. {hanzo_mcp-0.9.0.dist-info → hanzo_mcp-0.9.1.dist-info}/METADATA +1 -1
  119. hanzo_mcp-0.9.1.dist-info/RECORD +195 -0
  120. hanzo_mcp/tools/common/path_utils.py +0 -34
  121. hanzo_mcp/tools/compiler/__init__.py +0 -8
  122. hanzo_mcp/tools/compiler/sandboxed_compiler.py +0 -681
  123. hanzo_mcp/tools/environment/__init__.py +0 -8
  124. hanzo_mcp/tools/environment/environment_detector.py +0 -594
  125. hanzo_mcp/tools/filesystem/search.py +0 -1160
  126. hanzo_mcp/tools/framework/__init__.py +0 -8
  127. hanzo_mcp/tools/framework/framework_modes.py +0 -714
  128. hanzo_mcp/tools/memory/conversation_memory.py +0 -636
  129. hanzo_mcp/tools/shell/run_tool.py +0 -56
  130. hanzo_mcp/tools/vector/node_tool.py +0 -538
  131. hanzo_mcp/tools/vector/unified_vector.py +0 -384
  132. hanzo_mcp-0.9.0.dist-info/RECORD +0 -191
  133. {hanzo_mcp-0.9.0.dist-info → hanzo_mcp-0.9.1.dist-info}/WHEEL +0 -0
  134. {hanzo_mcp-0.9.0.dist-info → hanzo_mcp-0.9.1.dist-info}/entry_points.txt +0 -0
  135. {hanzo_mcp-0.9.0.dist-info → hanzo_mcp-0.9.1.dist-info}/top_level.txt +0 -0
@@ -1,384 +0,0 @@
1
- """Unified vector tool that consolidates all vector/semantic search functionality."""
2
-
3
- import asyncio
4
- import logging
5
- import os
6
- import subprocess
7
- from pathlib import Path
8
- from typing import Any, Dict, List, Optional, final, override
9
-
10
- import httpx
11
- from mcp.server import FastMCP
12
- from mcp.server.fastmcp import Context as MCPContext
13
-
14
- from hanzo_mcp.tools.common.base import BaseTool
15
- from hanzo_mcp.tools.common.context import create_tool_context
16
-
17
- logger = logging.getLogger(__name__)
18
-
19
- # Try to import LanceDB and hanzo-memory dependencies
20
- try:
21
- import lancedb
22
- from hanzo_memory.db.lancedb_client import get_lancedb_client
23
- from hanzo_memory.services.memory import get_memory_service
24
- from hanzo_memory.models.memory import Memory
25
- LANCEDB_AVAILABLE = True
26
- except ImportError:
27
- LANCEDB_AVAILABLE = False
28
-
29
-
30
- class HanzoNodeClient:
31
- """Client for communicating with hanzo-node."""
32
-
33
- def __init__(self, base_url: str = "http://localhost:3690"):
34
- """Initialize hanzo-node client."""
35
- self.base_url = base_url
36
- self.client = httpx.AsyncClient(timeout=30.0)
37
-
38
- async def is_available(self) -> bool:
39
- """Check if hanzo-node is running and available."""
40
- try:
41
- response = await self.client.get(f"{self.base_url}/health")
42
- return response.status_code == 200
43
- except Exception:
44
- return False
45
-
46
- async def search_vectors(self, query: str, limit: int = 10, **kwargs) -> List[Dict[str, Any]]:
47
- """Search vectors using hanzo-node."""
48
- try:
49
- payload = {
50
- "query": query,
51
- "limit": limit,
52
- **kwargs
53
- }
54
- response = await self.client.post(f"{self.base_url}/api/v1/search", json=payload)
55
- response.raise_for_status()
56
- return response.json().get("results", [])
57
- except Exception as e:
58
- logger.error(f"Error searching vectors via hanzo-node: {e}")
59
- return []
60
-
61
- async def index_content(self, content: str, metadata: Optional[Dict] = None) -> bool:
62
- """Index content using hanzo-node."""
63
- try:
64
- payload = {
65
- "content": content,
66
- "metadata": metadata or {}
67
- }
68
- response = await self.client.post(f"{self.base_url}/api/v1/index", json=payload)
69
- response.raise_for_status()
70
- return True
71
- except Exception as e:
72
- logger.error(f"Error indexing content via hanzo-node: {e}")
73
- return False
74
-
75
-
76
- @final
77
- class UnifiedVectorTool(BaseTool):
78
- """Unified vector tool that consolidates all vector/semantic search functionality.
79
-
80
- This tool provides a single interface for vector operations that:
81
- 1. Detects if hanzo-node is running on localhost:3690
82
- 2. Uses hanzo-node for vector operations if available
83
- 3. Falls back to embedded LanceDB if hanzo-node is not available
84
- 4. Provides semantic search, indexing, and memory operations
85
- """
86
-
87
- def __init__(self, user_id: str = "default", project_id: str = "default"):
88
- """Initialize unified vector tool."""
89
- self.user_id = user_id
90
- self.project_id = project_id
91
- self.hanzo_node = HanzoNodeClient()
92
-
93
- # Initialize LanceDB fallback if available
94
- if LANCEDB_AVAILABLE:
95
- self.lancedb_client = get_lancedb_client()
96
- self.memory_service = get_memory_service()
97
- else:
98
- self.lancedb_client = None
99
- self.memory_service = None
100
-
101
- @property
102
- @override
103
- def name(self) -> str:
104
- """Get the tool name."""
105
- return "vector"
106
-
107
- @property
108
- @override
109
- def description(self) -> str:
110
- """Get the tool description."""
111
- return """Unified vector search and semantic operations.
112
-
113
- This tool provides comprehensive vector/semantic search capabilities:
114
- - Semantic search across indexed content
115
- - Content indexing for future search
116
- - Memory storage and retrieval
117
- - Knowledge base operations
118
-
119
- The tool automatically detects if hanzo-node is available and uses it for
120
- optimal performance, falling back to embedded LanceDB if needed.
121
-
122
- Examples:
123
- vector(action="search", query="error handling in Python", limit=5)
124
- vector(action="index", content="Important project documentation", metadata={"type": "docs"})
125
- vector(action="memory_create", content="User prefers TypeScript over JavaScript")
126
- vector(action="memory_search", query="user preferences")
127
- vector(action="status") # Check backend status
128
- """
129
-
130
- async def _detect_backend(self) -> str:
131
- """Detect which backend to use."""
132
- if await self.hanzo_node.is_available():
133
- return "hanzo-node"
134
- elif LANCEDB_AVAILABLE:
135
- return "lancedb"
136
- else:
137
- return "none"
138
-
139
- async def _search_hanzo_node(self, query: str, limit: int, **kwargs) -> List[Dict[str, Any]]:
140
- """Search using hanzo-node."""
141
- return await self.hanzo_node.search_vectors(query, limit, **kwargs)
142
-
143
- async def _search_lancedb(self, query: str, limit: int, project_id: Optional[str] = None) -> List[Dict[str, Any]]:
144
- """Search using embedded LanceDB."""
145
- if not self.memory_service:
146
- return []
147
-
148
- try:
149
- # Use hanzo-memory service for search
150
- results = self.memory_service.search_memories(
151
- user_id=self.user_id,
152
- query=query,
153
- project_id=project_id or self.project_id,
154
- limit=limit
155
- )
156
-
157
- # Convert to standard format
158
- formatted_results = []
159
- for result in results:
160
- formatted_results.append({
161
- "content": result.content,
162
- "score": getattr(result, "similarity_score", 0.0),
163
- "metadata": getattr(result, "metadata", {}),
164
- "id": result.memory_id
165
- })
166
- return formatted_results
167
- except Exception as e:
168
- logger.error(f"Error searching LanceDB: {e}")
169
- return []
170
-
171
- async def _index_hanzo_node(self, content: str, metadata: Optional[Dict] = None) -> bool:
172
- """Index content using hanzo-node."""
173
- return await self.hanzo_node.index_content(content, metadata)
174
-
175
- async def _index_lancedb(self, content: str, metadata: Optional[Dict] = None) -> bool:
176
- """Index content using embedded LanceDB."""
177
- if not self.memory_service:
178
- return False
179
-
180
- try:
181
- self.memory_service.create_memory(
182
- user_id=self.user_id,
183
- project_id=self.project_id,
184
- content=content,
185
- metadata=metadata or {}
186
- )
187
- return True
188
- except Exception as e:
189
- logger.error(f"Error indexing to LanceDB: {e}")
190
- return False
191
-
192
- @override
193
- async def call(
194
- self,
195
- ctx: MCPContext,
196
- action: str,
197
- query: Optional[str] = None,
198
- content: Optional[str] = None,
199
- limit: int = 10,
200
- project_id: Optional[str] = None,
201
- metadata: Optional[Dict[str, Any]] = None,
202
- **kwargs
203
- ) -> str:
204
- """Execute vector operations.
205
-
206
- Args:
207
- ctx: MCP context
208
- action: Action to perform (search, index, memory_create, memory_search, status)
209
- query: Search query (for search actions)
210
- content: Content to index or store (for index/create actions)
211
- limit: Maximum results to return
212
- project_id: Project ID (defaults to tool's project_id)
213
- metadata: Additional metadata
214
- **kwargs: Additional action-specific parameters
215
-
216
- Returns:
217
- Formatted results or status message
218
- """
219
- tool_ctx = create_tool_context(ctx)
220
- await tool_ctx.set_tool_info(self.name)
221
-
222
- # Detect backend
223
- backend = await self._detect_backend()
224
- await tool_ctx.info(f"Using backend: {backend}")
225
-
226
- if action == "status":
227
- return await self._handle_status(tool_ctx, backend)
228
- elif action == "search":
229
- return await self._handle_search(tool_ctx, backend, query, limit, project_id, **kwargs)
230
- elif action == "index":
231
- return await self._handle_index(tool_ctx, backend, content, metadata)
232
- elif action == "memory_create":
233
- return await self._handle_memory_create(tool_ctx, content, metadata)
234
- elif action == "memory_search":
235
- return await self._handle_memory_search(tool_ctx, query, limit, project_id)
236
- else:
237
- return f"Unknown action: {action}. Available actions: search, index, memory_create, memory_search, status"
238
-
239
- async def _handle_status(self, tool_ctx, backend: str) -> str:
240
- """Handle status check."""
241
- status_info = [f"Vector backend: {backend}"]
242
-
243
- if backend == "hanzo-node":
244
- try:
245
- node_available = await self.hanzo_node.is_available()
246
- status_info.append(f"Hanzo-node available: {node_available}")
247
- status_info.append(f"Hanzo-node URL: {self.hanzo_node.base_url}")
248
- except Exception as e:
249
- status_info.append(f"Hanzo-node error: {e}")
250
-
251
- if backend == "lancedb" or backend == "hanzo-node":
252
- status_info.append(f"LanceDB available: {LANCEDB_AVAILABLE}")
253
- if LANCEDB_AVAILABLE and self.lancedb_client:
254
- try:
255
- # Check LanceDB status
256
- db_path = Path(self.lancedb_client.db_path)
257
- status_info.append(f"LanceDB path: {db_path}")
258
- status_info.append(f"LanceDB exists: {db_path.exists()}")
259
- if db_path.exists():
260
- status_info.append(f"Table count: {len(self.lancedb_client.db.table_names())}")
261
- except Exception as e:
262
- status_info.append(f"LanceDB error: {e}")
263
-
264
- if backend == "none":
265
- status_info.append("No vector backend available. Install hanzo-memory or start hanzo-node.")
266
-
267
- return "\n".join(status_info)
268
-
269
- async def _handle_search(self, tool_ctx, backend: str, query: Optional[str], limit: int, project_id: Optional[str], **kwargs) -> str:
270
- """Handle search operations."""
271
- if not query:
272
- return "Error: Query is required for search action"
273
-
274
- await tool_ctx.info(f"Searching for: {query} (limit: {limit})")
275
-
276
- if backend == "hanzo-node":
277
- results = await self._search_hanzo_node(query, limit, **kwargs)
278
- elif backend == "lancedb":
279
- results = await self._search_lancedb(query, limit, project_id)
280
- else:
281
- return "Error: No vector backend available"
282
-
283
- if not results:
284
- return f"No results found for query: {query}"
285
-
286
- # Format results
287
- formatted = [f"Found {len(results)} results for '{query}':\n"]
288
- for i, result in enumerate(results, 1):
289
- content = result.get("content", "")
290
- score = result.get("score", 0.0)
291
- formatted.append(f"{i}. {content} (score: {score:.3f})")
292
-
293
- return "\n".join(formatted)
294
-
295
- async def _handle_index(self, tool_ctx, backend: str, content: Optional[str], metadata: Optional[Dict]) -> str:
296
- """Handle indexing operations."""
297
- if not content:
298
- return "Error: Content is required for index action"
299
-
300
- await tool_ctx.info(f"Indexing content: {content[:100]}...")
301
-
302
- if backend == "hanzo-node":
303
- success = await self._index_hanzo_node(content, metadata)
304
- elif backend == "lancedb":
305
- success = await self._index_lancedb(content, metadata)
306
- else:
307
- return "Error: No vector backend available"
308
-
309
- if success:
310
- return f"Successfully indexed content (backend: {backend})"
311
- else:
312
- return f"Failed to index content (backend: {backend})"
313
-
314
- async def _handle_memory_create(self, tool_ctx, content: Optional[str], metadata: Optional[Dict]) -> str:
315
- """Handle memory creation."""
316
- if not content:
317
- return "Error: Content is required for memory_create action"
318
-
319
- if not self.memory_service:
320
- return "Error: Memory service not available"
321
-
322
- try:
323
- memory = self.memory_service.create_memory(
324
- user_id=self.user_id,
325
- project_id=self.project_id,
326
- content=content,
327
- metadata=metadata or {}
328
- )
329
- return f"Created memory: {memory.memory_id}"
330
- except Exception as e:
331
- return f"Error creating memory: {e}"
332
-
333
- async def _handle_memory_search(self, tool_ctx, query: Optional[str], limit: int, project_id: Optional[str]) -> str:
334
- """Handle memory search."""
335
- if not query:
336
- return "Error: Query is required for memory_search action"
337
-
338
- if not self.memory_service:
339
- return "Error: Memory service not available"
340
-
341
- try:
342
- results = self.memory_service.search_memories(
343
- user_id=self.user_id,
344
- query=query,
345
- project_id=project_id or self.project_id,
346
- limit=limit
347
- )
348
-
349
- if not results:
350
- return f"No memories found for query: {query}"
351
-
352
- formatted = [f"Found {len(results)} memories for '{query}':\n"]
353
- for i, memory in enumerate(results, 1):
354
- score = getattr(memory, "similarity_score", 0.0)
355
- formatted.append(f"{i}. {memory.content} (score: {score:.3f})")
356
-
357
- return "\n".join(formatted)
358
- except Exception as e:
359
- return f"Error searching memories: {e}"
360
-
361
- @override
362
- def register(self, mcp_server: FastMCP) -> None:
363
- """Register this tool with the MCP server."""
364
- tool_self = self
365
-
366
- @mcp_server.tool(name=self.name, description=self.description)
367
- async def vector(
368
- ctx: MCPContext,
369
- action: str,
370
- query: Optional[str] = None,
371
- content: Optional[str] = None,
372
- limit: int = 10,
373
- project_id: Optional[str] = None,
374
- metadata: Optional[Dict[str, Any]] = None,
375
- ) -> str:
376
- return await tool_self.call(
377
- ctx,
378
- action=action,
379
- query=query,
380
- content=content,
381
- limit=limit,
382
- project_id=project_id,
383
- metadata=metadata,
384
- )
@@ -1,191 +0,0 @@
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=o66pRF4Kwagy4NM95fo7mr-DLS1hxfSFghvQzHJ9U4Q,19577
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=lOhNtZ9dhxhJmRFnACnfEY8aB6hTUP-UzRfC0z-v-cI,17300
32
- hanzo_mcp/tools/agent/clarification_protocol.py,sha256=QYJTmDSJVRDyZMow80TxWmnJurxuLo1MaIFge8t_Yvk,8041
33
- hanzo_mcp/tools/agent/clarification_tool.py,sha256=up40UJLY5JrS6D3yBD1lW1vSrh79JNa3LoKrrNmAmwg,2449
34
- hanzo_mcp/tools/agent/claude_cli_tool.py,sha256=55Wc0LKgYCtDKQ02NXOYPMhx-sW7fL_NSCx0upsvvb4,3812
35
- hanzo_mcp/tools/agent/claude_desktop_auth.py,sha256=h-pUQRpJvaO-r4w_iQ4yU7rk2xOMdUmy2dFT9xctc4E,16161
36
- hanzo_mcp/tools/agent/cli_agent_base.py,sha256=4F2iOk6nvB63wcxb1ZLuZyK2USWRFizZvcnBWdMes28,6190
37
- hanzo_mcp/tools/agent/cli_tools.py,sha256=eOFOlyWX_BExduAuBppTwQXbYGKhKlMC1pOAFhwFNVs,16116
38
- hanzo_mcp/tools/agent/code_auth.py,sha256=97g3qqBBJNfGdoUppVhc2-BzvyWJVQUe9sYUYS9cBmQ,13902
39
- hanzo_mcp/tools/agent/code_auth_tool.py,sha256=blxLpYxamH-BXSySWp8D1zDdqC82GUBhd8U7pGSPugU,6105
40
- hanzo_mcp/tools/agent/codex_cli_tool.py,sha256=9jyB4cTtdcK50g6oapk7Bo4n8C8bAO2B9RuHHLOtP54,3697
41
- hanzo_mcp/tools/agent/critic_tool.py,sha256=u0Ww3z4OoIviCsW0pTtmrHT_d-fjwi5FbuzYtgwRSj8,13775
42
- hanzo_mcp/tools/agent/gemini_cli_tool.py,sha256=4PE7qYGlFC6_u0T2_Yh3WfBqZjuZM4UY2rPBkKtwaEU,3927
43
- hanzo_mcp/tools/agent/grok_cli_tool.py,sha256=YH1qweHDWDm-Yo84gcw_bL2w_vIdhSc6f7LNJlAHSeQ,3761
44
- hanzo_mcp/tools/agent/iching_tool.py,sha256=v29rVUM2yaY1vlpab00G3RsUuFEfE_RwPixGGe1tOUU,23314
45
- hanzo_mcp/tools/agent/network_tool.py,sha256=rD9kEAqBY8SCh1Spey6ifhlIfRAbGEbDSZowoTFZPVw,8340
46
- hanzo_mcp/tools/agent/prompt.py,sha256=16UWq8cxCPDWru5V8izcBqqorEohCxhQkh4KLPzcibI,6782
47
- hanzo_mcp/tools/agent/review_tool.py,sha256=XfAdte_fHIKD-LFOQGmmfBnA-Ub35MSdijV-BNXCzbo,16582
48
- hanzo_mcp/tools/agent/swarm_alias.py,sha256=pbTtNXuwiWwXlywNeAgNmgTo5DdfpE5SRKtnwPD5-no,2970
49
- hanzo_mcp/tools/agent/tool_adapter.py,sha256=rLItgdKvvfzJL4chNIrNK_I5kSCm6ocmi83RQm93NgA,3191
50
- hanzo_mcp/tools/agent/unified_cli_tools.py,sha256=aG_OE93fxI5r15AyFW8EuQIRozpnI4y6nyPulTaoU3A,8127
51
- hanzo_mcp/tools/common/__init__.py,sha256=2gXIERXM7sALINWfDBbH_khzBRatvwQSWgpAvKlfy4o,1283
52
- hanzo_mcp/tools/common/base.py,sha256=W46BbEhaPZ4fD1fTBpSt59kYjhV4-ALnS_83KOO2yHA,5875
53
- hanzo_mcp/tools/common/batch_tool.py,sha256=B3qoXi71mCjdgbSvaibkMaPeVTbRanDpr_OG2FnBbDo,15697
54
- hanzo_mcp/tools/common/config_tool.py,sha256=jJcILCRd5lXYDNp97BmKcSOcjCuHDDaqYqsscOF4X40,15886
55
- hanzo_mcp/tools/common/context.py,sha256=xcSsG_wg-UdeaSCXLeGVBWvIv_m9-tTV_Rh6N5yVYvg,5126
56
- hanzo_mcp/tools/common/context_fix.py,sha256=UNRpm_83x0iCsme7Y0D8NyvtJpyoS-7pcbXHaAnvp28,763
57
- hanzo_mcp/tools/common/critic_tool.py,sha256=ueD_bBxxWsHQkf99_YpNiBYeFYoRL-vf4taEZRViPXw,6227
58
- hanzo_mcp/tools/common/decorators.py,sha256=tqv5AqR4_bj5vPPM63nURqwP3X_udsJBDLXz4FNIBtI,6529
59
- hanzo_mcp/tools/common/enhanced_base.py,sha256=qcYI0_cAt2Hj1RUXv_2Qg9pW5VLIxPwjsQ88ZHf31pI,3529
60
- hanzo_mcp/tools/common/fastmcp_pagination.py,sha256=GrxSA346dIWFXy16vek5AqUoQByiorLA2IVLENuktIw,11588
61
- hanzo_mcp/tools/common/forgiving_edit.py,sha256=QceOLOl3f96F64YF_Y-t5H9MZmFRbibJ6xfwqp7fVG8,9070
62
- hanzo_mcp/tools/common/mode.py,sha256=_vGGnRx4DMSrmAj43xEe9I80MUsr3htmUbMvUBtTIWE,3212
63
- hanzo_mcp/tools/common/mode_loader.py,sha256=Q5PtbGoLEpcGnZchoGPrlf6HA1kZK32PLziu0_c1ukY,3206
64
- hanzo_mcp/tools/common/paginated_base.py,sha256=fea1MIwghSPEg9MVs1un3XqF2xIHbbKywcrBPPsLdng,8437
65
- hanzo_mcp/tools/common/paginated_response.py,sha256=Y2PfXlnFYuKMir9BvYcKBc3nVgX6k7l5gs1eFGmiQF0,9942
66
- hanzo_mcp/tools/common/pagination.py,sha256=vLO-DwjgzhlHmykkMdy5AAzEak5htv8qgxETnpsnqG4,6033
67
- hanzo_mcp/tools/common/path_utils.py,sha256=CjRfgmiEP314YpyCVKLkMqGg6RZqMuv6QA6UFHAwE4s,1190
68
- hanzo_mcp/tools/common/permissions.py,sha256=5JrQ1gjU1VS9TXvS8T8PM6qI6ctWm88MMxPzFHEDWr4,8031
69
- hanzo_mcp/tools/common/personality.py,sha256=LREeIujljQluaqSxCzeGK9kvAJvYkgr1vAP4WXeH5Y8,64196
70
- hanzo_mcp/tools/common/plugin_loader.py,sha256=dVmwi-_sYfnTqIK_MbD1rBBp5I6Av8A6bF6-VAsOqSA,8701
71
- hanzo_mcp/tools/common/stats.py,sha256=6QppW1BuSSj_IbadXGlPNoAVDuh9Azn9K76p8ZUvoH4,9565
72
- hanzo_mcp/tools/common/test_helpers.py,sha256=rrepQmWvqRc3gyNkqBARjGBOFtFolUTQAU4vIfP1If8,1076
73
- hanzo_mcp/tools/common/thinking_tool.py,sha256=3_gAOrkVG05LqirtYmiNSklz8NygNMbK1dR7frbD3Vo,5006
74
- hanzo_mcp/tools/common/tool_disable.py,sha256=wkcXmxuz8uhfg48OaSYDD4SqpaTPSI3MAM6Ch_TQj9o,4238
75
- hanzo_mcp/tools/common/tool_enable.py,sha256=MuDypR93ZKIllb6DexRN7md5yivFGYoIyByJY2nMkgg,4971
76
- hanzo_mcp/tools/common/tool_list.py,sha256=lbwLGysOP2vFx74C9F0bY_a1A1Vr_oMV5t6wBgIdYwA,9389
77
- hanzo_mcp/tools/common/truncate.py,sha256=D_RSTh0ZaEuuY-mwvgv46OEA9FtQRbJYcIOk_eVG4HM,3110
78
- hanzo_mcp/tools/common/validation.py,sha256=u-7iTVxPAQn1ZRGfy7OQ6nAaJVmvzeB7RoU5-cbJY3Q,1687
79
- hanzo_mcp/tools/compiler/__init__.py,sha256=rmSG0dx34NUL-KilZjwjWTaOTAbf3OT61bDMxb3csYA,199
80
- hanzo_mcp/tools/compiler/sandboxed_compiler.py,sha256=G1QL2rV8HHVXpkSdMGQtVwjw_xdXpJk-IcbQBUD1GWM,22504
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/environment/__init__.py,sha256=wExFJgSHe_dgLQC7wLjday6FbC6cYsoIMP8iPl_WIs0,213
102
- hanzo_mcp/tools/environment/environment_detector.py,sha256=Q-pwojYunTlSCWn8C6rHFwXZ_HithqNxROx3pMOKJjs,21370
103
- hanzo_mcp/tools/filesystem/__init__.py,sha256=U3IJA_RaD5pJkn2AT2ZYtxmtSq3XnO_IywOqxUF6deg,8806
104
- hanzo_mcp/tools/filesystem/ast_multi_edit.py,sha256=kxJL-Nicav9Tn6BcDPBFKGq67XLWhtYgF1NV7UlhzK4,22180
105
- hanzo_mcp/tools/filesystem/ast_tool.py,sha256=lVNAKhSQrTADP13aBY60cYSBeX0Vt0JHDLra00rX208,7380
106
- hanzo_mcp/tools/filesystem/base.py,sha256=MbzRI2ZbQMCYTNhpC_23QlrxncMKiCrUj0-5lNBIspA,4254
107
- hanzo_mcp/tools/filesystem/content_replace.py,sha256=OwgMLW69A2gVez0ebPAptpqgyO05TAJgeZ4eEBeO5dM,9877
108
- hanzo_mcp/tools/filesystem/diff.py,sha256=j4n1ApCFr5Fz_KJnBptIZ_t6tXQSiLQ_tTyKtKfZtdk,7545
109
- hanzo_mcp/tools/filesystem/directory_tree.py,sha256=GMZrtmpBy-znHqTe21jR6TePnjH297ZcSR7EtRKS8hw,22031
110
- hanzo_mcp/tools/filesystem/edit.py,sha256=NLyHfa9A15qsAZ8FZgAvi5C7Oc3KaiIWlUssxPiBP_o,10595
111
- hanzo_mcp/tools/filesystem/find.py,sha256=B5M-z3-35f-dBl6tiR6_Byi2NQbK1Z_pmBCEiExipz0,22270
112
- hanzo_mcp/tools/filesystem/git_search.py,sha256=KTZQnVzECvYaAk124WKF93l-ULMiywtLRcHg5UZeyJo,16483
113
- hanzo_mcp/tools/filesystem/multi_edit.py,sha256=gEXi9nfSvnslRjU_szbA9zhE1p4Br0nZB_u-u86EfPE,14126
114
- hanzo_mcp/tools/filesystem/read.py,sha256=DvH70KomNqLdfP52Vp7E54Cu5jhEAX4LB68uqMjqQ0k,9443
115
- hanzo_mcp/tools/filesystem/rules_tool.py,sha256=Rp40wtXvPIrDRiAK085oWPIU_pfpVEHaU9bBirEAvFk,8399
116
- hanzo_mcp/tools/filesystem/search.py,sha256=ms0fNICUmc3ultgweX6t72W0h8Oz66mH26l-c62v5Wo,43537
117
- hanzo_mcp/tools/filesystem/unix_aliases.py,sha256=N4vy9SXtecCNtggv2zjFk8CmHvhuqTvR6Ha_KT1UE_g,3031
118
- hanzo_mcp/tools/filesystem/watch.py,sha256=7hYDXT3yqKeZiOwzxFSC8oiB7-EICbzAh99qJCWlQrM,6877
119
- hanzo_mcp/tools/filesystem/write.py,sha256=D-Bee_Zdl0UPm-R__M6zsKWHDiT7rtd3hgDKcfSxGi8,4697
120
- hanzo_mcp/tools/framework/__init__.py,sha256=5XhTsJUemKtAb20OVJWdCazvwAA3tBMA7HdEhaowDhA,209
121
- hanzo_mcp/tools/framework/framework_modes.py,sha256=RUoohwvrxH16rr1dRpX1XjUCikZ6tu7gDfqWxP9aCwc,21808
122
- hanzo_mcp/tools/jupyter/__init__.py,sha256=-7uAomIx8tboZ9gcal7t2MRvgZ9A3cltIYA4perfZVE,2646
123
- hanzo_mcp/tools/jupyter/base.py,sha256=4O8iMBNqlrCNFEbsihpHyX_nyUqLV7w3AWb_0kcKD14,9788
124
- hanzo_mcp/tools/jupyter/jupyter.py,sha256=haMwxZ1yRieyQ3q1Ksem2ACm9hxL7i7Dh4pmwjkZPPo,14131
125
- hanzo_mcp/tools/llm/__init__.py,sha256=4j8X6wqwchBEur0KYqsmPebRw8ZthDj9StpC41csk0M,1524
126
- hanzo_mcp/tools/llm/consensus_tool.py,sha256=ym13XafwEWLz4FJtsD4ivUaghgd-daqjs_diFRncRaI,11321
127
- hanzo_mcp/tools/llm/llm_manage.py,sha256=i4AKypbBNWs0FmMXsKZMm0bN5eI1Rl2SmGWBbiKuGjA,15954
128
- hanzo_mcp/tools/llm/llm_tool.py,sha256=_UK94gyz_xg_ClXAWq7lDfoMKcqgxVAo8ssdoCL_9Gg,29573
129
- hanzo_mcp/tools/llm/llm_unified.py,sha256=YCkKmof8eEEgv-nygfkT2zVVJPxxPAvq5AmtNdLrb40,28833
130
- hanzo_mcp/tools/llm/provider_tools.py,sha256=LpWsBphq1LaJofpPKQxsBXPCD69uUDAsTbLhzOPIH1E,11389
131
- hanzo_mcp/tools/lsp/__init__.py,sha256=2Z1edOMrLV6gi1dyGgUyN3lN4HOWynf73Eye_eBk2Xo,150
132
- hanzo_mcp/tools/lsp/lsp_tool.py,sha256=6uYX1xx04iKh4_GLHzQ2wZG3dJ-BjccjUCCW9lWNgN4,25826
133
- hanzo_mcp/tools/mcp/__init__.py,sha256=Rml2im2dg4wNra4nsDH09q73G-yoifQrXL9iYhPmfTg,347
134
- hanzo_mcp/tools/mcp/mcp_add.py,sha256=adtPhgJZEYaD9supRsJ4ujzZr8e3LnVOWXH_45m8xzw,7825
135
- hanzo_mcp/tools/mcp/mcp_remove.py,sha256=5HyM0mQWoYg_f5J9Huhh7XdiQCrfYXEWg8t7k6G3G1w,3233
136
- hanzo_mcp/tools/mcp/mcp_stats.py,sha256=f3UNVnppBbNHMizZ1W3Goxed5YRmLs30m3zqURUiucs,5273
137
- hanzo_mcp/tools/mcp/mcp_tool.py,sha256=fUL01Zr6yI6FH_Yrxx3vtonQlEfAX5g61fp2ET_vq2Q,16549
138
- hanzo_mcp/tools/memory/__init__.py,sha256=GQ17ESC6ecPkBEDtAnOYPfHQaXRrs9sr-jv8sUcvKcw,3167
139
- hanzo_mcp/tools/memory/conversation_memory.py,sha256=dhi-zkFaL55zcMoUUxXK02Hv1Ow8fqByNl6RKF7d-RE,21727
140
- hanzo_mcp/tools/memory/knowledge_tools.py,sha256=V_NMijCKkwauGIgt_9xFPWEvfAx45P3jOQm5oqo_F6c,17501
141
- hanzo_mcp/tools/memory/memory_tools.py,sha256=z2fVkc8zmMFvmQNzbTPn2FJxbbw3CWKavZYgHVGvtws,13517
142
- hanzo_mcp/tools/search/__init__.py,sha256=7z0GUOmKrJyI7MCbLIvO5zbWHknaNf6kCowi2CtoNNw,292
143
- hanzo_mcp/tools/search/find_tool.py,sha256=ymJ1V4OuraAGnQ1sFB9SsaJhrMttRszdahWeTDLC-KA,23293
144
- hanzo_mcp/tools/search/unified_search.py,sha256=DsAl75K3hQrCtDh_ooB4chF9son0rgZFkA6zStNj638,34996
145
- hanzo_mcp/tools/shell/__init__.py,sha256=4rMcMGEtAXSg15mCUyboqdZ2Em3KFnINCBHuyrKMCFU,2904
146
- hanzo_mcp/tools/shell/auto_background.py,sha256=c1zm2Tpv2XRo_zWbNrphOW1_x8mq8HH-lfG_lXOuhTw,8211
147
- hanzo_mcp/tools/shell/base.py,sha256=k6iCixqFHOYBiq_0723yGyV6QgQuRYt3ipxtruTzyBI,5778
148
- hanzo_mcp/tools/shell/base_process.py,sha256=2UVZ-OD82z0mMu71aEM9hAXw5iEATGIM8x7ZvcBO8-4,10413
149
- hanzo_mcp/tools/shell/bash_session.py,sha256=OPWajWdEan9-LBCdQGgh-hCP7bNXh_OuehaNrEXIz3Q,27058
150
- hanzo_mcp/tools/shell/bash_session_executor.py,sha256=vHduqxC8H4iJqmuQrWaN0FnykOHTPDZQSHQPeJBaYkI,10714
151
- hanzo_mcp/tools/shell/bash_tool.py,sha256=gnINuifEYTwRsoO3b0vWNgtNT35whwBbW-JRld6WK6k,3685
152
- hanzo_mcp/tools/shell/command_executor.py,sha256=4Xl6wVg-DuHQKecSxEbCOV2OqtP9v4ijuFBWvrua8Zg,35440
153
- hanzo_mcp/tools/shell/logs.py,sha256=4qEtn1HjcnjTuJ1wmH8zywB48SWvXCaC1edaZZxjJOw,8218
154
- hanzo_mcp/tools/shell/npx.py,sha256=EtrgyDu1UySN995fFAznL8rNLpjkMYGXIj98L59VBCc,4965
155
- hanzo_mcp/tools/shell/npx_background.py,sha256=_hFAw8tDXGHC8BTd-g5gOq0izFoOubQv0F_TjKz0zq0,7107
156
- hanzo_mcp/tools/shell/npx_tool.py,sha256=sOsfdu8CWNPdq7ph0jytcA_rfKBMCqcF3NbdpzVNsMU,2870
157
- hanzo_mcp/tools/shell/open.py,sha256=1SyHlQabZSS4nRqP8r8126sEgB_lYyWWgbcI3oc5sMo,3538
158
- hanzo_mcp/tools/shell/pkill.py,sha256=Or6hLDZ5v0MB99dLl1paguM41xfEsvIwFBhZCE6IYEU,8428
159
- hanzo_mcp/tools/shell/process_tool.py,sha256=pv-yAHXQ_ZEFTjfUxCqvfoLLhZUk_n_DP8btdaNTPBU,4700
160
- hanzo_mcp/tools/shell/processes.py,sha256=zRNc7IAMoHWIxZgo5Np8r9ARgeyrnC_KLMb5tXEB1Po,8773
161
- hanzo_mcp/tools/shell/run_background.py,sha256=XEtYhKDXhhd8IU4yNBqVGtI9UwMBbMc8e_nK8GzbgQo,9602
162
- hanzo_mcp/tools/shell/run_command.py,sha256=JgmR6k7SOcQ17PNL4GqSRtjgMqND_BLSLKBp8Q_1nQY,16082
163
- hanzo_mcp/tools/shell/run_command_windows.py,sha256=E8YpjE4bXtTmjXLy-LwTCWLHptC6LNx1gocKXpJ3DtY,15307
164
- hanzo_mcp/tools/shell/run_tool.py,sha256=Dhv7B2Y0yVv_u6VpxxvuisH8agfiVLLhcZnmsr696mI,1710
165
- hanzo_mcp/tools/shell/session_manager.py,sha256=Fc91zVr65u_5fIXoVq0rhbbQQ9Vmo1gxsUSaroC8F40,6481
166
- hanzo_mcp/tools/shell/session_storage.py,sha256=gWdZnAYSZE_v_aWgPnw8UalW-k1baoa-7Y3CpPxJ4OE,10095
167
- hanzo_mcp/tools/shell/streaming_command.py,sha256=i1hj4ewxvhw84EsskXhlJzZod752zAYgVo5pR7aMNP4,22317
168
- hanzo_mcp/tools/shell/uvx.py,sha256=G42ZTDg-sht9nPB5jO1gZtdWI1mrTA8treJnoXcAhXA,6414
169
- hanzo_mcp/tools/shell/uvx_background.py,sha256=HC0apbPuNN2s7lCjyUilpbrq59nCUg-b5CS4Y8JTPUo,8590
170
- hanzo_mcp/tools/shell/uvx_tool.py,sha256=M6WwAsWvpwyciPVCLZK0KVfUfzcPBugmraNrOttN6Zw,2906
171
- hanzo_mcp/tools/shell/zsh_tool.py,sha256=cMtSQT4wl3xMOSf05_WDyW3QpMHBI0_skaP4ccRiptQ,8075
172
- hanzo_mcp/tools/todo/__init__.py,sha256=4rXjfj95vB7KJFTdt3g2WOffiyzgixUnf1UckyTizGY,1579
173
- hanzo_mcp/tools/todo/base.py,sha256=k0CFZy59YlLAJBVzVA4tr-qGkQ1l5yF04kcmziwQWec,10666
174
- hanzo_mcp/tools/todo/todo.py,sha256=oANlSDSCKNqx2gzfTD0rp71STOTIfWl3PJpANCrbZfM,8748
175
- hanzo_mcp/tools/vector/__init__.py,sha256=gMYCd2cED0hu_oRAoGHWQtNR5rPXt8OzP9vXOlIPIf8,5937
176
- hanzo_mcp/tools/vector/ast_analyzer.py,sha256=nz_fa5sEJEwPhzxeJT6qFqOhybuei0hG5i2jcx2zW30,15747
177
- hanzo_mcp/tools/vector/git_ingester.py,sha256=gHbdouUec_DPIolC79V1p9jj-m7uq4ulko3N5RnXKd4,15611
178
- hanzo_mcp/tools/vector/index_tool.py,sha256=it3l15Bd-D5G-oSPaN_ehI9YwOlY4sFXV494RB0LsJY,13474
179
- hanzo_mcp/tools/vector/infinity_store.py,sha256=xfd2qT59lJVM_N1LTuCyUuVvYE9NxH41DMa4eyJCaqc,28383
180
- hanzo_mcp/tools/vector/mock_infinity.py,sha256=54V-Ed7lWufP8gMo8rU6cLpJl50j-20-H6ouUpgPxAg,4830
181
- hanzo_mcp/tools/vector/node_tool.py,sha256=XaECeItjG0tq94ZByUF0mE9KSclZVmp-9rI5tEeDTrg,21071
182
- hanzo_mcp/tools/vector/project_manager.py,sha256=usxOldFajm7UN-74yN7Qa5Xw7Or6EWmOrBtvhJAUESI,13073
183
- hanzo_mcp/tools/vector/unified_vector.py,sha256=km75ghtt9MGtIZQFzte5oYMKxvwgpeKBIBMbu_ruNsg,15022
184
- hanzo_mcp/tools/vector/vector.py,sha256=ETcukhy5hGDngEWa-zDZMmZxeh4fBds-yyPQeWHiBms,9871
185
- hanzo_mcp/tools/vector/vector_index.py,sha256=UWCsWr_7ijv4sEeyLlBfLrxyT_HIS4z9WfIsQVR1Vic,4176
186
- hanzo_mcp/tools/vector/vector_search.py,sha256=q9MA0clubMAqmaShfLSr_PHSpB7z0zkOAAJbfyM4DFI,9303
187
- hanzo_mcp-0.9.0.dist-info/METADATA,sha256=4YTooMQkfo-rPOu2pJ0JRKlwKPovefV_YaJCviElLIw,8974
188
- hanzo_mcp-0.9.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
189
- hanzo_mcp-0.9.0.dist-info/entry_points.txt,sha256=ML30pedHV5wjthfztzMMz3uYhNdR_6inzYY5pSqNME4,142
190
- hanzo_mcp-0.9.0.dist-info/top_level.txt,sha256=eGFANatA0MHWiVlpS56fTYRIShtibrSom1uXI6XU0GU,10
191
- hanzo_mcp-0.9.0.dist-info/RECORD,,