claude-mpm 4.9.0__py3-none-any.whl → 4.11.0__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.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/templates/research.json +30 -23
- claude_mpm/cli/commands/mpm_init.py +250 -1
- claude_mpm/cli/commands/mpm_init_handler.py +41 -1
- claude_mpm/cli/commands/search.py +170 -4
- claude_mpm/cli/commands/session_pause_manager.py +389 -0
- claude_mpm/cli/commands/session_resume_manager.py +523 -0
- claude_mpm/cli/parsers/mpm_init_parser.py +59 -0
- claude_mpm/commands/mpm-init.md +78 -1
- claude_mpm/services/mcp_gateway/main.py +21 -0
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +141 -14
- claude_mpm/storage/state_storage.py +15 -15
- {claude_mpm-4.9.0.dist-info → claude_mpm-4.11.0.dist-info}/METADATA +10 -3
- {claude_mpm-4.9.0.dist-info → claude_mpm-4.11.0.dist-info}/RECORD +18 -16
- {claude_mpm-4.9.0.dist-info → claude_mpm-4.11.0.dist-info}/WHEEL +0 -0
- {claude_mpm-4.9.0.dist-info → claude_mpm-4.11.0.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.9.0.dist-info → claude_mpm-4.11.0.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.9.0.dist-info → claude_mpm-4.11.0.dist-info}/top_level.txt +0 -0
@@ -323,6 +323,27 @@ class MCPGatewayOrchestrator:
|
|
323
323
|
except Exception as e:
|
324
324
|
self.logger.warning(f"Could not load KuzuMemoryService: {e}")
|
325
325
|
|
326
|
+
# MCP Vector Search Service (optional - will auto-install on first use)
|
327
|
+
try:
|
328
|
+
from .tools.external_mcp_services import MCPVectorSearchService
|
329
|
+
|
330
|
+
vector_search = MCPVectorSearchService()
|
331
|
+
# Try to initialize without interactive prompts during gateway startup
|
332
|
+
# This will only succeed if already installed
|
333
|
+
init_success = await vector_search.initialize(
|
334
|
+
auto_install=False, interactive=False
|
335
|
+
)
|
336
|
+
|
337
|
+
if init_success:
|
338
|
+
tools.append(vector_search)
|
339
|
+
self.logger.info("MCPVectorSearchService added to built-in tools")
|
340
|
+
else:
|
341
|
+
self.logger.debug(
|
342
|
+
"mcp-vector-search not installed - will be available via auto-install on first use"
|
343
|
+
)
|
344
|
+
except Exception as e:
|
345
|
+
self.logger.debug(f"Could not load MCPVectorSearchService: {e}")
|
346
|
+
|
326
347
|
# Ticket tools removed - mcp-ticketer provides ticket functionality
|
327
348
|
|
328
349
|
if not tools:
|
@@ -64,21 +64,28 @@ class ExternalMCPService(BaseToolAdapter):
|
|
64
64
|
execution_time=0.0,
|
65
65
|
)
|
66
66
|
|
67
|
-
async def initialize(
|
68
|
-
|
67
|
+
async def initialize(
|
68
|
+
self, auto_install: bool = True, interactive: bool = True
|
69
|
+
) -> bool:
|
70
|
+
"""Initialize the external service.
|
71
|
+
|
72
|
+
Args:
|
73
|
+
auto_install: Whether to automatically install if not found
|
74
|
+
interactive: Whether to prompt user for installation preferences
|
75
|
+
"""
|
69
76
|
try:
|
70
77
|
# Check if package is installed
|
71
78
|
self._is_installed = await self._check_installation()
|
72
79
|
|
73
|
-
if not self._is_installed:
|
74
|
-
self.logger.
|
75
|
-
f"{self.package_name} not installed -
|
80
|
+
if not self._is_installed and auto_install:
|
81
|
+
self.logger.info(
|
82
|
+
f"{self.package_name} not installed - attempting installation"
|
76
83
|
)
|
77
|
-
await self._install_package()
|
84
|
+
await self._install_package(interactive=interactive)
|
78
85
|
self._is_installed = await self._check_installation()
|
79
86
|
|
80
87
|
if not self._is_installed:
|
81
|
-
self.logger.
|
88
|
+
self.logger.warning(f"{self.package_name} is not available")
|
82
89
|
return False
|
83
90
|
|
84
91
|
self.logger.info(f"{self.package_name} is available")
|
@@ -90,9 +97,21 @@ class ExternalMCPService(BaseToolAdapter):
|
|
90
97
|
|
91
98
|
async def _check_installation(self) -> bool:
|
92
99
|
"""Check if the package is installed."""
|
100
|
+
# First check if importable (faster and more reliable)
|
101
|
+
import_name = self.package_name.replace("-", "_")
|
102
|
+
try:
|
103
|
+
import importlib.util
|
104
|
+
|
105
|
+
spec = importlib.util.find_spec(import_name)
|
106
|
+
if spec is not None:
|
107
|
+
return True
|
108
|
+
except (ImportError, ModuleNotFoundError, ValueError):
|
109
|
+
pass
|
110
|
+
|
111
|
+
# Fallback: try running as module
|
93
112
|
try:
|
94
113
|
result = subprocess.run(
|
95
|
-
[sys.executable, "-m",
|
114
|
+
[sys.executable, "-m", import_name, "--help"],
|
96
115
|
capture_output=True,
|
97
116
|
text=True,
|
98
117
|
timeout=5,
|
@@ -106,25 +125,133 @@ class ExternalMCPService(BaseToolAdapter):
|
|
106
125
|
):
|
107
126
|
return False
|
108
127
|
|
109
|
-
async def _install_package(self) -> bool:
|
110
|
-
"""Install the package using pip.
|
128
|
+
async def _install_package(self, interactive: bool = True) -> bool:
|
129
|
+
"""Install the package using pip or pipx.
|
130
|
+
|
131
|
+
Args:
|
132
|
+
interactive: Whether to prompt user for installation method choice
|
133
|
+
"""
|
111
134
|
try:
|
112
|
-
|
135
|
+
install_method = None
|
136
|
+
|
137
|
+
if interactive:
|
138
|
+
# Show user-friendly installation prompt
|
139
|
+
print(f"\n⚠️ {self.package_name} not found")
|
140
|
+
print("This package enables enhanced functionality (optional).")
|
141
|
+
print("\nInstallation options:")
|
142
|
+
print("1. Install via pip (recommended for this project)")
|
143
|
+
print("2. Install via pipx (isolated, system-wide)")
|
144
|
+
print("3. Skip (continue without this package)")
|
145
|
+
|
146
|
+
try:
|
147
|
+
choice = input("\nChoose option (1/2/3) [1]: ").strip() or "1"
|
148
|
+
if choice == "1":
|
149
|
+
install_method = "pip"
|
150
|
+
elif choice == "2":
|
151
|
+
install_method = "pipx"
|
152
|
+
else:
|
153
|
+
self.logger.info(
|
154
|
+
f"Skipping installation of {self.package_name}"
|
155
|
+
)
|
156
|
+
return False
|
157
|
+
except (EOFError, KeyboardInterrupt):
|
158
|
+
print("\nInstallation cancelled")
|
159
|
+
return False
|
160
|
+
else:
|
161
|
+
# Non-interactive: default to pip
|
162
|
+
install_method = "pip"
|
163
|
+
|
164
|
+
# Install using selected method
|
165
|
+
if install_method == "pip":
|
166
|
+
return await self._install_via_pip()
|
167
|
+
if install_method == "pipx":
|
168
|
+
return await self._install_via_pipx()
|
169
|
+
|
170
|
+
return False
|
171
|
+
|
172
|
+
except Exception as e:
|
173
|
+
self.logger.error(f"Error installing {self.package_name}: {e}")
|
174
|
+
return False
|
175
|
+
|
176
|
+
async def _install_via_pip(self) -> bool:
|
177
|
+
"""Install package via pip."""
|
178
|
+
try:
|
179
|
+
print(f"\n📦 Installing {self.package_name} via pip...")
|
113
180
|
result = subprocess.run(
|
114
181
|
[sys.executable, "-m", "pip", "install", self.package_name],
|
115
182
|
capture_output=True,
|
116
183
|
text=True,
|
117
|
-
timeout=
|
184
|
+
timeout=120,
|
118
185
|
check=False,
|
119
186
|
)
|
120
187
|
|
121
188
|
if result.returncode == 0:
|
122
|
-
|
189
|
+
print(f"✓ Successfully installed {self.package_name}")
|
190
|
+
self.logger.info(f"Successfully installed {self.package_name} via pip")
|
123
191
|
return True
|
124
|
-
|
192
|
+
|
193
|
+
error_msg = result.stderr.strip() if result.stderr else "Unknown error"
|
194
|
+
print(f"✗ Installation failed: {error_msg}")
|
195
|
+
self.logger.error(f"Failed to install {self.package_name}: {error_msg}")
|
125
196
|
return False
|
126
197
|
|
198
|
+
except subprocess.TimeoutExpired:
|
199
|
+
print("✗ Installation timed out")
|
200
|
+
self.logger.error(f"Installation of {self.package_name} timed out")
|
201
|
+
return False
|
202
|
+
except Exception as e:
|
203
|
+
print(f"✗ Installation error: {e}")
|
204
|
+
self.logger.error(f"Error installing {self.package_name}: {e}")
|
205
|
+
return False
|
206
|
+
|
207
|
+
async def _install_via_pipx(self) -> bool:
|
208
|
+
"""Install package via pipx."""
|
209
|
+
try:
|
210
|
+
# Check if pipx is available
|
211
|
+
pipx_check = subprocess.run(
|
212
|
+
["pipx", "--version"],
|
213
|
+
capture_output=True,
|
214
|
+
text=True,
|
215
|
+
timeout=5,
|
216
|
+
check=False,
|
217
|
+
)
|
218
|
+
|
219
|
+
if pipx_check.returncode != 0:
|
220
|
+
print("✗ pipx is not installed")
|
221
|
+
print("Install pipx first: python -m pip install pipx")
|
222
|
+
self.logger.error("pipx not available for installation")
|
223
|
+
return False
|
224
|
+
|
225
|
+
print(f"\n📦 Installing {self.package_name} via pipx...")
|
226
|
+
result = subprocess.run(
|
227
|
+
["pipx", "install", self.package_name],
|
228
|
+
capture_output=True,
|
229
|
+
text=True,
|
230
|
+
timeout=120,
|
231
|
+
check=False,
|
232
|
+
)
|
233
|
+
|
234
|
+
if result.returncode == 0:
|
235
|
+
print(f"✓ Successfully installed {self.package_name}")
|
236
|
+
self.logger.info(f"Successfully installed {self.package_name} via pipx")
|
237
|
+
return True
|
238
|
+
|
239
|
+
error_msg = result.stderr.strip() if result.stderr else "Unknown error"
|
240
|
+
print(f"✗ Installation failed: {error_msg}")
|
241
|
+
self.logger.error(f"Failed to install {self.package_name}: {error_msg}")
|
242
|
+
return False
|
243
|
+
|
244
|
+
except FileNotFoundError:
|
245
|
+
print("✗ pipx command not found")
|
246
|
+
print("Install pipx first: python -m pip install pipx")
|
247
|
+
self.logger.error("pipx command not found")
|
248
|
+
return False
|
249
|
+
except subprocess.TimeoutExpired:
|
250
|
+
print("✗ Installation timed out")
|
251
|
+
self.logger.error(f"Installation of {self.package_name} timed out")
|
252
|
+
return False
|
127
253
|
except Exception as e:
|
254
|
+
print(f"✗ Installation error: {e}")
|
128
255
|
self.logger.error(f"Error installing {self.package_name}: {e}")
|
129
256
|
return False
|
130
257
|
|
@@ -86,7 +86,7 @@ class StateStorage:
|
|
86
86
|
return True
|
87
87
|
|
88
88
|
except Exception as e:
|
89
|
-
|
89
|
+
logger.error(f"Failed to write JSON to {file_path}: {e}")
|
90
90
|
self.error_count += 1
|
91
91
|
return False
|
92
92
|
|
@@ -106,7 +106,7 @@ class StateStorage:
|
|
106
106
|
file_path = Path(file_path)
|
107
107
|
|
108
108
|
if not file_path.exists():
|
109
|
-
|
109
|
+
logger.debug(f"File not found: {file_path}")
|
110
110
|
return None
|
111
111
|
|
112
112
|
# Auto-detect compression
|
@@ -125,7 +125,7 @@ class StateStorage:
|
|
125
125
|
return data
|
126
126
|
|
127
127
|
except Exception as e:
|
128
|
-
|
128
|
+
logger.error(f"Failed to read JSON from {file_path}: {e}")
|
129
129
|
self.error_count += 1
|
130
130
|
return None
|
131
131
|
|
@@ -166,7 +166,7 @@ class StateStorage:
|
|
166
166
|
return True
|
167
167
|
|
168
168
|
except Exception as e:
|
169
|
-
|
169
|
+
logger.error(f"Failed to write pickle to {file_path}: {e}")
|
170
170
|
self.error_count += 1
|
171
171
|
return False
|
172
172
|
|
@@ -186,7 +186,7 @@ class StateStorage:
|
|
186
186
|
file_path = Path(file_path)
|
187
187
|
|
188
188
|
if not file_path.exists():
|
189
|
-
|
189
|
+
logger.debug(f"File not found: {file_path}")
|
190
190
|
return None
|
191
191
|
|
192
192
|
# Auto-detect compression
|
@@ -205,7 +205,7 @@ class StateStorage:
|
|
205
205
|
return data
|
206
206
|
|
207
207
|
except Exception as e:
|
208
|
-
|
208
|
+
logger.error(f"Failed to read pickle from {file_path}: {e}")
|
209
209
|
self.error_count += 1
|
210
210
|
return None
|
211
211
|
|
@@ -262,7 +262,7 @@ class StateStorage:
|
|
262
262
|
Path(temp_path).replace(file_path)
|
263
263
|
|
264
264
|
self.write_count += 1
|
265
|
-
|
265
|
+
logger.debug(f"Atomic write successful: {file_path}")
|
266
266
|
return True
|
267
267
|
|
268
268
|
finally:
|
@@ -271,7 +271,7 @@ class StateStorage:
|
|
271
271
|
Path(temp_path).unlink()
|
272
272
|
|
273
273
|
except Exception as e:
|
274
|
-
|
274
|
+
logger.error(f"Atomic write failed for {file_path}: {e}")
|
275
275
|
self.error_count += 1
|
276
276
|
return False
|
277
277
|
|
@@ -339,7 +339,7 @@ class StateStorage:
|
|
339
339
|
f.write(checksum)
|
340
340
|
|
341
341
|
except Exception as e:
|
342
|
-
|
342
|
+
logger.warning(f"Could not add checksum: {e}")
|
343
343
|
|
344
344
|
def verify_checksum(self, file_path: Union[str, Path]) -> bool:
|
345
345
|
"""Verify file checksum for integrity.
|
@@ -370,13 +370,13 @@ class StateStorage:
|
|
370
370
|
actual = hasher.hexdigest()
|
371
371
|
|
372
372
|
if actual != expected:
|
373
|
-
|
373
|
+
logger.error(f"Checksum mismatch for {file_path}")
|
374
374
|
return False
|
375
375
|
|
376
376
|
return True
|
377
377
|
|
378
378
|
except Exception as e:
|
379
|
-
|
379
|
+
logger.warning(f"Could not verify checksum: {e}")
|
380
380
|
return True # Assume valid if can't verify
|
381
381
|
|
382
382
|
def cleanup_temp_files(self) -> int:
|
@@ -396,7 +396,7 @@ class StateStorage:
|
|
396
396
|
if age > 3600:
|
397
397
|
temp_file.unlink()
|
398
398
|
cleaned += 1
|
399
|
-
|
399
|
+
logger.debug(f"Cleaned up temp file: {temp_file}")
|
400
400
|
except Exception:
|
401
401
|
pass
|
402
402
|
|
@@ -408,12 +408,12 @@ class StateStorage:
|
|
408
408
|
cleaned += 1
|
409
409
|
|
410
410
|
if cleaned > 0:
|
411
|
-
|
411
|
+
logger.info(f"Cleaned up {cleaned} temporary files")
|
412
412
|
|
413
413
|
return cleaned
|
414
414
|
|
415
415
|
except Exception as e:
|
416
|
-
|
416
|
+
logger.error(f"Error cleaning up temp files: {e}")
|
417
417
|
return 0
|
418
418
|
|
419
419
|
def get_storage_info(self) -> Dict[str, Any]:
|
@@ -447,7 +447,7 @@ class StateStorage:
|
|
447
447
|
}
|
448
448
|
|
449
449
|
except Exception as e:
|
450
|
-
|
450
|
+
logger.error(f"Error getting storage info: {e}")
|
451
451
|
return {"storage_directory": str(self.storage_dir), "error": str(e)}
|
452
452
|
|
453
453
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: claude-mpm
|
3
|
-
Version: 4.
|
3
|
+
Version: 4.11.0
|
4
4
|
Summary: Claude Multi-Agent Project Manager - Orchestrate Claude with agent delegation and ticket tracking
|
5
5
|
Author-email: Bob Matsuoka <bob@matsuoka.com>
|
6
6
|
Maintainer: Claude MPM Team
|
@@ -160,7 +160,8 @@ A powerful orchestration framework for **Claude Code (CLI)** that enables multi-
|
|
160
160
|
- 🧠 **Persistent Knowledge System**: Project-specific kuzu-memory integration for intelligent context retention
|
161
161
|
- 🔄 **Session Management**: Resume previous sessions with `--resume`
|
162
162
|
- 📊 **Real-Time Monitoring**: Live dashboard with `--monitor` flag
|
163
|
-
- 🔌 **
|
163
|
+
- 🔌 **Smart MCP Services**: Interactive auto-install for mcp-vector-search on first use (pip/pipx choice)
|
164
|
+
- 🔍 **Semantic Code Search**: Optional vector search with graceful fallback to grep/glob
|
164
165
|
- 📁 **Multi-Project Support**: Per-session working directories with persistent knowledge graphs
|
165
166
|
- 🔍 **Git Integration**: View diffs and track changes across projects
|
166
167
|
- 🎯 **Smart Task Orchestration**: PM agent intelligently routes work to specialists
|
@@ -197,7 +198,8 @@ claude-mpm mcp-pipx-config
|
|
197
198
|
- `[monitor]` - Full monitoring dashboard with Socket.IO and async web server components
|
198
199
|
- **Combine both**: Use `"claude-mpm[mcp,monitor]"` to install all features
|
199
200
|
- **Note**: kuzu-memory is now a required dependency, always included with Claude MPM
|
200
|
-
-
|
201
|
+
- **Auto-Install**: mcp-vector-search offers interactive installation on first use (pip/pipx choice)
|
202
|
+
- Without pre-installed MCP dependencies, services install on-demand with user confirmation
|
201
203
|
|
202
204
|
**🎉 Pipx Support Now Fully Functional!** Recent improvements ensure complete compatibility:
|
203
205
|
- ✅ Socket.IO daemon script path resolution (fixed)
|
@@ -216,6 +218,11 @@ claude-mpm
|
|
216
218
|
# Start with monitoring dashboard
|
217
219
|
claude-mpm run --monitor
|
218
220
|
|
221
|
+
# Use semantic code search (auto-installs mcp-vector-search on first use)
|
222
|
+
claude-mpm search "authentication logic"
|
223
|
+
# or inside Claude Code session:
|
224
|
+
/mpm-search "authentication logic"
|
225
|
+
|
219
226
|
# Use MCP Gateway for external tool integration
|
220
227
|
claude-mpm mcp
|
221
228
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
claude_mpm/BUILD_NUMBER,sha256=9JfxhnDtr-8l3kCP2U5TVXSErptHoga8m7XA8zqgGOc,4
|
2
|
-
claude_mpm/VERSION,sha256=
|
2
|
+
claude_mpm/VERSION,sha256=FFRZhOvxPjL4clpLdj7K74TxFIkhB1BHeUD9jed261o,7
|
3
3
|
claude_mpm/__init__.py,sha256=UCw6j9e_tZQ3kJtTqmdfNv7MHyw9nD1jkj80WurwM2g,2064
|
4
4
|
claude_mpm/__main__.py,sha256=Ro5UBWBoQaSAIoSqWAr7zkbLyvi4sSy28WShqAhKJG0,723
|
5
5
|
claude_mpm/constants.py,sha256=sLjJF6Kw7H4V9WWeaEYltM-77TgXqzEMX5vx4ukM5-0,5977
|
@@ -54,7 +54,7 @@ claude_mpm/agents/templates/python_engineer.json,sha256=SeTvI1EXS-RTIJzVHX0zu0FS
|
|
54
54
|
claude_mpm/agents/templates/qa.json,sha256=bccjpuC93a7msGei3LKsCe88UiFMQzk1W40TvEYIHOg,10661
|
55
55
|
claude_mpm/agents/templates/react_engineer.json,sha256=ihmqRAgiU81UVpw3ToSHvUigEZ7MMpoPhUbyXSmfbAo,13151
|
56
56
|
claude_mpm/agents/templates/refactoring_engineer.json,sha256=qmhZdl4aXNyQEjZ-yieSa2NfEaPPi7Z4bYUZ4ohWJiI,12130
|
57
|
-
claude_mpm/agents/templates/research.json,sha256
|
57
|
+
claude_mpm/agents/templates/research.json,sha256=-U7cDwH0kiffMSvrAuIe_AiA6OmWQbI5MLNjgvUhmhc,14336
|
58
58
|
claude_mpm/agents/templates/ruby-engineer.json,sha256=FDdEGTbXzzAwbeucXH9Ve91mCnD9fGh3J26zbrKi9qs,12412
|
59
59
|
claude_mpm/agents/templates/rust_engineer.json,sha256=0HKDrRGJxyvO5GWqby8d45Trw9IaAoJkeX5ZIkN10xE,12317
|
60
60
|
claude_mpm/agents/templates/security.json,sha256=ekwiFj-TzVDTEj70QfV5Oix1x7zAeCdl-zZ8-QGJIXg,24556
|
@@ -100,10 +100,12 @@ claude_mpm/cli/commands/mcp_setup_external.py,sha256=hfBHkaioNa0JRDhahNEc8agyrUw
|
|
100
100
|
claude_mpm/cli/commands/mcp_tool_commands.py,sha256=q17GzlFT3JiLTrDqwPO2tz1-fKmPO5QU449syTnKTz4,1283
|
101
101
|
claude_mpm/cli/commands/memory.py,sha256=O4T5HGL-Ob_QPt2dZHQvoOrVohnaDKrBjyngq1Mcv1w,26185
|
102
102
|
claude_mpm/cli/commands/monitor.py,sha256=Fjb68hf3dEwTFek2LV8Nh6iU0qEkY7qYlOn32IwNaNg,9566
|
103
|
-
claude_mpm/cli/commands/mpm_init.py,sha256=
|
104
|
-
claude_mpm/cli/commands/mpm_init_handler.py,sha256=
|
103
|
+
claude_mpm/cli/commands/mpm_init.py,sha256=dufJ9WQzS5mbEdpSHqOWTk2rBmSO8xkxSJ1D8gsgzZk,72451
|
104
|
+
claude_mpm/cli/commands/mpm_init_handler.py,sha256=M8S2mRl-wyjM8biP-hRl5V1UYOtYxDyD2KQTAhSw8mM,4869
|
105
105
|
claude_mpm/cli/commands/run.py,sha256=PB2H55piOPTy4yo4OBgbUCjMlcz9K79wbwpxQVc9m5Q,48225
|
106
|
-
claude_mpm/cli/commands/search.py,sha256=
|
106
|
+
claude_mpm/cli/commands/search.py,sha256=alv6udvKcn-xkqeBlLuPRvfSDV1yxEX4n9mjjRT5uLM,16581
|
107
|
+
claude_mpm/cli/commands/session_pause_manager.py,sha256=YCUrxOdsoFRKCqlAZJVk6x1HYcece8xqGTl7eCiPx9A,13123
|
108
|
+
claude_mpm/cli/commands/session_resume_manager.py,sha256=qWFQv3eLhorCln0rtgM8FOGjFlfFNs5c8ctYehgiYqI,18087
|
107
109
|
claude_mpm/cli/commands/tickets.py,sha256=kl2dklTBnG3Y4jUUJ_PcEVsTx4CtVJfkGWboWBx_mQM,21234
|
108
110
|
claude_mpm/cli/commands/uninstall.py,sha256=KGlVG6veEs1efLVjrZ3wSty7e1zVR9wpt-VXQA1RzWw,5945
|
109
111
|
claude_mpm/cli/commands/upgrade.py,sha256=NYMVONNlj78WHoQ6eyVInroE95AeQxUY2_TpjYFTdYE,5409
|
@@ -123,7 +125,7 @@ claude_mpm/cli/parsers/debug_parser.py,sha256=F7MZdmiXiPfiIPMv21ZUqB2cMT8Ho1LDmp
|
|
123
125
|
claude_mpm/cli/parsers/mcp_parser.py,sha256=2j6ULhdu55Z2k_-Gu2QxIsFoTQFbDCEMSGePXSuPoQQ,6532
|
124
126
|
claude_mpm/cli/parsers/memory_parser.py,sha256=ZwCDxJEgp-w03L-1tZsWTgisiwamP42s424bA5bvDJc,4760
|
125
127
|
claude_mpm/cli/parsers/monitor_parser.py,sha256=PeoznSi_5Bw6THK_Espl8M20o6dKvvBSmFzAbovkaFQ,4920
|
126
|
-
claude_mpm/cli/parsers/mpm_init_parser.py,sha256=
|
128
|
+
claude_mpm/cli/parsers/mpm_init_parser.py,sha256=1FpjO6-5q0Fqgd2w3RvGVDX5tW8iG5zGJhYq3GibvJI,9531
|
127
129
|
claude_mpm/cli/parsers/run_parser.py,sha256=cs34qNonFZG8uYxTYEt0rXi2LcPz3pw8D8hxiywih6w,4927
|
128
130
|
claude_mpm/cli/parsers/search_parser.py,sha256=L8-65kndg-zutSKpzj-eCvTNkeySCZ-WlSHdhk7pEak,6916
|
129
131
|
claude_mpm/cli/parsers/tickets_parser.py,sha256=FYl-VNH7PrZzfZUCcjnf6F7g6JXnL8YDxwrmR5svIcg,6966
|
@@ -141,7 +143,7 @@ claude_mpm/commands/mpm-agents.md,sha256=JnYPJ-eWvIEEtiCB6iPu182P2xDBRvU3ArVXQ7h
|
|
141
143
|
claude_mpm/commands/mpm-config.md,sha256=79Eb-srRpEVV3HCHDHZc8SKec6_LVP6HbXDEVkZKLgw,2929
|
142
144
|
claude_mpm/commands/mpm-doctor.md,sha256=ut5LhFKVRw-2ecjMSPsnaTiRuFXa6Q9t-Wgl3CCnQvk,590
|
143
145
|
claude_mpm/commands/mpm-help.md,sha256=zfhpE0Fd-wW5zWmYYAMRMT-xYK8saqbw-HXRD7csJHI,2850
|
144
|
-
claude_mpm/commands/mpm-init.md,sha256=
|
146
|
+
claude_mpm/commands/mpm-init.md,sha256=WcEj7r4HyTHQc7-NVpYlDNOtZrlMs4VH-vm3K1X7At8,13329
|
145
147
|
claude_mpm/commands/mpm-monitor.md,sha256=onTHf9Yac1KkdZdENtY2Q5jyw0A-vZLYgoKkPCtZLUY,12193
|
146
148
|
claude_mpm/commands/mpm-organize.md,sha256=T-ysjhwgfW9irjUj02vuY_1jeMdabO_zxcShyjmqsiM,10153
|
147
149
|
claude_mpm/commands/mpm-status.md,sha256=oaM4ybL4ffp55nkT9F0mp_5H4tF-wX9mbqK-LEKEqUU,1919
|
@@ -632,7 +634,7 @@ claude_mpm/services/infrastructure/monitoring/resources.py,sha256=7Mt9zvNAYGf7OT
|
|
632
634
|
claude_mpm/services/infrastructure/monitoring/service.py,sha256=guYB6rJtU18T2kPhZbKKg85l96lm2f7XVtPnBt1O3So,12613
|
633
635
|
claude_mpm/services/mcp_gateway/__init__.py,sha256=4fiMsd7i2QzZpEXCUeo0Vk_CXRi35TE94gPvwyuz2es,5099
|
634
636
|
claude_mpm/services/mcp_gateway/auto_configure.py,sha256=JNos01nGb2qXACXNHC-UkLccqQ-p8GFUElXqBLUQl7A,12163
|
635
|
-
claude_mpm/services/mcp_gateway/main.py,sha256=
|
637
|
+
claude_mpm/services/mcp_gateway/main.py,sha256=1e_-NGwVNr8cFtwWC_2NhZS-EYwC--MSfiZTx15x3ao,19121
|
636
638
|
claude_mpm/services/mcp_gateway/config/__init__.py,sha256=MpFgHfaT3dQz5QyEdpfbulD6tXUOY325LkovAYsdkAg,386
|
637
639
|
claude_mpm/services/mcp_gateway/config/config_loader.py,sha256=jM0LCQGnyAezQHLqfLWtPn5P3GpGMxGltKlTIKCL24M,9427
|
638
640
|
claude_mpm/services/mcp_gateway/config/config_schema.py,sha256=eSPyHmYJWBpGxJ8l0vBjEGod_PEnbGyHi3fcNLS4mH0,9475
|
@@ -654,7 +656,7 @@ claude_mpm/services/mcp_gateway/server/stdio_server.py,sha256=k_VHLZ17zdZzP6XOg6
|
|
654
656
|
claude_mpm/services/mcp_gateway/tools/__init__.py,sha256=Ga0kbvNOi8peBRZk5MUnO5bo3jWDCpHFko7mO21Vix4,754
|
655
657
|
claude_mpm/services/mcp_gateway/tools/base_adapter.py,sha256=na1MdyBCtVmKzgIcFJ5MuAUJ1LJrtA4yxkuqLnejiD8,16029
|
656
658
|
claude_mpm/services/mcp_gateway/tools/document_summarizer.py,sha256=F86qgDIFW2UXljGV8Tx9CapypqnXFNu3qFvi8XHlcZg,28223
|
657
|
-
claude_mpm/services/mcp_gateway/tools/external_mcp_services.py,sha256=
|
659
|
+
claude_mpm/services/mcp_gateway/tools/external_mcp_services.py,sha256=PSnes4mVOyAdqJ5o_YU9lmyTiXeXwXzE_x1pQeadpbs,23635
|
658
660
|
claude_mpm/services/mcp_gateway/tools/health_check_tool.py,sha256=SIrGt2uZGR4EGsH2_0UgkmHUV895M8zq9suNkRSteRA,16457
|
659
661
|
claude_mpm/services/mcp_gateway/tools/hello_world.py,sha256=L45ph8b0iLPpksrkf0ELrfl6CwVD3W3YLigwUKjIOoY,20291
|
660
662
|
claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py,sha256=qc9vYJtN3OYXqb-aXZpkx3FtkM9ivUm9AcWKUgeGdG4,17745
|
@@ -766,7 +768,7 @@ claude_mpm/services/version_control/version_parser.py,sha256=DbNncYZKKy9--ZUCO9g
|
|
766
768
|
claude_mpm/services/visualization/__init__.py,sha256=cTtWxRi07rSLXQKVZa7SKZsYfj6nRouw7HVO85Towfg,401
|
767
769
|
claude_mpm/services/visualization/mermaid_generator.py,sha256=6QGgXtMg_N9rKeRn8wYs3IxuWGKdDVAwFMFWKfIw9s4,34277
|
768
770
|
claude_mpm/storage/__init__.py,sha256=DXnmee6iGqC6ctFLW7_Ty1cVCjYDFuCMkwO4EV0i25k,274
|
769
|
-
claude_mpm/storage/state_storage.py,sha256=
|
771
|
+
claude_mpm/storage/state_storage.py,sha256=6jEZ4z35MjtAuTTUdqETTy4_dbMMK8EN_C2kVa62PjY,16811
|
770
772
|
claude_mpm/tools/__init__.py,sha256=T3GuCYNAHtjVcKCeivY674PaDm48WX96AriQfTKUknY,347
|
771
773
|
claude_mpm/tools/__main__.py,sha256=MtpJoWA2HEmRE_XDsSjjto6DND7Ft0MZoiY4ivNHh5A,5714
|
772
774
|
claude_mpm/tools/code_tree_analyzer.py,sha256=BBkEuSVHd_P1jBlxpBfzsLqUyT01rid3r2_cQCBeGyQ,64818
|
@@ -797,9 +799,9 @@ claude_mpm/utils/subprocess_utils.py,sha256=D0izRT8anjiUb_JG72zlJR_JAw1cDkb7kalN
|
|
797
799
|
claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
|
798
800
|
claude_mpm/validation/agent_validator.py,sha256=GprtAvu80VyMXcKGsK_VhYiXWA6BjKHv7O6HKx0AB9w,20917
|
799
801
|
claude_mpm/validation/frontmatter_validator.py,sha256=YpJlYNNYcV8u6hIOi3_jaRsDnzhbcQpjCBE6eyBKaFY,7076
|
800
|
-
claude_mpm-4.
|
801
|
-
claude_mpm-4.
|
802
|
-
claude_mpm-4.
|
803
|
-
claude_mpm-4.
|
804
|
-
claude_mpm-4.
|
805
|
-
claude_mpm-4.
|
802
|
+
claude_mpm-4.11.0.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
|
803
|
+
claude_mpm-4.11.0.dist-info/METADATA,sha256=MEj3DXeNTTBP_5amuoK5rdIplBHmiEwKSSRJvteORTc,17967
|
804
|
+
claude_mpm-4.11.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
805
|
+
claude_mpm-4.11.0.dist-info/entry_points.txt,sha256=Vlw3GNi-OtTpKSrez04iNrPmxNxYDpIWxmJCxiZ5Tx8,526
|
806
|
+
claude_mpm-4.11.0.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
|
807
|
+
claude_mpm-4.11.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|