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 +28 -17
- claude_mpm/services/command_deployment_service.py +44 -26
- {claude_mpm-5.6.26.dist-info → claude_mpm-5.6.28.dist-info}/METADATA +1 -1
- {claude_mpm-5.6.26.dist-info → claude_mpm-5.6.28.dist-info}/RECORD +9 -9
- {claude_mpm-5.6.26.dist-info → claude_mpm-5.6.28.dist-info}/WHEEL +0 -0
- {claude_mpm-5.6.26.dist-info → claude_mpm-5.6.28.dist-info}/entry_points.txt +0 -0
- {claude_mpm-5.6.26.dist-info → claude_mpm-5.6.28.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-5.6.26.dist-info → claude_mpm-5.6.28.dist-info}/licenses/LICENSE-FAQ.md +0 -0
- {claude_mpm-5.6.26.dist-info → claude_mpm-5.6.28.dist-info}/top_level.txt +0 -0
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1294
|
-
|
|
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
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
1
|
+
"""Service for managing MPM slash commands in user's Claude configuration.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
|
24
|
+
"""Service for managing MPM slash commands (cleanup only - deployment deprecated)."""
|
|
21
25
|
|
|
22
|
-
# Deprecated commands that
|
|
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
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
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
|
-
#
|
|
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
|
|
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
|
-
#
|
|
439
|
-
|
|
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.
|
|
@@ -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=
|
|
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=
|
|
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.
|
|
1106
|
-
claude_mpm-5.6.
|
|
1107
|
-
claude_mpm-5.6.
|
|
1108
|
-
claude_mpm-5.6.
|
|
1109
|
-
claude_mpm-5.6.
|
|
1110
|
-
claude_mpm-5.6.
|
|
1111
|
-
claude_mpm-5.6.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|