claude-mpm 4.4.3__py3-none-any.whl → 4.4.5__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/agent_loader.py +3 -2
- claude_mpm/agents/agent_loader_integration.py +2 -1
- claude_mpm/agents/async_agent_loader.py +2 -2
- claude_mpm/agents/base_agent_loader.py +2 -2
- claude_mpm/agents/frontmatter_validator.py +1 -0
- claude_mpm/agents/system_agent_config.py +2 -1
- claude_mpm/cli/commands/doctor.py +44 -5
- claude_mpm/cli/commands/mpm_init.py +116 -62
- claude_mpm/cli/parsers/configure_parser.py +3 -1
- claude_mpm/cli/startup_logging.py +1 -3
- claude_mpm/config/agent_config.py +1 -1
- claude_mpm/config/paths.py +2 -1
- claude_mpm/core/agent_name_normalizer.py +1 -0
- claude_mpm/core/config.py +2 -1
- claude_mpm/core/config_aliases.py +2 -1
- claude_mpm/core/file_utils.py +0 -1
- claude_mpm/core/framework/__init__.py +6 -6
- claude_mpm/core/framework/formatters/__init__.py +2 -2
- claude_mpm/core/framework/formatters/capability_generator.py +19 -8
- claude_mpm/core/framework/formatters/content_formatter.py +8 -3
- claude_mpm/core/framework/formatters/context_generator.py +7 -3
- claude_mpm/core/framework/loaders/__init__.py +3 -3
- claude_mpm/core/framework/loaders/agent_loader.py +7 -3
- claude_mpm/core/framework/loaders/file_loader.py +16 -6
- claude_mpm/core/framework/loaders/instruction_loader.py +16 -6
- claude_mpm/core/framework/loaders/packaged_loader.py +36 -12
- claude_mpm/core/framework/processors/__init__.py +2 -2
- claude_mpm/core/framework/processors/memory_processor.py +14 -6
- claude_mpm/core/framework/processors/metadata_processor.py +5 -5
- claude_mpm/core/framework/processors/template_processor.py +12 -6
- claude_mpm/core/framework_loader.py +44 -20
- claude_mpm/core/log_manager.py +2 -1
- claude_mpm/core/tool_access_control.py +1 -0
- claude_mpm/core/unified_agent_registry.py +2 -1
- claude_mpm/core/unified_paths.py +1 -0
- claude_mpm/experimental/cli_enhancements.py +1 -0
- claude_mpm/hooks/base_hook.py +1 -0
- claude_mpm/hooks/instruction_reinforcement.py +1 -0
- claude_mpm/hooks/kuzu_memory_hook.py +20 -13
- claude_mpm/hooks/validation_hooks.py +1 -1
- claude_mpm/scripts/mpm_doctor.py +1 -0
- claude_mpm/services/agents/loading/agent_profile_loader.py +1 -1
- claude_mpm/services/agents/loading/base_agent_manager.py +1 -1
- claude_mpm/services/agents/loading/framework_agent_loader.py +1 -1
- claude_mpm/services/agents/management/agent_capabilities_generator.py +1 -0
- claude_mpm/services/agents/management/agent_management_service.py +1 -1
- claude_mpm/services/agents/memory/memory_categorization_service.py +0 -1
- claude_mpm/services/agents/memory/memory_file_service.py +6 -2
- claude_mpm/services/agents/memory/memory_format_service.py +0 -1
- claude_mpm/services/agents/registry/deployed_agent_discovery.py +1 -1
- claude_mpm/services/async_session_logger.py +1 -1
- claude_mpm/services/claude_session_logger.py +1 -0
- claude_mpm/services/core/path_resolver.py +1 -0
- claude_mpm/services/diagnostics/checks/__init__.py +2 -0
- claude_mpm/services/diagnostics/checks/installation_check.py +126 -25
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +451 -0
- claude_mpm/services/diagnostics/diagnostic_runner.py +3 -0
- claude_mpm/services/diagnostics/doctor_reporter.py +259 -32
- claude_mpm/services/event_bus/direct_relay.py +2 -1
- claude_mpm/services/event_bus/event_bus.py +1 -0
- claude_mpm/services/event_bus/relay.py +3 -2
- claude_mpm/services/framework_claude_md_generator/content_assembler.py +1 -1
- claude_mpm/services/infrastructure/daemon_manager.py +1 -1
- claude_mpm/services/mcp_config_manager.py +301 -54
- claude_mpm/services/mcp_gateway/core/process_pool.py +62 -23
- claude_mpm/services/mcp_gateway/tools/__init__.py +6 -5
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +3 -1
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +16 -31
- claude_mpm/services/memory/cache/simple_cache.py +1 -1
- claude_mpm/services/project/archive_manager.py +159 -96
- claude_mpm/services/project/documentation_manager.py +64 -45
- claude_mpm/services/project/enhanced_analyzer.py +132 -89
- claude_mpm/services/project/project_organizer.py +225 -131
- claude_mpm/services/response_tracker.py +1 -1
- claude_mpm/services/socketio/server/eventbus_integration.py +1 -1
- claude_mpm/services/unified/__init__.py +1 -1
- claude_mpm/services/unified/analyzer_strategies/__init__.py +3 -3
- claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +97 -53
- claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +81 -40
- claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +277 -178
- claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +196 -112
- claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +83 -49
- claude_mpm/services/unified/config_strategies/__init__.py +111 -126
- claude_mpm/services/unified/config_strategies/config_schema.py +157 -111
- claude_mpm/services/unified/config_strategies/context_strategy.py +91 -89
- claude_mpm/services/unified/config_strategies/error_handling_strategy.py +183 -173
- claude_mpm/services/unified/config_strategies/file_loader_strategy.py +160 -152
- claude_mpm/services/unified/config_strategies/unified_config_service.py +124 -112
- claude_mpm/services/unified/config_strategies/validation_strategy.py +298 -259
- claude_mpm/services/unified/deployment_strategies/__init__.py +7 -7
- claude_mpm/services/unified/deployment_strategies/base.py +24 -28
- claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +168 -88
- claude_mpm/services/unified/deployment_strategies/local.py +49 -34
- claude_mpm/services/unified/deployment_strategies/utils.py +39 -43
- claude_mpm/services/unified/deployment_strategies/vercel.py +30 -24
- claude_mpm/services/unified/interfaces.py +0 -26
- claude_mpm/services/unified/migration.py +17 -40
- claude_mpm/services/unified/strategies.py +9 -26
- claude_mpm/services/unified/unified_analyzer.py +48 -44
- claude_mpm/services/unified/unified_config.py +21 -19
- claude_mpm/services/unified/unified_deployment.py +21 -26
- claude_mpm/storage/state_storage.py +1 -0
- claude_mpm/utils/agent_dependency_loader.py +18 -6
- claude_mpm/utils/common.py +14 -12
- claude_mpm/utils/database_connector.py +15 -12
- claude_mpm/utils/error_handler.py +1 -0
- claude_mpm/utils/log_cleanup.py +1 -0
- claude_mpm/utils/path_operations.py +1 -0
- claude_mpm/utils/session_logging.py +1 -1
- claude_mpm/utils/subprocess_utils.py +1 -0
- claude_mpm/validation/agent_validator.py +1 -1
- {claude_mpm-4.4.3.dist-info → claude_mpm-4.4.5.dist-info}/METADATA +35 -15
- {claude_mpm-4.4.3.dist-info → claude_mpm-4.4.5.dist-info}/RECORD +118 -117
- {claude_mpm-4.4.3.dist-info → claude_mpm-4.4.5.dist-info}/WHEEL +0 -0
- {claude_mpm-4.4.3.dist-info → claude_mpm-4.4.5.dist-info}/entry_points.txt +0 -0
- {claude_mpm-4.4.3.dist-info → claude_mpm-4.4.5.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-4.4.3.dist-info → claude_mpm-4.4.5.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 =
|
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": "",
|
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(
|
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(
|
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
|
-
|
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 =
|
418
|
-
|
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(
|
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(
|
454
|
+
self.logger.info(
|
455
|
+
f"📁 Output style file exists: {output_style_path}"
|
456
|
+
)
|
447
457
|
else:
|
448
|
-
self.logger.info(
|
458
|
+
self.logger.info(
|
459
|
+
f"📝 Output style will be created at: {output_style_path}"
|
460
|
+
)
|
449
461
|
else:
|
450
|
-
self.logger.info(
|
451
|
-
|
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 =
|
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(
|
507
|
+
asyncio.create_task(
|
508
|
+
log_manager.log_prompt("system_prompt", instructions, metadata)
|
509
|
+
)
|
488
510
|
else:
|
489
|
-
loop.run_until_complete(
|
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": []}
|
claude_mpm/core/log_manager.py
CHANGED
@@ -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
|
@@ -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
|
|
claude_mpm/core/unified_paths.py
CHANGED
@@ -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"
|
claude_mpm/hooks/base_hook.py
CHANGED
@@ -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
|
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,
|
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 =
|
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(
|
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
|
|
claude_mpm/scripts/mpm_doctor.py
CHANGED
@@ -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
|
|
@@ -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
|
|
@@ -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 =
|
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(
|
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
|
|
@@ -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
|
]
|