claude-mpm 4.24.0__py3-none-any.whl → 5.0.9__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 (502) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +12 -0
  3. claude_mpm/agents/OUTPUT_STYLE.md +3 -48
  4. claude_mpm/agents/PM_INSTRUCTIONS.md +721 -911
  5. claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
  6. claude_mpm/agents/WORKFLOW.md +4 -4
  7. claude_mpm/agents/__init__.py +6 -0
  8. claude_mpm/agents/agent_loader.py +1 -4
  9. claude_mpm/agents/base_agent.json +6 -3
  10. claude_mpm/agents/base_agent_loader.py +10 -35
  11. claude_mpm/agents/frontmatter_validator.py +1 -1
  12. claude_mpm/agents/templates/{circuit_breakers.md → circuit-breakers.md} +370 -3
  13. claude_mpm/agents/templates/context-management-examples.md +544 -0
  14. claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +48 -0
  15. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  16. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  17. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  18. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  19. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  20. claude_mpm/cli/__init__.py +38 -2
  21. claude_mpm/cli/commands/__init__.py +2 -0
  22. claude_mpm/cli/commands/agent_source.py +774 -0
  23. claude_mpm/cli/commands/agent_state_manager.py +188 -30
  24. claude_mpm/cli/commands/agents.py +959 -36
  25. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  26. claude_mpm/cli/commands/agents_discover.py +338 -0
  27. claude_mpm/cli/commands/aggregate.py +1 -1
  28. claude_mpm/cli/commands/analyze.py +3 -3
  29. claude_mpm/cli/commands/auto_configure.py +2 -6
  30. claude_mpm/cli/commands/config.py +7 -4
  31. claude_mpm/cli/commands/configure.py +769 -45
  32. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  33. claude_mpm/cli/commands/configure_navigation.py +63 -46
  34. claude_mpm/cli/commands/debug.py +12 -12
  35. claude_mpm/cli/commands/doctor.py +10 -2
  36. claude_mpm/cli/commands/hook_errors.py +277 -0
  37. claude_mpm/cli/commands/local_deploy.py +1 -4
  38. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  39. claude_mpm/cli/commands/mpm_init/core.py +49 -1
  40. claude_mpm/cli/commands/mpm_init/git_activity.py +10 -10
  41. claude_mpm/cli/commands/mpm_init/prompts.py +6 -6
  42. claude_mpm/cli/commands/postmortem.py +401 -0
  43. claude_mpm/cli/commands/run.py +123 -165
  44. claude_mpm/cli/commands/skill_source.py +694 -0
  45. claude_mpm/cli/commands/skills.py +757 -20
  46. claude_mpm/cli/executor.py +78 -3
  47. claude_mpm/cli/interactive/agent_wizard.py +955 -45
  48. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  49. claude_mpm/cli/parsers/agents_parser.py +256 -4
  50. claude_mpm/cli/parsers/base_parser.py +53 -0
  51. claude_mpm/cli/parsers/config_parser.py +96 -43
  52. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  53. claude_mpm/cli/parsers/skills_parser.py +145 -0
  54. claude_mpm/cli/parsers/source_parser.py +138 -0
  55. claude_mpm/cli/startup.py +538 -106
  56. claude_mpm/cli/startup_display.py +480 -0
  57. claude_mpm/cli/utils.py +1 -1
  58. claude_mpm/cli_module/commands.py +1 -1
  59. claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
  60. claude_mpm/commands/mpm-agents-detect.md +9 -0
  61. claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
  62. claude_mpm/commands/mpm-agents-recommend.md +9 -0
  63. claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
  64. claude_mpm/commands/mpm-doctor.md +9 -0
  65. claude_mpm/commands/mpm-help.md +14 -2
  66. claude_mpm/commands/mpm-init.md +27 -2
  67. claude_mpm/commands/mpm-monitor.md +9 -0
  68. claude_mpm/commands/mpm-postmortem.md +123 -0
  69. claude_mpm/commands/{mpm-resume.md → mpm-session-resume.md} +9 -0
  70. claude_mpm/commands/mpm-status.md +9 -0
  71. claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
  72. claude_mpm/commands/mpm-ticket-view.md +552 -0
  73. claude_mpm/commands/mpm-version.md +9 -0
  74. claude_mpm/commands/mpm.md +10 -0
  75. claude_mpm/config/agent_presets.py +488 -0
  76. claude_mpm/config/agent_sources.py +325 -0
  77. claude_mpm/config/skill_presets.py +392 -0
  78. claude_mpm/config/skill_sources.py +590 -0
  79. claude_mpm/constants.py +13 -0
  80. claude_mpm/core/claude_runner.py +5 -34
  81. claude_mpm/core/config.py +16 -0
  82. claude_mpm/core/constants.py +1 -1
  83. claude_mpm/core/framework/__init__.py +3 -16
  84. claude_mpm/core/framework/loaders/file_loader.py +54 -101
  85. claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
  86. claude_mpm/core/hook_error_memory.py +381 -0
  87. claude_mpm/core/hook_manager.py +41 -2
  88. claude_mpm/core/interactive_session.py +91 -10
  89. claude_mpm/core/logger.py +3 -1
  90. claude_mpm/core/oneshot_session.py +71 -8
  91. claude_mpm/core/protocols/__init__.py +23 -0
  92. claude_mpm/core/protocols/runner_protocol.py +103 -0
  93. claude_mpm/core/protocols/session_protocol.py +131 -0
  94. claude_mpm/core/shared/singleton_manager.py +11 -4
  95. claude_mpm/core/system_context.py +38 -0
  96. claude_mpm/dashboard/static/css/activity.css +69 -69
  97. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  98. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  99. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  100. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  101. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  102. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  103. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  104. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  105. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  106. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  107. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  108. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  109. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  110. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  111. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  112. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  113. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  114. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  115. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  116. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  117. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  118. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  119. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  120. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  121. claude_mpm/dashboard/templates/code_simple.html +23 -23
  122. claude_mpm/dashboard/templates/index.html +18 -18
  123. claude_mpm/experimental/cli_enhancements.py +1 -5
  124. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
  125. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
  126. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
  127. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
  128. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
  129. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
  130. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  131. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
  132. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
  133. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
  134. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
  135. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
  136. claude_mpm/hooks/failure_learning/__init__.py +2 -8
  137. claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
  138. claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
  139. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
  140. claude_mpm/hooks/kuzu_response_hook.py +1 -5
  141. claude_mpm/models/git_repository.py +198 -0
  142. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  143. claude_mpm/scripts/start_activity_logging.py +3 -1
  144. claude_mpm/services/agents/agent_builder.py +45 -9
  145. claude_mpm/services/agents/agent_preset_service.py +238 -0
  146. claude_mpm/services/agents/agent_selection_service.py +484 -0
  147. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  148. claude_mpm/services/agents/cache_git_manager.py +621 -0
  149. claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
  150. claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
  151. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  152. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
  153. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  154. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  155. claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
  156. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  157. claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
  158. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  159. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
  160. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  161. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
  162. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
  163. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  164. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
  165. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  166. claude_mpm/services/agents/git_source_manager.py +629 -0
  167. claude_mpm/services/agents/loading/framework_agent_loader.py +9 -12
  168. claude_mpm/services/agents/local_template_manager.py +50 -10
  169. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  170. claude_mpm/services/agents/sources/__init__.py +13 -0
  171. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  172. claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
  173. claude_mpm/services/agents/startup_sync.py +239 -0
  174. claude_mpm/services/agents/toolchain_detector.py +474 -0
  175. claude_mpm/services/analysis/__init__.py +25 -0
  176. claude_mpm/services/analysis/postmortem_reporter.py +474 -0
  177. claude_mpm/services/analysis/postmortem_service.py +765 -0
  178. claude_mpm/services/cli/session_pause_manager.py +1 -1
  179. claude_mpm/services/command_deployment_service.py +200 -6
  180. claude_mpm/services/core/base.py +7 -2
  181. claude_mpm/services/core/interfaces/__init__.py +1 -3
  182. claude_mpm/services/core/interfaces/health.py +1 -4
  183. claude_mpm/services/core/models/__init__.py +2 -11
  184. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  185. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  186. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  187. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  188. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  189. claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
  190. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  191. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  192. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  193. claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
  194. claude_mpm/services/event_bus/direct_relay.py +3 -3
  195. claude_mpm/services/events/consumers/logging.py +1 -2
  196. claude_mpm/services/git/__init__.py +21 -0
  197. claude_mpm/services/git/git_operations_service.py +494 -0
  198. claude_mpm/services/github/__init__.py +21 -0
  199. claude_mpm/services/github/github_cli_service.py +397 -0
  200. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  201. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  202. claude_mpm/services/instructions/__init__.py +9 -0
  203. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  204. claude_mpm/services/local_ops/__init__.py +3 -13
  205. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  206. claude_mpm/services/local_ops/health_manager.py +1 -4
  207. claude_mpm/services/local_ops/resource_monitor.py +1 -1
  208. claude_mpm/services/mcp_config_manager.py +75 -145
  209. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  210. claude_mpm/services/mcp_gateway/core/process_pool.py +22 -16
  211. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
  212. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  213. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  214. claude_mpm/services/mcp_service_verifier.py +6 -3
  215. claude_mpm/services/model/model_router.py +1 -2
  216. claude_mpm/services/monitor/daemon.py +29 -9
  217. claude_mpm/services/monitor/daemon_manager.py +96 -19
  218. claude_mpm/services/monitor/server.py +2 -2
  219. claude_mpm/services/port_manager.py +1 -1
  220. claude_mpm/services/pr/__init__.py +14 -0
  221. claude_mpm/services/pr/pr_template_service.py +329 -0
  222. claude_mpm/services/project/documentation_manager.py +2 -1
  223. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  224. claude_mpm/services/runner_configuration_service.py +16 -3
  225. claude_mpm/services/session_management_service.py +16 -4
  226. claude_mpm/services/skills/__init__.py +18 -0
  227. claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
  228. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  229. claude_mpm/services/skills_config.py +547 -0
  230. claude_mpm/services/skills_deployer.py +955 -0
  231. claude_mpm/services/socketio/handlers/connection.py +1 -1
  232. claude_mpm/services/socketio/handlers/git.py +1 -1
  233. claude_mpm/services/socketio/server/core.py +1 -4
  234. claude_mpm/services/socketio/server/main.py +1 -3
  235. claude_mpm/services/system_instructions_service.py +1 -3
  236. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  237. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  238. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  239. claude_mpm/services/unified/unified_deployment.py +1 -5
  240. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  241. claude_mpm/services/visualization/__init__.py +1 -5
  242. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  243. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +2 -2
  244. claude_mpm/skills/skills_registry.py +0 -1
  245. claude_mpm/templates/questions/__init__.py +38 -0
  246. claude_mpm/templates/questions/base.py +193 -0
  247. claude_mpm/templates/questions/pr_strategy.py +311 -0
  248. claude_mpm/templates/questions/project_init.py +385 -0
  249. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  250. claude_mpm/tools/__main__.py +8 -8
  251. claude_mpm/utils/agent_dependency_loader.py +77 -10
  252. claude_mpm/utils/agent_filters.py +288 -0
  253. claude_mpm/utils/dependency_cache.py +3 -1
  254. claude_mpm/utils/gitignore.py +241 -0
  255. claude_mpm/utils/migration.py +372 -0
  256. claude_mpm/utils/progress.py +387 -0
  257. claude_mpm/utils/robust_installer.py +2 -4
  258. claude_mpm/utils/structured_questions.py +619 -0
  259. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/METADATA +396 -43
  260. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/RECORD +268 -422
  261. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  262. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  263. claude_mpm/agents/templates/agent-manager.json +0 -273
  264. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  265. claude_mpm/agents/templates/api_qa.json +0 -183
  266. claude_mpm/agents/templates/clerk-ops.json +0 -235
  267. claude_mpm/agents/templates/code_analyzer.json +0 -101
  268. claude_mpm/agents/templates/content-agent.json +0 -358
  269. claude_mpm/agents/templates/dart_engineer.json +0 -307
  270. claude_mpm/agents/templates/data_engineer.json +0 -225
  271. claude_mpm/agents/templates/documentation.json +0 -238
  272. claude_mpm/agents/templates/engineer.json +0 -210
  273. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  274. claude_mpm/agents/templates/golang_engineer.json +0 -270
  275. claude_mpm/agents/templates/imagemagick.json +0 -264
  276. claude_mpm/agents/templates/java_engineer.json +0 -346
  277. claude_mpm/agents/templates/javascript_engineer_agent.json +0 -380
  278. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  279. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  280. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  281. claude_mpm/agents/templates/memory_manager.json +0 -158
  282. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  283. claude_mpm/agents/templates/ops.json +0 -185
  284. claude_mpm/agents/templates/php-engineer.json +0 -287
  285. claude_mpm/agents/templates/product_owner.json +0 -338
  286. claude_mpm/agents/templates/project_organizer.json +0 -144
  287. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  288. claude_mpm/agents/templates/python_engineer.json +0 -387
  289. claude_mpm/agents/templates/qa.json +0 -243
  290. claude_mpm/agents/templates/react_engineer.json +0 -239
  291. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  292. claude_mpm/agents/templates/research.json +0 -188
  293. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  294. claude_mpm/agents/templates/rust_engineer.json +0 -275
  295. claude_mpm/agents/templates/security.json +0 -202
  296. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  297. claude_mpm/agents/templates/tauri_engineer.json +0 -274
  298. claude_mpm/agents/templates/ticketing.json +0 -178
  299. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  300. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  301. claude_mpm/agents/templates/version_control.json +0 -159
  302. claude_mpm/agents/templates/web_qa.json +0 -400
  303. claude_mpm/agents/templates/web_ui.json +0 -189
  304. claude_mpm/commands/mpm-tickets.md +0 -151
  305. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  306. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  307. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  308. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  309. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  310. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  311. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  312. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  313. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  314. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  315. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  316. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  317. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  318. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  319. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  320. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  321. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  322. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  323. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  324. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  325. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  326. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  327. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  328. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  329. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  330. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  331. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  332. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  333. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  334. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  335. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  336. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  337. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  338. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  339. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  340. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  341. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  342. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  343. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  344. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  345. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  346. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  347. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  348. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  349. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  350. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  351. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  352. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  353. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  354. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  355. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  356. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  357. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  358. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  359. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  360. claude_mpm/dashboard/static/built/react/events.js +0 -30
  361. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  362. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  363. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  364. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  365. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  366. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  367. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  368. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  369. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  370. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  371. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  372. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  373. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  374. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  375. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  376. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  377. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  378. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  379. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  380. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  381. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  382. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  383. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  384. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  385. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  386. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  387. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  388. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  389. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  390. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  391. claude_mpm/dashboard/static/events.html +0 -607
  392. claude_mpm/dashboard/static/index.html +0 -635
  393. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  394. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  395. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  396. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  397. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  398. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  399. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  400. claude_mpm/dashboard/static/legacy/files.html +0 -747
  401. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  402. claude_mpm/dashboard/static/monitors.html +0 -431
  403. claude_mpm/dashboard/static/production/events.html +0 -659
  404. claude_mpm/dashboard/static/production/main.html +0 -698
  405. claude_mpm/dashboard/static/production/monitors.html +0 -483
  406. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  407. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  408. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  409. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  410. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  411. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
  412. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
  413. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
  414. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
  415. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
  416. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
  417. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
  418. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
  419. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
  420. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
  421. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
  422. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
  423. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
  424. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
  425. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
  426. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
  427. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
  428. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  429. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  430. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  431. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  432. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  433. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  434. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  435. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  436. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  437. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  438. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
  439. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
  440. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
  441. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
  442. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
  443. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
  444. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
  445. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  446. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  447. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  448. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  449. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
  450. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
  451. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  452. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  453. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  454. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  455. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
  456. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
  457. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
  458. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
  459. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
  460. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
  461. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
  462. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
  463. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
  464. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
  465. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
  466. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
  467. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
  468. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
  469. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
  470. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
  471. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
  472. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
  473. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
  474. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
  475. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
  476. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
  477. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
  478. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  479. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  480. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  481. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  482. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  483. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  484. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
  485. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
  486. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
  487. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
  488. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
  489. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
  490. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
  491. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
  492. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
  493. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
  494. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
  495. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  496. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  497. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  498. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  499. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/WHEEL +0 -0
  500. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/entry_points.txt +0 -0
  501. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/licenses/LICENSE +0 -0
  502. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/top_level.txt +0 -0
@@ -24,50 +24,50 @@
24
24
  border-radius: 4px;
25
25
  margin-bottom: 20px;
26
26
  }
27
-
27
+
28
28
  /* Tree visualization styles */
29
29
  .tree-node {
30
30
  cursor: pointer;
31
31
  }
32
-
32
+
33
33
  .tree-node circle {
34
34
  fill: #fff;
35
35
  stroke: steelblue;
36
36
  stroke-width: 2px;
37
37
  transition: all 0.3s ease;
38
38
  }
39
-
39
+
40
40
  .tree-node:hover circle {
41
41
  fill: #e6f3ff;
42
42
  stroke-width: 3px;
43
43
  }
44
-
44
+
45
45
  .tree-node text {
46
46
  font: 12px sans-serif;
47
47
  pointer-events: none;
48
48
  }
49
-
49
+
50
50
  .tree-link {
51
51
  fill: none;
52
52
  stroke: #ccc;
53
53
  stroke-width: 2px;
54
54
  }
55
-
55
+
56
56
  .view-toggle button {
57
57
  transition: all 0.3s ease;
58
58
  }
59
-
59
+
60
60
  .view-toggle button:hover {
61
61
  transform: translateY(-1px);
62
62
  box-shadow: 0 2px 4px rgba(0,0,0,0.2);
63
63
  }
64
-
64
+
65
65
  .file-selector input:focus {
66
66
  outline: none;
67
67
  border-color: #007cba;
68
68
  box-shadow: 0 0 0 2px rgba(0, 124, 186, 0.2);
69
69
  }
70
-
70
+
71
71
  .tree-legend {
72
72
  position: absolute;
73
73
  top: 10px;
@@ -79,13 +79,13 @@
79
79
  font-size: 12px;
80
80
  z-index: 1000;
81
81
  }
82
-
82
+
83
83
  .tree-legend-item {
84
84
  margin: 2px 0;
85
85
  display: flex;
86
86
  align-items: center;
87
87
  }
88
-
88
+
89
89
  .tree-legend-color {
90
90
  width: 12px;
91
91
  height: 12px;
@@ -103,15 +103,15 @@
103
103
  <div>⏳ Page loaded...</div>
104
104
  </div>
105
105
  </div>
106
-
106
+
107
107
  <div id="code-container">
108
108
  <!-- SimpleCodeView will render here -->
109
109
  </div>
110
110
  </div>
111
-
111
+
112
112
  <script>
113
113
  console.log('[HTML] Page script starting');
114
-
114
+
115
115
  function addStatus(message) {
116
116
  const statusDiv = document.getElementById('status-messages');
117
117
  if (statusDiv) {
@@ -119,27 +119,27 @@
119
119
  }
120
120
  console.log('[HTML Status]', message);
121
121
  }
122
-
122
+
123
123
  addStatus('⏳ Loading code-simple.js...');
124
124
  </script>
125
-
125
+
126
126
  <!-- D3.js for tree visualization -->
127
- <script src="https://d3js.org/d3.v7.min.js"
127
+ <script src="https://d3js.org/d3.v7.min.js"
128
128
  onload="addStatus('✅ D3.js loaded successfully')"
129
129
  onerror="addStatus('❌ Failed to load D3.js')"></script>
130
-
130
+
131
131
  <!-- Socket.IO for real-time communication -->
132
- <script src="https://cdn.socket.io/4.7.2/socket.io.min.js"
132
+ <script src="https://cdn.socket.io/4.7.2/socket.io.min.js"
133
133
  onload="addStatus('✅ Socket.IO loaded successfully')"
134
134
  onerror="addStatus('❌ Failed to load Socket.IO')"></script>
135
-
136
- <script src="/static/js/components/code-simple.js"
135
+
136
+ <script src="/static/js/components/code-simple.js"
137
137
  onload="addStatus('✅ code-simple.js loaded successfully')"
138
138
  onerror="addStatus('❌ Failed to load code-simple.js')"></script>
139
-
139
+
140
140
  <script>
141
141
  addStatus('⏳ Waiting for initialization...');
142
-
142
+
143
143
  // Check initialization after a delay
144
144
  setTimeout(() => {
145
145
  if (window.simpleCodeView) {
@@ -15,10 +15,10 @@
15
15
 
16
16
  <!-- External Dependencies -->
17
17
  <script src="https://cdn.socket.io/4.7.5/socket.io.min.js"></script>
18
-
18
+
19
19
  <!-- D3.js for Activity Tree Visualization -->
20
20
  <script src="https://d3js.org/d3.v7.min.js"></script>
21
-
21
+
22
22
  <!-- Font Awesome for icons -->
23
23
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
24
24
 
@@ -141,7 +141,7 @@
141
141
  <body>
142
142
  <!-- Connection Notifications Area -->
143
143
  <div id="connection-notifications" class="connection-notifications"></div>
144
-
144
+
145
145
  <div class="container">
146
146
  <!-- Header Section -->
147
147
  <div class="header">
@@ -435,19 +435,19 @@
435
435
  // Set up working directory environment variables
436
436
  // These will be used by the working-directory component
437
437
  // The server will inject these values through a separate API call
438
-
438
+
439
439
  // Get the current working directory from the server
440
440
  fetch('/api/working-directory')
441
441
  .then(response => response.json())
442
442
  .then(data => {
443
443
  window.processWorkingDirectory = data.working_directory || '/Users/masa/Projects/claude-mpm';
444
444
  window.homeDirectory = data.home_directory || '/Users/masa';
445
-
445
+
446
446
  // Store in session storage for persistence
447
447
  if (window.processWorkingDirectory && window.processWorkingDirectory !== '/') {
448
448
  sessionStorage.setItem('currentWorkingDirectory', window.processWorkingDirectory);
449
449
  }
450
-
450
+
451
451
  // Dispatch event to notify components that working directory is ready
452
452
  window.dispatchEvent(new CustomEvent('workingDirectoryInitialized', {
453
453
  detail: {
@@ -462,10 +462,10 @@
462
462
  window.processWorkingDirectory = '/Users/masa/Projects/claude-mpm';
463
463
  window.homeDirectory = '/Users/masa';
464
464
  });
465
-
465
+
466
466
  // Add timestamp-based cache busting and ensure proper loading order
467
467
  const timestamp = Date.now();
468
-
468
+
469
469
  // Load modules sequentially to ensure dashboard.js loads first
470
470
  const loadModule = (src) => {
471
471
  return new Promise((resolve, reject) => {
@@ -477,7 +477,7 @@
477
477
  document.body.appendChild(script);
478
478
  });
479
479
  };
480
-
480
+
481
481
  // Load shared services first, then components
482
482
  // Load services sequentially to ensure dependencies are available
483
483
  loadModule('/static/js/shared/tooltip-service.js')
@@ -540,21 +540,21 @@
540
540
  console.error('[CRITICAL] Error loading dashboard modules:', error);
541
541
  console.error('Stack trace:', error.stack);
542
542
  });
543
-
543
+
544
544
  // Give modules time to execute and initialize dashboard
545
545
  setTimeout(() => {
546
546
  console.log('Checking dashboard initialization...');
547
-
547
+
548
548
  if (window.dashboard) {
549
549
  console.log('Dashboard found, checking auto-connect status...');
550
-
550
+
551
551
  // Force auto-connect if not already connected
552
552
  if (window.dashboard.socketManager) {
553
553
  const socketManager = window.dashboard.socketManager;
554
-
554
+
555
555
  if (!socketManager.isConnected() && !socketManager.isConnecting()) {
556
556
  console.log('Dashboard loaded but not connected, forcing auto-connect...');
557
-
557
+
558
558
  // Try to trigger auto-connect manually
559
559
  const params = new URLSearchParams(window.location.search);
560
560
  socketManager.initializeFromURL(params);
@@ -566,23 +566,23 @@
566
566
  }
567
567
  } else {
568
568
  console.warn('Dashboard still not initialized after module loading');
569
-
569
+
570
570
  // Try to manually trigger initialization
571
571
  if (document.readyState === 'complete' || document.readyState === 'interactive') {
572
572
  console.log('Document ready, attempting to trigger dashboard initialization...');
573
573
  document.dispatchEvent(new Event('DOMContentLoaded'));
574
574
  }
575
575
  }
576
-
576
+
577
577
  // Debug: Test connection settings button
578
578
  const connectionToggleBtn = document.getElementById('connection-toggle-btn');
579
579
  if (connectionToggleBtn) {
580
580
  console.log('Connection toggle button found, testing functionality...');
581
-
581
+
582
582
  // Add a debug click handler to ensure the button works
583
583
  connectionToggleBtn.addEventListener('click', () => {
584
584
  console.log('Connection toggle button clicked (debug handler)');
585
-
585
+
586
586
  if (window.dashboard && window.dashboard.socketManager) {
587
587
  console.log('Calling socketManager.toggleConnectionControls()');
588
588
  window.dashboard.socketManager.toggleConnectionControls();
@@ -31,11 +31,7 @@ import click
31
31
 
32
32
  from claude_mpm.core.logging_utils import get_logger
33
33
  from claude_mpm.hooks.validation_hooks import ValidationHooks
34
- from claude_mpm.utils.error_handler import (
35
- ErrorContext,
36
- MPMError,
37
- handle_errors,
38
- )
34
+ from claude_mpm.utils.error_handler import ErrorContext, MPMError, handle_errors
39
35
  from claude_mpm.validation import AgentValidator, ValidationResult
40
36
 
41
37
  logger = get_logger(__name__)
@@ -393,7 +393,9 @@ class EventHandlers:
393
393
  "status": (
394
394
  "success"
395
395
  if exit_code == 0
396
- else "blocked" if exit_code == 2 else "error"
396
+ else "blocked"
397
+ if exit_code == 2
398
+ else "error"
397
399
  ),
398
400
  "duration_ms": duration,
399
401
  "result_summary": result_data,
@@ -35,14 +35,8 @@ Usage:
35
35
  hook_service.register_hook(get_learning_extraction_hook())
36
36
  """
37
37
 
38
- from .failure_detection_hook import (
39
- FailureDetectionHook,
40
- get_failure_detection_hook,
41
- )
42
- from .fix_detection_hook import (
43
- FixDetectionHook,
44
- get_fix_detection_hook,
45
- )
38
+ from .failure_detection_hook import FailureDetectionHook, get_failure_detection_hook
39
+ from .fix_detection_hook import FixDetectionHook, get_fix_detection_hook
46
40
  from .learning_extraction_hook import (
47
41
  LearningExtractionHook,
48
42
  get_learning_extraction_hook,
@@ -21,12 +21,7 @@ Integration points:
21
21
  import logging
22
22
  from typing import Any, Dict
23
23
 
24
- from claude_mpm.hooks.base_hook import (
25
- BaseHook,
26
- HookContext,
27
- HookResult,
28
- HookType,
29
- )
24
+ from claude_mpm.hooks.base_hook import BaseHook, HookContext, HookResult, HookType
30
25
  from claude_mpm.services.memory.failure_tracker import get_failure_tracker
31
26
 
32
27
  logger = logging.getLogger(__name__)
@@ -23,12 +23,7 @@ Integration points:
23
23
  import logging
24
24
  from typing import Any, Dict
25
25
 
26
- from claude_mpm.hooks.base_hook import (
27
- BaseHook,
28
- HookContext,
29
- HookResult,
30
- HookType,
31
- )
26
+ from claude_mpm.hooks.base_hook import BaseHook, HookContext, HookResult, HookType
32
27
  from claude_mpm.services.memory.failure_tracker import get_failure_tracker
33
28
 
34
29
  logger = logging.getLogger(__name__)
@@ -23,12 +23,7 @@ Integration points:
23
23
  import logging
24
24
  from typing import Any
25
25
 
26
- from claude_mpm.hooks.base_hook import (
27
- BaseHook,
28
- HookContext,
29
- HookResult,
30
- HookType,
31
- )
26
+ from claude_mpm.hooks.base_hook import BaseHook, HookContext, HookResult, HookType
32
27
  from claude_mpm.services.memory.failure_tracker import get_failure_tracker
33
28
 
34
29
  logger = logging.getLogger(__name__)
@@ -20,11 +20,7 @@ DESIGN DECISIONS:
20
20
  import logging
21
21
  from typing import Any, Optional
22
22
 
23
- from claude_mpm.hooks.base_hook import (
24
- HookContext,
25
- HookResult,
26
- PostDelegationHook,
27
- )
23
+ from claude_mpm.hooks.base_hook import HookContext, HookResult, PostDelegationHook
28
24
  from claude_mpm.hooks.kuzu_memory_hook import get_kuzu_memory_hook
29
25
 
30
26
  logger = logging.getLogger(__name__)
@@ -0,0 +1,198 @@
1
+ """Git repository model for agent sources."""
2
+
3
+ from dataclasses import dataclass
4
+ from datetime import datetime
5
+ from pathlib import Path
6
+ from typing import Optional
7
+ from urllib.parse import urlparse
8
+
9
+
10
+ @dataclass
11
+ class GitRepository:
12
+ """Represents a Git repository configuration for agent sources.
13
+
14
+ This model tracks Git repositories that contain agent markdown files.
15
+ Repositories are cached locally and synced using ETag-based HTTP caching.
16
+
17
+ Attributes:
18
+ url: Full GitHub repository URL (e.g., https://github.com/owner/repo)
19
+ subdirectory: Optional subdirectory within repository (e.g., "agents/backend")
20
+ enabled: Whether this repository should be synced
21
+ priority: Priority for agent resolution (lower = higher precedence)
22
+ last_synced: Timestamp of last successful sync
23
+ etag: HTTP ETag from last sync for incremental updates
24
+ """
25
+
26
+ url: str
27
+ subdirectory: Optional[str] = None
28
+ enabled: bool = True
29
+ priority: int = 100
30
+ last_synced: Optional[datetime] = None
31
+ etag: Optional[str] = None
32
+
33
+ @property
34
+ def cache_path(self) -> Path:
35
+ """Return cache directory path for this repository.
36
+
37
+ Cache structure: ~/.claude-mpm/cache/remote-agents/{owner}/{repo}/{subdirectory}/
38
+
39
+ Returns:
40
+ Absolute path to cache directory for this repository
41
+
42
+ Example:
43
+ >>> repo = GitRepository(
44
+ ... url="https://github.com/bobmatnyc/claude-mpm-agents",
45
+ ... subdirectory="agents"
46
+ ... )
47
+ >>> repo.cache_path
48
+ Path('/Users/user/.claude-mpm/cache/remote-agents/bobmatnyc/claude-mpm-agents/agents')
49
+ """
50
+ home = Path.home()
51
+ base_cache = home / ".claude-mpm" / "cache" / "remote-agents"
52
+
53
+ # Extract owner and repo from URL
54
+ owner, repo = self._parse_github_url(self.url)
55
+
56
+ # Build cache path: base/owner/repo/subdirectory
57
+ cache_path = base_cache / owner / repo
58
+
59
+ if self.subdirectory:
60
+ # Normalize subdirectory path (remove leading/trailing slashes)
61
+ normalized_subdir = self.subdirectory.strip("/")
62
+ cache_path = cache_path / normalized_subdir
63
+
64
+ return cache_path
65
+
66
+ @property
67
+ def identifier(self) -> str:
68
+ """Return unique identifier for this repository.
69
+
70
+ Format: {owner}/{repo}/{subdirectory} or {owner}/{repo}
71
+
72
+ Returns:
73
+ Unique identifier string
74
+
75
+ Example:
76
+ >>> repo = GitRepository(
77
+ ... url="https://github.com/owner/repo",
78
+ ... subdirectory="agents"
79
+ ... )
80
+ >>> repo.identifier
81
+ 'owner/repo/agents'
82
+ """
83
+ owner, repo = self._parse_github_url(self.url)
84
+ base_id = f"{owner}/{repo}"
85
+
86
+ if self.subdirectory:
87
+ normalized_subdir = self.subdirectory.strip("/")
88
+ return f"{base_id}/{normalized_subdir}"
89
+
90
+ return base_id
91
+
92
+ def validate(self) -> list[str]:
93
+ """Validate repository configuration.
94
+
95
+ Returns:
96
+ List of validation error messages (empty if valid)
97
+
98
+ Validation checks:
99
+ - URL is not empty
100
+ - URL is valid HTTP/HTTPS format
101
+ - URL is a GitHub repository URL
102
+ - Priority is non-negative
103
+ - Priority is reasonable (<= 1000, warning only)
104
+ - Subdirectory is relative path (not absolute)
105
+ """
106
+ errors = []
107
+
108
+ # Validate URL
109
+ if not self.url or not self.url.strip():
110
+ errors.append("URL cannot be empty")
111
+ return errors # Can't continue validation without URL
112
+
113
+ # Check URL format
114
+ try:
115
+ parsed = urlparse(self.url)
116
+
117
+ # Must be HTTP or HTTPS
118
+ if parsed.scheme not in ("http", "https"):
119
+ errors.append(
120
+ f"URL must use http:// or https:// protocol, got: {parsed.scheme}"
121
+ )
122
+
123
+ # Must be GitHub (for now)
124
+ if not parsed.netloc.endswith("github.com"):
125
+ errors.append(f"URL must be a GitHub repository, got: {parsed.netloc}")
126
+
127
+ # Should have owner/repo path structure
128
+ path_parts = [p for p in parsed.path.strip("/").split("/") if p]
129
+ if len(path_parts) < 2:
130
+ errors.append(f"URL must include owner/repo path, got: {parsed.path}")
131
+
132
+ except Exception as e:
133
+ errors.append(f"Invalid URL format: {e}")
134
+
135
+ # Validate priority
136
+ if self.priority < 0:
137
+ errors.append("Priority must be non-negative (0 or greater)")
138
+
139
+ if self.priority > 1000:
140
+ errors.append(
141
+ f"Priority {self.priority} is unusually high (recommended: 0-1000). "
142
+ "Lower priority numbers have higher precedence."
143
+ )
144
+
145
+ # Validate subdirectory
146
+ if self.subdirectory:
147
+ # Must be relative path
148
+ if Path(self.subdirectory).is_absolute():
149
+ errors.append(
150
+ f"Subdirectory must be a relative path, got absolute: {self.subdirectory}"
151
+ )
152
+
153
+ # Should not start with slash
154
+ if self.subdirectory.startswith("/"):
155
+ errors.append(
156
+ f"Subdirectory should not start with '/', got: {self.subdirectory}"
157
+ )
158
+
159
+ return errors
160
+
161
+ def _parse_github_url(self, url: str) -> tuple[str, str]:
162
+ """Parse GitHub URL to extract owner and repository name.
163
+
164
+ Args:
165
+ url: GitHub repository URL
166
+
167
+ Returns:
168
+ Tuple of (owner, repository_name)
169
+
170
+ Example:
171
+ >>> repo = GitRepository(url="https://github.com/owner/repo")
172
+ >>> repo._parse_github_url(repo.url)
173
+ ('owner', 'repo')
174
+ """
175
+ # Remove .git suffix if present
176
+ url = url.rstrip("/")
177
+ if url.endswith(".git"):
178
+ url = url[:-4]
179
+
180
+ # Parse URL
181
+ parsed = urlparse(url)
182
+ path_parts = [p for p in parsed.path.strip("/").split("/") if p]
183
+
184
+ if len(path_parts) >= 2:
185
+ owner = path_parts[0]
186
+ repo = path_parts[1]
187
+ return owner, repo
188
+
189
+ # Fallback: Use URL as-is if parsing fails
190
+ # This will be caught by validation
191
+ return "unknown", "unknown"
192
+
193
+ def __repr__(self) -> str:
194
+ """Return string representation of repository."""
195
+ return (
196
+ f"GitRepository(identifier='{self.identifier}', "
197
+ f"priority={self.priority}, enabled={self.enabled})"
198
+ )
@@ -89,7 +89,7 @@ fi
89
89
  # STRATEGY:
90
90
  # This function implements a fallback chain to find Python with claude-mpm dependencies:
91
91
  # 1. Project-specific virtual environments (venv, .venv)
92
- # 2. Currently active virtual environment ($VIRTUAL_ENV)
92
+ # 2. Currently active virtual environment ($VIRTUAL_ENV)
93
93
  # 3. System python3 (may lack dependencies)
94
94
  # 4. System python (last resort)
95
95
  #
@@ -121,7 +121,7 @@ find_python_command() {
121
121
  return
122
122
  fi
123
123
  fi
124
-
124
+
125
125
  # 2. Check for project-local virtual environment (common in development)
126
126
  if [ -f "$CLAUDE_MPM_ROOT/venv/bin/activate" ]; then
127
127
  source "$CLAUDE_MPM_ROOT/venv/bin/activate"
@@ -152,7 +152,7 @@ if [[ "$SCRIPT_DIR" == *"/.local/pipx/venvs/claude-mpm/"* ]]; then
152
152
  elif [ -d "$CLAUDE_MPM_ROOT/src" ]; then
153
153
  # Development install - add src to PYTHONPATH
154
154
  export PYTHONPATH="$CLAUDE_MPM_ROOT/src:$PYTHONPATH"
155
-
155
+
156
156
  if [ "${CLAUDE_MPM_HOOK_DEBUG}" = "true" ]; then
157
157
  echo "[$(date -u +%Y-%m-%dT%H:%M:%S.%3NZ)] Development environment detected" >> /tmp/claude-mpm-hook.log
158
158
  fi
@@ -51,7 +51,9 @@ if __name__ == "__main__":
51
51
 
52
52
  # Initialize aggregator
53
53
  aggregator = EventAggregator(
54
- host="localhost", port=dashboard_port, save_dir=None # Will use config value
54
+ host="localhost",
55
+ port=dashboard_port,
56
+ save_dir=None, # Will use config value
55
57
  )
56
58
 
57
59
  # Set up signal handlers