claude-mpm 4.5.5__py3-none-any.whl → 4.5.6__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 CHANGED
@@ -1 +1 @@
1
- 4.5.5
1
+ 4.5.6
@@ -175,6 +175,11 @@ class AsyncSessionLogger:
175
175
  if self.enable_async:
176
176
  self._start_worker()
177
177
 
178
+ # Log initialization status
179
+ logger.info(
180
+ f"AsyncSessionLogger initialized: session_id={self.session_id}, async={self.enable_async}, format={self.log_format.value}"
181
+ )
182
+
178
183
  def _get_claude_session_id(self) -> str:
179
184
  """Get or generate a Claude session ID."""
180
185
  # Check environment variables in order of preference
@@ -471,8 +476,19 @@ class AsyncSessionLogger:
471
476
  Args:
472
477
  timeout: Maximum time to wait for shutdown
473
478
  """
479
+ # Only log shutdown if we're actually shutting down an active logger
480
+ if self._shutdown:
481
+ logger.debug("AsyncSessionLogger already shut down")
482
+ return
483
+
474
484
  if self.enable_async:
475
- logger.info("Shutting down async logger")
485
+ # Only log at INFO level if we actually processed something
486
+ if self.stats.get("logged", 0) > 0 or self.stats.get("queued", 0) > 0:
487
+ logger.info(
488
+ f"Shutting down async logger (logged: {self.stats.get('logged', 0)}, queued: {self.stats.get('queued', 0)})"
489
+ )
490
+ else:
491
+ logger.debug("Shutting down async logger (no activity)")
476
492
 
477
493
  # Signal shutdown
478
494
  self._shutdown = True
@@ -486,10 +502,16 @@ class AsyncSessionLogger:
486
502
 
487
503
  # Log final statistics only if we actually logged something
488
504
  if self.stats.get("logged", 0) > 0:
489
- logger.info(f"Logger stats: {self.stats}")
505
+ logger.info(f"AsyncSessionLogger final stats: {self.stats}")
506
+ elif self.stats.get("queued", 0) > 0 or self.stats.get("dropped", 0) > 0:
507
+ logger.debug(
508
+ f"AsyncSessionLogger stats (incomplete session): {self.stats}"
509
+ )
490
510
  else:
491
511
  # Use debug level when nothing was logged
492
- logger.debug(f"Logger stats (no sessions logged): {self.stats}")
512
+ logger.debug(
513
+ f"AsyncSessionLogger stats (no sessions logged): {self.stats}"
514
+ )
493
515
 
494
516
  def get_stats(self) -> Dict[str, Any]:
495
517
  """Get logger statistics."""
@@ -101,8 +101,16 @@ class ClaudeSessionLogger:
101
101
 
102
102
  if self.use_async:
103
103
  try:
104
+ # Pass our session_id to async logger to avoid duplicate generation
104
105
  self._async_logger = get_async_logger(config=config)
105
- logger.info("Using async logger for improved performance")
106
+ # Synchronize session IDs - use the one we already generated
107
+ if self.session_id and hasattr(self._async_logger, "set_session_id"):
108
+ self._async_logger.set_session_id(self.session_id)
109
+ logger.info(
110
+ f"Using async logger with session ID: {self.session_id}"
111
+ )
112
+ else:
113
+ logger.info("Using async logger for improved performance")
106
114
  except Exception as e:
107
115
  logger.warning(
108
116
  f"Failed to initialize async logger, falling back to sync: {e}"
@@ -961,7 +961,6 @@ Generated by Claude MPM Archive Manager
961
961
  content,
962
962
  )
963
963
 
964
-
965
964
  def display_review_summary(self, review: Dict) -> None:
966
965
  """Display a formatted summary of the documentation review."""
967
966
  console.print("\n[bold cyan]📚 Documentation Review Summary[/bold cyan]\n")
@@ -233,7 +233,6 @@ class DocumentationManager:
233
233
  # Add metadata
234
234
  return self._add_metadata(merged)
235
235
 
236
-
237
236
  def _parse_into_sections(self, content: str) -> Dict[str, str]:
238
237
  """Parse markdown content into a dictionary of sections."""
239
238
  sections = {}
@@ -979,10 +979,7 @@ This directory is used for {description.lower()}.
979
979
  for file in root_files:
980
980
  if file.is_file() and (
981
981
  ("test" in file.name.lower() and file.suffix == ".py")
982
- or (
983
- file.suffix in [".sh", ".bash"]
984
- and file.name not in ["Makefile"]
985
- )
982
+ or (file.suffix in [".sh", ".bash"] and file.name not in ["Makefile"])
986
983
  or file.suffix in [".log", ".tmp", ".cache"]
987
984
  ):
988
985
  misplaced_count += 1
@@ -580,7 +580,6 @@ class DependencyAnalyzerStrategy(AnalyzerStrategy):
580
580
  # In production, you would integrate with vulnerability databases
581
581
  # like npm audit, pip-audit, or safety
582
582
 
583
-
584
583
  def _calculate_statistics(self, results: Dict[str, Any]) -> Dict[str, Any]:
585
584
  """Calculate dependency statistics."""
586
585
  all_deps = self._flatten_dependencies(results.get("dependencies", {}))
@@ -716,9 +716,13 @@ class StructureAnalyzerStrategy(AnalyzerStrategy):
716
716
  }
717
717
 
718
718
  # Compare architecture
719
- if "architecture" in baseline and "architecture" in current and (
720
- baseline["architecture"]["pattern"]
721
- != current["architecture"]["pattern"]
719
+ if (
720
+ "architecture" in baseline
721
+ and "architecture" in current
722
+ and (
723
+ baseline["architecture"]["pattern"]
724
+ != current["architecture"]["pattern"]
725
+ )
722
726
  ):
723
727
  comparison["architecture_change"] = {
724
728
  "baseline": baseline["architecture"]["pattern"],
@@ -509,9 +509,7 @@ class CachingContextManager:
509
509
  def invalidate_context(self, context_id: str):
510
510
  """Invalidate all cached values for context"""
511
511
  with self._lock:
512
- keys_to_remove = [
513
- k for k in self.cache if k.startswith(f"{context_id}:")
514
- ]
512
+ keys_to_remove = [k for k in self.cache if k.startswith(f"{context_id}:")]
515
513
 
516
514
  for key in keys_to_remove:
517
515
  del self.cache[key]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-mpm
3
- Version: 4.5.5
3
+ Version: 4.5.6
4
4
  Summary: Claude Multi-Agent Project Manager - Orchestrate Claude with agent delegation and ticket tracking
5
5
  Author-email: Bob Matsuoka <bob@matsuoka.com>
6
6
  Maintainer: Claude MPM Team
@@ -1,5 +1,5 @@
1
1
  claude_mpm/BUILD_NUMBER,sha256=toytnNjkIKPgQaGwDqQdC1rpNTAdSEc6Vja50d7Ovug,4
2
- claude_mpm/VERSION,sha256=3DKbayKK1PTMkx7SnIavYq8zMinVDDcxkmD9MTyOC7k,6
2
+ claude_mpm/VERSION,sha256=TZz-l5RDMFBnEZirovU2IQUX14xx_gKKqZQH96mBUT0,6
3
3
  claude_mpm/__init__.py,sha256=lyTZAYGH4DTaFGLRNWJKk5Q5oTjzN5I6AXmfVX-Jff0,1512
4
4
  claude_mpm/__main__.py,sha256=Ro5UBWBoQaSAIoSqWAr7zkbLyvi4sSy28WShqAhKJG0,723
5
5
  claude_mpm/constants.py,sha256=cChN3myrAcF3jC-6DvHnBFTEnwlDk-TAsIXPvUZr_yw,5953
@@ -403,8 +403,8 @@ claude_mpm/scripts/socketio_daemon.py,sha256=I1n0ny6UZTQWKN-_ZiNKK37jJTRgRESyHDA
403
403
  claude_mpm/scripts/start_activity_logging.py,sha256=1G9bFYiBSkpxSRXyKht73nL5gH-4zwukLutWWKAipGg,2869
404
404
  claude_mpm/services/__init__.py,sha256=X10comSYoSvoi4jaz9a7ztqcYhCZMX7QmX7nwHGJjCM,7495
405
405
  claude_mpm/services/agent_capabilities_service.py,sha256=8-LA1JuTF9IZRBT0AvU4HF9OBMCyySTOZGNuX17T6JM,10776
406
- claude_mpm/services/async_session_logger.py,sha256=PSOkm0QNuffJfCiEeEMFjVe04X5RgbKZb0meX-9m8bc,21968
407
- claude_mpm/services/claude_session_logger.py,sha256=GKAwQkfUQswTJMl9frllqgGp7NhpGHv7wR9EpO1PJ0c,10402
406
+ claude_mpm/services/async_session_logger.py,sha256=X_BTBRXwLThgFb8Vtkg0PsA2HN2-1RH6wqdBGxfQSgM,23013
407
+ claude_mpm/services/claude_session_logger.py,sha256=QLPz46shI6m0gmfxr7vn_mMXNjhYMYd3PDfhpIOQjWo,10882
408
408
  claude_mpm/services/command_deployment_service.py,sha256=FxrHWuhvEaYL6PmjCN7Y0TlGWWIDHkzm_0UwvqI2C3A,6132
409
409
  claude_mpm/services/command_handler_service.py,sha256=LdKnujKUgrCYrvKvmCXaUMk7JGFJsyNeiKnDFdR8ox8,7031
410
410
  claude_mpm/services/event_aggregator.py,sha256=DDcehIZVpiEDzs9o18gDZyvjMBHCq2H8HF4h0ofG9d4,20250
@@ -668,13 +668,13 @@ claude_mpm/services/project/analyzer.py,sha256=VHlLrP8-S5gr12w4Yzs7-6d7LWdJKISHP
668
668
  claude_mpm/services/project/analyzer_refactored.py,sha256=USYEdPAhSoGPqZCpaT89Dw6ElFW_L1yXSURheQjAhLA,18243
669
669
  claude_mpm/services/project/analyzer_v2.py,sha256=YZ_AZPXST-ZcvnJ1yXDWUm2oXuermpkk3e5E8lHBoGE,24655
670
670
  claude_mpm/services/project/architecture_analyzer.py,sha256=EyGBXdogQktj8BflGxnVHezMCJGzhEbrDVYSTtKm7wE,16886
671
- claude_mpm/services/project/archive_manager.py,sha256=lKKMUNuAYclV58Ug-veTw9jMe2RsYLUMhnn1BFWK3rA,39078
671
+ claude_mpm/services/project/archive_manager.py,sha256=zu0UBmfGW4oWEEZ58B7wtnUHdVz-VEHpUHFA3ptcrjU,39077
672
672
  claude_mpm/services/project/dependency_analyzer.py,sha256=b53HIjYjcwiVVgk5EXQUp6zsFU5mwGeRtFuqZMO4X48,15621
673
- claude_mpm/services/project/documentation_manager.py,sha256=KG1UM78CDYcMeHM-kw2XzKlMnl9eGiltMHrSmFBqyhw,19073
673
+ claude_mpm/services/project/documentation_manager.py,sha256=LH60S7Xs_YbW834MoLsTXiNiWEf1Zk5L93H58cOf8J0,19072
674
674
  claude_mpm/services/project/enhanced_analyzer.py,sha256=8qzaiLUwoOrhhCuY9utC5cERF3wAuJkvG1WvexP6PuI,18540
675
675
  claude_mpm/services/project/language_analyzer.py,sha256=KnbwHLtUcnzdMY6bseZk90bMo0yI9n_pXP5Mj4tLDgg,9209
676
676
  claude_mpm/services/project/metrics_collector.py,sha256=nqsf2zcVVQU785dYmZ45cex3PByk56NCFC93mr4McIM,12873
677
- claude_mpm/services/project/project_organizer.py,sha256=SeHH6k7eRxhlp8VcDex6Bh9pitXIlCQfnEc191aFL4o,37611
677
+ claude_mpm/services/project/project_organizer.py,sha256=Sn0RcZXYmxZpBOgg79Q02gEp1xEVHnkwY-gxsbCFKkg,37553
678
678
  claude_mpm/services/project/registry.py,sha256=XhPmkuEz9tKKKnT9Ca1zsUuNgZJQy40WFHJERj09-40,24166
679
679
  claude_mpm/services/shared/__init__.py,sha256=9sL2GHHGg8-lboHTZ8mzIfhcCWiFCQyWbpC27jkBRI0,597
680
680
  claude_mpm/services/shared/async_service_base.py,sha256=46Z-ATX5N0FhugNsF6byJ42frs4Rw5ZWfhw3Paf2788,7010
@@ -720,13 +720,13 @@ claude_mpm/services/unified/unified_config.py,sha256=mskcybytGDDEXMSx88gdl-1QPWq
720
720
  claude_mpm/services/unified/unified_deployment.py,sha256=F-fKNTjGVHri92oaD21iyubDdL20qzuKPA7pDdVcU3o,14917
721
721
  claude_mpm/services/unified/analyzer_strategies/__init__.py,sha256=cQqmsHjYf9olriRFjiBVnpX75X4VHGd8rAwiWr1k540,1369
722
722
  claude_mpm/services/unified/analyzer_strategies/code_analyzer.py,sha256=tnr6NYEqJ9PM-ScPs7SQvfaH7V9JOafhGLLYH_sZBWc,17797
723
- claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py,sha256=98WFa8vLf2FddnHPYlLm8VNMFv3iihjcET1JNn1Ry-c,24042
723
+ claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py,sha256=nUrNQF5mBr7GHTR-gE2SPQBxCWdpwntoa3CHiC_GqCo,24041
724
724
  claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py,sha256=AuLPlg4wEIF_tVfHWSEaG2Xva0hASX4m1TtsuiJnd1Y,33599
725
725
  claude_mpm/services/unified/analyzer_strategies/security_analyzer.py,sha256=r2xQsVw8wQ2r6RnG088DgNuPZX0sT6y72xtTw3Om3bA,26496
726
- claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py,sha256=JAjwL_qXrpooePlQ3h1GI11qPzZwbPzD8yhWti-q1Ck,25209
726
+ claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py,sha256=9DfKYz4d36IwIRkk3ABEmakyW7TgGnpv1jEtqUYE31o,25269
727
727
  claude_mpm/services/unified/config_strategies/__init__.py,sha256=b39wSfMCI1ah8gbgZHZFRaaLdsNo1sVfCWikqTS3Olk,4298
728
728
  claude_mpm/services/unified/config_strategies/config_schema.py,sha256=SLQs7M8RmpeMA2n1lfYUU1ePdO78O3fyNRFo3Y1oQkA,24706
729
- claude_mpm/services/unified/config_strategies/context_strategy.py,sha256=noqu7W1DPDQB-W8X2A8jkWWMp2KzE9uIFC0jjh9hYSk,25209
729
+ claude_mpm/services/unified/config_strategies/context_strategy.py,sha256=kTlZ3cGdXUGCG1jEjK5Re864PBBw4wT_RO5WeP-Zp_w,25179
730
730
  claude_mpm/services/unified/config_strategies/error_handling_strategy.py,sha256=zp-sFg2SgOj7Z-DesSpeDfBnWvnIZ94znxdiYaGGyow,35687
731
731
  claude_mpm/services/unified/config_strategies/file_loader_strategy.py,sha256=6sAiWAZfYaBJ8dFgAQQTuSGXLwyD9ES05agWdvQUdV4,29428
732
732
  claude_mpm/services/unified/config_strategies/unified_config_service.py,sha256=_CcKeaV7-xAmTy-y9ajlOu2H1mUyFin77tpxG7wRyaY,29468
@@ -776,9 +776,9 @@ claude_mpm/utils/subprocess_utils.py,sha256=D0izRT8anjiUb_JG72zlJR_JAw1cDkb7kalN
776
776
  claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
777
777
  claude_mpm/validation/agent_validator.py,sha256=Nm2WmcbCb0EwOG4nFcikc3wVdiiAfjGBBI3YoR6ainQ,20915
778
778
  claude_mpm/validation/frontmatter_validator.py,sha256=IDBOCBweO6umydSnUJjBh81sKk3cy9hRFYm61DCiXbI,7020
779
- claude_mpm-4.5.5.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
780
- claude_mpm-4.5.5.dist-info/METADATA,sha256=C6QWofVidzQiYIa8k37bCVqBgvlJX5qKtl4iz77KoSg,17517
781
- claude_mpm-4.5.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
782
- claude_mpm-4.5.5.dist-info/entry_points.txt,sha256=Vlw3GNi-OtTpKSrez04iNrPmxNxYDpIWxmJCxiZ5Tx8,526
783
- claude_mpm-4.5.5.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
784
- claude_mpm-4.5.5.dist-info/RECORD,,
779
+ claude_mpm-4.5.6.dist-info/licenses/LICENSE,sha256=lpaivOlPuBZW1ds05uQLJJswy8Rp_HMNieJEbFlqvLk,1072
780
+ claude_mpm-4.5.6.dist-info/METADATA,sha256=8gYiFkHq_U1xhjhFPxVv4_mvuy08lsjaWQRN7-oCx_c,17517
781
+ claude_mpm-4.5.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
782
+ claude_mpm-4.5.6.dist-info/entry_points.txt,sha256=Vlw3GNi-OtTpKSrez04iNrPmxNxYDpIWxmJCxiZ5Tx8,526
783
+ claude_mpm-4.5.6.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
784
+ claude_mpm-4.5.6.dist-info/RECORD,,