claude-mpm 4.4.3__py3-none-any.whl → 4.4.4__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.
Files changed (118) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/agent_loader.py +3 -2
  3. claude_mpm/agents/agent_loader_integration.py +2 -1
  4. claude_mpm/agents/async_agent_loader.py +2 -2
  5. claude_mpm/agents/base_agent_loader.py +2 -2
  6. claude_mpm/agents/frontmatter_validator.py +1 -0
  7. claude_mpm/agents/system_agent_config.py +2 -1
  8. claude_mpm/cli/commands/doctor.py +44 -5
  9. claude_mpm/cli/commands/mpm_init.py +116 -62
  10. claude_mpm/cli/parsers/configure_parser.py +3 -1
  11. claude_mpm/cli/startup_logging.py +1 -3
  12. claude_mpm/config/agent_config.py +1 -1
  13. claude_mpm/config/paths.py +2 -1
  14. claude_mpm/core/agent_name_normalizer.py +1 -0
  15. claude_mpm/core/config.py +2 -1
  16. claude_mpm/core/config_aliases.py +2 -1
  17. claude_mpm/core/file_utils.py +0 -1
  18. claude_mpm/core/framework/__init__.py +6 -6
  19. claude_mpm/core/framework/formatters/__init__.py +2 -2
  20. claude_mpm/core/framework/formatters/capability_generator.py +19 -8
  21. claude_mpm/core/framework/formatters/content_formatter.py +8 -3
  22. claude_mpm/core/framework/formatters/context_generator.py +7 -3
  23. claude_mpm/core/framework/loaders/__init__.py +3 -3
  24. claude_mpm/core/framework/loaders/agent_loader.py +7 -3
  25. claude_mpm/core/framework/loaders/file_loader.py +16 -6
  26. claude_mpm/core/framework/loaders/instruction_loader.py +16 -6
  27. claude_mpm/core/framework/loaders/packaged_loader.py +36 -12
  28. claude_mpm/core/framework/processors/__init__.py +2 -2
  29. claude_mpm/core/framework/processors/memory_processor.py +14 -6
  30. claude_mpm/core/framework/processors/metadata_processor.py +5 -5
  31. claude_mpm/core/framework/processors/template_processor.py +12 -6
  32. claude_mpm/core/framework_loader.py +44 -20
  33. claude_mpm/core/log_manager.py +2 -1
  34. claude_mpm/core/tool_access_control.py +1 -0
  35. claude_mpm/core/unified_agent_registry.py +2 -1
  36. claude_mpm/core/unified_paths.py +1 -0
  37. claude_mpm/experimental/cli_enhancements.py +1 -0
  38. claude_mpm/hooks/base_hook.py +1 -0
  39. claude_mpm/hooks/instruction_reinforcement.py +1 -0
  40. claude_mpm/hooks/kuzu_memory_hook.py +20 -13
  41. claude_mpm/hooks/validation_hooks.py +1 -1
  42. claude_mpm/scripts/mpm_doctor.py +1 -0
  43. claude_mpm/services/agents/loading/agent_profile_loader.py +1 -1
  44. claude_mpm/services/agents/loading/base_agent_manager.py +1 -1
  45. claude_mpm/services/agents/loading/framework_agent_loader.py +1 -1
  46. claude_mpm/services/agents/management/agent_capabilities_generator.py +1 -0
  47. claude_mpm/services/agents/management/agent_management_service.py +1 -1
  48. claude_mpm/services/agents/memory/memory_categorization_service.py +0 -1
  49. claude_mpm/services/agents/memory/memory_file_service.py +6 -2
  50. claude_mpm/services/agents/memory/memory_format_service.py +0 -1
  51. claude_mpm/services/agents/registry/deployed_agent_discovery.py +1 -1
  52. claude_mpm/services/async_session_logger.py +1 -1
  53. claude_mpm/services/claude_session_logger.py +1 -0
  54. claude_mpm/services/core/path_resolver.py +1 -0
  55. claude_mpm/services/diagnostics/checks/__init__.py +2 -0
  56. claude_mpm/services/diagnostics/checks/installation_check.py +126 -25
  57. claude_mpm/services/diagnostics/checks/mcp_services_check.py +399 -0
  58. claude_mpm/services/diagnostics/diagnostic_runner.py +3 -0
  59. claude_mpm/services/diagnostics/doctor_reporter.py +259 -32
  60. claude_mpm/services/event_bus/direct_relay.py +2 -1
  61. claude_mpm/services/event_bus/event_bus.py +1 -0
  62. claude_mpm/services/event_bus/relay.py +3 -2
  63. claude_mpm/services/framework_claude_md_generator/content_assembler.py +1 -1
  64. claude_mpm/services/infrastructure/daemon_manager.py +1 -1
  65. claude_mpm/services/mcp_config_manager.py +10 -10
  66. claude_mpm/services/mcp_gateway/core/process_pool.py +62 -23
  67. claude_mpm/services/mcp_gateway/tools/__init__.py +6 -5
  68. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +3 -1
  69. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +16 -31
  70. claude_mpm/services/memory/cache/simple_cache.py +1 -1
  71. claude_mpm/services/project/archive_manager.py +159 -96
  72. claude_mpm/services/project/documentation_manager.py +64 -45
  73. claude_mpm/services/project/enhanced_analyzer.py +132 -89
  74. claude_mpm/services/project/project_organizer.py +225 -131
  75. claude_mpm/services/response_tracker.py +1 -1
  76. claude_mpm/services/socketio/server/eventbus_integration.py +1 -1
  77. claude_mpm/services/unified/__init__.py +1 -1
  78. claude_mpm/services/unified/analyzer_strategies/__init__.py +3 -3
  79. claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +97 -53
  80. claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +81 -40
  81. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +277 -178
  82. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +196 -112
  83. claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +83 -49
  84. claude_mpm/services/unified/config_strategies/__init__.py +111 -126
  85. claude_mpm/services/unified/config_strategies/config_schema.py +157 -111
  86. claude_mpm/services/unified/config_strategies/context_strategy.py +91 -89
  87. claude_mpm/services/unified/config_strategies/error_handling_strategy.py +183 -173
  88. claude_mpm/services/unified/config_strategies/file_loader_strategy.py +160 -152
  89. claude_mpm/services/unified/config_strategies/unified_config_service.py +124 -112
  90. claude_mpm/services/unified/config_strategies/validation_strategy.py +298 -259
  91. claude_mpm/services/unified/deployment_strategies/__init__.py +7 -7
  92. claude_mpm/services/unified/deployment_strategies/base.py +24 -28
  93. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +168 -88
  94. claude_mpm/services/unified/deployment_strategies/local.py +49 -34
  95. claude_mpm/services/unified/deployment_strategies/utils.py +39 -43
  96. claude_mpm/services/unified/deployment_strategies/vercel.py +30 -24
  97. claude_mpm/services/unified/interfaces.py +0 -26
  98. claude_mpm/services/unified/migration.py +17 -40
  99. claude_mpm/services/unified/strategies.py +9 -26
  100. claude_mpm/services/unified/unified_analyzer.py +48 -44
  101. claude_mpm/services/unified/unified_config.py +21 -19
  102. claude_mpm/services/unified/unified_deployment.py +21 -26
  103. claude_mpm/storage/state_storage.py +1 -0
  104. claude_mpm/utils/agent_dependency_loader.py +18 -6
  105. claude_mpm/utils/common.py +14 -12
  106. claude_mpm/utils/database_connector.py +15 -12
  107. claude_mpm/utils/error_handler.py +1 -0
  108. claude_mpm/utils/log_cleanup.py +1 -0
  109. claude_mpm/utils/path_operations.py +1 -0
  110. claude_mpm/utils/session_logging.py +1 -1
  111. claude_mpm/utils/subprocess_utils.py +1 -0
  112. claude_mpm/validation/agent_validator.py +1 -1
  113. {claude_mpm-4.4.3.dist-info → claude_mpm-4.4.4.dist-info}/METADATA +9 -3
  114. {claude_mpm-4.4.3.dist-info → claude_mpm-4.4.4.dist-info}/RECORD +118 -117
  115. {claude_mpm-4.4.3.dist-info → claude_mpm-4.4.4.dist-info}/WHEEL +0 -0
  116. {claude_mpm-4.4.3.dist-info → claude_mpm-4.4.4.dist-info}/entry_points.txt +0 -0
  117. {claude_mpm-4.4.3.dist-info → claude_mpm-4.4.4.dist-info}/licenses/LICENSE +0 -0
  118. {claude_mpm-4.4.3.dist-info → claude_mpm-4.4.4.dist-info}/top_level.txt +0 -0
@@ -5,9 +5,6 @@ import os
5
5
  from pathlib import Path
6
6
  from typing import Any, Dict, List, Optional, Set
7
7
 
8
- from claude_mpm.core.logging_utils import get_logger
9
- from claude_mpm.utils.imports import safe_import
10
-
11
8
  # Import framework components
12
9
  from claude_mpm.core.framework import (
13
10
  AgentLoader,
@@ -21,6 +18,8 @@ from claude_mpm.core.framework import (
21
18
  PackagedLoader,
22
19
  TemplateProcessor,
23
20
  )
21
+ from claude_mpm.core.logging_utils import get_logger
22
+ from claude_mpm.utils.imports import safe_import
24
23
 
25
24
  # Import with fallback support
26
25
  AgentRegistryAdapter = safe_import(
@@ -108,7 +107,9 @@ class FrameworkLoader:
108
107
  self._memory_manager = self.container.resolve(IMemoryManager)
109
108
 
110
109
  # Initialize framework path
111
- self.framework_path = framework_path or self._path_resolver.detect_framework_path()
110
+ self.framework_path = (
111
+ framework_path or self._path_resolver.detect_framework_path()
112
+ )
112
113
 
113
114
  # Initialize modular components
114
115
  self._init_components()
@@ -219,7 +220,7 @@ class FrameworkLoader:
219
220
  "memory_instructions": "",
220
221
  "memory_instructions_level": "",
221
222
  "project_workflow": "", # Deprecated
222
- "project_memory": "", # Deprecated
223
+ "project_memory": "", # Deprecated
223
224
  "actual_memories": "",
224
225
  "agent_memories": {},
225
226
  }
@@ -241,7 +242,9 @@ class FrameworkLoader:
241
242
  agents_dir, templates_dir, main_dir = self._path_resolver.discover_agent_paths(
242
243
  agents_dir=self.agents_dir, framework_path=self.framework_path
243
244
  )
244
- agents = self.agent_loader.load_agents_directory(agents_dir, templates_dir, main_dir)
245
+ agents = self.agent_loader.load_agents_directory(
246
+ agents_dir, templates_dir, main_dir
247
+ )
245
248
  if agents:
246
249
  content["agents"] = agents
247
250
  content["loaded"] = True
@@ -296,7 +299,9 @@ class FrameworkLoader:
296
299
  routing = self.template_processor.extract_routing(template_data)
297
300
  if routing:
298
301
  agent_data["routing"] = routing
299
- memory_routing = self.template_processor.extract_memory_routing(template_data)
302
+ memory_routing = self.template_processor.extract_memory_routing(
303
+ template_data
304
+ )
300
305
  if memory_routing:
301
306
  agent_data["memory_routing"] = memory_routing
302
307
 
@@ -321,8 +326,7 @@ class FrameworkLoader:
321
326
  # Generate the instructions
322
327
  if self.framework_content["loaded"]:
323
328
  return self._format_full_framework()
324
- else:
325
- return self._format_minimal_framework()
329
+ return self._format_minimal_framework()
326
330
 
327
331
  def _format_full_framework(self) -> str:
328
332
  """Format full framework instructions using modular components."""
@@ -414,13 +418,17 @@ class FrameworkLoader:
414
418
  self._log_output_style_status()
415
419
 
416
420
  # Extract and save output style content
417
- output_style_content = self.output_style_manager.extract_output_style_content(
418
- framework_loader=self
421
+ output_style_content = (
422
+ self.output_style_manager.extract_output_style_content(
423
+ framework_loader=self
424
+ )
419
425
  )
420
426
  self.output_style_manager.save_output_style(output_style_content)
421
427
 
422
428
  # Deploy to Claude Code if supported
423
- deployed = self.output_style_manager.deploy_output_style(output_style_content)
429
+ deployed = self.output_style_manager.deploy_output_style(
430
+ output_style_content
431
+ )
424
432
 
425
433
  if deployed:
426
434
  self.logger.info("✅ Output style deployed to Claude Code >= 1.0.83")
@@ -443,12 +451,20 @@ class FrameworkLoader:
443
451
  self.logger.info("✅ Claude Code supports output styles (>= 1.0.83)")
444
452
  output_style_path = self.output_style_manager.output_style_path
445
453
  if output_style_path.exists():
446
- self.logger.info(f"📁 Output style file exists: {output_style_path}")
454
+ self.logger.info(
455
+ f"📁 Output style file exists: {output_style_path}"
456
+ )
447
457
  else:
448
- self.logger.info(f"📝 Output style will be created at: {output_style_path}")
458
+ self.logger.info(
459
+ f"📝 Output style will be created at: {output_style_path}"
460
+ )
449
461
  else:
450
- self.logger.info(f"⚠️ Claude Code {claude_version} does not support output styles")
451
- self.logger.info("📝 Output style will be injected into framework instructions")
462
+ self.logger.info(
463
+ f"⚠️ Claude Code {claude_version} does not support output styles"
464
+ )
465
+ self.logger.info(
466
+ "📝 Output style will be injected into framework instructions"
467
+ )
452
468
  else:
453
469
  self.logger.info("⚠️ Claude Code not detected or version unknown")
454
470
  self.logger.info("📝 Output style will be injected as fallback")
@@ -480,13 +496,21 @@ class FrameworkLoader:
480
496
  }
481
497
 
482
498
  # Log the prompt asynchronously
483
- instructions = self._format_full_framework() if self.framework_content["loaded"] else self._format_minimal_framework()
499
+ instructions = (
500
+ self._format_full_framework()
501
+ if self.framework_content["loaded"]
502
+ else self._format_minimal_framework()
503
+ )
484
504
  metadata["instructions_length"] = len(instructions)
485
505
 
486
506
  if loop.is_running():
487
- asyncio.create_task(log_manager.log_prompt("system_prompt", instructions, metadata))
507
+ asyncio.create_task(
508
+ log_manager.log_prompt("system_prompt", instructions, metadata)
509
+ )
488
510
  else:
489
- loop.run_until_complete(log_manager.log_prompt("system_prompt", instructions, metadata))
511
+ loop.run_until_complete(
512
+ log_manager.log_prompt("system_prompt", instructions, metadata)
513
+ )
490
514
 
491
515
  self.logger.debug("System prompt logged to prompts directory")
492
516
  except Exception as e:
@@ -514,4 +538,4 @@ class FrameworkLoader:
514
538
  """Get agent hierarchy from registry."""
515
539
  if self.agent_registry:
516
540
  return self.agent_registry.get_agent_hierarchy()
517
- return {"project": [], "user": [], "system": []}
541
+ return {"project": [], "user": [], "system": []}
@@ -23,10 +23,11 @@ from queue import Full, Queue
23
23
  from threading import Lock, Thread
24
24
  from typing import Any, Dict, Optional
25
25
 
26
+ from claude_mpm.core.logging_utils import get_logger
27
+
26
28
  from ..core.config import Config
27
29
  from ..core.constants import SystemLimits
28
30
 
29
- from claude_mpm.core.logging_utils import get_logger
30
31
  logger = get_logger(__name__)
31
32
 
32
33
  # Import cleanup utility for automatic cleanup
@@ -3,6 +3,7 @@
3
3
  from typing import Dict, List, Set
4
4
 
5
5
  from claude_mpm.core.logging_utils import get_logger
6
+
6
7
  logger = get_logger(__name__)
7
8
 
8
9
 
@@ -34,9 +34,10 @@ from enum import Enum
34
34
  from pathlib import Path
35
35
  from typing import Any, Dict, List, Optional, Set, Union
36
36
 
37
+ from claude_mpm.core.logging_utils import get_logger
38
+
37
39
  from .unified_paths import get_path_manager
38
40
 
39
- from claude_mpm.core.logging_utils import get_logger
40
41
  logger = get_logger(__name__)
41
42
 
42
43
 
@@ -32,6 +32,7 @@ from pathlib import Path
32
32
  from typing import Optional, Union
33
33
 
34
34
  from claude_mpm.core.logging_utils import get_logger
35
+
35
36
  logger = get_logger(__name__)
36
37
 
37
38
 
@@ -54,6 +54,7 @@ class CLIContext:
54
54
  def setup_logging(self, debug: bool = False) -> None:
55
55
  """Setup logging based on debug flag."""
56
56
  import logging
57
+
57
58
  level = logging.DEBUG if debug else logging.INFO
58
59
  format_str = (
59
60
  "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
@@ -8,6 +8,7 @@ from enum import Enum
8
8
  from typing import Any, Dict, Optional
9
9
 
10
10
  from claude_mpm.core.logging_utils import get_logger
11
+
11
12
  logger = get_logger(__name__)
12
13
 
13
14
 
@@ -11,6 +11,7 @@ from enum import Enum
11
11
  from typing import Dict, List, Optional, Tuple
12
12
 
13
13
  from claude_mpm.core.logging_utils import get_logger
14
+
14
15
  logger = get_logger(__name__)
15
16
 
16
17
 
@@ -21,12 +21,11 @@ import json
21
21
  import re
22
22
  import shutil
23
23
  import subprocess
24
- from datetime import datetime
25
24
  from pathlib import Path
26
- from typing import Any, Dict, List, Optional, Tuple
25
+ from typing import Any, Dict, List, Optional
27
26
 
28
27
  from claude_mpm.core.logging_utils import get_logger
29
- from claude_mpm.hooks.base_hook import HookContext, HookResult, HookType, SubmitHook
28
+ from claude_mpm.hooks.base_hook import HookContext, HookResult, SubmitHook
30
29
 
31
30
  logger = get_logger(__name__)
32
31
 
@@ -51,9 +50,7 @@ class KuzuMemoryHook(SubmitHook):
51
50
  self.enabled = self.kuzu_memory_cmd is not None
52
51
 
53
52
  if not self.enabled:
54
- logger.info(
55
- "Kuzu-memory not found. Install with: pipx install kuzu-memory"
56
- )
53
+ logger.info("Kuzu-memory not found. Install with: pipx install kuzu-memory")
57
54
  else:
58
55
  logger.info(f"Kuzu-memory integration enabled: {self.kuzu_memory_cmd}")
59
56
 
@@ -77,7 +74,15 @@ class KuzuMemoryHook(SubmitHook):
77
74
  3. Return None if not found
78
75
  """
79
76
  # Check pipx installation
80
- pipx_path = Path.home() / ".local" / "pipx" / "venvs" / "kuzu-memory" / "bin" / "kuzu-memory"
77
+ pipx_path = (
78
+ Path.home()
79
+ / ".local"
80
+ / "pipx"
81
+ / "venvs"
82
+ / "kuzu-memory"
83
+ / "bin"
84
+ / "kuzu-memory"
85
+ )
81
86
  if pipx_path.exists():
82
87
  return str(pipx_path)
83
88
 
@@ -126,7 +131,7 @@ class KuzuMemoryHook(SubmitHook):
126
131
  metadata={
127
132
  "memories_added": len(memories),
128
133
  "memory_source": "kuzu",
129
- }
134
+ },
130
135
  )
131
136
 
132
137
  return HookResult(success=True, data=context.data, modified=False)
@@ -138,7 +143,7 @@ class KuzuMemoryHook(SubmitHook):
138
143
  success=True,
139
144
  data=context.data,
140
145
  modified=False,
141
- error=f"Memory integration failed: {e}"
146
+ error=f"Memory integration failed: {e}",
142
147
  )
143
148
 
144
149
  def _retrieve_memories(self, query: str) -> List[Dict[str, Any]]:
@@ -158,7 +163,7 @@ class KuzuMemoryHook(SubmitHook):
158
163
  capture_output=True,
159
164
  text=True,
160
165
  timeout=5,
161
- cwd=str(self.project_path),
166
+ cwd=str(self.project_path), check=False,
162
167
  )
163
168
 
164
169
  if result.returncode == 0 and result.stdout:
@@ -262,7 +267,7 @@ Note: Use the memories above to provide more informed and contextual responses.
262
267
  capture_output=True,
263
268
  text=True,
264
269
  timeout=5,
265
- cwd=str(self.project_path),
270
+ cwd=str(self.project_path), check=False,
266
271
  )
267
272
 
268
273
  if result.returncode == 0:
@@ -318,7 +323,9 @@ Note: Use the memories above to provide more informed and contextual responses.
318
323
  content_lower = content.lower()
319
324
 
320
325
  # Technical tags
321
- if any(word in content_lower for word in ["code", "function", "class", "module"]):
326
+ if any(
327
+ word in content_lower for word in ["code", "function", "class", "module"]
328
+ ):
322
329
  tags.append("technical")
323
330
  if any(word in content_lower for word in ["bug", "error", "fix", "issue"]):
324
331
  tags.append("debugging")
@@ -349,4 +356,4 @@ def get_kuzu_memory_hook() -> KuzuMemoryHook:
349
356
  global _kuzu_memory_hook
350
357
  if _kuzu_memory_hook is None:
351
358
  _kuzu_memory_hook = KuzuMemoryHook()
352
- return _kuzu_memory_hook
359
+ return _kuzu_memory_hook
@@ -10,9 +10,9 @@ from typing import Any, Callable, Dict, List, Optional
10
10
 
11
11
  import yaml
12
12
 
13
+ from claude_mpm.core.logging_utils import get_logger
13
14
  from claude_mpm.validation import AgentValidator, ValidationResult
14
15
 
15
- from claude_mpm.core.logging_utils import get_logger
16
16
  logger = get_logger(__name__)
17
17
 
18
18
 
@@ -52,6 +52,7 @@ def run_diagnostics(
52
52
  - message: str - optional error message if failed
53
53
  """
54
54
  from claude_mpm.core.logging_utils import get_logger
55
+
55
56
  logger = get_logger(__name__)
56
57
 
57
58
  # Create diagnostic runner
@@ -32,11 +32,11 @@ import yaml
32
32
 
33
33
  from claude_mpm.core.base_service import BaseService
34
34
  from claude_mpm.core.config import Config
35
+ from claude_mpm.core.logging_utils import get_logger
35
36
  from claude_mpm.core.unified_paths import get_path_manager
36
37
  from claude_mpm.services.agents.registry import AgentRegistry
37
38
  from claude_mpm.services.memory.cache.shared_prompt_cache import SharedPromptCache
38
39
 
39
- from claude_mpm.core.logging_utils import get_logger
40
40
  logger = get_logger(__name__)
41
41
 
42
42
  # ============================================================================
@@ -14,10 +14,10 @@ from pathlib import Path
14
14
  from typing import Any, Dict, List, Optional
15
15
 
16
16
  from claude_mpm.agents.base_agent_loader import clear_base_agent_cache
17
+ from claude_mpm.core.logging_utils import get_logger
17
18
  from claude_mpm.services.memory.cache.shared_prompt_cache import SharedPromptCache
18
19
  from claude_mpm.services.shared import ConfigServiceBase
19
20
 
20
- from claude_mpm.core.logging_utils import get_logger
21
21
  logger = get_logger(__name__)
22
22
 
23
23
 
@@ -19,9 +19,9 @@ from claude_mpm.agents.agent_loader import (
19
19
  AgentTier,
20
20
  list_agents_by_tier,
21
21
  )
22
+ from claude_mpm.core.logging_utils import get_logger
22
23
  from claude_mpm.core.unified_paths import get_path_manager
23
24
 
24
- from claude_mpm.core.logging_utils import get_logger
25
25
  logger = get_logger(__name__)
26
26
 
27
27
 
@@ -9,6 +9,7 @@ from typing import Any, Dict, List
9
9
  from jinja2 import Template
10
10
 
11
11
  from claude_mpm.core.logging_utils import get_logger
12
+
12
13
  logger = get_logger(__name__)
13
14
 
14
15
 
@@ -19,6 +19,7 @@ import frontmatter
19
19
  import mistune
20
20
  import yaml
21
21
 
22
+ from claude_mpm.core.logging_utils import get_logger
22
23
  from claude_mpm.core.unified_paths import get_path_manager
23
24
  from claude_mpm.models.agent_definition import (
24
25
  AgentDefinition,
@@ -32,7 +33,6 @@ from claude_mpm.services.memory.cache.shared_prompt_cache import SharedPromptCac
32
33
 
33
34
  from ..deployment.agent_versioning import AgentVersionManager
34
35
 
35
- from claude_mpm.core.logging_utils import get_logger
36
36
  logger = get_logger(__name__)
37
37
 
38
38
 
@@ -85,7 +85,6 @@ class MemoryCategorizationService:
85
85
 
86
86
  def __init__(self):
87
87
  """Initialize the categorization service."""
88
- pass
89
88
 
90
89
  def categorize_learning(self, learning: str) -> str:
91
90
  """Categorize a learning item based on its content.
@@ -41,14 +41,18 @@ class MemoryFileService:
41
41
  old_file = directory / f"{normalized_id}_memory.md"
42
42
 
43
43
  # Also check for legacy hyphenated versions
44
- hyphenated_file = directory / f"{agent_id}_memories.md" if "-" in agent_id else None
44
+ hyphenated_file = (
45
+ directory / f"{agent_id}_memories.md" if "-" in agent_id else None
46
+ )
45
47
 
46
48
  # Migration priority:
47
49
  # 1. If hyphenated version exists and normalized doesn't, migrate it
48
50
  if hyphenated_file and hyphenated_file.exists() and not new_file.exists():
49
51
  try:
50
52
  hyphenated_file.rename(new_file)
51
- self.logger.info(f"Migrated hyphenated memory file: {hyphenated_file} -> {new_file}")
53
+ self.logger.info(
54
+ f"Migrated hyphenated memory file: {hyphenated_file} -> {new_file}"
55
+ )
52
56
  except Exception as e:
53
57
  self.logger.warning(f"Could not migrate hyphenated memory file: {e}")
54
58
  # Fall back to using the hyphenated version
@@ -15,7 +15,6 @@ class MemoryFormatService:
15
15
 
16
16
  def __init__(self):
17
17
  """Initialize the memory format service."""
18
- pass
19
18
 
20
19
  def build_simple_memory_content(self, agent_id: str, items: List[str]) -> str:
21
20
  """Build memory content as a simple list with header and timestamp.
@@ -9,10 +9,10 @@ from pathlib import Path
9
9
  from typing import Any, Dict, List, Optional
10
10
 
11
11
  from claude_mpm.core.agent_registry import AgentRegistryAdapter
12
+ from claude_mpm.core.logging_utils import get_logger
12
13
  from claude_mpm.core.unified_paths import get_path_manager
13
14
  from claude_mpm.services.shared import ConfigServiceBase
14
15
 
15
- from claude_mpm.core.logging_utils import get_logger
16
16
  logger = get_logger(__name__)
17
17
 
18
18
 
@@ -29,11 +29,11 @@ from threading import Lock, Thread
29
29
  from typing import Any, Dict, Optional
30
30
 
31
31
  from claude_mpm.core.constants import PerformanceConfig, SystemLimits, TimeoutConfig
32
+ from claude_mpm.core.logging_utils import get_logger
32
33
 
33
34
  # Import configuration manager
34
35
  from ..core.config import Config
35
36
 
36
- from claude_mpm.core.logging_utils import get_logger
37
37
  logger = get_logger(__name__)
38
38
 
39
39
 
@@ -31,6 +31,7 @@ except ImportError:
31
31
  ASYNC_AVAILABLE = False
32
32
 
33
33
  from claude_mpm.core.logging_utils import get_logger
34
+
34
35
  logger = get_logger(__name__)
35
36
 
36
37
 
@@ -19,6 +19,7 @@ from pathlib import Path
19
19
  from typing import Dict, Optional, Tuple
20
20
 
21
21
  from claude_mpm.core.logging_utils import get_logger
22
+
22
23
  from .service_interfaces import ICacheManager, IPathResolver
23
24
 
24
25
  logger = get_logger(__name__)
@@ -14,6 +14,7 @@ from .filesystem_check import FilesystemCheck
14
14
  from .installation_check import InstallationCheck
15
15
  from .instructions_check import InstructionsCheck
16
16
  from .mcp_check import MCPCheck
17
+ from .mcp_services_check import MCPServicesCheck
17
18
  from .monitor_check import MonitorCheck
18
19
  from .startup_log_check import StartupLogCheck
19
20
 
@@ -27,6 +28,7 @@ __all__ = [
27
28
  "InstallationCheck",
28
29
  "InstructionsCheck",
29
30
  "MCPCheck",
31
+ "MCPServicesCheck",
30
32
  "MonitorCheck",
31
33
  "StartupLogCheck",
32
34
  ]