claude-mpm 5.4.64__py3-none-any.whl → 5.4.65__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 claude-mpm might be problematic. Click here for more details.
- claude_mpm/VERSION +1 -1
- claude_mpm/cli/startup.py +24 -15
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-312.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-312.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-312.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-312.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-312.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-312.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-312.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-312.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-312.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-312.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-312.pyc +0 -0
- claude_mpm/utils/agent_dependency_loader.py +99 -2
- claude_mpm/utils/robust_installer.py +35 -18
- {claude_mpm-5.4.64.dist-info → claude_mpm-5.4.65.dist-info}/METADATA +1 -1
- {claude_mpm-5.4.64.dist-info → claude_mpm-5.4.65.dist-info}/RECORD +22 -11
- {claude_mpm-5.4.64.dist-info → claude_mpm-5.4.65.dist-info}/WHEEL +0 -0
- {claude_mpm-5.4.64.dist-info → claude_mpm-5.4.65.dist-info}/entry_points.txt +0 -0
- {claude_mpm-5.4.64.dist-info → claude_mpm-5.4.65.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-5.4.64.dist-info → claude_mpm-5.4.65.dist-info}/licenses/LICENSE-FAQ.md +0 -0
- {claude_mpm-5.4.64.dist-info → claude_mpm-5.4.65.dist-info}/top_level.txt +0 -0
claude_mpm/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
5.4.
|
|
1
|
+
5.4.65
|
claude_mpm/cli/startup.py
CHANGED
|
@@ -314,7 +314,7 @@ def deploy_output_style_on_startup():
|
|
|
314
314
|
|
|
315
315
|
Deploys two styles:
|
|
316
316
|
- claude-mpm-style.md (professional mode)
|
|
317
|
-
- claude-mpm-
|
|
317
|
+
- claude-mpm-teach.md (teaching mode)
|
|
318
318
|
"""
|
|
319
319
|
try:
|
|
320
320
|
import shutil
|
|
@@ -330,7 +330,7 @@ def deploy_output_style_on_startup():
|
|
|
330
330
|
user_home = Path.home()
|
|
331
331
|
output_styles_dir = user_home / ".claude" / "settings" / "output-styles"
|
|
332
332
|
professional_target = output_styles_dir / "claude-mpm-style.md"
|
|
333
|
-
teacher_target = output_styles_dir / "claude-mpm-
|
|
333
|
+
teacher_target = output_styles_dir / "claude-mpm-teach.md"
|
|
334
334
|
|
|
335
335
|
# Create directory if it doesn't exist
|
|
336
336
|
output_styles_dir.mkdir(parents=True, exist_ok=True)
|
|
@@ -471,16 +471,13 @@ def sync_remote_agents_on_startup():
|
|
|
471
471
|
block startup to ensure claude-mpm remains functional.
|
|
472
472
|
|
|
473
473
|
Workflow:
|
|
474
|
-
1.
|
|
475
|
-
2.
|
|
476
|
-
3.
|
|
477
|
-
4. Cleanup
|
|
474
|
+
1. Sync all enabled Git sources (download/cache files) - Phase 1 progress bar
|
|
475
|
+
2. Deploy agents to ~/.claude/agents/ - Phase 2 progress bar
|
|
476
|
+
3. Cleanup orphaned agents (ours but no longer deployed) - Phase 3
|
|
477
|
+
4. Cleanup legacy agent cache directories (after sync/deployment) - Phase 4
|
|
478
478
|
5. Log deployment results
|
|
479
479
|
"""
|
|
480
|
-
#
|
|
481
|
-
cleanup_legacy_agent_cache()
|
|
482
|
-
|
|
483
|
-
# DEPRECATED: Legacy warning - replaced by automatic cleanup above
|
|
480
|
+
# DEPRECATED: Legacy warning - no-op function, kept for compatibility
|
|
484
481
|
check_legacy_cache()
|
|
485
482
|
|
|
486
483
|
try:
|
|
@@ -700,7 +697,8 @@ def sync_remote_agents_on_startup():
|
|
|
700
697
|
agent_files = [
|
|
701
698
|
f
|
|
702
699
|
for f in all_md_files
|
|
703
|
-
if
|
|
700
|
+
if
|
|
701
|
+
(
|
|
704
702
|
# Must be in an agent directory
|
|
705
703
|
# Supports: cache/agents/{category}/... (flat)
|
|
706
704
|
# Supports: cache/agents/{owner}/{repo}/agents/{category}/... (GitHub sync)
|
|
@@ -843,6 +841,11 @@ def sync_remote_agents_on_startup():
|
|
|
843
841
|
logger = get_logger("cli")
|
|
844
842
|
logger.warning(f"Failed to deploy agents from cache: {e}")
|
|
845
843
|
|
|
844
|
+
# Phase 4: Cleanup legacy agent cache directories (after sync/deployment)
|
|
845
|
+
# CRITICAL: This must run AFTER sync completes because sync may recreate
|
|
846
|
+
# legacy directories. Running cleanup here ensures they're removed.
|
|
847
|
+
cleanup_legacy_agent_cache()
|
|
848
|
+
|
|
846
849
|
except Exception as e:
|
|
847
850
|
# Non-critical - log but don't fail startup
|
|
848
851
|
from ..core.logger import get_logger
|
|
@@ -851,6 +854,12 @@ def sync_remote_agents_on_startup():
|
|
|
851
854
|
logger.debug(f"Failed to sync remote agents: {e}")
|
|
852
855
|
# Continue execution - agent sync failure shouldn't block startup
|
|
853
856
|
|
|
857
|
+
# Cleanup legacy cache even if sync failed
|
|
858
|
+
try:
|
|
859
|
+
cleanup_legacy_agent_cache()
|
|
860
|
+
except Exception:
|
|
861
|
+
pass # Ignore cleanup errors
|
|
862
|
+
|
|
854
863
|
|
|
855
864
|
def sync_remote_skills_on_startup():
|
|
856
865
|
"""
|
|
@@ -1073,9 +1082,7 @@ def sync_remote_skills_on_startup():
|
|
|
1073
1082
|
total_skill_count = len(all_skills)
|
|
1074
1083
|
|
|
1075
1084
|
# Determine skill count based on resolution
|
|
1076
|
-
skill_count = (
|
|
1077
|
-
len(skills_to_deploy) if skills_to_deploy else total_skill_count
|
|
1078
|
-
)
|
|
1085
|
+
skill_count = len(skills_to_deploy) if skills_to_deploy else total_skill_count
|
|
1079
1086
|
|
|
1080
1087
|
if skill_count > 0:
|
|
1081
1088
|
# Deploy skills with resolved filter
|
|
@@ -1090,7 +1097,9 @@ def sync_remote_skills_on_startup():
|
|
|
1090
1097
|
# CRITICAL FIX: Empty list should mean "deploy no skills", not "deploy all"
|
|
1091
1098
|
# When skills_to_deploy is [], we want skill_filter=set() NOT skill_filter=None
|
|
1092
1099
|
# None means "no filtering" (deploy all), empty set means "filter to nothing"
|
|
1093
|
-
skill_filter=set(skills_to_deploy)
|
|
1100
|
+
skill_filter=set(skills_to_deploy)
|
|
1101
|
+
if skills_to_deploy is not None
|
|
1102
|
+
else None,
|
|
1094
1103
|
)
|
|
1095
1104
|
|
|
1096
1105
|
# REMOVED: User-level deployment (lines 1068-1074)
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -65,6 +65,7 @@ class AgentDependencyLoader:
|
|
|
65
65
|
self.deployment_state_file = (
|
|
66
66
|
Path.cwd() / ".claude" / "agents" / ".mpm_deployment_state"
|
|
67
67
|
)
|
|
68
|
+
self.is_uv_tool = self._check_uv_tool_installation()
|
|
68
69
|
|
|
69
70
|
def discover_deployed_agents(self) -> Dict[str, Path]:
|
|
70
71
|
"""
|
|
@@ -191,9 +192,42 @@ class AgentDependencyLoader:
|
|
|
191
192
|
logger.debug(f"Loaded dependencies for {len(agent_dependencies)} agents")
|
|
192
193
|
return agent_dependencies
|
|
193
194
|
|
|
195
|
+
def _check_uv_tool_installation(self) -> bool:
|
|
196
|
+
"""
|
|
197
|
+
Check if running in UV tool environment (no pip available).
|
|
198
|
+
|
|
199
|
+
WHY: UV tool environments don't have pip installed. The executable
|
|
200
|
+
path typically contains ".local/share/uv/tools/" and the UV_TOOL_DIR
|
|
201
|
+
environment variable is set. In such environments, we need to use
|
|
202
|
+
'uv pip' instead of 'python -m pip'.
|
|
203
|
+
|
|
204
|
+
Returns:
|
|
205
|
+
True if UV tool environment, False otherwise
|
|
206
|
+
"""
|
|
207
|
+
import os
|
|
208
|
+
|
|
209
|
+
# Check UV_TOOL_DIR environment variable
|
|
210
|
+
uv_tool_dir = os.environ.get("UV_TOOL_DIR", "")
|
|
211
|
+
if uv_tool_dir and "claude-mpm" in uv_tool_dir:
|
|
212
|
+
logger.debug(f"UV tool environment detected via UV_TOOL_DIR: {uv_tool_dir}")
|
|
213
|
+
return True
|
|
214
|
+
|
|
215
|
+
# Check executable path for UV tool patterns
|
|
216
|
+
executable = sys.executable
|
|
217
|
+
if ".local/share/uv/tools/" in executable or "/uv/tools/" in executable:
|
|
218
|
+
logger.debug(
|
|
219
|
+
f"UV tool environment detected via executable path: {executable}"
|
|
220
|
+
)
|
|
221
|
+
return True
|
|
222
|
+
|
|
223
|
+
return False
|
|
224
|
+
|
|
194
225
|
def check_python_dependency(self, package_spec: str) -> Tuple[bool, Optional[str]]:
|
|
195
226
|
"""
|
|
196
|
-
Check if a Python package dependency is satisfied.
|
|
227
|
+
Check if a Python package dependency is satisfied in the TARGET environment.
|
|
228
|
+
|
|
229
|
+
WHY: UV tool environments use a separate Python installation. We must check
|
|
230
|
+
packages in the same environment where they would be installed/used.
|
|
197
231
|
|
|
198
232
|
Args:
|
|
199
233
|
package_spec: Package specification (e.g., "pandas>=2.0.0")
|
|
@@ -221,7 +255,70 @@ class AgentDependencyLoader:
|
|
|
221
255
|
)
|
|
222
256
|
return True, "optional-skipped"
|
|
223
257
|
|
|
224
|
-
#
|
|
258
|
+
# For UV tool environments, check via UV's Python
|
|
259
|
+
if self.is_uv_tool:
|
|
260
|
+
try:
|
|
261
|
+
verify_cmd = [
|
|
262
|
+
"uv",
|
|
263
|
+
"run",
|
|
264
|
+
"--no-project",
|
|
265
|
+
"python",
|
|
266
|
+
"-c",
|
|
267
|
+
f"import importlib.metadata; print(importlib.metadata.version('{package_name}'))",
|
|
268
|
+
]
|
|
269
|
+
result = subprocess.run(
|
|
270
|
+
verify_cmd, capture_output=True, timeout=30, check=False
|
|
271
|
+
)
|
|
272
|
+
if result.returncode == 0:
|
|
273
|
+
version = result.stdout.decode().strip()
|
|
274
|
+
self.checked_packages.add(package_name)
|
|
275
|
+
if req.specifier.contains(version):
|
|
276
|
+
logger.debug(
|
|
277
|
+
f"Package {package_name} {version} satisfied in UV environment"
|
|
278
|
+
)
|
|
279
|
+
return True, version
|
|
280
|
+
logger.debug(
|
|
281
|
+
f"{package_name} {version} does not satisfy {req.specifier}"
|
|
282
|
+
)
|
|
283
|
+
return False, version
|
|
284
|
+
# Check alternatives for optional packages
|
|
285
|
+
if package_name in self.OPTIONAL_DB_PACKAGES:
|
|
286
|
+
for alternative in self.OPTIONAL_DB_PACKAGES[package_name]:
|
|
287
|
+
alt_cmd = [
|
|
288
|
+
"uv",
|
|
289
|
+
"run",
|
|
290
|
+
"--no-project",
|
|
291
|
+
"python",
|
|
292
|
+
"-c",
|
|
293
|
+
f"import importlib.metadata; print(importlib.metadata.version('{alternative}'))",
|
|
294
|
+
]
|
|
295
|
+
alt_result = subprocess.run(
|
|
296
|
+
alt_cmd, capture_output=True, timeout=30, check=False
|
|
297
|
+
)
|
|
298
|
+
if alt_result.returncode == 0:
|
|
299
|
+
alt_version = alt_result.stdout.decode().strip()
|
|
300
|
+
logger.info(
|
|
301
|
+
f"Using {alternative} as alternative to {package_name}"
|
|
302
|
+
)
|
|
303
|
+
self.checked_packages.add(package_name)
|
|
304
|
+
return True, f"{alternative}:{alt_version}"
|
|
305
|
+
# If no alternatives work, mark as optional failure
|
|
306
|
+
self.optional_failed[package_name] = "No alternatives available"
|
|
307
|
+
logger.warning(
|
|
308
|
+
f"Optional package {package_name} not found, marking as optional"
|
|
309
|
+
)
|
|
310
|
+
return True, "optional-not-found"
|
|
311
|
+
return False, None
|
|
312
|
+
except subprocess.TimeoutExpired:
|
|
313
|
+
logger.warning(f"Timeout checking {package_name} in UV environment")
|
|
314
|
+
return False, None
|
|
315
|
+
except Exception as e:
|
|
316
|
+
logger.debug(
|
|
317
|
+
f"Error checking {package_name} in UV environment: {e}"
|
|
318
|
+
)
|
|
319
|
+
return False, None
|
|
320
|
+
|
|
321
|
+
# For normal Python, try to import and check version
|
|
225
322
|
try:
|
|
226
323
|
import importlib.metadata
|
|
227
324
|
|
|
@@ -478,42 +478,56 @@ class RobustPackageInstaller:
|
|
|
478
478
|
|
|
479
479
|
def _verify_installation(self, package_spec: str) -> bool:
|
|
480
480
|
"""
|
|
481
|
-
Verify that a package was successfully installed.
|
|
481
|
+
Verify that a package was successfully installed in the TARGET environment.
|
|
482
|
+
|
|
483
|
+
WHY: UV installs packages to its own Python environment, not the current process.
|
|
484
|
+
We must verify in the same environment where packages were installed.
|
|
482
485
|
|
|
483
486
|
Args:
|
|
484
487
|
package_spec: Package specification
|
|
485
488
|
|
|
486
489
|
Returns:
|
|
487
|
-
True if package is installed and importable
|
|
490
|
+
True if package is installed and importable in the target environment
|
|
488
491
|
"""
|
|
489
492
|
package_name = self._extract_package_name(package_spec)
|
|
490
493
|
|
|
491
|
-
# Convert package name to import name (e.g., tree-sitter-ruby -> tree_sitter_ruby)
|
|
492
|
-
import_name = package_name.replace("-", "_")
|
|
493
|
-
|
|
494
494
|
try:
|
|
495
|
-
|
|
495
|
+
if self.is_uv_tool:
|
|
496
|
+
# For UV tool, verify via UV's Python environment
|
|
497
|
+
verify_cmd = [
|
|
498
|
+
"uv",
|
|
499
|
+
"run",
|
|
500
|
+
"--no-project",
|
|
501
|
+
"python",
|
|
502
|
+
"-c",
|
|
503
|
+
f"import importlib.metadata; print(importlib.metadata.version('{package_name}'))",
|
|
504
|
+
]
|
|
505
|
+
result = subprocess.run(
|
|
506
|
+
verify_cmd, capture_output=True, timeout=30, check=False
|
|
507
|
+
)
|
|
508
|
+
if result.returncode == 0:
|
|
509
|
+
logger.debug(
|
|
510
|
+
f"Package {package_name} verified in UV environment: {result.stdout.decode().strip()}"
|
|
511
|
+
)
|
|
512
|
+
return True
|
|
513
|
+
logger.debug(
|
|
514
|
+
f"Package {package_name} not found in UV environment: {result.stderr.decode().strip()}"
|
|
515
|
+
)
|
|
516
|
+
return False
|
|
517
|
+
# For normal Python, use importlib.metadata in current process
|
|
496
518
|
import importlib.metadata
|
|
497
519
|
|
|
498
520
|
try:
|
|
499
521
|
version = importlib.metadata.version(package_name)
|
|
500
522
|
logger.debug(f"Package {package_name} version {version} is installed")
|
|
501
|
-
|
|
502
|
-
# For tree-sitter packages, don't try to import (they have C extensions)
|
|
503
|
-
if package_name.startswith("tree-sitter-"):
|
|
504
|
-
return True
|
|
505
|
-
|
|
506
|
-
# Try to import the package
|
|
507
|
-
try:
|
|
508
|
-
__import__(import_name)
|
|
509
|
-
return True
|
|
510
|
-
except ImportError:
|
|
511
|
-
# Some packages have different import names, that's OK
|
|
512
|
-
return True
|
|
523
|
+
return True
|
|
513
524
|
|
|
514
525
|
except importlib.metadata.PackageNotFoundError:
|
|
515
526
|
return False
|
|
516
527
|
|
|
528
|
+
except subprocess.TimeoutExpired:
|
|
529
|
+
logger.warning(f"Verification timeout for {package_name}")
|
|
530
|
+
return False
|
|
517
531
|
except ImportError:
|
|
518
532
|
# Fallback for older Python versions
|
|
519
533
|
try:
|
|
@@ -523,6 +537,9 @@ class RobustPackageInstaller:
|
|
|
523
537
|
return True
|
|
524
538
|
except pkg_resources.DistributionNotFound:
|
|
525
539
|
return False
|
|
540
|
+
except Exception as e:
|
|
541
|
+
logger.debug(f"Verification error for {package_name}: {e}")
|
|
542
|
+
return False
|
|
526
543
|
|
|
527
544
|
def _is_retryable_error(self, error: Optional[str]) -> bool:
|
|
528
545
|
"""
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
claude_mpm/BUILD_NUMBER,sha256=9JfxhnDtr-8l3kCP2U5TVXSErptHoga8m7XA8zqgGOc,4
|
|
2
|
-
claude_mpm/VERSION,sha256
|
|
2
|
+
claude_mpm/VERSION,sha256=-UpN4Js98_xT1OT7M9yLLDPO7u1QCvPn-FdaspMG6Cg,7
|
|
3
3
|
claude_mpm/__init__.py,sha256=AGfh00BHKvLYD-UVFw7qbKtl7NMRIzRXOWw7vEuZ-h4,2214
|
|
4
4
|
claude_mpm/__main__.py,sha256=Ro5UBWBoQaSAIoSqWAr7zkbLyvi4sSy28WShqAhKJG0,723
|
|
5
5
|
claude_mpm/constants.py,sha256=CU7v8LZT-cFCNNLZU4dpaMD-4c3ib16v8fVE620wUjk,6761
|
|
@@ -41,7 +41,7 @@ claude_mpm/cli/chrome_devtools_installer.py,sha256=efA_ZX1iR3oaJi3222079BQw6DEG8
|
|
|
41
41
|
claude_mpm/cli/executor.py,sha256=cetKiY2YS4XETUBXmfySdHYloI_M_lBJUFViRQ9TcS4,10544
|
|
42
42
|
claude_mpm/cli/helpers.py,sha256=CypEhw0tbNH6_GzVTaQdi4w7ThCWO43Ep92YbJzPR4I,3638
|
|
43
43
|
claude_mpm/cli/parser.py,sha256=Vqx9n-6Xo1uNhXR4rThmgWpZXTr0nOtkgDf3oMS9b0g,5855
|
|
44
|
-
claude_mpm/cli/startup.py,sha256=
|
|
44
|
+
claude_mpm/cli/startup.py,sha256=yp4pEd9NUJmGenowc6ew0Fx-1k5TmsVfyLpuacclvJ4,73988
|
|
45
45
|
claude_mpm/cli/startup_display.py,sha256=R_QIamjfdaY5o_VxpIeymyYj1Qde2B9hPXy1P-KmUKI,14972
|
|
46
46
|
claude_mpm/cli/startup_logging.py,sha256=RTuyd6CbhiFQz7Z07LDDhK_ZAnZfuJ9B0NghVSntHFI,29390
|
|
47
47
|
claude_mpm/cli/utils.py,sha256=FSMPftBZM8MeUyTtiB63Lz7oFOgkzwTetQs58RbRb_Q,8785
|
|
@@ -336,13 +336,19 @@ claude_mpm/hooks/claude_hooks/memory_integration.py,sha256=73w7A5-3s5i1oYdkbEgw7
|
|
|
336
336
|
claude_mpm/hooks/claude_hooks/response_tracking.py,sha256=bz_8csYxxUZ3k_SI6q9uvtE7wfH-T15v_jpP2nq45nk,16896
|
|
337
337
|
claude_mpm/hooks/claude_hooks/tool_analysis.py,sha256=3_o2PP9D7wEMwLriCtIBOw0cj2fSZfepN7lI4P1meSQ,7862
|
|
338
338
|
claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc,sha256=EGpgXqhPM0iRRZtCqHaLVQ6wDH42OH_M7Gt5GiFLyro,346
|
|
339
|
+
claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-312.pyc,sha256=RdPlaoNPDoSlTFV36Ku4vxs7xYqh7t2038D4pyULy-g,322
|
|
339
340
|
claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc,sha256=SQX5iiP9bQZkLL-cj_2tlGH7lpAzarO0mYal7btj3tc,3521
|
|
340
341
|
claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc,sha256=T9FMRyRjvHTRJm0LXosba7MezdUVw6I-nt_KP--LTwA,35923
|
|
342
|
+
claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-312.pyc,sha256=-ayyVTxDW5_BVD2TD14e4zDteH0l_mXIcyEG8AQCERg,32006
|
|
341
343
|
claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc,sha256=AsvVXkge1Pio3jgnS-zNbPt9brySB8ZeVPSn7VvuKjs,29654
|
|
344
|
+
claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-312.pyc,sha256=heIj2o28Pw6QF5zgZBAebUInR8nxi6Ezdlfau9p-WJQ,27040
|
|
342
345
|
claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc,sha256=9mpAKY4gNcbU5VvZ5tGbf2UM0uIEWdreKSUvVr_BKcM,33917
|
|
343
346
|
claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc,sha256=YbwauQDKSGvXkT1972faalJLuxwyvq328DYQhkCnel0,10513
|
|
347
|
+
claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-312.pyc,sha256=K-FbzUxbOffBSol-RUZkyFr9k1Ktg0HRdykSKbAn0NI,9489
|
|
344
348
|
claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc,sha256=0xWsBZ63F-akLopSiRi36-hmhh1v9R5aKFBM0z93Jd0,16730
|
|
349
|
+
claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-312.pyc,sha256=QZDMBrRbhD5lnm1sDcONSU5s5qsrcRme-vQOGUD5J3U,14632
|
|
345
350
|
claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc,sha256=ZjcNfNY5Ht6FhalPeh7M7OzMffcey5iF4AVjDDg9kak,10694
|
|
351
|
+
claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-312.pyc,sha256=T98zonvVkllflFNw_pptXXAXbDrIgeBfY6aXvSY8el8,9071
|
|
346
352
|
claude_mpm/hooks/claude_hooks/services/__init__.py,sha256=OIYOKsUNw1BHYawOCp-KFK5kmQKuj92cCqCEPO0nwo0,585
|
|
347
353
|
claude_mpm/hooks/claude_hooks/services/connection_manager.py,sha256=l-aKzxwK-PWKL3TO1Iiu0sfSbj6Y9JMBOm3pgAiUYZc,9378
|
|
348
354
|
claude_mpm/hooks/claude_hooks/services/connection_manager_http.py,sha256=n14k1byOBbviu0nFab3q0gb7p6eMqGO8hS0b7Gt2JRg,10262
|
|
@@ -350,10 +356,15 @@ claude_mpm/hooks/claude_hooks/services/duplicate_detector.py,sha256=Fh9LmEMsVmQM
|
|
|
350
356
|
claude_mpm/hooks/claude_hooks/services/state_manager.py,sha256=QB0JPJQThTVg0TGRO3Dc_3y3bac-hkulgMqqzo_71ng,11189
|
|
351
357
|
claude_mpm/hooks/claude_hooks/services/subagent_processor.py,sha256=f7a_vgo_kuG9MalDTka2UPXwDyCkqNgCvG8i1hp0oRo,15263
|
|
352
358
|
claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc,sha256=xBfLBSqnpcKfcQBWfh7xUm454g1lq1LvbO7SxGvcOPc,644
|
|
359
|
+
claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-312.pyc,sha256=75pkmoqE7CeBOc2ZHTYfgSR-mtVjKrcKaOA6PxFGW64,565
|
|
353
360
|
claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc,sha256=bvZ_QcuI0j125Ebv8RzeWUh1BkuRTUfufGi0NV7HjuY,12359
|
|
361
|
+
claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-312.pyc,sha256=HEBjsWvdkCpV8X4UyDsKhm0HXpstuHnObck_Yr-QQBA,11177
|
|
354
362
|
claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc,sha256=Yy_REAUhJCiFjOhxeDb4v0qyEvEbUtCmXD9PAz40dhw,5321
|
|
363
|
+
claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-312.pyc,sha256=ef_Tx9Uv1CvS18tC_PXmGVvIoMDsRnEUhKRUZaUdGBw,4751
|
|
355
364
|
claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc,sha256=TPkEc-Zi3oNS5dCXBpGbSZwg_8RQvzNzd4pVx9B3WeM,12364
|
|
365
|
+
claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-312.pyc,sha256=uDZ1o2NYu0e2-sXxHovFOy28cklRaMOOX4vkLTRDjq0,11477
|
|
356
366
|
claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc,sha256=YjWbj0qXMjew5bZCgvHWrb3dxp3BQZkpuOqsXgu4Wis,15045
|
|
367
|
+
claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-312.pyc,sha256=c2Y-gHruenFjPNTimrkiSUvXamZayjpMinAKIppzMoM,13611
|
|
357
368
|
claude_mpm/hooks/failure_learning/__init__.py,sha256=iJ80AKFHiT8DjIH2a72DQVJvL6nAFrizNA2yTKwZ4rw,1805
|
|
358
369
|
claude_mpm/hooks/failure_learning/failure_detection_hook.py,sha256=KENoB5N-dBm5hb0SxeIZtCvNKbmG2BKHOJSrSO-3Z_I,7500
|
|
359
370
|
claude_mpm/hooks/failure_learning/fix_detection_hook.py,sha256=XUk1bnBVLdfhQ9AMQSvGsTSeFQsKsVud2wbWX-Jjor8,7164
|
|
@@ -947,7 +958,7 @@ claude_mpm/tools/code_tree_analyzer/models.py,sha256=jZ63GOGivZFImbqKfg12fUAo1n5
|
|
|
947
958
|
claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py,sha256=A7MC11_WFc-e5P6Klazh0QJN2kGzq-PmhrqOU6Q1fj0,8386
|
|
948
959
|
claude_mpm/tools/code_tree_analyzer/python_analyzer.py,sha256=iJsda_pFgXIY36oaqglPuc_vUo8APIpqwW30TUJfgls,11314
|
|
949
960
|
claude_mpm/utils/__init__.py,sha256=rkxNE0tDfKEN2lr2LLBuToNSvkF-yjF38607eUXL1vk,353
|
|
950
|
-
claude_mpm/utils/agent_dependency_loader.py,sha256=
|
|
961
|
+
claude_mpm/utils/agent_dependency_loader.py,sha256=984o7ccgzto3WLXKIF3xBzaheF0K518sgzi4_wGVvWo,44464
|
|
951
962
|
claude_mpm/utils/agent_filters.py,sha256=mSuMrroTnIhNisUF4xR7ghwQmrHq5B2-hq6rjWBVkC0,9475
|
|
952
963
|
claude_mpm/utils/common.py,sha256=6hcs3Y6lx596Oj4H3CEQId-NIn8XEZJw1Ud3GAKwXKA,14341
|
|
953
964
|
claude_mpm/utils/config_manager.py,sha256=iWsPM0uo31Ela-XhFe9DIw3RuVxJf94_yFQ1HkibAlY,15876
|
|
@@ -969,17 +980,17 @@ claude_mpm/utils/log_cleanup.py,sha256=go_axmP7FqdDX5tspd-D-B10a1PpY51K5X_xMQMRD
|
|
|
969
980
|
claude_mpm/utils/migration.py,sha256=ugJAW_OOxLsV3sEv0Il2gb2QfnqnLwVD9SjhgppPQYo,12802
|
|
970
981
|
claude_mpm/utils/path_operations.py,sha256=gvd6Ye5rMFxIKnFzWwIL6jYy8wGkjSH3onYAan6zXkA,10869
|
|
971
982
|
claude_mpm/utils/progress.py,sha256=tSalO95Xv6YsGT4_uxNYvGT3qz6D3bsDDsflP-ZZnbI,14084
|
|
972
|
-
claude_mpm/utils/robust_installer.py,sha256=
|
|
983
|
+
claude_mpm/utils/robust_installer.py,sha256=KiSA_EhzyxYCiFHScQX3fNmloLfgXvytoCUFm-VExqQ,29805
|
|
973
984
|
claude_mpm/utils/session_logging.py,sha256=_6eoyCvVKhu2OhgRzC5FvMfFnD9et75lzCqARbd_i-k,3059
|
|
974
985
|
claude_mpm/utils/structured_questions.py,sha256=GoPr8UOe2vsAfJbNXS5y8E1wjp8zGHE1pDbg8H2Lv7M,20611
|
|
975
986
|
claude_mpm/utils/subprocess_utils.py,sha256=D0izRT8anjiUb_JG72zlJR_JAw1cDkb7kalNmfX9KlM,10443
|
|
976
987
|
claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
|
|
977
988
|
claude_mpm/validation/agent_validator.py,sha256=GprtAvu80VyMXcKGsK_VhYiXWA6BjKHv7O6HKx0AB9w,20917
|
|
978
989
|
claude_mpm/validation/frontmatter_validator.py,sha256=YpJlYNNYcV8u6hIOi3_jaRsDnzhbcQpjCBE6eyBKaFY,7076
|
|
979
|
-
claude_mpm-5.4.
|
|
980
|
-
claude_mpm-5.4.
|
|
981
|
-
claude_mpm-5.4.
|
|
982
|
-
claude_mpm-5.4.
|
|
983
|
-
claude_mpm-5.4.
|
|
984
|
-
claude_mpm-5.4.
|
|
985
|
-
claude_mpm-5.4.
|
|
990
|
+
claude_mpm-5.4.65.dist-info/licenses/LICENSE,sha256=ca3y_Rk4aPrbF6f62z8Ht5MJM9OAvbGlHvEDcj9vUQ4,3867
|
|
991
|
+
claude_mpm-5.4.65.dist-info/licenses/LICENSE-FAQ.md,sha256=TxfEkXVCK98RzDOer09puc7JVCP_q_bN4dHtZKHCMcM,5104
|
|
992
|
+
claude_mpm-5.4.65.dist-info/METADATA,sha256=WAr2nJ4qaCTCW3K484g0sCtLcZdPhNSjYcDd9kwaCb8,37997
|
|
993
|
+
claude_mpm-5.4.65.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
994
|
+
claude_mpm-5.4.65.dist-info/entry_points.txt,sha256=n-Uk4vwHPpuvu-g_I7-GHORzTnN_m6iyOsoLveKKD0E,228
|
|
995
|
+
claude_mpm-5.4.65.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
|
|
996
|
+
claude_mpm-5.4.65.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|