claude-mpm 5.6.26__py3-none-any.whl → 5.6.28__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/cli/startup.py CHANGED
@@ -34,13 +34,13 @@ def sync_hooks_on_startup(quiet: bool = False) -> bool:
34
34
  installer = HookInstaller()
35
35
 
36
36
  # Show brief status (hooks sync is fast)
37
- if not quiet:
37
+ if not quiet and sys.stdout.isatty():
38
38
  print("Syncing Claude Code hooks...", end=" ", flush=True)
39
39
 
40
40
  # Reinstall hooks (force=True ensures update)
41
41
  success = installer.install_hooks(force=True)
42
42
 
43
- if not quiet:
43
+ if not quiet and sys.stdout.isatty():
44
44
  if success:
45
45
  print("✓")
46
46
  else:
@@ -49,7 +49,7 @@ def sync_hooks_on_startup(quiet: bool = False) -> bool:
49
49
  return success
50
50
 
51
51
  except Exception as e:
52
- if not quiet:
52
+ if not quiet and sys.stdout.isatty():
53
53
  print("(error)")
54
54
  # Log but don't fail startup
55
55
  from ..core.logger import get_logger
@@ -280,11 +280,13 @@ def deploy_bundled_skills():
280
280
  if deployment_result.get("deployed"):
281
281
  # Show simple feedback for deployed skills
282
282
  deployed_count = len(deployment_result["deployed"])
283
- print(f"✓ Bundled skills ready ({deployed_count} deployed)", flush=True)
283
+ if sys.stdout.isatty():
284
+ print(f"✓ Bundled skills ready ({deployed_count} deployed)", flush=True)
284
285
  logger.info(f"Skills: Deployed {deployed_count} skill(s)")
285
286
  elif not deployment_result.get("errors"):
286
287
  # No deployment needed, skills already present
287
- print("✓ Bundled skills ready", flush=True)
288
+ if sys.stdout.isatty():
289
+ print("✓ Bundled skills ready", flush=True)
288
290
 
289
291
  if deployment_result.get("errors"):
290
292
  logger.warning(
@@ -318,7 +320,8 @@ def discover_and_link_runtime_skills():
318
320
 
319
321
  discover_skills()
320
322
  # Show simple success feedback
321
- print("✓ Runtime skills linked", flush=True)
323
+ if sys.stdout.isatty():
324
+ print("✓ Runtime skills linked", flush=True)
322
325
  except Exception as e:
323
326
  # Import logger here to avoid circular imports
324
327
  from ..core.logger import get_logger
@@ -373,7 +376,8 @@ def deploy_output_style_on_startup():
373
376
 
374
377
  if all_up_to_date:
375
378
  # Show feedback that output styles are ready
376
- print("✓ Output styles ready", flush=True)
379
+ if sys.stdout.isatty():
380
+ print("✓ Output styles ready", flush=True)
377
381
  return
378
382
 
379
383
  # Deploy all styles using the manager
@@ -383,7 +387,8 @@ def deploy_output_style_on_startup():
383
387
  deployed_count = sum(1 for success in results.values() if success)
384
388
 
385
389
  if deployed_count > 0:
386
- print(f"✓ Output styles deployed ({deployed_count} styles)", flush=True)
390
+ if sys.stdout.isatty():
391
+ print(f"✓ Output styles deployed ({deployed_count} styles)", flush=True)
387
392
  else:
388
393
  # Deployment failed - log but don't fail startup
389
394
  from ..core.logger import get_logger
@@ -1290,9 +1295,11 @@ def verify_and_show_pm_skills():
1290
1295
  if result.verified:
1291
1296
  # Show verified status with count
1292
1297
  total_required = len(REQUIRED_PM_SKILLS)
1293
- print(
1294
- f"✓ PM skills: {total_required}/{total_required} verified", flush=True
1295
- )
1298
+ if sys.stdout.isatty():
1299
+ print(
1300
+ f"✓ PM skills: {total_required}/{total_required} verified",
1301
+ flush=True,
1302
+ )
1296
1303
  else:
1297
1304
  # Show warning with details
1298
1305
  missing_count = len(result.missing_skills)
@@ -1311,13 +1318,15 @@ def verify_and_show_pm_skills():
1311
1318
  if "Auto-repaired" in result.message:
1312
1319
  # Auto-repair succeeded
1313
1320
  total_required = len(REQUIRED_PM_SKILLS)
1314
- print(
1315
- f"✓ PM skills: {total_required}/{total_required} verified (auto-repaired)",
1316
- flush=True,
1317
- )
1321
+ if sys.stdout.isatty():
1322
+ print(
1323
+ f"✓ PM skills: {total_required}/{total_required} verified (auto-repaired)",
1324
+ flush=True,
1325
+ )
1318
1326
  else:
1319
1327
  # Auto-repair failed or not attempted
1320
- print(f"⚠ PM skills: {status}", flush=True)
1328
+ if sys.stdout.isatty():
1329
+ print(f"⚠ PM skills: {status}", flush=True)
1321
1330
 
1322
1331
  # Log warnings for debugging
1323
1332
  from ..core.logger import get_logger
@@ -1516,7 +1525,9 @@ def check_mcp_auto_configuration():
1516
1525
  from ..services.mcp_gateway.auto_configure import check_and_configure_mcp
1517
1526
 
1518
1527
  # Show progress feedback - this operation can take 10+ seconds
1519
- print("Checking MCP configuration...", end="", flush=True)
1528
+ # Only show progress message in TTY mode to avoid interfering with Claude Code's status display
1529
+ if sys.stdout.isatty():
1530
+ print("Checking MCP configuration...", end="", flush=True)
1520
1531
 
1521
1532
  # This function handles all the logic:
1522
1533
  # - Checks if already configured
@@ -1,10 +1,14 @@
1
- """Service for deploying MPM slash commands to user's Claude configuration.
1
+ """Service for managing MPM slash commands in user's Claude configuration.
2
2
 
3
- This service handles:
4
- 1. Copying command markdown files from source to user's ~/.claude/commands directory
5
- 2. Creating the commands directory if it doesn't exist
6
- 3. Overwriting existing commands to ensure they're up-to-date
7
- 4. Parsing and validating YAML frontmatter for namespace metadata (Phase 1 - 1M-400)
3
+ DEPRECATED: User-level commands in ~/.claude/commands/ are deprecated.
4
+ Project-level skills (.claude/skills/) are now the only source for commands.
5
+
6
+ This service now only handles:
7
+ 1. Cleanup of deprecated commands from previous versions
8
+ 2. Cleanup of stale commands that no longer exist in source
9
+ 3. Parsing and validating YAML frontmatter (for internal use)
10
+
11
+ New command deployment is intentionally disabled - see deploy_commands_on_startup().
8
12
  """
9
13
 
10
14
  from pathlib import Path
@@ -17,20 +21,34 @@ from claude_mpm.core.logger import get_logger
17
21
 
18
22
 
19
23
  class CommandDeploymentService(BaseService):
20
- """Service for deploying MPM slash commands."""
24
+ """Service for managing MPM slash commands (cleanup only - deployment deprecated)."""
21
25
 
22
- # Deprecated commands that have been replaced (cleanup on startup)
26
+ # Deprecated commands that should be removed from ~/.claude/commands/
27
+ # ALL user-level commands are now deprecated - project-level skills are the only source
23
28
  DEPRECATED_COMMANDS = [
29
+ # Legacy deprecated commands (historical)
24
30
  "mpm-agents.md", # Replaced by mpm-agents-list.md
25
31
  "mpm-auto-configure.md", # Replaced by mpm-agents-auto-configure.md
26
32
  "mpm-config-view.md", # Replaced by mpm-config.md
27
33
  "mpm-resume.md", # Replaced by mpm-session-resume.md
28
34
  "mpm-ticket.md", # Replaced by mpm-ticket-view.md
29
- # Removed - consolidated into /mpm-configure
30
35
  "mpm-agents-list.md", # Consolidated into /mpm-configure
31
36
  "mpm-agents-detect.md", # Consolidated into /mpm-configure
32
37
  "mpm-agents-auto-configure.md", # Consolidated into /mpm-configure
33
38
  "mpm-agents-recommend.md", # Consolidated into /mpm-configure
39
+ # ALL user-level commands are now deprecated (use project-level skills)
40
+ "mpm.md",
41
+ "mpm-config.md",
42
+ "mpm-doctor.md",
43
+ "mpm-help.md",
44
+ "mpm-init.md",
45
+ "mpm-monitor.md",
46
+ "mpm-organize.md",
47
+ "mpm-postmortem.md",
48
+ "mpm-session-resume.md",
49
+ "mpm-status.md",
50
+ "mpm-ticket-view.md",
51
+ "mpm-version.md",
34
52
  ]
35
53
 
36
54
  def __init__(self):
@@ -414,33 +432,33 @@ class CommandDeploymentService(BaseService):
414
432
  def deploy_commands_on_startup(force: bool = False) -> None:
415
433
  """Convenience function to deploy commands during startup.
416
434
 
417
- This function:
418
- 1. Removes deprecated commands that have been replaced
419
- 2. Removes stale commands that no longer exist in source
420
- 3. Deploys current command files
435
+ DEPRECATED: User-level commands in ~/.claude/commands/ are deprecated.
436
+ Project-level skills should be the only source for commands.
437
+
438
+ This function now only cleans up any existing deprecated/stale commands
439
+ without deploying new ones.
421
440
 
422
441
  Args:
423
- force: Force deployment even if files exist
442
+ force: Force deployment even if files exist (ignored - deployment disabled)
424
443
  """
425
- service = CommandDeploymentService()
426
444
  logger = get_logger("startup")
445
+ logger.debug(
446
+ "User-level command deployment is deprecated - "
447
+ "project-level skills are the only command source"
448
+ )
427
449
 
428
- # Clean up deprecated commands FIRST (known old commands)
450
+ # Still clean up any lingering deprecated/stale commands from previous versions
451
+ service = CommandDeploymentService()
452
+
453
+ # Clean up deprecated commands
429
454
  deprecated_count = service.remove_deprecated_commands()
430
455
  if deprecated_count > 0:
431
456
  logger.info(f"Cleaned up {deprecated_count} deprecated command(s)")
432
457
 
433
- # Clean up stale commands SECOND (deployed but not in source anymore)
458
+ # Clean up stale commands
434
459
  stale_count = service.remove_stale_commands()
435
460
  if stale_count > 0:
436
461
  logger.info(f"Cleaned up {stale_count} stale command(s)")
437
462
 
438
- # Deploy current commands LAST
439
- result = service.deploy_commands(force=force)
440
-
441
- if result["deployed"]:
442
- logger.info(f"MPM commands deployed: {', '.join(result['deployed'])}")
443
-
444
- if result["errors"]:
445
- for error in result["errors"]:
446
- logger.warning(f"Command deployment issue: {error}")
463
+ # NOTE: Deployment of new commands is intentionally disabled.
464
+ # Project-level skills (.claude/skills/) are the only source for commands.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: claude-mpm
3
- Version: 5.6.26
3
+ Version: 5.6.28
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
@@ -42,7 +42,7 @@ claude_mpm/cli/chrome_devtools_installer.py,sha256=efA_ZX1iR3oaJi3222079BQw6DEG8
42
42
  claude_mpm/cli/executor.py,sha256=eerqDVszBfTm8N2FgreLr-132Jb9BVZGNrrukvb_b-I,15106
43
43
  claude_mpm/cli/helpers.py,sha256=CypEhw0tbNH6_GzVTaQdi4w7ThCWO43Ep92YbJzPR4I,3638
44
44
  claude_mpm/cli/parser.py,sha256=Vqx9n-6Xo1uNhXR4rThmgWpZXTr0nOtkgDf3oMS9b0g,5855
45
- claude_mpm/cli/startup.py,sha256=5puAtNOSACBrs1HUs5Hn9mW_sLPrvu63S2s3j_Shw78,67593
45
+ claude_mpm/cli/startup.py,sha256=4nKyk0UqVSBsiF-gnk7TnYn3pebB146c79xffo75bhA,68170
46
46
  claude_mpm/cli/startup_display.py,sha256=KI4GZ0uVoK7FXeK5jsS4JAyaKaKf5rCkY3h5tNeEY7M,17209
47
47
  claude_mpm/cli/startup_logging.py,sha256=wHokzcCA0AJPxAqFrpY5PMOBh1iOhdhgP1gY1OvD0gY,29392
48
48
  claude_mpm/cli/utils.py,sha256=5e3v-ow1gd-5nlad9OWCsL-3SRJcPjBJ9HS3zygwkiQ,8988
@@ -477,7 +477,7 @@ claude_mpm/services/__init__.py,sha256=a9gM6IlUDHWPy_lFhkb5jpSuuooowACnYG25zit6B
477
477
  claude_mpm/services/agent_capabilities_service.py,sha256=uWSI7mTZvlJAYjDnyKUPczRX5uTXN0KgUp0_1J-Qsrs,10759
478
478
  claude_mpm/services/async_session_logger.py,sha256=u8yw3EAhOEvuZfky3Snb9JOaZ9TWQgznh08O0Zf4GfM,23881
479
479
  claude_mpm/services/claude_session_logger.py,sha256=c2SPLhAq0JaUIyCmg6RsylZ2upaaqlb88ETneuYo8O0,11162
480
- claude_mpm/services/command_deployment_service.py,sha256=GgSxRehQY-PR-yeztz9WP8w6cT5_8NO9bXfn0aTN1Lc,16685
480
+ claude_mpm/services/command_deployment_service.py,sha256=ocYm3ZuGtkRjdsy8Py-jqYrMEc_03lJsdgbU8Z245sA,17422
481
481
  claude_mpm/services/command_handler_service.py,sha256=8iru6eRdQloXrGiE75E1zoUbD_Ajldu3sw17Yx772Lw,7280
482
482
  claude_mpm/services/delegation_detector.py,sha256=ZpElqjhTbuEeeTjTMUsl-G1lHMJ9m1g-6orM3t7wNfM,6168
483
483
  claude_mpm/services/event_aggregator.py,sha256=V_5Wln1RzozLMDZawIPl5gSjIN5KHniNPaaSP11Lihc,20251
@@ -1102,10 +1102,10 @@ claude_mpm/utils/subprocess_utils.py,sha256=D0izRT8anjiUb_JG72zlJR_JAw1cDkb7kalN
1102
1102
  claude_mpm/validation/__init__.py,sha256=YZhwE3mhit-lslvRLuwfX82xJ_k4haZeKmh4IWaVwtk,156
1103
1103
  claude_mpm/validation/agent_validator.py,sha256=GprtAvu80VyMXcKGsK_VhYiXWA6BjKHv7O6HKx0AB9w,20917
1104
1104
  claude_mpm/validation/frontmatter_validator.py,sha256=YpJlYNNYcV8u6hIOi3_jaRsDnzhbcQpjCBE6eyBKaFY,7076
1105
- claude_mpm-5.6.26.dist-info/licenses/LICENSE,sha256=ca3y_Rk4aPrbF6f62z8Ht5MJM9OAvbGlHvEDcj9vUQ4,3867
1106
- claude_mpm-5.6.26.dist-info/licenses/LICENSE-FAQ.md,sha256=TxfEkXVCK98RzDOer09puc7JVCP_q_bN4dHtZKHCMcM,5104
1107
- claude_mpm-5.6.26.dist-info/METADATA,sha256=_bMw1FGBOX_c6AW9zBMhHLzY5z8QmyezmAUph-ogCO4,15245
1108
- claude_mpm-5.6.26.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1109
- claude_mpm-5.6.26.dist-info/entry_points.txt,sha256=n-Uk4vwHPpuvu-g_I7-GHORzTnN_m6iyOsoLveKKD0E,228
1110
- claude_mpm-5.6.26.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
1111
- claude_mpm-5.6.26.dist-info/RECORD,,
1105
+ claude_mpm-5.6.28.dist-info/licenses/LICENSE,sha256=ca3y_Rk4aPrbF6f62z8Ht5MJM9OAvbGlHvEDcj9vUQ4,3867
1106
+ claude_mpm-5.6.28.dist-info/licenses/LICENSE-FAQ.md,sha256=TxfEkXVCK98RzDOer09puc7JVCP_q_bN4dHtZKHCMcM,5104
1107
+ claude_mpm-5.6.28.dist-info/METADATA,sha256=JzT-L4XXLLq178jBDKVl_FQWba3AkLocGB5qDL9RIWw,15245
1108
+ claude_mpm-5.6.28.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1109
+ claude_mpm-5.6.28.dist-info/entry_points.txt,sha256=n-Uk4vwHPpuvu-g_I7-GHORzTnN_m6iyOsoLveKKD0E,228
1110
+ claude_mpm-5.6.28.dist-info/top_level.txt,sha256=1nUg3FEaBySgm8t-s54jK5zoPnu3_eY6EP6IOlekyHA,11
1111
+ claude_mpm-5.6.28.dist-info/RECORD,,