claude-mpm 5.0.9__py3-none-any.whl → 5.4.41__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.
Potentially problematic release.
This version of claude-mpm might be problematic. Click here for more details.
- claude_mpm/VERSION +1 -1
- claude_mpm/__init__.py +4 -0
- claude_mpm/agents/BASE_AGENT.md +164 -0
- claude_mpm/agents/{PM_INSTRUCTIONS_TEACH.md → CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md} +721 -41
- claude_mpm/agents/MEMORY.md +1 -1
- claude_mpm/agents/PM_INSTRUCTIONS.md +468 -468
- claude_mpm/agents/WORKFLOW.md +5 -254
- claude_mpm/agents/agent_loader.py +13 -44
- claude_mpm/agents/base_agent.json +1 -1
- claude_mpm/agents/frontmatter_validator.py +70 -2
- claude_mpm/agents/templates/circuit-breakers.md +431 -45
- claude_mpm/cli/__init__.py +0 -1
- claude_mpm/cli/__main__.py +4 -0
- claude_mpm/cli/chrome_devtools_installer.py +175 -0
- claude_mpm/cli/commands/agent_state_manager.py +18 -27
- claude_mpm/cli/commands/agents.py +175 -37
- claude_mpm/cli/commands/auto_configure.py +723 -236
- claude_mpm/cli/commands/config.py +88 -2
- claude_mpm/cli/commands/configure.py +1262 -157
- claude_mpm/cli/commands/configure_agent_display.py +25 -6
- claude_mpm/cli/commands/mpm_init/core.py +225 -46
- claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
- claude_mpm/cli/commands/mpm_init/prompts.py +280 -0
- claude_mpm/cli/commands/postmortem.py +1 -1
- claude_mpm/cli/commands/profile.py +277 -0
- claude_mpm/cli/commands/skills.py +214 -189
- claude_mpm/cli/commands/summarize.py +413 -0
- claude_mpm/cli/executor.py +21 -3
- claude_mpm/cli/interactive/agent_wizard.py +85 -10
- claude_mpm/cli/parsers/agents_parser.py +54 -9
- claude_mpm/cli/parsers/auto_configure_parser.py +13 -138
- claude_mpm/cli/parsers/base_parser.py +12 -0
- claude_mpm/cli/parsers/config_parser.py +153 -83
- claude_mpm/cli/parsers/profile_parser.py +148 -0
- claude_mpm/cli/parsers/skills_parser.py +3 -2
- claude_mpm/cli/startup.py +879 -149
- claude_mpm/commands/mpm-config.md +28 -0
- claude_mpm/commands/mpm-doctor.md +9 -22
- claude_mpm/commands/mpm-help.md +5 -287
- claude_mpm/commands/mpm-init.md +81 -507
- claude_mpm/commands/mpm-monitor.md +15 -402
- claude_mpm/commands/mpm-organize.md +120 -0
- claude_mpm/commands/mpm-postmortem.md +6 -108
- claude_mpm/commands/mpm-session-resume.md +12 -363
- claude_mpm/commands/mpm-status.md +5 -69
- claude_mpm/commands/mpm-ticket-view.md +52 -495
- claude_mpm/commands/mpm-version.md +5 -107
- claude_mpm/config/agent_sources.py +27 -0
- claude_mpm/core/config.py +2 -4
- claude_mpm/core/framework/formatters/content_formatter.py +3 -13
- claude_mpm/core/framework/loaders/agent_loader.py +8 -5
- claude_mpm/core/framework/loaders/instruction_loader.py +52 -11
- claude_mpm/core/framework_loader.py +4 -2
- claude_mpm/core/logger.py +13 -0
- claude_mpm/core/optimized_startup.py +59 -0
- claude_mpm/core/output_style_manager.py +173 -43
- claude_mpm/core/shared/config_loader.py +1 -1
- claude_mpm/core/socketio_pool.py +3 -3
- claude_mpm/core/unified_agent_registry.py +134 -16
- claude_mpm/core/unified_config.py +22 -0
- claude_mpm/dashboard/static/svelte-build/_app/env.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.B_FtCwCQ.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.Cl_eSA4x.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BgChzWQ1.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIXEwuWe.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CWc5urbQ.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DMkZpdF2.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DjhvlsAc.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/N4qtv3Hx.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/uj46x2Wr.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.DTL5mJO-.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.DzuEhzqh.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/0.CAGBuiOw.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DFLC8jdE.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.DPvEihJJ.js +10 -0
- claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -0
- claude_mpm/dashboard/static/svelte-build/favicon.svg +7 -0
- claude_mpm/dashboard/static/svelte-build/index.html +36 -0
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +211 -78
- claude_mpm/hooks/claude_hooks/hook_handler.py +155 -1
- claude_mpm/hooks/claude_hooks/installer.py +33 -10
- claude_mpm/hooks/claude_hooks/memory_integration.py +28 -0
- claude_mpm/hooks/claude_hooks/response_tracking.py +2 -3
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +30 -6
- claude_mpm/hooks/memory_integration_hook.py +46 -1
- claude_mpm/init.py +63 -19
- claude_mpm/models/agent_definition.py +7 -0
- claude_mpm/models/git_repository.py +3 -3
- claude_mpm/scripts/claude-hook-handler.sh +58 -18
- claude_mpm/scripts/launch_monitor.py +93 -13
- claude_mpm/scripts/start_activity_logging.py +0 -0
- claude_mpm/services/agents/agent_builder.py +3 -3
- claude_mpm/services/agents/agent_recommendation_service.py +278 -0
- claude_mpm/services/agents/agent_review_service.py +280 -0
- claude_mpm/services/agents/cache_git_manager.py +6 -6
- claude_mpm/services/agents/deployment/agent_deployment.py +29 -7
- claude_mpm/services/agents/deployment/agent_discovery_service.py +4 -5
- claude_mpm/services/agents/deployment/agent_template_builder.py +5 -3
- claude_mpm/services/agents/deployment/agents_directory_resolver.py +2 -2
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +320 -29
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +546 -68
- claude_mpm/services/agents/git_source_manager.py +36 -2
- claude_mpm/services/agents/loading/base_agent_manager.py +1 -13
- claude_mpm/services/agents/recommender.py +5 -3
- claude_mpm/services/agents/single_tier_deployment_service.py +2 -2
- claude_mpm/services/agents/sources/git_source_sync_service.py +13 -6
- claude_mpm/services/agents/startup_sync.py +22 -2
- claude_mpm/services/agents/toolchain_detector.py +10 -6
- claude_mpm/services/analysis/__init__.py +11 -1
- claude_mpm/services/analysis/clone_detector.py +1030 -0
- claude_mpm/services/command_deployment_service.py +81 -10
- claude_mpm/services/diagnostics/checks/agent_check.py +2 -2
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +1 -1
- claude_mpm/services/event_bus/config.py +3 -1
- claude_mpm/services/git/git_operations_service.py +101 -16
- claude_mpm/services/monitor/daemon.py +9 -2
- claude_mpm/services/monitor/daemon_manager.py +39 -3
- claude_mpm/services/monitor/management/lifecycle.py +8 -1
- claude_mpm/services/monitor/server.py +698 -22
- claude_mpm/services/pm_skills_deployer.py +676 -0
- claude_mpm/services/profile_manager.py +331 -0
- claude_mpm/services/project/project_organizer.py +4 -0
- claude_mpm/services/self_upgrade_service.py +120 -12
- claude_mpm/services/skills/__init__.py +3 -0
- claude_mpm/services/skills/git_skill_source_manager.py +130 -2
- claude_mpm/services/skills/selective_skill_deployer.py +704 -0
- claude_mpm/services/skills/skill_to_agent_mapper.py +406 -0
- claude_mpm/services/skills_deployer.py +126 -9
- claude_mpm/services/socketio/dashboard_server.py +1 -0
- claude_mpm/services/socketio/event_normalizer.py +51 -6
- claude_mpm/services/socketio/server/core.py +386 -108
- claude_mpm/services/version_control/git_operations.py +103 -0
- claude_mpm/skills/skill_manager.py +92 -3
- claude_mpm/utils/agent_dependency_loader.py +14 -2
- claude_mpm/utils/agent_filters.py +17 -44
- claude_mpm/utils/gitignore.py +3 -0
- claude_mpm/utils/migration.py +4 -4
- claude_mpm/utils/robust_installer.py +47 -3
- {claude_mpm-5.0.9.dist-info → claude_mpm-5.4.41.dist-info}/METADATA +57 -87
- {claude_mpm-5.0.9.dist-info → claude_mpm-5.4.41.dist-info}/RECORD +160 -211
- claude_mpm-5.4.41.dist-info/entry_points.txt +5 -0
- claude_mpm-5.4.41.dist-info/licenses/LICENSE +94 -0
- claude_mpm-5.4.41.dist-info/licenses/LICENSE-FAQ.md +153 -0
- claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -292
- claude_mpm/agents/BASE_DOCUMENTATION.md +0 -53
- claude_mpm/agents/BASE_OPS.md +0 -219
- claude_mpm/agents/BASE_PM.md +0 -480
- claude_mpm/agents/BASE_PROMPT_ENGINEER.md +0 -787
- claude_mpm/agents/BASE_QA.md +0 -167
- claude_mpm/agents/BASE_RESEARCH.md +0 -53
- claude_mpm/agents/base_agent_loader.py +0 -601
- claude_mpm/cli/commands/agents_detect.py +0 -380
- claude_mpm/cli/commands/agents_recommend.py +0 -309
- claude_mpm/cli/ticket_cli.py +0 -35
- claude_mpm/commands/mpm-agents-auto-configure.md +0 -278
- claude_mpm/commands/mpm-agents-detect.md +0 -177
- claude_mpm/commands/mpm-agents-list.md +0 -131
- claude_mpm/commands/mpm-agents-recommend.md +0 -223
- claude_mpm/commands/mpm-config-view.md +0 -150
- claude_mpm/commands/mpm-ticket-organize.md +0 -304
- claude_mpm/dashboard/analysis_runner.py +0 -455
- claude_mpm/dashboard/index.html +0 -13
- claude_mpm/dashboard/open_dashboard.py +0 -66
- claude_mpm/dashboard/static/css/activity.css +0 -1958
- claude_mpm/dashboard/static/css/connection-status.css +0 -370
- claude_mpm/dashboard/static/css/dashboard.css +0 -4701
- claude_mpm/dashboard/static/js/components/activity-tree.js +0 -1871
- claude_mpm/dashboard/static/js/components/agent-hierarchy.js +0 -777
- claude_mpm/dashboard/static/js/components/agent-inference.js +0 -956
- claude_mpm/dashboard/static/js/components/build-tracker.js +0 -333
- claude_mpm/dashboard/static/js/components/code-simple.js +0 -857
- claude_mpm/dashboard/static/js/components/connection-debug.js +0 -654
- claude_mpm/dashboard/static/js/components/diff-viewer.js +0 -891
- claude_mpm/dashboard/static/js/components/event-processor.js +0 -542
- claude_mpm/dashboard/static/js/components/event-viewer.js +0 -1155
- claude_mpm/dashboard/static/js/components/export-manager.js +0 -368
- claude_mpm/dashboard/static/js/components/file-change-tracker.js +0 -443
- claude_mpm/dashboard/static/js/components/file-change-viewer.js +0 -690
- claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -724
- claude_mpm/dashboard/static/js/components/file-viewer.js +0 -580
- claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -211
- claude_mpm/dashboard/static/js/components/hud-manager.js +0 -671
- claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -1718
- claude_mpm/dashboard/static/js/components/module-viewer.js +0 -2764
- claude_mpm/dashboard/static/js/components/session-manager.js +0 -579
- claude_mpm/dashboard/static/js/components/socket-manager.js +0 -368
- claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -749
- claude_mpm/dashboard/static/js/components/unified-data-viewer.js +0 -1824
- claude_mpm/dashboard/static/js/components/working-directory.js +0 -920
- claude_mpm/dashboard/static/js/connection-manager.js +0 -536
- claude_mpm/dashboard/static/js/dashboard.js +0 -1914
- claude_mpm/dashboard/static/js/extension-error-handler.js +0 -164
- claude_mpm/dashboard/static/js/socket-client.js +0 -1474
- claude_mpm/dashboard/static/js/tab-isolation-fix.js +0 -185
- claude_mpm/dashboard/static/socket.io.min.js +0 -7
- claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +0 -7
- claude_mpm/dashboard/templates/code_simple.html +0 -153
- claude_mpm/dashboard/templates/index.html +0 -606
- claude_mpm/dashboard/test_dashboard.html +0 -372
- claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
- claude_mpm/scripts/mcp_server.py +0 -75
- claude_mpm/scripts/mcp_wrapper.py +0 -39
- claude_mpm/services/mcp_gateway/__init__.py +0 -159
- claude_mpm/services/mcp_gateway/auto_configure.py +0 -369
- claude_mpm/services/mcp_gateway/config/__init__.py +0 -17
- claude_mpm/services/mcp_gateway/config/config_loader.py +0 -296
- claude_mpm/services/mcp_gateway/config/config_schema.py +0 -243
- claude_mpm/services/mcp_gateway/config/configuration.py +0 -429
- claude_mpm/services/mcp_gateway/core/__init__.py +0 -43
- claude_mpm/services/mcp_gateway/core/base.py +0 -312
- claude_mpm/services/mcp_gateway/core/exceptions.py +0 -253
- claude_mpm/services/mcp_gateway/core/interfaces.py +0 -443
- claude_mpm/services/mcp_gateway/core/process_pool.py +0 -977
- claude_mpm/services/mcp_gateway/core/singleton_manager.py +0 -315
- claude_mpm/services/mcp_gateway/core/startup_verification.py +0 -316
- claude_mpm/services/mcp_gateway/main.py +0 -589
- claude_mpm/services/mcp_gateway/registry/__init__.py +0 -12
- claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -412
- claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -489
- claude_mpm/services/mcp_gateway/server/__init__.py +0 -15
- claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -414
- claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -372
- claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -712
- claude_mpm/services/mcp_gateway/tools/__init__.py +0 -36
- claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -485
- claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -789
- claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +0 -654
- claude_mpm/services/mcp_gateway/tools/health_check_tool.py +0 -456
- claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -551
- claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +0 -555
- claude_mpm/services/mcp_gateway/utils/__init__.py +0 -14
- claude_mpm/services/mcp_gateway/utils/package_version_checker.py +0 -160
- claude_mpm/services/mcp_gateway/utils/update_preferences.py +0 -170
- claude_mpm-5.0.9.dist-info/entry_points.txt +0 -10
- claude_mpm-5.0.9.dist-info/licenses/LICENSE +0 -21
- /claude_mpm/agents/{OUTPUT_STYLE.md → CLAUDE_MPM_OUTPUT_STYLE.md} +0 -0
- {claude_mpm-5.0.9.dist-info → claude_mpm-5.4.41.dist-info}/WHEEL +0 -0
- {claude_mpm-5.0.9.dist-info → claude_mpm-5.4.41.dist-info}/top_level.txt +0 -0
|
@@ -4,119 +4,17 @@ command: version
|
|
|
4
4
|
aliases: [mpm-version]
|
|
5
5
|
migration_target: /mpm/system:version
|
|
6
6
|
category: system
|
|
7
|
-
|
|
8
|
-
description: Show comprehensive version information for Claude MPM
|
|
7
|
+
description: Show version information
|
|
9
8
|
---
|
|
10
|
-
#
|
|
9
|
+
# /mpm-version
|
|
11
10
|
|
|
12
|
-
|
|
11
|
+
Display version information for MPM, agents, and skills.
|
|
13
12
|
|
|
14
13
|
## Usage
|
|
15
|
-
|
|
16
14
|
```
|
|
17
15
|
/mpm-version
|
|
18
16
|
```
|
|
19
17
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
Display version information including:
|
|
23
|
-
- Project version and build number
|
|
24
|
-
- All deployed agents with their versions (grouped by tier: system/user/project)
|
|
25
|
-
- All available skills with their versions (grouped by source: bundled/user/project)
|
|
26
|
-
- Summary statistics
|
|
27
|
-
|
|
28
|
-
## Implementation
|
|
29
|
-
|
|
30
|
-
When you run `/mpm-version`, the PM will:
|
|
31
|
-
|
|
32
|
-
1. **Collect Version Information**
|
|
33
|
-
- Use VersionService to gather all version data
|
|
34
|
-
- Project version from pyproject.toml
|
|
35
|
-
- Build number from BUILD_NUMBER file
|
|
36
|
-
- Agent versions from AgentRegistry
|
|
37
|
-
- Skills versions from SkillRegistry
|
|
38
|
-
|
|
39
|
-
2. **Format Output**
|
|
40
|
-
- Hierarchical display: Project → Agents → Skills
|
|
41
|
-
- Grouped by tier/source for clarity
|
|
42
|
-
- Sorted alphabetically within groups
|
|
43
|
-
- Summary statistics at the end
|
|
44
|
-
|
|
45
|
-
3. **Display Results**
|
|
46
|
-
- Well-formatted tree structure
|
|
47
|
-
- Easy to scan and read
|
|
48
|
-
- Includes totals and counts
|
|
49
|
-
|
|
50
|
-
## Example Output
|
|
51
|
-
|
|
52
|
-
```
|
|
53
|
-
Claude MPM Version Information
|
|
54
|
-
==============================
|
|
55
|
-
|
|
56
|
-
Project Version: 4.16.3
|
|
57
|
-
Build: 481
|
|
58
|
-
|
|
59
|
-
Agents (35 total)
|
|
60
|
-
-----------------
|
|
61
|
-
|
|
62
|
-
System Agents (30):
|
|
63
|
-
├─ agent-manager (1.0.0)
|
|
64
|
-
├─ engineer (3.9.1)
|
|
65
|
-
├─ research-agent (4.5.1)
|
|
66
|
-
├─ documentation (2.1.0)
|
|
67
|
-
├─ qa (2.0.3)
|
|
68
|
-
└─ ... (25 more)
|
|
69
|
-
|
|
70
|
-
User Agents (3):
|
|
71
|
-
├─ custom-agent (1.0.0)
|
|
72
|
-
├─ testing-agent (0.5.0)
|
|
73
|
-
└─ prototype-agent (0.1.0)
|
|
74
|
-
|
|
75
|
-
Project Agents (2):
|
|
76
|
-
├─ project-specific (2.0.0)
|
|
77
|
-
└─ domain-expert (1.1.0)
|
|
78
|
-
|
|
79
|
-
Skills (20 total)
|
|
80
|
-
-----------------
|
|
81
|
-
|
|
82
|
-
Bundled Skills (20):
|
|
83
|
-
├─ test-driven-development (0.1.0)
|
|
84
|
-
├─ systematic-debugging (0.1.0)
|
|
85
|
-
├─ async-testing (0.1.0)
|
|
86
|
-
├─ performance-profiling (0.1.0)
|
|
87
|
-
├─ security-scanning (0.1.0)
|
|
88
|
-
└─ ... (15 more)
|
|
89
|
-
|
|
90
|
-
User Skills (0):
|
|
91
|
-
(none)
|
|
92
|
-
|
|
93
|
-
Project Skills (0):
|
|
94
|
-
(none)
|
|
95
|
-
|
|
96
|
-
Summary
|
|
97
|
-
-------
|
|
98
|
-
• Project: v4.16.3 (build 481)
|
|
99
|
-
• Agents: 35 total (30 system, 3 user, 2 project)
|
|
100
|
-
• Skills: 20 total (20 bundled, 0 user, 0 project)
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
## PM Implementation Instructions
|
|
104
|
-
|
|
105
|
-
To execute this command, PM should:
|
|
106
|
-
|
|
107
|
-
1. Import and use VersionService:
|
|
108
|
-
```python
|
|
109
|
-
from claude_mpm.services.version_service import VersionService
|
|
110
|
-
|
|
111
|
-
service = VersionService()
|
|
112
|
-
summary = service.get_version_summary()
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
2. Format output following the example structure above
|
|
116
|
-
3. Handle missing data gracefully (show "unknown" for missing versions)
|
|
117
|
-
4. Include all tiers/sources even if counts are zero
|
|
118
|
-
|
|
119
|
-
## Related Commands
|
|
18
|
+
Shows project version, build number, all agents (by tier), all skills (by source).
|
|
120
19
|
|
|
121
|
-
|
|
122
|
-
- `/mpm-status` - Show system status information
|
|
20
|
+
See docs/commands/version.md for details.
|
|
@@ -316,6 +316,33 @@ class AgentSourceConfiguration:
|
|
|
316
316
|
|
|
317
317
|
return errors
|
|
318
318
|
|
|
319
|
+
def list_sources(self) -> list[dict]:
|
|
320
|
+
"""Return list of source configurations as dictionaries.
|
|
321
|
+
|
|
322
|
+
This method converts GitRepository objects to dictionaries for CLI
|
|
323
|
+
and API compatibility. Called by GitSourceManager and CLI commands.
|
|
324
|
+
|
|
325
|
+
Returns:
|
|
326
|
+
List of dicts with keys: identifier, url, subdirectory, enabled, priority
|
|
327
|
+
|
|
328
|
+
Example:
|
|
329
|
+
>>> config = AgentSourceConfiguration()
|
|
330
|
+
>>> sources = config.list_sources()
|
|
331
|
+
>>> for source in sources:
|
|
332
|
+
... print(f"{source['identifier']} (priority: {source['priority']})")
|
|
333
|
+
"""
|
|
334
|
+
repos = self.get_enabled_repositories()
|
|
335
|
+
return [
|
|
336
|
+
{
|
|
337
|
+
"identifier": repo.identifier,
|
|
338
|
+
"url": repo.url,
|
|
339
|
+
"subdirectory": repo.subdirectory,
|
|
340
|
+
"enabled": repo.enabled,
|
|
341
|
+
"priority": repo.priority,
|
|
342
|
+
}
|
|
343
|
+
for repo in repos
|
|
344
|
+
]
|
|
345
|
+
|
|
319
346
|
def __repr__(self) -> str:
|
|
320
347
|
"""Return string representation of configuration."""
|
|
321
348
|
return (
|
claude_mpm/core/config.py
CHANGED
|
@@ -563,7 +563,7 @@ class Config:
|
|
|
563
563
|
# Instruction reinforcement system configuration
|
|
564
564
|
"instruction_reinforcement": {
|
|
565
565
|
"enabled": True,
|
|
566
|
-
"test_mode":
|
|
566
|
+
"test_mode": False,
|
|
567
567
|
"injection_interval": 5,
|
|
568
568
|
"test_messages": [
|
|
569
569
|
"[TEST-REMINDER] This is an injected instruction reminder",
|
|
@@ -603,9 +603,7 @@ class Config:
|
|
|
603
603
|
}
|
|
604
604
|
],
|
|
605
605
|
"sync_interval": "startup", # Options: "startup", "hourly", "daily", "manual"
|
|
606
|
-
"cache_dir": str(
|
|
607
|
-
Path.home() / ".claude-mpm" / "cache" / "remote-agents"
|
|
608
|
-
),
|
|
606
|
+
"cache_dir": str(Path.home() / ".claude-mpm" / "cache" / "agents"),
|
|
609
607
|
},
|
|
610
608
|
}
|
|
611
609
|
|
|
@@ -100,19 +100,9 @@ class ContentFormatter:
|
|
|
100
100
|
instructions += framework_content["actual_memories"]
|
|
101
101
|
instructions += "\n"
|
|
102
102
|
|
|
103
|
-
#
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
if agent_memories:
|
|
107
|
-
instructions += "\n\n## Agent Memories\n\n"
|
|
108
|
-
instructions += "**The following are accumulated memories from specialized agents:**\n\n"
|
|
109
|
-
|
|
110
|
-
for agent_name in sorted(agent_memories.keys()):
|
|
111
|
-
memory_content = agent_memories[agent_name]
|
|
112
|
-
if memory_content:
|
|
113
|
-
instructions += f"### {agent_name.replace('_', ' ').title()} Agent Memory\n\n"
|
|
114
|
-
instructions += memory_content
|
|
115
|
-
instructions += "\n\n"
|
|
103
|
+
# NOTE: Agent memories are now injected at agent deployment time
|
|
104
|
+
# in agent_template_builder.py, not in PM instructions.
|
|
105
|
+
# This ensures each agent gets its own memory, not all memories embedded in PM.
|
|
116
106
|
|
|
117
107
|
# Add dynamic agent capabilities section
|
|
118
108
|
instructions += capabilities_section
|
|
@@ -115,7 +115,11 @@ class AgentLoader:
|
|
|
115
115
|
return agents
|
|
116
116
|
|
|
117
117
|
def discover_local_json_templates(self) -> Dict[str, Dict[str, Any]]:
|
|
118
|
-
"""Discover local JSON agent templates
|
|
118
|
+
"""Discover local JSON agent templates.
|
|
119
|
+
|
|
120
|
+
NOTE: This method is kept for backward compatibility but is deprecated.
|
|
121
|
+
The new architecture uses SOURCE (~/.claude-mpm/cache/agents/)
|
|
122
|
+
and DEPLOYMENT (.claude/agents/) locations only.
|
|
119
123
|
|
|
120
124
|
Returns:
|
|
121
125
|
Dictionary mapping agent IDs to agent metadata
|
|
@@ -125,11 +129,10 @@ class AgentLoader:
|
|
|
125
129
|
local_agents = {}
|
|
126
130
|
|
|
127
131
|
# Check for local JSON templates in priority order
|
|
132
|
+
# NOTE: These directories are deprecated in the simplified architecture
|
|
128
133
|
template_dirs = [
|
|
129
|
-
Path.cwd()
|
|
130
|
-
/ ".claude-mpm"
|
|
131
|
-
/ "agents", # Project local agents (highest priority)
|
|
132
|
-
Path.home() / ".claude-mpm" / "agents", # User local agents
|
|
134
|
+
Path.cwd() / ".claude-mpm" / "agents", # Deprecated: Project local agents
|
|
135
|
+
Path.home() / ".claude-mpm" / "agents", # Deprecated: User local agents
|
|
133
136
|
]
|
|
134
137
|
|
|
135
138
|
for priority, template_dir in enumerate(template_dirs):
|
|
@@ -88,39 +88,80 @@ class InstructionLoader:
|
|
|
88
88
|
self.packaged_loader.framework_last_modified
|
|
89
89
|
)
|
|
90
90
|
|
|
91
|
+
def _extract_version(self, file_content: str) -> int:
|
|
92
|
+
"""Extract version number from PM_INSTRUCTIONS_VERSION comment.
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
file_content: Content of the file to extract version from
|
|
96
|
+
|
|
97
|
+
Returns:
|
|
98
|
+
Version number as integer, or 0 if not found
|
|
99
|
+
"""
|
|
100
|
+
import re
|
|
101
|
+
|
|
102
|
+
match = re.search(r"PM_INSTRUCTIONS_VERSION:\s*(\d+)", file_content)
|
|
103
|
+
if match:
|
|
104
|
+
return int(match.group(1))
|
|
105
|
+
return 0 # No version = oldest
|
|
106
|
+
|
|
91
107
|
def _load_filesystem_framework_instructions(self, content: Dict[str, Any]) -> None:
|
|
92
108
|
"""Load framework instructions from filesystem.
|
|
93
109
|
|
|
94
110
|
Priority order:
|
|
95
|
-
1. Deployed compiled file: .claude-mpm/PM_INSTRUCTIONS_DEPLOYED.md (
|
|
111
|
+
1. Deployed compiled file: .claude-mpm/PM_INSTRUCTIONS_DEPLOYED.md (if version >= source)
|
|
96
112
|
2. Source file (development): src/claude_mpm/agents/PM_INSTRUCTIONS.md
|
|
97
113
|
3. Legacy file (backward compat): src/claude_mpm/agents/INSTRUCTIONS.md
|
|
98
114
|
|
|
115
|
+
Version validation ensures deployed file is never stale compared to source.
|
|
116
|
+
|
|
99
117
|
Args:
|
|
100
118
|
content: Dictionary to update with framework instructions
|
|
101
119
|
"""
|
|
120
|
+
# Define source path for version checking
|
|
121
|
+
pm_instructions_path = (
|
|
122
|
+
self.framework_path / "src" / "claude_mpm" / "agents" / "PM_INSTRUCTIONS.md"
|
|
123
|
+
)
|
|
124
|
+
|
|
102
125
|
# PRIORITY 1: Check for compiled/deployed version in .claude-mpm/
|
|
103
126
|
# This is the merged PM_INSTRUCTIONS.md + WORKFLOW.md + MEMORY.md
|
|
104
127
|
deployed_path = self.current_dir / ".claude-mpm" / "PM_INSTRUCTIONS_DEPLOYED.md"
|
|
105
128
|
if deployed_path.exists():
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
)
|
|
109
|
-
|
|
110
|
-
|
|
129
|
+
# Validate version before using deployed file
|
|
130
|
+
deployed_content = deployed_path.read_text()
|
|
131
|
+
deployed_version = self._extract_version(deployed_content)
|
|
132
|
+
|
|
133
|
+
# Check source version for comparison
|
|
134
|
+
if pm_instructions_path.exists():
|
|
135
|
+
source_content = pm_instructions_path.read_text()
|
|
136
|
+
source_version = self._extract_version(source_content)
|
|
137
|
+
|
|
138
|
+
if deployed_version < source_version:
|
|
139
|
+
self.logger.warning(
|
|
140
|
+
f"Deployed PM instructions v{deployed_version:04d} is stale, "
|
|
141
|
+
f"source is v{source_version:04d}. Using source instead."
|
|
142
|
+
)
|
|
143
|
+
# Fall through to source loading - don't return early
|
|
144
|
+
else:
|
|
145
|
+
# Version OK, use deployed
|
|
146
|
+
content["framework_instructions"] = deployed_content
|
|
147
|
+
content["loaded"] = True
|
|
148
|
+
self.logger.info(
|
|
149
|
+
f"Loaded PM_INSTRUCTIONS_DEPLOYED.md v{deployed_version:04d} from .claude-mpm/"
|
|
150
|
+
)
|
|
151
|
+
return # Stop here - deployed version is current
|
|
152
|
+
else:
|
|
153
|
+
# Source doesn't exist, use deployed even without version check
|
|
154
|
+
content["framework_instructions"] = deployed_content
|
|
111
155
|
content["loaded"] = True
|
|
112
156
|
self.logger.info("Loaded PM_INSTRUCTIONS_DEPLOYED.md from .claude-mpm/")
|
|
113
|
-
return
|
|
157
|
+
return
|
|
114
158
|
|
|
115
159
|
# PRIORITY 2: Development mode - load from source PM_INSTRUCTIONS.md
|
|
116
|
-
pm_instructions_path = (
|
|
117
|
-
self.framework_path / "src" / "claude_mpm" / "agents" / "PM_INSTRUCTIONS.md"
|
|
118
|
-
)
|
|
119
160
|
framework_instructions_path = (
|
|
120
161
|
self.framework_path / "src" / "claude_mpm" / "agents" / "INSTRUCTIONS.md"
|
|
121
162
|
)
|
|
122
163
|
|
|
123
|
-
# Try loading new consolidated file
|
|
164
|
+
# Try loading new consolidated file (pm_instructions_path already defined above)
|
|
124
165
|
if pm_instructions_path.exists():
|
|
125
166
|
loaded_content = self.file_loader.try_load_file(
|
|
126
167
|
pm_instructions_path, "source PM_INSTRUCTIONS.md (development mode)"
|
|
@@ -255,10 +255,12 @@ class FrameworkLoader:
|
|
|
255
255
|
"""Load actual memories using the MemoryManager service."""
|
|
256
256
|
memories = self._memory_manager.load_memories()
|
|
257
257
|
|
|
258
|
+
# Only load PM memories (PM.md)
|
|
259
|
+
# Agent memories are loaded at deployment time in agent_template_builder.py
|
|
258
260
|
if "actual_memories" in memories:
|
|
259
261
|
content["actual_memories"] = memories["actual_memories"]
|
|
260
|
-
|
|
261
|
-
|
|
262
|
+
# NOTE: agent_memories are no longer loaded for PM instructions
|
|
263
|
+
# They are injected per-agent at deployment time
|
|
262
264
|
|
|
263
265
|
# === Agent Discovery Methods ===
|
|
264
266
|
|
claude_mpm/core/logger.py
CHANGED
|
@@ -175,6 +175,19 @@ def setup_logging(
|
|
|
175
175
|
Returns:
|
|
176
176
|
Configured logger
|
|
177
177
|
"""
|
|
178
|
+
# Detect deployment context for install-type-aware defaults
|
|
179
|
+
if level == "INFO": # Only override default, not explicit settings
|
|
180
|
+
from claude_mpm.core.unified_paths import DeploymentContext, PathContext
|
|
181
|
+
|
|
182
|
+
context = PathContext.detect_deployment_context()
|
|
183
|
+
if context in (
|
|
184
|
+
DeploymentContext.DEVELOPMENT,
|
|
185
|
+
DeploymentContext.EDITABLE_INSTALL,
|
|
186
|
+
):
|
|
187
|
+
level = "INFO" # Development: verbose logging
|
|
188
|
+
else:
|
|
189
|
+
level = "OFF" # Production installs: silent by default
|
|
190
|
+
|
|
178
191
|
logger = logging.getLogger(name)
|
|
179
192
|
|
|
180
193
|
# Handle OFF level
|
|
@@ -165,6 +165,9 @@ class OptimizedStartup:
|
|
|
165
165
|
# Just setup agent registry, load on demand
|
|
166
166
|
self._setup_agent_registry()
|
|
167
167
|
|
|
168
|
+
# Verify PM skills after agent setup (non-blocking)
|
|
169
|
+
self._verify_pm_skills()
|
|
170
|
+
|
|
168
171
|
elapsed = time.time() - phase_start
|
|
169
172
|
self.metrics.phases["agents"] = elapsed
|
|
170
173
|
self.metrics.agent_time = elapsed
|
|
@@ -198,6 +201,62 @@ class OptimizedStartup:
|
|
|
198
201
|
|
|
199
202
|
return self.metrics
|
|
200
203
|
|
|
204
|
+
def _verify_pm_skills(self) -> None:
|
|
205
|
+
"""Verify PM skills are deployed. Non-blocking with warnings."""
|
|
206
|
+
try:
|
|
207
|
+
from claude_mpm.services.pm_skills_deployer import PMSkillsDeployerService
|
|
208
|
+
|
|
209
|
+
deployer = PMSkillsDeployerService()
|
|
210
|
+
project_dir = Path.cwd()
|
|
211
|
+
|
|
212
|
+
result = deployer.verify_pm_skills(project_dir)
|
|
213
|
+
|
|
214
|
+
if not result.verified:
|
|
215
|
+
for warning in result.warnings:
|
|
216
|
+
self.logger.warning(warning)
|
|
217
|
+
|
|
218
|
+
# Check if auto-deploy is enabled
|
|
219
|
+
if self._should_auto_deploy_pm_skills():
|
|
220
|
+
self.logger.info("Auto-deploying PM skills...")
|
|
221
|
+
deploy_result = deployer.deploy_pm_skills(project_dir)
|
|
222
|
+
if deploy_result.success:
|
|
223
|
+
self.logger.info(
|
|
224
|
+
f"PM skills deployed: {len(deploy_result.deployed)} deployed, "
|
|
225
|
+
f"{len(deploy_result.skipped)} skipped"
|
|
226
|
+
)
|
|
227
|
+
else:
|
|
228
|
+
self.logger.warning(
|
|
229
|
+
f"PM skills deployment had errors: {len(deploy_result.errors)}"
|
|
230
|
+
)
|
|
231
|
+
else:
|
|
232
|
+
# Count skills from registry
|
|
233
|
+
registry = deployer._load_registry(project_dir)
|
|
234
|
+
skill_count = len(registry.get("skills", []))
|
|
235
|
+
self.logger.debug(f"PM skills verified: {skill_count} skills")
|
|
236
|
+
|
|
237
|
+
except ImportError:
|
|
238
|
+
self.logger.debug("PM skills deployer not available")
|
|
239
|
+
except Exception as e:
|
|
240
|
+
self.logger.warning(f"PM skills verification failed: {e}")
|
|
241
|
+
|
|
242
|
+
def _should_auto_deploy_pm_skills(self) -> bool:
|
|
243
|
+
"""Check if auto-deploy is enabled via config.
|
|
244
|
+
|
|
245
|
+
Returns:
|
|
246
|
+
True if auto-deploy should be performed (default: True for convenience)
|
|
247
|
+
"""
|
|
248
|
+
# Default to True for convenience - PM skills are essential for PM agents
|
|
249
|
+
# Users can disable by setting environment variable or config
|
|
250
|
+
import os
|
|
251
|
+
|
|
252
|
+
# Check environment variable override
|
|
253
|
+
env_disable = os.environ.get("CLAUDE_MPM_DISABLE_AUTO_DEPLOY_PM_SKILLS", "").lower()
|
|
254
|
+
if env_disable in ("1", "true", "yes"):
|
|
255
|
+
return False
|
|
256
|
+
|
|
257
|
+
# Default to enabled
|
|
258
|
+
return True
|
|
259
|
+
|
|
201
260
|
def _setup_logging(self):
|
|
202
261
|
"""Setup basic logging (critical path)."""
|
|
203
262
|
# Minimal logging setup - already handled by logger module
|