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.
- hanzo_mcp/analytics/posthog_analytics.py +1 -8
- hanzo_mcp/cli.py +2 -2
- hanzo_mcp/config/tool_config.py +1 -1
- hanzo_mcp/server.py +4 -1
- hanzo_mcp/tools/__init__.py +4 -6
- hanzo_mcp/tools/agent/agent_tool.py +1 -2
- hanzo_mcp/tools/agent/agent_tool_v1_deprecated.py +1 -1
- hanzo_mcp/tools/agent/cli_tools.py +1 -1
- hanzo_mcp/tools/agent/swarm_tool.py +7 -12
- hanzo_mcp/tools/common/stats.py +1 -1
- hanzo_mcp/tools/mcp/mcp_add.py +2 -2
- hanzo_mcp/tools/mcp/mcp_remove.py +1 -1
- hanzo_mcp/tools/memory/__init__.py +23 -13
- hanzo_mcp/tools/memory/memory_tools.py +1 -1
- hanzo_mcp/tools/search/unified_search.py +3 -3
- hanzo_mcp/tools/vector/infinity_store.py +4 -3
- hanzo_mcp/tools/vector/mock_infinity.py +161 -0
- {hanzo_mcp-0.8.8.dist-info → hanzo_mcp-0.8.11.dist-info}/METADATA +1 -1
- {hanzo_mcp-0.8.8.dist-info → hanzo_mcp-0.8.11.dist-info}/RECORD +22 -21
- {hanzo_mcp-0.8.8.dist-info → hanzo_mcp-0.8.11.dist-info}/WHEEL +0 -0
- {hanzo_mcp-0.8.8.dist-info → hanzo_mcp-0.8.11.dist-info}/entry_points.txt +0 -0
- {hanzo_mcp-0.8.8.dist-info → hanzo_mcp-0.8.11.dist-info}/top_level.txt +0 -0
|
@@ -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":
|
|
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
|
|
291
|
+
# If no allowed paths are specified, use the home directory
|
|
292
292
|
if not allowed_paths:
|
|
293
|
-
allowed_paths = [os.
|
|
293
|
+
allowed_paths = [os.path.expanduser("~")]
|
|
294
294
|
|
|
295
295
|
# Run in dev mode if requested
|
|
296
296
|
if dev:
|
hanzo_mcp/config/tool_config.py
CHANGED
|
@@ -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
|
-
#
|
|
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
|
-
|
|
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
|
hanzo_mcp/tools/__init__.py
CHANGED
|
@@ -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
|
|
68
|
+
# Define stub functions for required imports
|
|
68
69
|
def activate_mode_from_env():
|
|
69
|
-
|
|
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
|
-
|
|
79
|
-
return None
|
|
77
|
+
pass
|
|
80
78
|
|
|
81
79
|
# Try to import LSP tool
|
|
82
80
|
try:
|
|
@@ -96,7 +96,7 @@ class AgentTool(AgentClarificationMixin, BaseTool):
|
|
|
96
96
|
Returns:
|
|
97
97
|
Tool description
|
|
98
98
|
"""
|
|
99
|
-
#
|
|
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] = ["
|
|
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
|
|
99
|
+
# Define stubs if not available
|
|
100
100
|
def create_memory_kv(*args, **kwargs):
|
|
101
|
-
|
|
102
|
-
return {}
|
|
101
|
+
pass
|
|
103
102
|
|
|
104
103
|
def create_memory_vector(*args, **kwargs):
|
|
105
|
-
|
|
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
|
|
118
|
+
# Define stubs if not available
|
|
121
119
|
def sequential_router(*args, **kwargs):
|
|
122
|
-
|
|
123
|
-
return lambda agents, task: None
|
|
120
|
+
pass
|
|
124
121
|
|
|
125
122
|
def conditional_router(*args, **kwargs):
|
|
126
|
-
|
|
127
|
-
return lambda agents, task: None
|
|
123
|
+
pass
|
|
128
124
|
|
|
129
125
|
def state_based_router(*args, **kwargs):
|
|
130
|
-
|
|
131
|
-
return lambda agents, task: None
|
|
126
|
+
pass
|
|
132
127
|
|
|
133
128
|
|
|
134
129
|
try:
|
hanzo_mcp/tools/common/stats.py
CHANGED
|
@@ -236,7 +236,7 @@ Example:
|
|
|
236
236
|
output.append(f"Config Files: {config_count}")
|
|
237
237
|
|
|
238
238
|
# Tool status (if available)
|
|
239
|
-
#
|
|
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")
|
hanzo_mcp/tools/mcp/mcp_add.py
CHANGED
|
@@ -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
|
-
#
|
|
225
|
-
#
|
|
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
|
-
#
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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/
|
|
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("
|
|
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
|
-
#
|
|
967
|
-
#
|
|
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
|
-
#
|
|
15
|
-
|
|
16
|
-
|
|
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,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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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
|
|
32
|
-
hanzo_mcp/tools/agent/agent_tool_v1_deprecated.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
139
|
-
hanzo_mcp/tools/mcp/mcp_remove.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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.
|
|
189
|
-
hanzo_mcp-0.8.
|
|
190
|
-
hanzo_mcp-0.8.
|
|
191
|
-
hanzo_mcp-0.8.
|
|
192
|
-
hanzo_mcp-0.8.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|