hanzo-mcp 0.8.8__py3-none-any.whl → 0.8.11__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.

@@ -16,7 +16,6 @@ import traceback
16
16
  from typing import Any, Dict, TypeVar, Callable, Optional
17
17
  from datetime import datetime
18
18
  from dataclasses import dataclass
19
- from importlib.metadata import version, PackageNotFoundError
20
19
 
21
20
  # Try to import PostHog, but make it optional
22
21
  try:
@@ -27,12 +26,6 @@ except ImportError:
27
26
  POSTHOG_AVAILABLE = False
28
27
  Posthog = None
29
28
 
30
- # Get package version
31
- try:
32
- MCP_VERSION = version("hanzo-mcp")
33
- except PackageNotFoundError:
34
- MCP_VERSION = "0.8.7" # Fallback version
35
-
36
29
 
37
30
  F = TypeVar("F", bound=Callable[..., Any])
38
31
 
@@ -105,7 +98,7 @@ class Analytics:
105
98
  "timestamp": datetime.utcnow().isoformat(),
106
99
  "platform": platform.system(),
107
100
  "python_version": platform.python_version(),
108
- "mcp_version": MCP_VERSION,
101
+ "mcp_version": "0.6.13", # TODO: Get from package
109
102
  **(properties or {}),
110
103
  }
111
104
 
hanzo_mcp/cli.py CHANGED
@@ -288,9 +288,9 @@ def main() -> None:
288
288
  format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
289
289
  )
290
290
 
291
- # If no allowed paths are specified, use the current directory
291
+ # If no allowed paths are specified, use the home directory
292
292
  if not allowed_paths:
293
- allowed_paths = [os.getcwd()]
293
+ allowed_paths = [os.path.expanduser("~")]
294
294
 
295
295
  # Run in dev mode if requested
296
296
  if dev:
@@ -105,7 +105,7 @@ TOOL_REGISTRY: Dict[str, ToolConfig] = {
105
105
  description="Edit Jupyter notebook cells (replace, insert, delete)",
106
106
  cli_flag="--disable-notebook-edit",
107
107
  ),
108
- # Task Management Tools (2)
108
+ # Todo Tools (2)
109
109
  "todo_read": ToolConfig(
110
110
  name="todo_read",
111
111
  category=ToolCategory.TODO,
hanzo_mcp/server.py CHANGED
@@ -17,7 +17,10 @@ try:
17
17
  from fastmcp import FastMCP
18
18
  except ImportError:
19
19
  # Fallback for older MCP versions
20
- from mcp.server import FastMCP
20
+ try:
21
+ from mcp.server import FastMCP
22
+ except ImportError:
23
+ from mcp import FastMCP
21
24
 
22
25
  # Import our enhanced server
23
26
  from hanzo_mcp.tools import register_all_tools
@@ -48,6 +48,7 @@ try: # pragma: no cover
48
48
  from hanzo_mcp.tools.common.mode import activate_mode_from_env
49
49
  from hanzo_mcp.tools.common.stats import StatsTool
50
50
  from hanzo_mcp.tools.common.tool_list import ToolListTool
51
+ from hanzo_mcp.tools.common import register_thinking_tool, register_critic_tool, register_batch_tool
51
52
  from hanzo_mcp.tools.config.mode_tool import mode_tool
52
53
  from hanzo_mcp.tools.common.mode_loader import ModeLoader
53
54
  from hanzo_mcp.tools.common.permissions import PermissionManager
@@ -64,19 +65,16 @@ try: # pragma: no cover
64
65
  register_memory_tools = None # type: ignore
65
66
  except Exception:
66
67
  # Minimal surface to allow submodule imports elsewhere
67
- # Define fallback functions for required imports
68
+ # Define stub functions for required imports
68
69
  def activate_mode_from_env():
69
- """Fallback: No mode activation when imports fail."""
70
- return None
70
+ pass
71
71
  class ModeLoader:
72
72
  @staticmethod
73
73
  def get_enabled_tools_from_mode(base_enabled_tools=None, force_mode=None):
74
- """Fallback: Return base tools when imports fail."""
75
74
  return base_enabled_tools or {}
76
75
  @staticmethod
77
76
  def apply_environment_from_mode():
78
- """Fallback: No environment changes when imports fail."""
79
- return None
77
+ pass
80
78
 
81
79
  # Try to import LSP tool
82
80
  try:
@@ -49,8 +49,7 @@ except ImportError:
49
49
  """Stub State class when hanzo-agents is not available."""
50
50
 
51
51
  def __init__(self):
52
- """Initialize empty state."""
53
- self.data = {}
52
+ pass
54
53
 
55
54
  def to_dict(self):
56
55
  return {}
@@ -96,7 +96,7 @@ class AgentTool(AgentClarificationMixin, BaseTool):
96
96
  Returns:
97
97
  Tool description
98
98
  """
99
- # Glob is now implemented via find_files tool
99
+ # TODO: Add glob when it is implemented
100
100
  at = [t.name for t in self.available_tools]
101
101
 
102
102
  return f"""Launch a new agent that has access to the following tools: {at}. When you are searching for a keyword or file and are not confident that you will find the right match in the first few tries, use the Agent tool to perform the search for you.
@@ -406,7 +406,7 @@ class HanzoDevCLITool(BaseCLITool):
406
406
  timeout: int = params.get("timeout", 600)
407
407
 
408
408
  # Build command
409
- command: list[str] = ["hanzo", "dev"]
409
+ command: list[str] = ["dev"]
410
410
  if model:
411
411
  command.extend(["--model", model])
412
412
  command.extend(["--prompt", prompt])
@@ -96,14 +96,12 @@ except ImportError:
96
96
  # Try core module import
97
97
  from hanzo_agents.core.memory import create_memory_kv, create_memory_vector
98
98
  except ImportError:
99
- # Define fallback functions if not available
99
+ # Define stubs if not available
100
100
  def create_memory_kv(*args, **kwargs):
101
- """Fallback: Key-value memory not available."""
102
- return {}
101
+ pass
103
102
 
104
103
  def create_memory_vector(*args, **kwargs):
105
- """Fallback: Vector memory not available."""
106
- return {}
104
+ pass
107
105
 
108
106
 
109
107
  try:
@@ -117,18 +115,15 @@ except ImportError:
117
115
  state_based_router,
118
116
  )
119
117
  except ImportError:
120
- # Define fallback functions if not available
118
+ # Define stubs if not available
121
119
  def sequential_router(*args, **kwargs):
122
- """Fallback: Sequential router not available."""
123
- return lambda agents, task: None
120
+ pass
124
121
 
125
122
  def conditional_router(*args, **kwargs):
126
- """Fallback: Conditional router not available."""
127
- return lambda agents, task: None
123
+ pass
128
124
 
129
125
  def state_based_router(*args, **kwargs):
130
- """Fallback: State-based router not available."""
131
- return lambda agents, task: None
126
+ pass
132
127
 
133
128
 
134
129
  try:
@@ -236,7 +236,7 @@ Example:
236
236
  output.append(f"Config Files: {config_count}")
237
237
 
238
238
  # Tool status (if available)
239
- # Tool usage statistics can be tracked via analytics
239
+ # TODO: Track tool usage statistics
240
240
  output.append("\nTool Categories:")
241
241
  output.append(" - File Operations: grep, find_files, read, write, edit")
242
242
  output.append(" - Shell: bash, run_background, processes, pkill")
@@ -221,8 +221,8 @@ Use 'mcp_stats' to see all added servers and their status.
221
221
  if not shutil.which("uvx"):
222
222
  return "Error: uvx not found. Install uv first."
223
223
 
224
- # MCP server connection handled by runtime
225
- # Store configuration for runtime to use
224
+ # TODO: Actually start and connect to the MCP server
225
+ # For now, we just store the configuration
226
226
  server_config["status"] = "ready"
227
227
 
228
228
  except Exception as e:
@@ -103,7 +103,7 @@ Use 'mcp_stats' to see all servers before removing.
103
103
  if not force:
104
104
  return f"Error: Server '{name}' is currently running. Use --force to remove anyway."
105
105
  else:
106
- # Server process stopping handled by MCP runtime
106
+ # TODO: Stop the server process
107
107
  await tool_ctx.info(f"Stopping running server '{name}'")
108
108
 
109
109
  # Remove from registry
@@ -4,19 +4,25 @@ from mcp.server import FastMCP
4
4
 
5
5
  from hanzo_mcp.tools.common.base import BaseTool, ToolRegistry
6
6
  from hanzo_mcp.tools.common.permissions import PermissionManager
7
- from hanzo_mcp.tools.memory.memory_tools import (
8
- CreateMemoriesTool,
9
- DeleteMemoriesTool,
10
- ManageMemoriesTool,
11
- RecallMemoriesTool,
12
- UpdateMemoriesTool,
13
- )
14
- from hanzo_mcp.tools.memory.knowledge_tools import (
15
- StoreFactsTool,
16
- RecallFactsTool,
17
- SummarizeToMemoryTool,
18
- ManageKnowledgeBasesTool,
19
- )
7
+
8
+ # Import memory tools if available
9
+ try:
10
+ from hanzo_mcp.tools.memory.memory_tools import (
11
+ CreateMemoriesTool,
12
+ DeleteMemoriesTool,
13
+ ManageMemoriesTool,
14
+ RecallMemoriesTool,
15
+ UpdateMemoriesTool,
16
+ )
17
+ from hanzo_mcp.tools.memory.knowledge_tools import (
18
+ StoreFactsTool,
19
+ RecallFactsTool,
20
+ SummarizeToMemoryTool,
21
+ ManageKnowledgeBasesTool,
22
+ )
23
+ MEMORY_TOOLS_AVAILABLE = True
24
+ except ImportError:
25
+ MEMORY_TOOLS_AVAILABLE = False
20
26
 
21
27
 
22
28
  def register_memory_tools(
@@ -38,6 +44,10 @@ def register_memory_tools(
38
44
  Returns:
39
45
  List of registered tools
40
46
  """
47
+ if not MEMORY_TOOLS_AVAILABLE:
48
+ print("Warning: Memory tools not available (hanzo-memory package not found)")
49
+ return []
50
+
41
51
  # Create memory tools
42
52
  recall_tool = RecallMemoriesTool(
43
53
  user_id=user_id, project_id=project_id, **memory_config
@@ -21,7 +21,7 @@ try:
21
21
  except ImportError:
22
22
  MEMORY_AVAILABLE = False
23
23
  raise ImportError(
24
- "hanzo-memory package is required for memory tools. Install it from ~/work/hanzo/ide/pkg/memory"
24
+ "hanzo-memory package is required for memory tools. Install it from ~/work/hanzo/python-sdk/pkg/hanzo-memory"
25
25
  )
26
26
 
27
27
 
@@ -93,7 +93,7 @@ class UnifiedSearch(BaseTool):
93
93
 
94
94
  1. Find code patterns:
95
95
  search("error handling") # Finds all error handling code
96
- search("TASK|FIX") # Regex search for task markers
96
+ search("TODO|FIXME") # Regex search for TODOs
97
97
  search("async function") # Find async functions
98
98
 
99
99
  2. Find symbols/definitions:
@@ -963,8 +963,8 @@ class CodeIndexer:
963
963
  self, content: str, file_path: Path
964
964
  ) -> List[Dict[str, Any]]:
965
965
  """Split code into meaningful chunks."""
966
- # Using line-based splitting for compatibility with all file types
967
- # AST parsing would only work for specific languages
966
+ # Simple line-based splitting for now
967
+ # TODO: Use AST for better splitting
968
968
  chunks = []
969
969
  lines = content.split("\n")
970
970
 
@@ -11,9 +11,10 @@ try:
11
11
 
12
12
  INFINITY_AVAILABLE = True
13
13
  except ImportError:
14
- # infinity_embedded not available, functionality will be limited
15
- INFINITY_AVAILABLE = False
16
- infinity_embedded = None # type: ignore
14
+ # Use mock implementation when infinity_embedded is not available
15
+ from . import mock_infinity as infinity_embedded
16
+
17
+ INFINITY_AVAILABLE = True # Mock is always available
17
18
 
18
19
  from .ast_analyzer import Symbol, FileAST, ASTAnalyzer, create_symbol_embedding_text
19
20
 
@@ -0,0 +1,161 @@
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(
62
+ self, column: str, vector: List[float], dtype: str, metric: str, limit: int
63
+ ):
64
+ """Add vector search."""
65
+ self.vector_search = {
66
+ "column": column,
67
+ "vector": vector,
68
+ "dtype": dtype,
69
+ "metric": metric,
70
+ "limit": limit,
71
+ }
72
+ self.limit_value = limit
73
+ return self
74
+
75
+ def to_pl(self):
76
+ """Execute query and return polars-like result."""
77
+ results = self.table.data.copy()
78
+
79
+ # Apply filters
80
+ for condition in self.filters:
81
+ results = [r for r in results if self.table._eval_condition(r, condition)]
82
+
83
+ # Apply vector search (mock similarity)
84
+ if self.vector_search:
85
+ # Add mock scores
86
+ for r in results:
87
+ r["score"] = random.uniform(0.5, 1.0)
88
+ # Sort by score
89
+ results.sort(key=lambda x: x.get("score", 0), reverse=True)
90
+ # Limit results
91
+ if self.limit_value:
92
+ results = results[: self.limit_value]
93
+
94
+ # Return mock polars DataFrame
95
+ return MockDataFrame(results)
96
+
97
+
98
+ class MockDataFrame:
99
+ """Mock polars DataFrame."""
100
+
101
+ def __init__(self, data: List[Dict[str, Any]]):
102
+ self.data = data
103
+
104
+ def __len__(self):
105
+ return len(self.data)
106
+
107
+ def iter_rows(self, named: bool = False):
108
+ """Iterate over rows."""
109
+ if named:
110
+ return iter(self.data)
111
+ else:
112
+ # Return tuples
113
+ if not self.data:
114
+ return iter([])
115
+ keys = list(self.data[0].keys())
116
+ return iter([tuple(row.get(k) for k in keys) for row in self.data])
117
+
118
+
119
+ class MockDatabase:
120
+ """Mock implementation of an Infinity database."""
121
+
122
+ def __init__(self, name: str):
123
+ self.name = name
124
+ self.tables = {}
125
+
126
+ def create_table(self, name: str, schema: Dict[str, Any]) -> MockTable:
127
+ """Create a new table."""
128
+ table = MockTable(name, schema)
129
+ self.tables[name] = table
130
+ return table
131
+
132
+ def get_table(self, name: str) -> MockTable:
133
+ """Get an existing table."""
134
+ if name not in self.tables:
135
+ raise KeyError(f"Table {name} not found")
136
+ return self.tables[name]
137
+
138
+
139
+ class MockInfinity:
140
+ """Mock implementation of Infinity connection."""
141
+
142
+ def __init__(self, path: str):
143
+ self.path = Path(path)
144
+ self.databases = {}
145
+ # Ensure directory exists
146
+ self.path.mkdir(parents=True, exist_ok=True)
147
+
148
+ def get_database(self, name: str) -> MockDatabase:
149
+ """Get or create a database."""
150
+ if name not in self.databases:
151
+ self.databases[name] = MockDatabase(name)
152
+ return self.databases[name]
153
+
154
+ def disconnect(self):
155
+ """Disconnect from Infinity."""
156
+ pass
157
+
158
+
159
+ def connect(path: str) -> MockInfinity:
160
+ """Connect to Infinity (mock implementation)."""
161
+ return MockInfinity(path)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hanzo-mcp
3
- Version: 0.8.8
3
+ Version: 0.8.11
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
@@ -1,19 +1,19 @@
1
1
  hanzo_mcp/__init__.py,sha256=DRSsStAQLco33avsyYOk6liW-6fIqkPi8CyXlJiFtoU,868
2
2
  hanzo_mcp/__main__.py,sha256=EvDEygOjvP6S_CrZSL8E4qgGUcO_xfmzEIbsLEHPaK4,130
3
3
  hanzo_mcp/bridge.py,sha256=ewZprfl5Hbf2LXxQf4KazMy7pOiPVx_paX4rZ0NhgDU,14995
4
- hanzo_mcp/cli.py,sha256=OyOArc3IOj8v0xvKbmm1bsmOlQZyjdE07EDE3cV0Akk,14823
4
+ hanzo_mcp/cli.py,sha256=495aehORTRBqldOi5y7f9tKwqiQgYEIS3IDKT2pit0A,14832
5
5
  hanzo_mcp/cli_enhanced.py,sha256=Nr4sXJ-dK9jkQ4BRDdwotXUwakL8CGme-FlYNPqCq0U,16022
6
6
  hanzo_mcp/cli_plugin.py,sha256=nQVn0sYP1eDaz61QbHwT6BBRPfYZb1eH1HJ1l5QkHsw,3281
7
7
  hanzo_mcp/compute_nodes.py,sha256=mFHQdxyo_SEeiwrQaPg-V9q2xmMRQiO7X_NePrWhSZ4,6315
8
8
  hanzo_mcp/dev_server.py,sha256=AiYHQ1-EwzpVqD9tJN5y_LQeJdy3_uDzffPsZV3GGRM,8317
9
- hanzo_mcp/server.py,sha256=Ad3S5s48FQpmqNS_3Ql_pAXxt2ST0omLEauoHy7AURs,10408
9
+ hanzo_mcp/server.py,sha256=WCj4Ifn5uGmJcdX-ulQXceT79M4nge2XA8KYJpTxh4Q,10477
10
10
  hanzo_mcp/server_enhanced.py,sha256=bBrObdysyda6Ggf-E3aL7UwktUNzYO_HG1V45Av5r-E,2003
11
11
  hanzo_mcp/types.py,sha256=4YjIJmM7byrsY4eN10pbhIUpFMQ-fZrpK6scgt-U9dU,648
12
12
  hanzo_mcp/analytics/__init__.py,sha256=ANyntTooBrpa_uvwE6KbYxB9uda610UT10pt2rrLiUU,213
13
- hanzo_mcp/analytics/posthog_analytics.py,sha256=y6H2adjhL9nDQY7k1dnkEplb6M7-C3149QrH8rOJwjM,10870
13
+ hanzo_mcp/analytics/posthog_analytics.py,sha256=sNwwhNUbz47bqsM6Fy7FDYZJb1fNB2B5vXeDtTx88KU,10690
14
14
  hanzo_mcp/config/__init__.py,sha256=1ifMucAN-htFEGdRpiC1T809Q03Bd7YUE5ATOHNi6Po,505
15
15
  hanzo_mcp/config/settings.py,sha256=5JLqC_wdwQdIzGmwmyZh8aKWpYfxM8m8F268-K4Mr2A,18985
16
- hanzo_mcp/config/tool_config.py,sha256=jW9m02PEvSHF23jaIDxiIjvuaT1r5o_fec3aXogbte0,6853
16
+ hanzo_mcp/config/tool_config.py,sha256=SaH9fT6cXVBfJuNu3a8M-XiE1LGTqgyhcm6MP5Ja-a8,6842
17
17
  hanzo_mcp/core/base_agent.py,sha256=KgYzgU9ChPGdvtjKl1lhV5kqwGDduJdqGvczKicRHI8,15496
18
18
  hanzo_mcp/core/model_registry.py,sha256=vMluoWgVwhYxZP2DnNzkccvNx1Pn7QXV2V4Bgd-jt8E,13342
19
19
  hanzo_mcp/prompts/__init__.py,sha256=h3AXLEsI5uZNr_DiGzJesytp1u_YSoGc3BZYIbU_yNU,7676
@@ -25,17 +25,17 @@ hanzo_mcp/prompts/project_system.py,sha256=FgWxRaX7rPQwDZT3n69yBwLkQv4uJ4jcUZjKz
25
25
  hanzo_mcp/prompts/project_todo_reminder.py,sha256=oN1EG0FR4XnxvFOXX_E5EFvX6L-8uYlX0hxFEiDRERc,3644
26
26
  hanzo_mcp/prompts/tool_explorer.py,sha256=6mI35V_EH8AA4pWIMAeG96qP1VPrU1HgnxwVyB0bg5A,16411
27
27
  hanzo_mcp/prompts/utils.py,sha256=IwxIhzZfYJ2anToPulbrpcc07u4Dozo9ok6VE3BC_4A,9963
28
- hanzo_mcp/tools/__init__.py,sha256=TMPTOowB00EcyV2MeOXVyZ3WHqTDmYpWyHFA3ItZS1k,19369
28
+ hanzo_mcp/tools/__init__.py,sha256=xerB89R2jJtsHtmRXLY2qpk4ZdV40bhGkPfKp0Fh3Vg,19259
29
29
  hanzo_mcp/tools/agent/__init__.py,sha256=UGDZ0Ehi8sVoE-Utq7jMI5SPkmHqsV6-RH55iMql4wg,4784
30
30
  hanzo_mcp/tools/agent/agent.py,sha256=bgVbLmeXHVlO2TDLmjDeKw0IzXy73mFisSLylj39XaM,13151
31
- hanzo_mcp/tools/agent/agent_tool.py,sha256=-p3uvoeV82dgyptR9GMTYZQWhFl-BQ4KJ_TDlXd2PFA,16866
32
- hanzo_mcp/tools/agent/agent_tool_v1_deprecated.py,sha256=PXG6qUzHiarpMUWacttp2LitMX2sYAOiqs01YdPtqyA,26584
31
+ hanzo_mcp/tools/agent/agent_tool.py,sha256=DeK0TWz3dFOS-_KTtcog8kqb9RjI9bXWaGACoSFDNYw,16814
32
+ hanzo_mcp/tools/agent/agent_tool_v1_deprecated.py,sha256=JWHhkHdfsbsVAA5bGtJdcmONWQrcCOIcnjr5BXbuNgw,26578
33
33
  hanzo_mcp/tools/agent/clarification_protocol.py,sha256=QYJTmDSJVRDyZMow80TxWmnJurxuLo1MaIFge8t_Yvk,8041
34
34
  hanzo_mcp/tools/agent/clarification_tool.py,sha256=up40UJLY5JrS6D3yBD1lW1vSrh79JNa3LoKrrNmAmwg,2449
35
35
  hanzo_mcp/tools/agent/claude_cli_tool.py,sha256=55Wc0LKgYCtDKQ02NXOYPMhx-sW7fL_NSCx0upsvvb4,3812
36
36
  hanzo_mcp/tools/agent/claude_desktop_auth.py,sha256=EoP-OWMg9QATsVjBGisyd0P_EV8fzLp284JIdqDwp7U,16203
37
37
  hanzo_mcp/tools/agent/cli_agent_base.py,sha256=FanJ-C9dzx7x1e-uSNQfIWrCMsPyCl34FyUgtnpfXG4,6494
38
- hanzo_mcp/tools/agent/cli_tools.py,sha256=8nonHL5FnOMfJ83zj41KJOGaisoGw04ybz2zOZezrNA,16567
38
+ hanzo_mcp/tools/agent/cli_tools.py,sha256=B_U5PtZF59dZoLIE8n6jM1pFpkQ5nfNuzuhlMA4OmIg,16558
39
39
  hanzo_mcp/tools/agent/code_auth.py,sha256=G8ZHQYKm3DRSknmkwYdUoPtnQr5xcQePZ8VcBNqrMG0,13948
40
40
  hanzo_mcp/tools/agent/code_auth_tool.py,sha256=R5Cod5VTX30G_tQT5W-6qYQKi4Qr1LYXLZPq7ZT4zLM,6165
41
41
  hanzo_mcp/tools/agent/codex_cli_tool.py,sha256=9jyB4cTtdcK50g6oapk7Bo4n8C8bAO2B9RuHHLOtP54,3697
@@ -47,7 +47,7 @@ hanzo_mcp/tools/agent/network_tool.py,sha256=diDemnua7QZZfAmAWN2yWXAUYAdycRoWqi1
47
47
  hanzo_mcp/tools/agent/prompt.py,sha256=Z-kQrbg8Uivm-ki468s-jjdydzx8XrPPZuwSg_r6S6c,6814
48
48
  hanzo_mcp/tools/agent/review_tool.py,sha256=npwHTsJqojuuT_nLWqOtCdgaX3FKXfe9uSIlqIco_Tw,16828
49
49
  hanzo_mcp/tools/agent/swarm_alias.py,sha256=7LwyAV2enw9KGzGS1lhPU9ty4btXuEbMkeUYoLEWE1Y,2992
50
- hanzo_mcp/tools/agent/swarm_tool.py,sha256=KQTZsv0RNelTZUy8tOsDUcCk5umtaJ3zyXdftSOPbOA,22774
50
+ hanzo_mcp/tools/agent/swarm_tool.py,sha256=o4J-7RGI9uRDmg3Cj-tLV2zxnaF8dV6vrchAPBPRa6A,22352
51
51
  hanzo_mcp/tools/agent/swarm_tool_v1_deprecated.py,sha256=Bbmz9TUhyaiqhekJPuOmfM9ZmRkG7e1f8aCCcX9jw0I,20792
52
52
  hanzo_mcp/tools/agent/tool_adapter.py,sha256=rLItgdKvvfzJL4chNIrNK_I5kSCm6ocmi83RQm93NgA,3191
53
53
  hanzo_mcp/tools/agent/unified_cli_tools.py,sha256=a6a77eIHnX04umQ4Qj3ZNy3liobjvCOY4KrVNLuikPI,8398
@@ -70,7 +70,7 @@ hanzo_mcp/tools/common/pagination.py,sha256=PgCfM6CmUquBGY0XFhl_WaY_4V9vIsohH39W
70
70
  hanzo_mcp/tools/common/permissions.py,sha256=IgLMNt5YDTTA_Yb4MocFlSnIbP0TmXyEBP0g_W8tsGM,7850
71
71
  hanzo_mcp/tools/common/personality.py,sha256=RgBloQaqi5bxhz-voMY1mkV-JU08dTuNzji2zGdS7Dw,37515
72
72
  hanzo_mcp/tools/common/plugin_loader.py,sha256=XpQbO4y-3_V8xh3Yl6YrkVgB_oJLzgiGwHuX5rE_9CQ,8955
73
- hanzo_mcp/tools/common/stats.py,sha256=32lmZcH8e9y7POXyVCby_tsOrH3XrTEw9Jbj86cYNgo,9762
73
+ hanzo_mcp/tools/common/stats.py,sha256=j2XT_PlqCxrjQWBV24S0wQqJQUjgE7jui7TM6XRkCtk,9745
74
74
  hanzo_mcp/tools/common/test_helpers.py,sha256=rrepQmWvqRc3gyNkqBARjGBOFtFolUTQAU4vIfP1If8,1076
75
75
  hanzo_mcp/tools/common/thinking_tool.py,sha256=AWhjfouLVe2YuxOnGFxGUOEZwKwFwOqgGyL6_v2QVLk,5036
76
76
  hanzo_mcp/tools/common/tool_disable.py,sha256=nmdHUtirk-P-6FevlGVY3C4f6lxnR_SRp1aH2O3m2N0,4290
@@ -135,16 +135,16 @@ hanzo_mcp/tools/llm/provider_tools.py,sha256=wAQvkWZ8-HlUVwRYhy9RhbhR-JGDKi0bUZj
135
135
  hanzo_mcp/tools/lsp/__init__.py,sha256=2Z1edOMrLV6gi1dyGgUyN3lN4HOWynf73Eye_eBk2Xo,150
136
136
  hanzo_mcp/tools/lsp/lsp_tool.py,sha256=kSfXe0G9vHLmfFEgPA99p9JPSAAM0SUrIriNwuh8NeY,19409
137
137
  hanzo_mcp/tools/mcp/__init__.py,sha256=Rml2im2dg4wNra4nsDH09q73G-yoifQrXL9iYhPmfTg,347
138
- hanzo_mcp/tools/mcp/mcp_add.py,sha256=KIpNau8rtpDiXTWMmjKNu8LfYxz1VqBdtnwoOs8nrOA,7835
139
- hanzo_mcp/tools/mcp/mcp_remove.py,sha256=LU1PErKhHzUwbWmkGOEI_uVDxO51PD2gLi-mpDFBQkQ,3250
138
+ hanzo_mcp/tools/mcp/mcp_add.py,sha256=NTAf8Bzdj3BlSNZfr-urgIVms2PALUh-G1Wfvdo7BtM,7847
139
+ hanzo_mcp/tools/mcp/mcp_remove.py,sha256=5HyM0mQWoYg_f5J9Huhh7XdiQCrfYXEWg8t7k6G3G1w,3233
140
140
  hanzo_mcp/tools/mcp/mcp_stats.py,sha256=n_lZo6mazjd4asFbO2ZAksVQ3eMTbvOfzYFOPT_T70g,5305
141
141
  hanzo_mcp/tools/mcp/mcp_tool.py,sha256=7H7B5d1D00VEWKOFhUjbtc5TBTRNeMTGFl904AA0hio,16765
142
- hanzo_mcp/tools/memory/__init__.py,sha256=Ku3TprzANCk78sH44KS8NYwW9lMfDE9l1f3EKQXW9Mw,2970
142
+ hanzo_mcp/tools/memory/__init__.py,sha256=Wg4S5eaw60pZymu8iOT_CrZbUhBWpzqKNjT1J8d2Mmc,3292
143
143
  hanzo_mcp/tools/memory/knowledge_tools.py,sha256=T9nh5Y7GLuFeNRPRgtanU3zNdcUz9wUWRRl4xP5jbuM,17781
144
- hanzo_mcp/tools/memory/memory_tools.py,sha256=5LtzxgRww_BXmXY0YxZZ_UQ9AXffWiFmx8FOtOnE62A,13692
144
+ hanzo_mcp/tools/memory/memory_tools.py,sha256=ajZE7MzqHnJJRJmtbEE5natcyCceqLQaqzF52hg96dA,13705
145
145
  hanzo_mcp/tools/search/__init__.py,sha256=7z0GUOmKrJyI7MCbLIvO5zbWHknaNf6kCowi2CtoNNw,292
146
146
  hanzo_mcp/tools/search/find_tool.py,sha256=Kv4rFyZetNjf9yutsy34jC7UTHWV8Z4BAdge7p3a3sA,23607
147
- hanzo_mcp/tools/search/unified_search.py,sha256=TmIJgsPa-D2ByAA5ZSeskhDpbVnj-2LnDEo78thxPpM,36010
147
+ hanzo_mcp/tools/search/unified_search.py,sha256=ki5KN5jxBo7wC6JbM1j8rShRsYoAGp4v9DY6TX0IS_U,35958
148
148
  hanzo_mcp/tools/shell/__init__.py,sha256=l1gdigiyhwB5AzUSVcejObwtaS3cPY65KeBuHMoVIVA,2346
149
149
  hanzo_mcp/tools/shell/auto_background.py,sha256=6-ggSvZlTwG_IedSipI-vE3tFyLPqD5wcgx88qz0IqY,8263
150
150
  hanzo_mcp/tools/shell/base.py,sha256=g6xPSoOsGfdDJeJtclbgkwbP3bwumlqXKxJT0s-QSi0,5826
@@ -180,13 +180,14 @@ hanzo_mcp/tools/vector/__init__.py,sha256=DXQLyaNf3T_zWz7cGP9UZo08vVyDSSZZteBIaB
180
180
  hanzo_mcp/tools/vector/ast_analyzer.py,sha256=Gh9j_EO_6eXozjOkRjmiB68r9Rs8ri7CZ7dUNbJNoNo,15957
181
181
  hanzo_mcp/tools/vector/git_ingester.py,sha256=X_C8mQeaMz7Jfdd2VbJT77aIUShmh8B0NLl32xGpurk,15817
182
182
  hanzo_mcp/tools/vector/index_tool.py,sha256=ZQQCal8AashRKrflrtpfZ0oHpsze-Sy4bX5XFpdLYVw,13604
183
- hanzo_mcp/tools/vector/infinity_store.py,sha256=sqoipKYYmBV6U8PCkJde1Glgs4yAZrfj0hX704DcYdM,28696
183
+ hanzo_mcp/tools/vector/infinity_store.py,sha256=aB6Q6H0WEavZcQoVuu1nasUTTjPlVYPhVxf9UAOFx0k,28733
184
+ hanzo_mcp/tools/vector/mock_infinity.py,sha256=3YoNl4muaGYkWaSUje6lhPwT7jvyLP3ylxv78zcm_8s,4844
184
185
  hanzo_mcp/tools/vector/project_manager.py,sha256=b69kr84qoteFkx7feeC_XHsNteTyVEfj-BqwLIYgX9w,13209
185
186
  hanzo_mcp/tools/vector/vector.py,sha256=IzJJlWAuhXNmm41NyXEyQsknLNugoRRciDTypYfof9w,9947
186
187
  hanzo_mcp/tools/vector/vector_index.py,sha256=EgxOveWt0R60WYcO-CLmEh8HbGXGmX4_xpqQXTtgQJQ,4188
187
188
  hanzo_mcp/tools/vector/vector_search.py,sha256=anavkfz_pPtfgVZUW4trj5q5GT6Naxw5ItjK9hUY9wU,9677
188
- hanzo_mcp-0.8.8.dist-info/METADATA,sha256=46I3yLdp7fh9qKMhCPii6R063lu_A9WJY87v7qXLABA,8973
189
- hanzo_mcp-0.8.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
190
- hanzo_mcp-0.8.8.dist-info/entry_points.txt,sha256=ML30pedHV5wjthfztzMMz3uYhNdR_6inzYY5pSqNME4,142
191
- hanzo_mcp-0.8.8.dist-info/top_level.txt,sha256=eGFANatA0MHWiVlpS56fTYRIShtibrSom1uXI6XU0GU,10
192
- hanzo_mcp-0.8.8.dist-info/RECORD,,
189
+ hanzo_mcp-0.8.11.dist-info/METADATA,sha256=a7-Kr9Cb7A_mgWW2TkAHYLVbpE8T8-Sd7NvMensowo8,8974
190
+ hanzo_mcp-0.8.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
191
+ hanzo_mcp-0.8.11.dist-info/entry_points.txt,sha256=ML30pedHV5wjthfztzMMz3uYhNdR_6inzYY5pSqNME4,142
192
+ hanzo_mcp-0.8.11.dist-info/top_level.txt,sha256=eGFANatA0MHWiVlpS56fTYRIShtibrSom1uXI6XU0GU,10
193
+ hanzo_mcp-0.8.11.dist-info/RECORD,,