claude-mpm 4.3.11__py3-none-any.whl → 4.3.13__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 (207) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/PM_INSTRUCTIONS.md +390 -28
  3. claude_mpm/agents/templates/data_engineer.json +39 -14
  4. claude_mpm/agents/templates/research.json +20 -8
  5. claude_mpm/agents/templates/web_qa.json +25 -10
  6. claude_mpm/cli/__init__.py +1 -0
  7. claude_mpm/cli/commands/agent_manager.py +3 -3
  8. claude_mpm/cli/commands/agents.py +2 -2
  9. claude_mpm/cli/commands/aggregate.py +1 -1
  10. claude_mpm/cli/commands/config.py +2 -2
  11. claude_mpm/cli/commands/configure.py +5 -5
  12. claude_mpm/cli/commands/configure_tui.py +7 -7
  13. claude_mpm/cli/commands/dashboard.py +1 -1
  14. claude_mpm/cli/commands/debug.py +5 -5
  15. claude_mpm/cli/commands/mcp.py +1 -1
  16. claude_mpm/cli/commands/mcp_command_router.py +12 -1
  17. claude_mpm/cli/commands/mcp_config.py +154 -0
  18. claude_mpm/cli/commands/mcp_external_commands.py +249 -0
  19. claude_mpm/cli/commands/mcp_install_commands.py +93 -24
  20. claude_mpm/cli/commands/mcp_setup_external.py +870 -0
  21. claude_mpm/cli/commands/monitor.py +2 -2
  22. claude_mpm/cli/commands/mpm_init_handler.py +1 -1
  23. claude_mpm/cli/commands/run.py +114 -0
  24. claude_mpm/cli/commands/search.py +292 -0
  25. claude_mpm/cli/interactive/agent_wizard.py +2 -2
  26. claude_mpm/cli/parsers/base_parser.py +13 -0
  27. claude_mpm/cli/parsers/mcp_parser.py +15 -0
  28. claude_mpm/cli/parsers/run_parser.py +5 -0
  29. claude_mpm/cli/parsers/search_parser.py +245 -0
  30. claude_mpm/cli/startup_logging.py +3 -5
  31. claude_mpm/cli/utils.py +1 -1
  32. claude_mpm/constants.py +1 -0
  33. claude_mpm/core/agent_registry.py +12 -8
  34. claude_mpm/core/agent_session_manager.py +8 -8
  35. claude_mpm/core/api_validator.py +4 -4
  36. claude_mpm/core/base_service.py +10 -10
  37. claude_mpm/core/cache.py +5 -5
  38. claude_mpm/core/config_constants.py +1 -1
  39. claude_mpm/core/container.py +1 -1
  40. claude_mpm/core/error_handler.py +2 -2
  41. claude_mpm/core/file_utils.py +1 -1
  42. claude_mpm/core/framework_loader.py +3 -3
  43. claude_mpm/core/hook_manager.py +8 -6
  44. claude_mpm/core/instruction_reinforcement_hook.py +2 -2
  45. claude_mpm/core/interactive_session.py +1 -1
  46. claude_mpm/core/lazy.py +3 -3
  47. claude_mpm/core/log_manager.py +16 -12
  48. claude_mpm/core/logger.py +16 -11
  49. claude_mpm/core/logging_config.py +4 -2
  50. claude_mpm/core/oneshot_session.py +1 -1
  51. claude_mpm/core/optimized_agent_loader.py +6 -6
  52. claude_mpm/core/output_style_manager.py +1 -1
  53. claude_mpm/core/pm_hook_interceptor.py +3 -3
  54. claude_mpm/core/service_registry.py +1 -1
  55. claude_mpm/core/session_manager.py +11 -9
  56. claude_mpm/core/socketio_pool.py +13 -13
  57. claude_mpm/core/types.py +2 -2
  58. claude_mpm/core/unified_agent_registry.py +9 -2
  59. claude_mpm/core/unified_paths.py +1 -1
  60. claude_mpm/dashboard/analysis_runner.py +4 -4
  61. claude_mpm/dashboard/api/simple_directory.py +1 -1
  62. claude_mpm/generators/agent_profile_generator.py +4 -2
  63. claude_mpm/hooks/base_hook.py +2 -2
  64. claude_mpm/hooks/claude_hooks/connection_pool.py +4 -4
  65. claude_mpm/hooks/claude_hooks/event_handlers.py +12 -12
  66. claude_mpm/hooks/claude_hooks/hook_handler.py +4 -4
  67. claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +3 -3
  68. claude_mpm/hooks/claude_hooks/hook_handler_original.py +15 -14
  69. claude_mpm/hooks/claude_hooks/hook_handler_refactored.py +4 -4
  70. claude_mpm/hooks/claude_hooks/installer.py +3 -3
  71. claude_mpm/hooks/claude_hooks/memory_integration.py +3 -3
  72. claude_mpm/hooks/claude_hooks/response_tracking.py +3 -3
  73. claude_mpm/hooks/claude_hooks/services/connection_manager.py +5 -5
  74. claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +3 -3
  75. claude_mpm/hooks/claude_hooks/services/state_manager.py +8 -7
  76. claude_mpm/hooks/claude_hooks/services/subagent_processor.py +3 -3
  77. claude_mpm/hooks/claude_hooks/tool_analysis.py +2 -2
  78. claude_mpm/hooks/memory_integration_hook.py +1 -1
  79. claude_mpm/hooks/tool_call_interceptor.py +2 -2
  80. claude_mpm/models/agent_session.py +5 -5
  81. claude_mpm/services/__init__.py +1 -1
  82. claude_mpm/services/agent_capabilities_service.py +1 -1
  83. claude_mpm/services/agents/agent_builder.py +3 -3
  84. claude_mpm/services/agents/deployment/agent_deployment.py +29 -13
  85. claude_mpm/services/agents/deployment/agent_discovery_service.py +22 -6
  86. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +7 -5
  87. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +3 -1
  88. claude_mpm/services/agents/deployment/agent_metrics_collector.py +1 -1
  89. claude_mpm/services/agents/deployment/agent_operation_service.py +2 -2
  90. claude_mpm/services/agents/deployment/agent_state_service.py +2 -2
  91. claude_mpm/services/agents/deployment/agent_template_builder.py +1 -1
  92. claude_mpm/services/agents/deployment/agent_versioning.py +1 -1
  93. claude_mpm/services/agents/deployment/deployment_wrapper.py +2 -3
  94. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +6 -4
  95. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +1 -1
  96. claude_mpm/services/agents/loading/agent_profile_loader.py +5 -3
  97. claude_mpm/services/agents/loading/base_agent_manager.py +2 -2
  98. claude_mpm/services/agents/local_template_manager.py +6 -6
  99. claude_mpm/services/agents/management/agent_management_service.py +3 -3
  100. claude_mpm/services/agents/memory/content_manager.py +3 -3
  101. claude_mpm/services/agents/memory/memory_format_service.py +2 -2
  102. claude_mpm/services/agents/memory/template_generator.py +3 -3
  103. claude_mpm/services/agents/registry/__init__.py +1 -1
  104. claude_mpm/services/agents/registry/modification_tracker.py +2 -2
  105. claude_mpm/services/async_session_logger.py +3 -3
  106. claude_mpm/services/claude_session_logger.py +4 -4
  107. claude_mpm/services/cli/agent_cleanup_service.py +5 -0
  108. claude_mpm/services/cli/agent_listing_service.py +1 -1
  109. claude_mpm/services/cli/agent_validation_service.py +1 -0
  110. claude_mpm/services/cli/memory_crud_service.py +11 -6
  111. claude_mpm/services/cli/memory_output_formatter.py +1 -1
  112. claude_mpm/services/cli/session_manager.py +15 -11
  113. claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
  114. claude_mpm/services/core/memory_manager.py +81 -23
  115. claude_mpm/services/core/path_resolver.py +2 -2
  116. claude_mpm/services/diagnostics/checks/installation_check.py +1 -1
  117. claude_mpm/services/event_aggregator.py +4 -2
  118. claude_mpm/services/event_bus/direct_relay.py +5 -3
  119. claude_mpm/services/event_bus/event_bus.py +3 -3
  120. claude_mpm/services/event_bus/relay.py +6 -4
  121. claude_mpm/services/events/consumers/dead_letter.py +5 -3
  122. claude_mpm/services/events/core.py +3 -3
  123. claude_mpm/services/events/producers/hook.py +6 -6
  124. claude_mpm/services/events/producers/system.py +8 -8
  125. claude_mpm/services/exceptions.py +5 -5
  126. claude_mpm/services/framework_claude_md_generator/content_assembler.py +3 -3
  127. claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +2 -2
  128. claude_mpm/services/hook_installer_service.py +1 -1
  129. claude_mpm/services/infrastructure/context_preservation.py +6 -4
  130. claude_mpm/services/infrastructure/daemon_manager.py +2 -2
  131. claude_mpm/services/infrastructure/logging.py +2 -2
  132. claude_mpm/services/mcp_config_manager.py +439 -0
  133. claude_mpm/services/mcp_gateway/__init__.py +1 -1
  134. claude_mpm/services/mcp_gateway/auto_configure.py +3 -3
  135. claude_mpm/services/mcp_gateway/config/config_loader.py +1 -1
  136. claude_mpm/services/mcp_gateway/config/configuration.py +18 -1
  137. claude_mpm/services/mcp_gateway/core/base.py +2 -2
  138. claude_mpm/services/mcp_gateway/main.py +52 -0
  139. claude_mpm/services/mcp_gateway/registry/tool_registry.py +10 -8
  140. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +4 -4
  141. claude_mpm/services/mcp_gateway/server/stdio_handler.py +1 -1
  142. claude_mpm/services/mcp_gateway/server/stdio_server.py +4 -3
  143. claude_mpm/services/mcp_gateway/tools/base_adapter.py +15 -15
  144. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +7 -5
  145. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +443 -0
  146. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +5 -5
  147. claude_mpm/services/mcp_gateway/tools/hello_world.py +9 -9
  148. claude_mpm/services/mcp_gateway/tools/ticket_tools.py +16 -16
  149. claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +17 -17
  150. claude_mpm/services/memory/builder.py +7 -5
  151. claude_mpm/services/memory/indexed_memory.py +4 -4
  152. claude_mpm/services/memory/optimizer.py +6 -6
  153. claude_mpm/services/memory/router.py +3 -3
  154. claude_mpm/services/monitor/daemon.py +1 -1
  155. claude_mpm/services/monitor/daemon_manager.py +6 -6
  156. claude_mpm/services/monitor/event_emitter.py +2 -2
  157. claude_mpm/services/monitor/handlers/file.py +1 -1
  158. claude_mpm/services/monitor/management/lifecycle.py +1 -1
  159. claude_mpm/services/monitor/server.py +4 -4
  160. claude_mpm/services/monitor_build_service.py +2 -2
  161. claude_mpm/services/port_manager.py +2 -2
  162. claude_mpm/services/response_tracker.py +2 -2
  163. claude_mpm/services/session_management_service.py +3 -2
  164. claude_mpm/services/socketio/client_proxy.py +2 -2
  165. claude_mpm/services/socketio/dashboard_server.py +4 -3
  166. claude_mpm/services/socketio/event_normalizer.py +12 -8
  167. claude_mpm/services/socketio/handlers/base.py +2 -2
  168. claude_mpm/services/socketio/handlers/connection.py +10 -10
  169. claude_mpm/services/socketio/handlers/connection_handler.py +13 -10
  170. claude_mpm/services/socketio/handlers/file.py +1 -1
  171. claude_mpm/services/socketio/handlers/git.py +1 -1
  172. claude_mpm/services/socketio/handlers/hook.py +16 -15
  173. claude_mpm/services/socketio/migration_utils.py +1 -1
  174. claude_mpm/services/socketio/monitor_client.py +5 -5
  175. claude_mpm/services/socketio/server/broadcaster.py +9 -7
  176. claude_mpm/services/socketio/server/connection_manager.py +2 -2
  177. claude_mpm/services/socketio/server/core.py +7 -5
  178. claude_mpm/services/socketio/server/eventbus_integration.py +18 -11
  179. claude_mpm/services/socketio/server/main.py +13 -13
  180. claude_mpm/services/socketio_client_manager.py +4 -4
  181. claude_mpm/services/system_instructions_service.py +2 -2
  182. claude_mpm/services/ticket_services/validation_service.py +1 -1
  183. claude_mpm/services/utility_service.py +5 -2
  184. claude_mpm/services/version_control/branch_strategy.py +2 -2
  185. claude_mpm/services/version_control/git_operations.py +22 -20
  186. claude_mpm/services/version_control/semantic_versioning.py +3 -3
  187. claude_mpm/services/version_control/version_parser.py +7 -5
  188. claude_mpm/services/visualization/mermaid_generator.py +1 -1
  189. claude_mpm/storage/state_storage.py +1 -1
  190. claude_mpm/tools/code_tree_analyzer.py +19 -18
  191. claude_mpm/tools/code_tree_builder.py +2 -2
  192. claude_mpm/tools/code_tree_events.py +10 -8
  193. claude_mpm/tools/socketio_debug.py +3 -3
  194. claude_mpm/utils/agent_dependency_loader.py +2 -2
  195. claude_mpm/utils/dependency_strategies.py +8 -3
  196. claude_mpm/utils/environment_context.py +2 -2
  197. claude_mpm/utils/error_handler.py +2 -2
  198. claude_mpm/utils/file_utils.py +1 -1
  199. claude_mpm/utils/imports.py +1 -1
  200. claude_mpm/utils/log_cleanup.py +21 -7
  201. claude_mpm/validation/agent_validator.py +2 -2
  202. {claude_mpm-4.3.11.dist-info → claude_mpm-4.3.13.dist-info}/METADATA +4 -1
  203. {claude_mpm-4.3.11.dist-info → claude_mpm-4.3.13.dist-info}/RECORD +207 -200
  204. {claude_mpm-4.3.11.dist-info → claude_mpm-4.3.13.dist-info}/WHEEL +0 -0
  205. {claude_mpm-4.3.11.dist-info → claude_mpm-4.3.13.dist-info}/entry_points.txt +0 -0
  206. {claude_mpm-4.3.11.dist-info → claude_mpm-4.3.13.dist-info}/licenses/LICENSE +0 -0
  207. {claude_mpm-4.3.11.dist-info → claude_mpm-4.3.13.dist-info}/top_level.txt +0 -0
@@ -7,7 +7,7 @@ This replaces direct Socket.IO emission in the hook handler.
7
7
  """
8
8
 
9
9
  import uuid
10
- from datetime import datetime
10
+ from datetime import datetime, timezone
11
11
  from typing import Any, Dict, List, Optional
12
12
 
13
13
  from claude_mpm.core.logging_config import get_logger
@@ -96,7 +96,7 @@ class HookEventProducer(IEventProducer):
96
96
  id=str(uuid.uuid4()),
97
97
  topic="hook.response",
98
98
  type="AssistantResponse",
99
- timestamp=datetime.now(),
99
+ timestamp=datetime.now(timezone.utc),
100
100
  source=self.source_name,
101
101
  data=response_data,
102
102
  correlation_id=correlation_id,
@@ -128,7 +128,7 @@ class HookEventProducer(IEventProducer):
128
128
  id=str(uuid.uuid4()),
129
129
  topic="hook.tool",
130
130
  type="ToolUse",
131
- timestamp=datetime.now(),
131
+ timestamp=datetime.now(timezone.utc),
132
132
  source=self.source_name,
133
133
  data={
134
134
  "tool": tool_name,
@@ -164,7 +164,7 @@ class HookEventProducer(IEventProducer):
164
164
  id=str(uuid.uuid4()),
165
165
  topic="hook.error",
166
166
  type="Error",
167
- timestamp=datetime.now(),
167
+ timestamp=datetime.now(timezone.utc),
168
168
  source=self.source_name,
169
169
  data={
170
170
  "error_type": error_type,
@@ -200,7 +200,7 @@ class HookEventProducer(IEventProducer):
200
200
  id=str(uuid.uuid4()),
201
201
  topic=f"hook.subagent.{event_type.lower()}",
202
202
  type=f"Subagent{event_type}",
203
- timestamp=datetime.now(),
203
+ timestamp=datetime.now(timezone.utc),
204
204
  source=self.source_name,
205
205
  data={
206
206
  "subagent": subagent_name,
@@ -255,7 +255,7 @@ class HookEventProducer(IEventProducer):
255
255
  id=str(uuid.uuid4()),
256
256
  topic=topic,
257
257
  type=hook_type,
258
- timestamp=datetime.now(),
258
+ timestamp=datetime.now(timezone.utc),
259
259
  source=self.source_name,
260
260
  data=hook_data,
261
261
  correlation_id=correlation_id,
@@ -6,7 +6,7 @@ Publishes system-level events to the event bus.
6
6
  """
7
7
 
8
8
  import uuid
9
- from datetime import datetime
9
+ from datetime import datetime, timezone
10
10
  from typing import Any, Dict, List, Optional
11
11
 
12
12
  from claude_mpm.core.logging_config import get_logger
@@ -100,7 +100,7 @@ class SystemEventProducer(IEventProducer):
100
100
  id=str(uuid.uuid4()),
101
101
  topic="system.lifecycle.startup",
102
102
  type="ServiceStartup",
103
- timestamp=datetime.now(),
103
+ timestamp=datetime.now(timezone.utc),
104
104
  source=self.source_name,
105
105
  data={
106
106
  "service": service_name,
@@ -133,7 +133,7 @@ class SystemEventProducer(IEventProducer):
133
133
  id=str(uuid.uuid4()),
134
134
  topic="system.lifecycle.shutdown",
135
135
  type="ServiceShutdown",
136
- timestamp=datetime.now(),
136
+ timestamp=datetime.now(timezone.utc),
137
137
  source=self.source_name,
138
138
  data={
139
139
  "service": service_name,
@@ -168,7 +168,7 @@ class SystemEventProducer(IEventProducer):
168
168
  id=str(uuid.uuid4()),
169
169
  topic="system.health",
170
170
  type="HealthStatus",
171
- timestamp=datetime.now(),
171
+ timestamp=datetime.now(timezone.utc),
172
172
  source=self.source_name,
173
173
  data={
174
174
  "service": service_name,
@@ -206,7 +206,7 @@ class SystemEventProducer(IEventProducer):
206
206
  id=str(uuid.uuid4()),
207
207
  topic="system.config",
208
208
  type="ConfigChange",
209
- timestamp=datetime.now(),
209
+ timestamp=datetime.now(timezone.utc),
210
210
  source=self.source_name,
211
211
  data={
212
212
  "service": service_name,
@@ -238,7 +238,7 @@ class SystemEventProducer(IEventProducer):
238
238
  id=str(uuid.uuid4()),
239
239
  topic="system.performance",
240
240
  type="PerformanceMetrics",
241
- timestamp=datetime.now(),
241
+ timestamp=datetime.now(timezone.utc),
242
242
  source=self.source_name,
243
243
  data={
244
244
  "service": service_name,
@@ -274,7 +274,7 @@ class SystemEventProducer(IEventProducer):
274
274
  id=str(uuid.uuid4()),
275
275
  topic="system.error",
276
276
  type="SystemError",
277
- timestamp=datetime.now(),
277
+ timestamp=datetime.now(timezone.utc),
278
278
  source=self.source_name,
279
279
  data={
280
280
  "service": service_name,
@@ -311,7 +311,7 @@ class SystemEventProducer(IEventProducer):
311
311
  id=str(uuid.uuid4()),
312
312
  topic="system.warning",
313
313
  type="SystemWarning",
314
- timestamp=datetime.now(),
314
+ timestamp=datetime.now(timezone.utc),
315
315
  source=self.source_name,
316
316
  data={
317
317
  "service": service_name,
@@ -15,7 +15,7 @@ Design Principles:
15
15
 
16
16
  import platform
17
17
  import time
18
- from datetime import datetime
18
+ from datetime import datetime, timezone
19
19
  from typing import Any, Dict, List, Optional
20
20
 
21
21
 
@@ -43,7 +43,7 @@ class SocketIOServerError(Exception):
43
43
  self.message = message
44
44
  self.error_code = error_code or self.__class__.__name__.lower()
45
45
  self.context = context or {}
46
- self.timestamp = datetime.utcnow().isoformat() + "Z"
46
+ self.timestamp = datetime.now(timezone.utc).isoformat() + "Z"
47
47
 
48
48
  def to_dict(self) -> Dict[str, Any]:
49
49
  """Convert error to dictionary format for structured logging/handling."""
@@ -125,9 +125,9 @@ class DaemonConflictError(SocketIOServerError):
125
125
  )
126
126
 
127
127
  if create_time:
128
- start_time = datetime.fromtimestamp(create_time).strftime(
129
- "%Y-%m-%d %H:%M:%S"
130
- )
128
+ start_time = datetime.fromtimestamp(
129
+ create_time, tz=timezone.utc
130
+ ).strftime("%Y-%m-%d %H:%M:%S")
131
131
  uptime = time.time() - create_time
132
132
  lines.append(f" • Started: {start_time} (uptime: {uptime:.0f}s)")
133
133
 
@@ -7,7 +7,7 @@ Assembles sections and applies template variable substitution.
7
7
  import hashlib
8
8
  import logging
9
9
  from collections import OrderedDict
10
- from datetime import datetime
10
+ from datetime import datetime, timezone
11
11
  from typing import Any, Dict, Optional
12
12
 
13
13
  from claude_mpm.services.agents.management import AgentCapabilitiesGenerator
@@ -35,7 +35,7 @@ class ContentAssembler:
35
35
  Returns:
36
36
  str: 16-character hash of content
37
37
  """
38
- timestamp = datetime.utcnow().isoformat()
38
+ timestamp = datetime.now(timezone.utc).isoformat()
39
39
  hash_obj = hashlib.sha256(timestamp.encode())
40
40
  return hash_obj.hexdigest()[:16]
41
41
 
@@ -176,7 +176,7 @@ class ContentAssembler:
176
176
  Returns:
177
177
  Dict: Metadata for header
178
178
  """
179
- timestamp = datetime.utcnow().isoformat()
179
+ timestamp = datetime.now(timezone.utc).isoformat()
180
180
 
181
181
  return {
182
182
  "version": version,
@@ -5,7 +5,7 @@ This module provides base classes and registry for section generators.
5
5
  """
6
6
 
7
7
  from abc import ABC, abstractmethod
8
- from datetime import datetime
8
+ from datetime import datetime, timezone
9
9
  from typing import Any, Dict, Optional
10
10
 
11
11
 
@@ -35,7 +35,7 @@ class BaseSectionGenerator(ABC):
35
35
 
36
36
  def get_timestamp(self) -> str:
37
37
  """Get current UTC timestamp."""
38
- return datetime.utcnow().isoformat()
38
+ return datetime.now(timezone.utc).isoformat()
39
39
 
40
40
 
41
41
  class SectionGeneratorRegistry:
@@ -24,7 +24,7 @@ class HookInstallerService:
24
24
  self.claude_dir = Path.home() / ".claude"
25
25
  self.settings_file = self.claude_dir / "settings.json"
26
26
 
27
- def is_hooks_configured(self) -> bool:
27
+ def is_hooks_configured(self) -> bool: # noqa: PLR0911
28
28
  """Check if hooks are configured in Claude settings.
29
29
 
30
30
  Returns:
@@ -16,7 +16,7 @@ import gzip
16
16
  import json
17
17
  import shutil
18
18
  from dataclasses import dataclass, field
19
- from datetime import datetime
19
+ from datetime import datetime, timezone
20
20
  from typing import Any, Dict, List, Optional
21
21
 
22
22
  import ijson # For streaming JSON parsing
@@ -203,7 +203,9 @@ class ContextPreservationService(BaseService):
203
203
  await self._create_backup()
204
204
 
205
205
  # Load and filter conversations
206
- cutoff_time = datetime.now().timestamp() - (keep_recent_days * 86400)
206
+ cutoff_time = datetime.now(timezone.utc).timestamp() - (
207
+ keep_recent_days * 86400
208
+ )
207
209
 
208
210
  with open(self.claude_json_path) as f:
209
211
  data = json.load(f)
@@ -292,7 +294,7 @@ class ContextPreservationService(BaseService):
292
294
  try:
293
295
  if Path(file_path).exists():
294
296
  valid_files.append(file_path)
295
- except:
297
+ except Exception:
296
298
  pass # Invalid path
297
299
 
298
300
  return valid_files
@@ -516,7 +518,7 @@ class ContextPreservationService(BaseService):
516
518
  async def _create_backup(self) -> Path:
517
519
  """Create backup of Claude configuration."""
518
520
  try:
519
- timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
521
+ timestamp = datetime.now(timezone.utc).strftime("%Y%m%d_%H%M%S")
520
522
  backup_name = f"claude_backup_{timestamp}.json"
521
523
 
522
524
  # Compress if large
@@ -107,7 +107,7 @@ class SocketIODaemonManager:
107
107
  )
108
108
  if response.status_code == 200:
109
109
  return response.json()
110
- except:
110
+ except Exception:
111
111
  pass
112
112
  return None
113
113
 
@@ -265,7 +265,7 @@ class SocketIODaemonManager:
265
265
  result = sock.connect_ex((self.host, self.port))
266
266
  sock.close()
267
267
  status_info["port_accessible"] = result == 0
268
- except:
268
+ except Exception:
269
269
  status_info["port_accessible"] = False
270
270
 
271
271
  # Check for conflicts
@@ -11,7 +11,7 @@ Part of TSK-0046: Service Layer Architecture Reorganization
11
11
 
12
12
  import json
13
13
  import logging
14
- from datetime import datetime
14
+ from datetime import datetime, timezone
15
15
  from typing import Any, Dict, List, Optional
16
16
 
17
17
  from claude_mpm.core.logger import get_logger
@@ -92,7 +92,7 @@ class LoggingService(SyncBaseService, IStructuredLogger):
92
92
 
93
93
  if self.structured_logging:
94
94
  log_entry = {
95
- "timestamp": datetime.utcnow().isoformat(),
95
+ "timestamp": datetime.now(timezone.utc).isoformat(),
96
96
  "level": level,
97
97
  "message": message,
98
98
  "context": context,