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.

Files changed (263) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/__init__.py +4 -0
  3. claude_mpm/agents/BASE_AGENT.md +164 -0
  4. claude_mpm/agents/{PM_INSTRUCTIONS_TEACH.md → CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md} +721 -41
  5. claude_mpm/agents/MEMORY.md +1 -1
  6. claude_mpm/agents/PM_INSTRUCTIONS.md +468 -468
  7. claude_mpm/agents/WORKFLOW.md +5 -254
  8. claude_mpm/agents/agent_loader.py +13 -44
  9. claude_mpm/agents/base_agent.json +1 -1
  10. claude_mpm/agents/frontmatter_validator.py +70 -2
  11. claude_mpm/agents/templates/circuit-breakers.md +431 -45
  12. claude_mpm/cli/__init__.py +0 -1
  13. claude_mpm/cli/__main__.py +4 -0
  14. claude_mpm/cli/chrome_devtools_installer.py +175 -0
  15. claude_mpm/cli/commands/agent_state_manager.py +18 -27
  16. claude_mpm/cli/commands/agents.py +175 -37
  17. claude_mpm/cli/commands/auto_configure.py +723 -236
  18. claude_mpm/cli/commands/config.py +88 -2
  19. claude_mpm/cli/commands/configure.py +1262 -157
  20. claude_mpm/cli/commands/configure_agent_display.py +25 -6
  21. claude_mpm/cli/commands/mpm_init/core.py +225 -46
  22. claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
  23. claude_mpm/cli/commands/mpm_init/prompts.py +280 -0
  24. claude_mpm/cli/commands/postmortem.py +1 -1
  25. claude_mpm/cli/commands/profile.py +277 -0
  26. claude_mpm/cli/commands/skills.py +214 -189
  27. claude_mpm/cli/commands/summarize.py +413 -0
  28. claude_mpm/cli/executor.py +21 -3
  29. claude_mpm/cli/interactive/agent_wizard.py +85 -10
  30. claude_mpm/cli/parsers/agents_parser.py +54 -9
  31. claude_mpm/cli/parsers/auto_configure_parser.py +13 -138
  32. claude_mpm/cli/parsers/base_parser.py +12 -0
  33. claude_mpm/cli/parsers/config_parser.py +153 -83
  34. claude_mpm/cli/parsers/profile_parser.py +148 -0
  35. claude_mpm/cli/parsers/skills_parser.py +3 -2
  36. claude_mpm/cli/startup.py +879 -149
  37. claude_mpm/commands/mpm-config.md +28 -0
  38. claude_mpm/commands/mpm-doctor.md +9 -22
  39. claude_mpm/commands/mpm-help.md +5 -287
  40. claude_mpm/commands/mpm-init.md +81 -507
  41. claude_mpm/commands/mpm-monitor.md +15 -402
  42. claude_mpm/commands/mpm-organize.md +120 -0
  43. claude_mpm/commands/mpm-postmortem.md +6 -108
  44. claude_mpm/commands/mpm-session-resume.md +12 -363
  45. claude_mpm/commands/mpm-status.md +5 -69
  46. claude_mpm/commands/mpm-ticket-view.md +52 -495
  47. claude_mpm/commands/mpm-version.md +5 -107
  48. claude_mpm/config/agent_sources.py +27 -0
  49. claude_mpm/core/config.py +2 -4
  50. claude_mpm/core/framework/formatters/content_formatter.py +3 -13
  51. claude_mpm/core/framework/loaders/agent_loader.py +8 -5
  52. claude_mpm/core/framework/loaders/instruction_loader.py +52 -11
  53. claude_mpm/core/framework_loader.py +4 -2
  54. claude_mpm/core/logger.py +13 -0
  55. claude_mpm/core/optimized_startup.py +59 -0
  56. claude_mpm/core/output_style_manager.py +173 -43
  57. claude_mpm/core/shared/config_loader.py +1 -1
  58. claude_mpm/core/socketio_pool.py +3 -3
  59. claude_mpm/core/unified_agent_registry.py +134 -16
  60. claude_mpm/core/unified_config.py +22 -0
  61. claude_mpm/dashboard/static/svelte-build/_app/env.js +1 -0
  62. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.B_FtCwCQ.css +1 -0
  63. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.Cl_eSA4x.css +1 -0
  64. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BgChzWQ1.js +1 -0
  65. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIXEwuWe.js +1 -0
  66. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CWc5urbQ.js +1 -0
  67. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DMkZpdF2.js +2 -0
  68. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DjhvlsAc.js +1 -0
  69. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/N4qtv3Hx.js +2 -0
  70. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/uj46x2Wr.js +1 -0
  71. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.DTL5mJO-.js +2 -0
  72. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.DzuEhzqh.js +1 -0
  73. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/0.CAGBuiOw.js +1 -0
  74. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DFLC8jdE.js +1 -0
  75. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.DPvEihJJ.js +10 -0
  76. claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -0
  77. claude_mpm/dashboard/static/svelte-build/favicon.svg +7 -0
  78. claude_mpm/dashboard/static/svelte-build/index.html +36 -0
  79. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc +0 -0
  80. claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc +0 -0
  81. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
  82. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
  83. claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
  84. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
  85. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
  86. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc +0 -0
  87. claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
  88. claude_mpm/hooks/claude_hooks/event_handlers.py +211 -78
  89. claude_mpm/hooks/claude_hooks/hook_handler.py +155 -1
  90. claude_mpm/hooks/claude_hooks/installer.py +33 -10
  91. claude_mpm/hooks/claude_hooks/memory_integration.py +28 -0
  92. claude_mpm/hooks/claude_hooks/response_tracking.py +2 -3
  93. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
  94. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager.cpython-311.pyc +0 -0
  95. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
  96. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc +0 -0
  97. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
  98. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
  99. claude_mpm/hooks/claude_hooks/services/connection_manager.py +30 -6
  100. claude_mpm/hooks/memory_integration_hook.py +46 -1
  101. claude_mpm/init.py +63 -19
  102. claude_mpm/models/agent_definition.py +7 -0
  103. claude_mpm/models/git_repository.py +3 -3
  104. claude_mpm/scripts/claude-hook-handler.sh +58 -18
  105. claude_mpm/scripts/launch_monitor.py +93 -13
  106. claude_mpm/scripts/start_activity_logging.py +0 -0
  107. claude_mpm/services/agents/agent_builder.py +3 -3
  108. claude_mpm/services/agents/agent_recommendation_service.py +278 -0
  109. claude_mpm/services/agents/agent_review_service.py +280 -0
  110. claude_mpm/services/agents/cache_git_manager.py +6 -6
  111. claude_mpm/services/agents/deployment/agent_deployment.py +29 -7
  112. claude_mpm/services/agents/deployment/agent_discovery_service.py +4 -5
  113. claude_mpm/services/agents/deployment/agent_template_builder.py +5 -3
  114. claude_mpm/services/agents/deployment/agents_directory_resolver.py +2 -2
  115. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +320 -29
  116. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +546 -68
  117. claude_mpm/services/agents/git_source_manager.py +36 -2
  118. claude_mpm/services/agents/loading/base_agent_manager.py +1 -13
  119. claude_mpm/services/agents/recommender.py +5 -3
  120. claude_mpm/services/agents/single_tier_deployment_service.py +2 -2
  121. claude_mpm/services/agents/sources/git_source_sync_service.py +13 -6
  122. claude_mpm/services/agents/startup_sync.py +22 -2
  123. claude_mpm/services/agents/toolchain_detector.py +10 -6
  124. claude_mpm/services/analysis/__init__.py +11 -1
  125. claude_mpm/services/analysis/clone_detector.py +1030 -0
  126. claude_mpm/services/command_deployment_service.py +81 -10
  127. claude_mpm/services/diagnostics/checks/agent_check.py +2 -2
  128. claude_mpm/services/diagnostics/checks/agent_sources_check.py +1 -1
  129. claude_mpm/services/event_bus/config.py +3 -1
  130. claude_mpm/services/git/git_operations_service.py +101 -16
  131. claude_mpm/services/monitor/daemon.py +9 -2
  132. claude_mpm/services/monitor/daemon_manager.py +39 -3
  133. claude_mpm/services/monitor/management/lifecycle.py +8 -1
  134. claude_mpm/services/monitor/server.py +698 -22
  135. claude_mpm/services/pm_skills_deployer.py +676 -0
  136. claude_mpm/services/profile_manager.py +331 -0
  137. claude_mpm/services/project/project_organizer.py +4 -0
  138. claude_mpm/services/self_upgrade_service.py +120 -12
  139. claude_mpm/services/skills/__init__.py +3 -0
  140. claude_mpm/services/skills/git_skill_source_manager.py +130 -2
  141. claude_mpm/services/skills/selective_skill_deployer.py +704 -0
  142. claude_mpm/services/skills/skill_to_agent_mapper.py +406 -0
  143. claude_mpm/services/skills_deployer.py +126 -9
  144. claude_mpm/services/socketio/dashboard_server.py +1 -0
  145. claude_mpm/services/socketio/event_normalizer.py +51 -6
  146. claude_mpm/services/socketio/server/core.py +386 -108
  147. claude_mpm/services/version_control/git_operations.py +103 -0
  148. claude_mpm/skills/skill_manager.py +92 -3
  149. claude_mpm/utils/agent_dependency_loader.py +14 -2
  150. claude_mpm/utils/agent_filters.py +17 -44
  151. claude_mpm/utils/gitignore.py +3 -0
  152. claude_mpm/utils/migration.py +4 -4
  153. claude_mpm/utils/robust_installer.py +47 -3
  154. {claude_mpm-5.0.9.dist-info → claude_mpm-5.4.41.dist-info}/METADATA +57 -87
  155. {claude_mpm-5.0.9.dist-info → claude_mpm-5.4.41.dist-info}/RECORD +160 -211
  156. claude_mpm-5.4.41.dist-info/entry_points.txt +5 -0
  157. claude_mpm-5.4.41.dist-info/licenses/LICENSE +94 -0
  158. claude_mpm-5.4.41.dist-info/licenses/LICENSE-FAQ.md +153 -0
  159. claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -292
  160. claude_mpm/agents/BASE_DOCUMENTATION.md +0 -53
  161. claude_mpm/agents/BASE_OPS.md +0 -219
  162. claude_mpm/agents/BASE_PM.md +0 -480
  163. claude_mpm/agents/BASE_PROMPT_ENGINEER.md +0 -787
  164. claude_mpm/agents/BASE_QA.md +0 -167
  165. claude_mpm/agents/BASE_RESEARCH.md +0 -53
  166. claude_mpm/agents/base_agent_loader.py +0 -601
  167. claude_mpm/cli/commands/agents_detect.py +0 -380
  168. claude_mpm/cli/commands/agents_recommend.py +0 -309
  169. claude_mpm/cli/ticket_cli.py +0 -35
  170. claude_mpm/commands/mpm-agents-auto-configure.md +0 -278
  171. claude_mpm/commands/mpm-agents-detect.md +0 -177
  172. claude_mpm/commands/mpm-agents-list.md +0 -131
  173. claude_mpm/commands/mpm-agents-recommend.md +0 -223
  174. claude_mpm/commands/mpm-config-view.md +0 -150
  175. claude_mpm/commands/mpm-ticket-organize.md +0 -304
  176. claude_mpm/dashboard/analysis_runner.py +0 -455
  177. claude_mpm/dashboard/index.html +0 -13
  178. claude_mpm/dashboard/open_dashboard.py +0 -66
  179. claude_mpm/dashboard/static/css/activity.css +0 -1958
  180. claude_mpm/dashboard/static/css/connection-status.css +0 -370
  181. claude_mpm/dashboard/static/css/dashboard.css +0 -4701
  182. claude_mpm/dashboard/static/js/components/activity-tree.js +0 -1871
  183. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +0 -777
  184. claude_mpm/dashboard/static/js/components/agent-inference.js +0 -956
  185. claude_mpm/dashboard/static/js/components/build-tracker.js +0 -333
  186. claude_mpm/dashboard/static/js/components/code-simple.js +0 -857
  187. claude_mpm/dashboard/static/js/components/connection-debug.js +0 -654
  188. claude_mpm/dashboard/static/js/components/diff-viewer.js +0 -891
  189. claude_mpm/dashboard/static/js/components/event-processor.js +0 -542
  190. claude_mpm/dashboard/static/js/components/event-viewer.js +0 -1155
  191. claude_mpm/dashboard/static/js/components/export-manager.js +0 -368
  192. claude_mpm/dashboard/static/js/components/file-change-tracker.js +0 -443
  193. claude_mpm/dashboard/static/js/components/file-change-viewer.js +0 -690
  194. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -724
  195. claude_mpm/dashboard/static/js/components/file-viewer.js +0 -580
  196. claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -211
  197. claude_mpm/dashboard/static/js/components/hud-manager.js +0 -671
  198. claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -1718
  199. claude_mpm/dashboard/static/js/components/module-viewer.js +0 -2764
  200. claude_mpm/dashboard/static/js/components/session-manager.js +0 -579
  201. claude_mpm/dashboard/static/js/components/socket-manager.js +0 -368
  202. claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -749
  203. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +0 -1824
  204. claude_mpm/dashboard/static/js/components/working-directory.js +0 -920
  205. claude_mpm/dashboard/static/js/connection-manager.js +0 -536
  206. claude_mpm/dashboard/static/js/dashboard.js +0 -1914
  207. claude_mpm/dashboard/static/js/extension-error-handler.js +0 -164
  208. claude_mpm/dashboard/static/js/socket-client.js +0 -1474
  209. claude_mpm/dashboard/static/js/tab-isolation-fix.js +0 -185
  210. claude_mpm/dashboard/static/socket.io.min.js +0 -7
  211. claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +0 -7
  212. claude_mpm/dashboard/templates/code_simple.html +0 -153
  213. claude_mpm/dashboard/templates/index.html +0 -606
  214. claude_mpm/dashboard/test_dashboard.html +0 -372
  215. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
  216. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
  217. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
  218. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
  219. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
  220. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
  221. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
  222. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
  223. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
  224. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
  225. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
  226. claude_mpm/scripts/mcp_server.py +0 -75
  227. claude_mpm/scripts/mcp_wrapper.py +0 -39
  228. claude_mpm/services/mcp_gateway/__init__.py +0 -159
  229. claude_mpm/services/mcp_gateway/auto_configure.py +0 -369
  230. claude_mpm/services/mcp_gateway/config/__init__.py +0 -17
  231. claude_mpm/services/mcp_gateway/config/config_loader.py +0 -296
  232. claude_mpm/services/mcp_gateway/config/config_schema.py +0 -243
  233. claude_mpm/services/mcp_gateway/config/configuration.py +0 -429
  234. claude_mpm/services/mcp_gateway/core/__init__.py +0 -43
  235. claude_mpm/services/mcp_gateway/core/base.py +0 -312
  236. claude_mpm/services/mcp_gateway/core/exceptions.py +0 -253
  237. claude_mpm/services/mcp_gateway/core/interfaces.py +0 -443
  238. claude_mpm/services/mcp_gateway/core/process_pool.py +0 -977
  239. claude_mpm/services/mcp_gateway/core/singleton_manager.py +0 -315
  240. claude_mpm/services/mcp_gateway/core/startup_verification.py +0 -316
  241. claude_mpm/services/mcp_gateway/main.py +0 -589
  242. claude_mpm/services/mcp_gateway/registry/__init__.py +0 -12
  243. claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -412
  244. claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -489
  245. claude_mpm/services/mcp_gateway/server/__init__.py +0 -15
  246. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -414
  247. claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -372
  248. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -712
  249. claude_mpm/services/mcp_gateway/tools/__init__.py +0 -36
  250. claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -485
  251. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -789
  252. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +0 -654
  253. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +0 -456
  254. claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -551
  255. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +0 -555
  256. claude_mpm/services/mcp_gateway/utils/__init__.py +0 -14
  257. claude_mpm/services/mcp_gateway/utils/package_version_checker.py +0 -160
  258. claude_mpm/services/mcp_gateway/utils/update_preferences.py +0 -170
  259. claude_mpm-5.0.9.dist-info/entry_points.txt +0 -10
  260. claude_mpm-5.0.9.dist-info/licenses/LICENSE +0 -21
  261. /claude_mpm/agents/{OUTPUT_STYLE.md → CLAUDE_MPM_OUTPUT_STYLE.md} +0 -0
  262. {claude_mpm-5.0.9.dist-info → claude_mpm-5.4.41.dist-info}/WHEEL +0 -0
  263. {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
- deprecated_aliases: []
8
- description: Show comprehensive version information for Claude MPM
7
+ description: Show version information
9
8
  ---
10
- # Display Claude MPM Version Information
9
+ # /mpm-version
11
10
 
12
- Show comprehensive version information for Claude MPM project, agents, and skills.
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
- ## Description
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
- - `/mpm-help` - Show all available MPM commands
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": True,
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
- # Add agent memories if available
104
- if framework_content.get("agent_memories"):
105
- agent_memories = framework_content["agent_memories"]
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 from .claude-mpm/agents/ directories.
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 (HIGHEST PRIORITY)
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
- loaded_content = self.file_loader.try_load_file(
107
- deployed_path, "deployed PM_INSTRUCTIONS_DEPLOYED.md"
108
- )
109
- if loaded_content:
110
- content["framework_instructions"] = loaded_content
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 # Stop here - deployed version takes precedence
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
- if "agent_memories" in memories:
261
- content["agent_memories"] = memories["agent_memories"]
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