claude-mpm 4.24.0__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 (623) 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/{OUTPUT_STYLE.md → CLAUDE_MPM_OUTPUT_STYLE.md} +3 -48
  5. claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +2002 -0
  6. claude_mpm/agents/MEMORY.md +1 -1
  7. claude_mpm/agents/PM_INSTRUCTIONS.md +735 -925
  8. claude_mpm/agents/WORKFLOW.md +5 -254
  9. claude_mpm/agents/__init__.py +6 -0
  10. claude_mpm/agents/agent_loader.py +14 -48
  11. claude_mpm/agents/base_agent.json +7 -4
  12. claude_mpm/agents/frontmatter_validator.py +71 -3
  13. claude_mpm/agents/templates/circuit-breakers.md +1391 -0
  14. claude_mpm/agents/templates/context-management-examples.md +544 -0
  15. claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +48 -0
  16. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  17. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  18. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  19. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  20. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  21. claude_mpm/cli/__init__.py +37 -2
  22. claude_mpm/cli/__main__.py +4 -0
  23. claude_mpm/cli/chrome_devtools_installer.py +175 -0
  24. claude_mpm/cli/commands/__init__.py +2 -0
  25. claude_mpm/cli/commands/agent_source.py +774 -0
  26. claude_mpm/cli/commands/agent_state_manager.py +180 -31
  27. claude_mpm/cli/commands/agents.py +1116 -55
  28. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  29. claude_mpm/cli/commands/agents_discover.py +338 -0
  30. claude_mpm/cli/commands/aggregate.py +1 -1
  31. claude_mpm/cli/commands/analyze.py +3 -3
  32. claude_mpm/cli/commands/auto_configure.py +725 -242
  33. claude_mpm/cli/commands/config.py +95 -6
  34. claude_mpm/cli/commands/configure.py +1875 -46
  35. claude_mpm/cli/commands/configure_agent_display.py +29 -10
  36. claude_mpm/cli/commands/configure_navigation.py +63 -46
  37. claude_mpm/cli/commands/debug.py +12 -12
  38. claude_mpm/cli/commands/doctor.py +10 -2
  39. claude_mpm/cli/commands/hook_errors.py +277 -0
  40. claude_mpm/cli/commands/local_deploy.py +1 -4
  41. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  42. claude_mpm/cli/commands/mpm_init/core.py +229 -2
  43. claude_mpm/cli/commands/mpm_init/git_activity.py +10 -10
  44. claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
  45. claude_mpm/cli/commands/mpm_init/prompts.py +286 -6
  46. claude_mpm/cli/commands/postmortem.py +401 -0
  47. claude_mpm/cli/commands/profile.py +277 -0
  48. claude_mpm/cli/commands/run.py +123 -165
  49. claude_mpm/cli/commands/skill_source.py +694 -0
  50. claude_mpm/cli/commands/skills.py +782 -20
  51. claude_mpm/cli/commands/summarize.py +413 -0
  52. claude_mpm/cli/executor.py +96 -3
  53. claude_mpm/cli/interactive/agent_wizard.py +1030 -45
  54. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  55. claude_mpm/cli/parsers/agents_parser.py +307 -10
  56. claude_mpm/cli/parsers/auto_configure_parser.py +13 -138
  57. claude_mpm/cli/parsers/base_parser.py +65 -0
  58. claude_mpm/cli/parsers/config_parser.py +162 -39
  59. claude_mpm/cli/parsers/profile_parser.py +148 -0
  60. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  61. claude_mpm/cli/parsers/skills_parser.py +146 -0
  62. claude_mpm/cli/parsers/source_parser.py +138 -0
  63. claude_mpm/cli/startup.py +1280 -118
  64. claude_mpm/cli/startup_display.py +480 -0
  65. claude_mpm/cli/utils.py +1 -1
  66. claude_mpm/cli_module/commands.py +1 -1
  67. claude_mpm/commands/mpm-config.md +21 -134
  68. claude_mpm/commands/mpm-doctor.md +16 -20
  69. claude_mpm/commands/mpm-help.md +13 -283
  70. claude_mpm/commands/mpm-init.md +88 -489
  71. claude_mpm/commands/mpm-monitor.md +23 -401
  72. claude_mpm/commands/mpm-organize.md +72 -247
  73. claude_mpm/commands/mpm-postmortem.md +21 -0
  74. claude_mpm/commands/mpm-session-resume.md +30 -0
  75. claude_mpm/commands/mpm-status.md +13 -68
  76. claude_mpm/commands/mpm-ticket-view.md +109 -0
  77. claude_mpm/commands/mpm-version.md +13 -106
  78. claude_mpm/commands/mpm.md +10 -0
  79. claude_mpm/config/agent_presets.py +488 -0
  80. claude_mpm/config/agent_sources.py +352 -0
  81. claude_mpm/config/skill_presets.py +392 -0
  82. claude_mpm/config/skill_sources.py +590 -0
  83. claude_mpm/constants.py +13 -0
  84. claude_mpm/core/claude_runner.py +5 -34
  85. claude_mpm/core/config.py +15 -1
  86. claude_mpm/core/constants.py +1 -1
  87. claude_mpm/core/framework/__init__.py +3 -16
  88. claude_mpm/core/framework/formatters/content_formatter.py +3 -13
  89. claude_mpm/core/framework/loaders/agent_loader.py +8 -5
  90. claude_mpm/core/framework/loaders/file_loader.py +54 -101
  91. claude_mpm/core/framework/loaders/instruction_loader.py +66 -5
  92. claude_mpm/core/framework_loader.py +4 -2
  93. claude_mpm/core/hook_error_memory.py +381 -0
  94. claude_mpm/core/hook_manager.py +41 -2
  95. claude_mpm/core/interactive_session.py +91 -10
  96. claude_mpm/core/logger.py +16 -1
  97. claude_mpm/core/oneshot_session.py +71 -8
  98. claude_mpm/core/optimized_startup.py +59 -0
  99. claude_mpm/core/output_style_manager.py +173 -43
  100. claude_mpm/core/protocols/__init__.py +23 -0
  101. claude_mpm/core/protocols/runner_protocol.py +103 -0
  102. claude_mpm/core/protocols/session_protocol.py +131 -0
  103. claude_mpm/core/shared/config_loader.py +1 -1
  104. claude_mpm/core/shared/singleton_manager.py +11 -4
  105. claude_mpm/core/socketio_pool.py +3 -3
  106. claude_mpm/core/system_context.py +38 -0
  107. claude_mpm/core/unified_agent_registry.py +134 -16
  108. claude_mpm/core/unified_config.py +22 -0
  109. claude_mpm/dashboard/static/svelte-build/_app/env.js +1 -0
  110. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.B_FtCwCQ.css +1 -0
  111. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.Cl_eSA4x.css +1 -0
  112. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BgChzWQ1.js +1 -0
  113. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIXEwuWe.js +1 -0
  114. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CWc5urbQ.js +1 -0
  115. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DMkZpdF2.js +2 -0
  116. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DjhvlsAc.js +1 -0
  117. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/N4qtv3Hx.js +2 -0
  118. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/uj46x2Wr.js +1 -0
  119. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.DTL5mJO-.js +2 -0
  120. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.DzuEhzqh.js +1 -0
  121. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/0.CAGBuiOw.js +1 -0
  122. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DFLC8jdE.js +1 -0
  123. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.DPvEihJJ.js +10 -0
  124. claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -0
  125. claude_mpm/dashboard/static/svelte-build/favicon.svg +7 -0
  126. claude_mpm/dashboard/static/svelte-build/index.html +36 -0
  127. claude_mpm/experimental/cli_enhancements.py +1 -5
  128. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc +0 -0
  129. claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc +0 -0
  130. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
  131. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
  132. claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
  133. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
  134. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
  135. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc +0 -0
  136. claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
  137. claude_mpm/hooks/claude_hooks/event_handlers.py +214 -79
  138. claude_mpm/hooks/claude_hooks/hook_handler.py +155 -1
  139. claude_mpm/hooks/claude_hooks/installer.py +33 -10
  140. claude_mpm/hooks/claude_hooks/memory_integration.py +28 -0
  141. claude_mpm/hooks/claude_hooks/response_tracking.py +2 -3
  142. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
  143. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager.cpython-311.pyc +0 -0
  144. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
  145. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc +0 -0
  146. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
  147. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
  148. claude_mpm/hooks/claude_hooks/services/connection_manager.py +30 -6
  149. claude_mpm/hooks/failure_learning/__init__.py +2 -8
  150. claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
  151. claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
  152. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
  153. claude_mpm/hooks/kuzu_response_hook.py +1 -5
  154. claude_mpm/hooks/memory_integration_hook.py +46 -1
  155. claude_mpm/init.py +63 -19
  156. claude_mpm/models/agent_definition.py +7 -0
  157. claude_mpm/models/git_repository.py +198 -0
  158. claude_mpm/scripts/claude-hook-handler.sh +60 -20
  159. claude_mpm/scripts/launch_monitor.py +93 -13
  160. claude_mpm/scripts/start_activity_logging.py +3 -1
  161. claude_mpm/services/agents/agent_builder.py +48 -12
  162. claude_mpm/services/agents/agent_preset_service.py +238 -0
  163. claude_mpm/services/agents/agent_recommendation_service.py +278 -0
  164. claude_mpm/services/agents/agent_review_service.py +280 -0
  165. claude_mpm/services/agents/agent_selection_service.py +484 -0
  166. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  167. claude_mpm/services/agents/cache_git_manager.py +621 -0
  168. claude_mpm/services/agents/deployment/agent_deployment.py +148 -2
  169. claude_mpm/services/agents/deployment/agent_discovery_service.py +104 -73
  170. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  171. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
  172. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  173. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  174. claude_mpm/services/agents/deployment/agent_template_builder.py +238 -15
  175. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  176. claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
  177. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  178. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +422 -31
  179. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  180. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
  181. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +841 -0
  182. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  183. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
  184. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  185. claude_mpm/services/agents/git_source_manager.py +663 -0
  186. claude_mpm/services/agents/loading/base_agent_manager.py +1 -13
  187. claude_mpm/services/agents/loading/framework_agent_loader.py +9 -12
  188. claude_mpm/services/agents/local_template_manager.py +50 -10
  189. claude_mpm/services/agents/recommender.py +5 -3
  190. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  191. claude_mpm/services/agents/sources/__init__.py +13 -0
  192. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  193. claude_mpm/services/agents/sources/git_source_sync_service.py +1094 -0
  194. claude_mpm/services/agents/startup_sync.py +259 -0
  195. claude_mpm/services/agents/toolchain_detector.py +478 -0
  196. claude_mpm/services/analysis/__init__.py +35 -0
  197. claude_mpm/services/analysis/clone_detector.py +1030 -0
  198. claude_mpm/services/analysis/postmortem_reporter.py +474 -0
  199. claude_mpm/services/analysis/postmortem_service.py +765 -0
  200. claude_mpm/services/cli/session_pause_manager.py +1 -1
  201. claude_mpm/services/command_deployment_service.py +271 -6
  202. claude_mpm/services/core/base.py +7 -2
  203. claude_mpm/services/core/interfaces/__init__.py +1 -3
  204. claude_mpm/services/core/interfaces/health.py +1 -4
  205. claude_mpm/services/core/models/__init__.py +2 -11
  206. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  207. claude_mpm/services/diagnostics/checks/agent_check.py +2 -4
  208. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  209. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  210. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  211. claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
  212. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  213. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  214. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  215. claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
  216. claude_mpm/services/event_bus/config.py +3 -1
  217. claude_mpm/services/event_bus/direct_relay.py +3 -3
  218. claude_mpm/services/events/consumers/logging.py +1 -2
  219. claude_mpm/services/git/__init__.py +21 -0
  220. claude_mpm/services/git/git_operations_service.py +579 -0
  221. claude_mpm/services/github/__init__.py +21 -0
  222. claude_mpm/services/github/github_cli_service.py +397 -0
  223. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  224. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  225. claude_mpm/services/instructions/__init__.py +9 -0
  226. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  227. claude_mpm/services/local_ops/__init__.py +3 -13
  228. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  229. claude_mpm/services/local_ops/health_manager.py +1 -4
  230. claude_mpm/services/local_ops/resource_monitor.py +1 -1
  231. claude_mpm/services/mcp_config_manager.py +75 -145
  232. claude_mpm/services/mcp_service_verifier.py +6 -3
  233. claude_mpm/services/model/model_router.py +1 -2
  234. claude_mpm/services/monitor/daemon.py +38 -11
  235. claude_mpm/services/monitor/daemon_manager.py +134 -21
  236. claude_mpm/services/monitor/management/lifecycle.py +8 -1
  237. claude_mpm/services/monitor/server.py +700 -24
  238. claude_mpm/services/pm_skills_deployer.py +676 -0
  239. claude_mpm/services/port_manager.py +1 -1
  240. claude_mpm/services/pr/__init__.py +14 -0
  241. claude_mpm/services/pr/pr_template_service.py +329 -0
  242. claude_mpm/services/profile_manager.py +331 -0
  243. claude_mpm/services/project/documentation_manager.py +2 -1
  244. claude_mpm/services/project/project_organizer.py +4 -0
  245. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  246. claude_mpm/services/runner_configuration_service.py +16 -3
  247. claude_mpm/services/self_upgrade_service.py +120 -12
  248. claude_mpm/services/session_management_service.py +16 -4
  249. claude_mpm/services/skills/__init__.py +21 -0
  250. claude_mpm/services/skills/git_skill_source_manager.py +1297 -0
  251. claude_mpm/services/skills/selective_skill_deployer.py +704 -0
  252. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  253. claude_mpm/services/skills/skill_to_agent_mapper.py +406 -0
  254. claude_mpm/services/skills_config.py +547 -0
  255. claude_mpm/services/skills_deployer.py +1072 -0
  256. claude_mpm/services/socketio/dashboard_server.py +1 -0
  257. claude_mpm/services/socketio/event_normalizer.py +51 -6
  258. claude_mpm/services/socketio/handlers/connection.py +1 -1
  259. claude_mpm/services/socketio/handlers/git.py +1 -1
  260. claude_mpm/services/socketio/server/core.py +387 -112
  261. claude_mpm/services/socketio/server/main.py +1 -3
  262. claude_mpm/services/system_instructions_service.py +1 -3
  263. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  264. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  265. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  266. claude_mpm/services/unified/unified_deployment.py +1 -5
  267. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  268. claude_mpm/services/version_control/git_operations.py +103 -0
  269. claude_mpm/services/visualization/__init__.py +1 -5
  270. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  271. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +2 -2
  272. claude_mpm/skills/skill_manager.py +92 -3
  273. claude_mpm/skills/skills_registry.py +0 -1
  274. claude_mpm/templates/questions/__init__.py +38 -0
  275. claude_mpm/templates/questions/base.py +193 -0
  276. claude_mpm/templates/questions/pr_strategy.py +311 -0
  277. claude_mpm/templates/questions/project_init.py +385 -0
  278. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  279. claude_mpm/tools/__main__.py +8 -8
  280. claude_mpm/utils/agent_dependency_loader.py +91 -12
  281. claude_mpm/utils/agent_filters.py +261 -0
  282. claude_mpm/utils/dependency_cache.py +3 -1
  283. claude_mpm/utils/gitignore.py +244 -0
  284. claude_mpm/utils/migration.py +372 -0
  285. claude_mpm/utils/progress.py +387 -0
  286. claude_mpm/utils/robust_installer.py +49 -7
  287. claude_mpm/utils/structured_questions.py +619 -0
  288. {claude_mpm-4.24.0.dist-info → claude_mpm-5.4.41.dist-info}/METADATA +445 -122
  289. {claude_mpm-4.24.0.dist-info → claude_mpm-5.4.41.dist-info}/RECORD +298 -503
  290. claude_mpm-5.4.41.dist-info/entry_points.txt +5 -0
  291. claude_mpm-5.4.41.dist-info/licenses/LICENSE +94 -0
  292. claude_mpm-5.4.41.dist-info/licenses/LICENSE-FAQ.md +153 -0
  293. claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -292
  294. claude_mpm/agents/BASE_DOCUMENTATION.md +0 -53
  295. claude_mpm/agents/BASE_OPS.md +0 -219
  296. claude_mpm/agents/BASE_PM.md +0 -468
  297. claude_mpm/agents/BASE_PROMPT_ENGINEER.md +0 -787
  298. claude_mpm/agents/BASE_QA.md +0 -167
  299. claude_mpm/agents/BASE_RESEARCH.md +0 -53
  300. claude_mpm/agents/base_agent_loader.py +0 -626
  301. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  302. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  303. claude_mpm/agents/templates/agent-manager.json +0 -273
  304. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  305. claude_mpm/agents/templates/api_qa.json +0 -183
  306. claude_mpm/agents/templates/circuit_breakers.md +0 -638
  307. claude_mpm/agents/templates/clerk-ops.json +0 -235
  308. claude_mpm/agents/templates/code_analyzer.json +0 -101
  309. claude_mpm/agents/templates/content-agent.json +0 -358
  310. claude_mpm/agents/templates/dart_engineer.json +0 -307
  311. claude_mpm/agents/templates/data_engineer.json +0 -225
  312. claude_mpm/agents/templates/documentation.json +0 -238
  313. claude_mpm/agents/templates/engineer.json +0 -210
  314. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  315. claude_mpm/agents/templates/golang_engineer.json +0 -270
  316. claude_mpm/agents/templates/imagemagick.json +0 -264
  317. claude_mpm/agents/templates/java_engineer.json +0 -346
  318. claude_mpm/agents/templates/javascript_engineer_agent.json +0 -380
  319. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  320. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  321. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  322. claude_mpm/agents/templates/memory_manager.json +0 -158
  323. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  324. claude_mpm/agents/templates/ops.json +0 -185
  325. claude_mpm/agents/templates/php-engineer.json +0 -287
  326. claude_mpm/agents/templates/product_owner.json +0 -338
  327. claude_mpm/agents/templates/project_organizer.json +0 -144
  328. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  329. claude_mpm/agents/templates/python_engineer.json +0 -387
  330. claude_mpm/agents/templates/qa.json +0 -243
  331. claude_mpm/agents/templates/react_engineer.json +0 -239
  332. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  333. claude_mpm/agents/templates/research.json +0 -188
  334. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  335. claude_mpm/agents/templates/rust_engineer.json +0 -275
  336. claude_mpm/agents/templates/security.json +0 -202
  337. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  338. claude_mpm/agents/templates/tauri_engineer.json +0 -274
  339. claude_mpm/agents/templates/ticketing.json +0 -178
  340. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  341. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  342. claude_mpm/agents/templates/version_control.json +0 -159
  343. claude_mpm/agents/templates/web_qa.json +0 -400
  344. claude_mpm/agents/templates/web_ui.json +0 -189
  345. claude_mpm/cli/commands/agents_detect.py +0 -380
  346. claude_mpm/cli/commands/agents_recommend.py +0 -309
  347. claude_mpm/cli/ticket_cli.py +0 -35
  348. claude_mpm/commands/mpm-agents-detect.md +0 -168
  349. claude_mpm/commands/mpm-agents-recommend.md +0 -214
  350. claude_mpm/commands/mpm-agents.md +0 -122
  351. claude_mpm/commands/mpm-auto-configure.md +0 -269
  352. claude_mpm/commands/mpm-resume.md +0 -372
  353. claude_mpm/commands/mpm-tickets.md +0 -151
  354. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  355. claude_mpm/dashboard/analysis_runner.py +0 -455
  356. claude_mpm/dashboard/index.html +0 -13
  357. claude_mpm/dashboard/open_dashboard.py +0 -66
  358. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  359. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  360. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  361. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  362. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  363. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  364. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  365. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  366. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  367. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  368. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  369. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  370. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  371. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  372. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  373. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  374. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  375. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  376. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  377. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  378. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  379. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  380. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  381. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  382. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  383. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  384. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  385. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  386. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  387. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  388. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  389. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  390. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  391. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  392. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  393. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  394. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  395. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  396. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  397. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  398. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  399. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  400. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  401. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  402. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  403. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  404. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  405. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  406. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  407. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  408. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  409. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  410. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  411. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  412. claude_mpm/dashboard/static/built/react/events.js +0 -30
  413. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  414. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  415. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  416. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  417. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  418. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  419. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  420. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  421. claude_mpm/dashboard/static/css/activity.css +0 -1958
  422. claude_mpm/dashboard/static/css/connection-status.css +0 -370
  423. claude_mpm/dashboard/static/css/dashboard.css +0 -4701
  424. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  425. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  426. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  427. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  428. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  429. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  430. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  431. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  432. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  433. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  434. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  435. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  436. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  437. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  438. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  439. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  440. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  441. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  442. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  443. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  444. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  445. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  446. claude_mpm/dashboard/static/events.html +0 -607
  447. claude_mpm/dashboard/static/index.html +0 -635
  448. claude_mpm/dashboard/static/js/components/activity-tree.js +0 -1871
  449. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +0 -777
  450. claude_mpm/dashboard/static/js/components/agent-inference.js +0 -956
  451. claude_mpm/dashboard/static/js/components/build-tracker.js +0 -333
  452. claude_mpm/dashboard/static/js/components/code-simple.js +0 -857
  453. claude_mpm/dashboard/static/js/components/connection-debug.js +0 -654
  454. claude_mpm/dashboard/static/js/components/diff-viewer.js +0 -891
  455. claude_mpm/dashboard/static/js/components/event-processor.js +0 -542
  456. claude_mpm/dashboard/static/js/components/event-viewer.js +0 -1155
  457. claude_mpm/dashboard/static/js/components/export-manager.js +0 -368
  458. claude_mpm/dashboard/static/js/components/file-change-tracker.js +0 -443
  459. claude_mpm/dashboard/static/js/components/file-change-viewer.js +0 -690
  460. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -724
  461. claude_mpm/dashboard/static/js/components/file-viewer.js +0 -580
  462. claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -211
  463. claude_mpm/dashboard/static/js/components/hud-manager.js +0 -671
  464. claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -1718
  465. claude_mpm/dashboard/static/js/components/module-viewer.js +0 -2764
  466. claude_mpm/dashboard/static/js/components/session-manager.js +0 -579
  467. claude_mpm/dashboard/static/js/components/socket-manager.js +0 -368
  468. claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -749
  469. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +0 -1824
  470. claude_mpm/dashboard/static/js/components/working-directory.js +0 -920
  471. claude_mpm/dashboard/static/js/connection-manager.js +0 -536
  472. claude_mpm/dashboard/static/js/dashboard.js +0 -1896
  473. claude_mpm/dashboard/static/js/extension-error-handler.js +0 -164
  474. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  475. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  476. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  477. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  478. claude_mpm/dashboard/static/js/socket-client.js +0 -1457
  479. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  480. claude_mpm/dashboard/static/js/tab-isolation-fix.js +0 -185
  481. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  482. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  483. claude_mpm/dashboard/static/legacy/files.html +0 -747
  484. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  485. claude_mpm/dashboard/static/monitors.html +0 -431
  486. claude_mpm/dashboard/static/production/events.html +0 -659
  487. claude_mpm/dashboard/static/production/main.html +0 -698
  488. claude_mpm/dashboard/static/production/monitors.html +0 -483
  489. claude_mpm/dashboard/static/socket.io.min.js +0 -7
  490. claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +0 -7
  491. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  492. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  493. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  494. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  495. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  496. claude_mpm/dashboard/templates/code_simple.html +0 -153
  497. claude_mpm/dashboard/templates/index.html +0 -606
  498. claude_mpm/dashboard/test_dashboard.html +0 -372
  499. claude_mpm/scripts/mcp_server.py +0 -75
  500. claude_mpm/scripts/mcp_wrapper.py +0 -39
  501. claude_mpm/services/mcp_gateway/__init__.py +0 -159
  502. claude_mpm/services/mcp_gateway/auto_configure.py +0 -369
  503. claude_mpm/services/mcp_gateway/config/__init__.py +0 -17
  504. claude_mpm/services/mcp_gateway/config/config_loader.py +0 -296
  505. claude_mpm/services/mcp_gateway/config/config_schema.py +0 -243
  506. claude_mpm/services/mcp_gateway/config/configuration.py +0 -429
  507. claude_mpm/services/mcp_gateway/core/__init__.py +0 -43
  508. claude_mpm/services/mcp_gateway/core/base.py +0 -312
  509. claude_mpm/services/mcp_gateway/core/exceptions.py +0 -253
  510. claude_mpm/services/mcp_gateway/core/interfaces.py +0 -443
  511. claude_mpm/services/mcp_gateway/core/process_pool.py +0 -971
  512. claude_mpm/services/mcp_gateway/core/singleton_manager.py +0 -315
  513. claude_mpm/services/mcp_gateway/core/startup_verification.py +0 -316
  514. claude_mpm/services/mcp_gateway/main.py +0 -589
  515. claude_mpm/services/mcp_gateway/registry/__init__.py +0 -12
  516. claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -412
  517. claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -489
  518. claude_mpm/services/mcp_gateway/server/__init__.py +0 -15
  519. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -419
  520. claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -372
  521. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -714
  522. claude_mpm/services/mcp_gateway/tools/__init__.py +0 -36
  523. claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -485
  524. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -789
  525. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +0 -654
  526. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +0 -456
  527. claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -551
  528. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +0 -551
  529. claude_mpm/services/mcp_gateway/utils/__init__.py +0 -14
  530. claude_mpm/services/mcp_gateway/utils/package_version_checker.py +0 -160
  531. claude_mpm/services/mcp_gateway/utils/update_preferences.py +0 -170
  532. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
  533. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
  534. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
  535. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
  536. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
  537. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
  538. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
  539. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
  540. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
  541. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
  542. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
  543. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
  544. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
  545. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
  546. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
  547. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
  548. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
  549. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  550. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  551. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  552. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  553. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  554. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  555. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  556. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  557. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  558. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  559. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
  560. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
  561. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
  562. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
  563. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
  564. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
  565. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
  566. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  567. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  568. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  569. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  570. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
  571. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
  572. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  573. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  574. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  575. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  576. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
  577. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
  578. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
  579. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
  580. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
  581. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
  582. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
  583. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
  584. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
  585. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
  586. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
  587. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
  588. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
  589. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
  590. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
  591. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
  592. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
  593. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
  594. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
  595. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
  596. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
  597. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
  598. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
  599. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  600. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  601. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  602. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  603. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  604. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  605. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
  606. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
  607. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
  608. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
  609. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
  610. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
  611. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
  612. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
  613. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
  614. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
  615. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
  616. claude_mpm-4.24.0.dist-info/entry_points.txt +0 -10
  617. claude_mpm-4.24.0.dist-info/licenses/LICENSE +0 -21
  618. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  619. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  620. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  621. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  622. {claude_mpm-4.24.0.dist-info → claude_mpm-5.4.41.dist-info}/WHEEL +0 -0
  623. {claude_mpm-4.24.0.dist-info → claude_mpm-5.4.41.dist-info}/top_level.txt +0 -0
@@ -1,956 +0,0 @@
1
- /**
2
- * Agent Inference Module
3
- *
4
- * Handles agent inference and processing logic for determining whether events
5
- * originate from the main agent or subagents based on event patterns and context.
6
- *
7
- * WHY: Separated from main dashboard to isolate complex agent inference logic
8
- * that analyzes event patterns to determine agent context. This provides better
9
- * maintainability and testability for a critical feature.
10
- *
11
- * DESIGN DECISION: This module maintains its own state for inference tracking
12
- * but relies on the event viewer for source data, keeping clear separation of
13
- * concerns while enabling delegation context tracking across events.
14
- */
15
- class AgentInference {
16
- constructor(eventViewer) {
17
- this.eventViewer = eventViewer;
18
-
19
- // Agent inference state tracking
20
- this.state = {
21
- // Track current subagent delegation context
22
- currentDelegation: null,
23
- // Map of session_id -> agent context
24
- sessionAgents: new Map(),
25
- // Map of event indices -> inferred agent
26
- eventAgentMap: new Map(),
27
- // PM delegation tracking for unique instance views
28
- pmDelegations: new Map(), // delegation_id -> delegation context
29
- // Map of agent events to their PM delegation
30
- agentToDelegation: new Map(), // agent_name -> delegation_id
31
- // Track orphan subagent events (SubagentStart without PM Task)
32
- orphanSubagents: new Map(), // event_index -> orphan context
33
- // Track SubagentStart events for orphan detection
34
- subagentStartEvents: new Map() // agent_name -> array of start events
35
- };
36
-
37
- console.log('Agent inference system initialized');
38
- }
39
-
40
- /**
41
- * Initialize the agent inference system
42
- * Called when the dashboard initializes
43
- */
44
- initialize() {
45
- this.state = {
46
- currentDelegation: null,
47
- sessionAgents: new Map(),
48
- eventAgentMap: new Map(),
49
- pmDelegations: new Map(),
50
- agentToDelegation: new Map(),
51
- orphanSubagents: new Map(),
52
- subagentStartEvents: new Map()
53
- };
54
- }
55
-
56
- /**
57
- * Infer agent context from event payload
58
- * Based on production-ready detection from design document
59
- * @param {Object} event - Event payload
60
- * @returns {Object} - {type: 'main_agent'|'subagent', confidence: 'definitive'|'high'|'medium'|'default', agentName: string}
61
- */
62
- inferAgentFromEvent(event) {
63
- // Handle both direct properties and nested data properties
64
- const data = event.data || {};
65
- const sessionId = event.session_id || data.session_id || 'unknown';
66
- const eventType = event.hook_event_name || data.hook_event_name || event.type || '';
67
- const subtype = event.subtype || data.subtype || '';
68
- const toolName = event.tool_name || data.tool_name || '';
69
-
70
- // Debug logging for first few events to understand structure
71
- if (Math.random() < 0.1) {
72
- console.log('Agent inference debug:', {
73
- eventType,
74
- toolName,
75
- hasData: !!event.data,
76
- dataKeys: Object.keys(data),
77
- eventKeys: Object.keys(event),
78
- agentType: event.agent_type || data.agent_type,
79
- subagentType: event.subagent_type || data.subagent_type
80
- });
81
- }
82
-
83
- // Direct event detection (highest confidence) - from design doc
84
- if (eventType === 'SubagentStop' || subtype === 'subagent_stop') {
85
- const agentName = this.extractAgentNameFromEvent(event);
86
- // Log SubagentStop events for debugging
87
- console.log('SubagentStop event detected:', {
88
- agentName: agentName,
89
- sessionId: sessionId,
90
- eventType: eventType,
91
- subtype: subtype,
92
- rawAgentType: event.agent_type || data.agent_type
93
- });
94
- return {
95
- type: 'subagent',
96
- confidence: 'definitive',
97
- agentName: agentName,
98
- reason: 'SubagentStop event'
99
- };
100
- }
101
-
102
- if (eventType === 'Stop' || subtype === 'stop') {
103
- return {
104
- type: 'main_agent',
105
- confidence: 'definitive',
106
- agentName: 'PM',
107
- reason: 'Stop event'
108
- };
109
- }
110
-
111
- // Tool-based detection (high confidence) - from design doc
112
- if (toolName === 'Task') {
113
- const agentName = this.extractSubagentTypeFromTask(event);
114
- if (agentName) {
115
- // Log Task delegations for debugging
116
- console.log('Task delegation detected:', {
117
- agentName: agentName,
118
- sessionId: sessionId,
119
- eventType: eventType
120
- });
121
- return {
122
- type: 'subagent',
123
- confidence: 'high',
124
- agentName: agentName,
125
- reason: 'Task tool with subagent_type'
126
- };
127
- }
128
- }
129
-
130
- // Hook event pattern analysis (high confidence)
131
- if (eventType === 'PreToolUse' && toolName === 'Task') {
132
- const agentName = this.extractSubagentTypeFromTask(event);
133
- if (agentName) {
134
- return {
135
- type: 'subagent',
136
- confidence: 'high',
137
- agentName: agentName,
138
- reason: 'PreToolUse Task delegation'
139
- };
140
- }
141
- }
142
-
143
- // Session pattern analysis (medium confidence) - from design doc
144
- if (sessionId) {
145
- const sessionLower = sessionId.toLowerCase();
146
- if (['subagent', 'task', 'agent-'].some(pattern => sessionLower.includes(pattern))) {
147
- return {
148
- type: 'subagent',
149
- confidence: 'medium',
150
- agentName: 'Subagent',
151
- reason: 'Session ID pattern'
152
- };
153
- }
154
- }
155
-
156
- // Agent type field analysis - check multiple possible locations
157
- const agentType = event.agent_type || data.agent_type || event.agent_id || data.agent_id;
158
- const subagentType = event.subagent_type || data.subagent_type;
159
-
160
- if (subagentType && subagentType !== 'unknown') {
161
- return {
162
- type: 'subagent',
163
- confidence: 'high',
164
- agentName: this.normalizeAgentName(subagentType),
165
- reason: 'subagent_type field'
166
- };
167
- }
168
-
169
- if (agentType && agentType !== 'unknown' && agentType !== 'main') {
170
- return {
171
- type: 'subagent',
172
- confidence: 'medium',
173
- agentName: this.normalizeAgentName(agentType),
174
- reason: 'agent_type field'
175
- };
176
- }
177
-
178
- // Check for delegation_details from hook handler
179
- if (data.delegation_details?.agent_type) {
180
- return {
181
- type: 'subagent',
182
- confidence: 'high',
183
- agentName: this.normalizeAgentName(data.delegation_details.agent_type),
184
- reason: 'delegation_details'
185
- };
186
- }
187
-
188
- // Check if this looks like a Hook event from Socket.IO
189
- if (event.type && event.type.startsWith('hook.')) {
190
- // Extract the hook type
191
- const hookType = event.type.replace('hook.', '');
192
-
193
- // Handle SubagentStart events
194
- if (hookType === 'subagent_start' || (data.hook_event_name === 'SubagentStart')) {
195
- const rawAgentName = data.agent_type || data.agent_id || 'Subagent';
196
- console.log('SubagentStart event from Socket.IO:', {
197
- agentName: rawAgentName,
198
- sessionId: sessionId,
199
- hookType: hookType
200
- });
201
- return {
202
- type: 'subagent',
203
- confidence: 'definitive',
204
- agentName: this.normalizeAgentName(rawAgentName),
205
- reason: 'Socket.IO hook SubagentStart'
206
- };
207
- }
208
-
209
- // Handle SubagentStop events
210
- if (hookType === 'subagent_stop' || (data.hook_event_name === 'SubagentStop')) {
211
- const rawAgentName = data.agent_type || data.agent_id || 'Subagent';
212
- return {
213
- type: 'subagent',
214
- confidence: 'high',
215
- agentName: this.normalizeAgentName(rawAgentName),
216
- reason: 'Socket.IO hook SubagentStop'
217
- };
218
- }
219
- }
220
-
221
- // Default to main agent (from design doc)
222
- return {
223
- type: 'main_agent',
224
- confidence: 'default',
225
- agentName: 'PM',
226
- reason: 'default classification'
227
- };
228
- }
229
-
230
- /**
231
- * Normalize agent name from lowercase/underscore format to display format
232
- * @param {string} agentName - Raw agent name (e.g., 'engineer', 'test_integration')
233
- * @returns {string} - Normalized display name (e.g., 'Engineer Agent', 'Test Integration Agent')
234
- */
235
- normalizeAgentName(agentName) {
236
- if (!agentName) return 'Unknown';
237
-
238
- // Agent name mapping from raw format to display format
239
- const agentNameMap = {
240
- 'engineer': 'Engineer Agent',
241
- 'research': 'Research Agent',
242
- 'qa': 'QA Agent',
243
- 'documentation': 'Documentation Agent',
244
- 'security': 'Security Agent',
245
- 'ops': 'Ops Agent',
246
- 'version_control': 'Version Control Agent',
247
- 'data_engineer': 'Data Engineer Agent',
248
- 'test_integration': 'Test Integration Agent',
249
- 'pm': 'PM Agent'
250
- };
251
-
252
- // Check if we have a direct mapping
253
- const normalized = agentNameMap[agentName.toLowerCase()];
254
- if (normalized) {
255
- return normalized;
256
- }
257
-
258
- // If no direct mapping, apply basic formatting:
259
- // Convert underscore to space, capitalize words, and add "Agent" if not present
260
- let formatted = agentName
261
- .replace(/_/g, ' ')
262
- .split(' ')
263
- .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
264
- .join(' ');
265
-
266
- // Add "Agent" suffix if not already present
267
- if (!formatted.toLowerCase().includes('agent')) {
268
- formatted += ' Agent';
269
- }
270
-
271
- return formatted;
272
- }
273
-
274
- /**
275
- * Extract subagent type from Task tool parameters
276
- * @param {Object} event - Event with Task tool
277
- * @returns {string|null} - Subagent type or null
278
- */
279
- extractSubagentTypeFromTask(event) {
280
- let rawAgentName = null;
281
-
282
- // Check tool_parameters directly
283
- if (event.tool_parameters?.subagent_type) {
284
- rawAgentName = event.tool_parameters.subagent_type;
285
- }
286
- // Check nested in data.tool_parameters (hook events)
287
- else if (event.data?.tool_parameters?.subagent_type) {
288
- rawAgentName = event.data.tool_parameters.subagent_type;
289
- }
290
- // Check delegation_details (new structure)
291
- else if (event.data?.delegation_details?.agent_type) {
292
- rawAgentName = event.data.delegation_details.agent_type;
293
- }
294
- // Check tool_input fallback
295
- else if (event.tool_input?.subagent_type) {
296
- rawAgentName = event.tool_input.subagent_type;
297
- }
298
-
299
- // Normalize the agent name before returning
300
- return rawAgentName ? this.normalizeAgentName(rawAgentName) : null;
301
- }
302
-
303
- /**
304
- * Extract agent name from any event
305
- * @param {Object} event - Event payload
306
- * @returns {string} - Agent name
307
- */
308
- extractAgentNameFromEvent(event) {
309
- // Priority order based on reliability from design doc
310
- const data = event.data || {};
311
-
312
- // 1. Task tool subagent_type (highest priority)
313
- if (event.tool_name === 'Task' || data.tool_name === 'Task') {
314
- const taskAgent = this.extractSubagentTypeFromTask(event);
315
- if (taskAgent) return taskAgent;
316
- }
317
-
318
- // 2. Direct subagent_type field
319
- if (event.subagent_type && event.subagent_type !== 'unknown') {
320
- return this.normalizeAgentName(event.subagent_type);
321
- }
322
- if (data.subagent_type && data.subagent_type !== 'unknown') {
323
- return this.normalizeAgentName(data.subagent_type);
324
- }
325
-
326
- // 2.5. Check delegation_details
327
- if (data.delegation_details?.agent_type && data.delegation_details.agent_type !== 'unknown') {
328
- return this.normalizeAgentName(data.delegation_details.agent_type);
329
- }
330
-
331
- // 3. Agent type fields (but not 'main' or 'unknown')
332
- if (event.agent_type && !['main', 'unknown'].includes(event.agent_type)) {
333
- return this.normalizeAgentName(event.agent_type);
334
- }
335
- if (data.agent_type && !['main', 'unknown'].includes(data.agent_type)) {
336
- return this.normalizeAgentName(data.agent_type);
337
- }
338
-
339
- // 4. Agent ID field as fallback
340
- if (event.agent_id && !['main', 'unknown'].includes(event.agent_id)) {
341
- return this.normalizeAgentName(event.agent_id);
342
- }
343
- if (data.agent_id && !['main', 'unknown'].includes(data.agent_id)) {
344
- return this.normalizeAgentName(data.agent_id);
345
- }
346
-
347
- // 5. Other fallbacks
348
- if (event.agent && event.agent !== 'unknown') {
349
- return this.normalizeAgentName(event.agent);
350
- }
351
-
352
- if (event.name && event.name !== 'unknown') {
353
- return this.normalizeAgentName(event.name);
354
- }
355
-
356
- // Default fallback
357
- return 'Unknown';
358
- }
359
-
360
- /**
361
- * Process all events and build agent inference context
362
- * This tracks delegation boundaries and agent context throughout the session
363
- */
364
- processAgentInference() {
365
- const events = this.eventViewer.events;
366
-
367
- // Reset inference state
368
- this.state.currentDelegation = null;
369
- this.state.sessionAgents.clear();
370
- this.state.eventAgentMap.clear();
371
- this.state.pmDelegations.clear();
372
- this.state.agentToDelegation.clear();
373
- this.state.orphanSubagents.clear();
374
- this.state.subagentStartEvents.clear();
375
-
376
- console.log('Processing agent inference for', events.length, 'events');
377
-
378
- // Early return if no events
379
- if (!events || events.length === 0) {
380
- console.log('No events to process for agent inference');
381
- return;
382
- }
383
-
384
- // Process events chronologically to track delegation context
385
- events.forEach((event, index) => {
386
- let finalAgent; // Declare outside try-catch to ensure scope availability
387
-
388
- try {
389
- const inference = this.inferAgentFromEvent(event);
390
- const sessionId = event.session_id || event.data?.session_id || 'default';
391
-
392
- // Determine agent for this event based on context
393
- finalAgent = inference;
394
-
395
- // If we're in a delegation context and this event doesn't have high confidence agent info,
396
- // inherit from delegation context
397
- if (this.state.currentDelegation &&
398
- inference.confidence === 'default' &&
399
- sessionId === this.state.currentDelegation.sessionId) {
400
- finalAgent = {
401
- type: 'subagent',
402
- confidence: 'inherited',
403
- agentName: this.state.currentDelegation.agentName,
404
- reason: 'inherited from delegation context'
405
- };
406
- }
407
-
408
- // Track SubagentStart events for orphan detection
409
- const hookEventName = event.hook_event_name || event.data?.hook_event_name || '';
410
- const isSubagentStart = hookEventName === 'SubagentStart' ||
411
- event.type === 'hook.subagent_start' ||
412
- event.subtype === 'subagent_start';
413
-
414
- if (isSubagentStart && inference.type === 'subagent') {
415
- // Track this SubagentStart event
416
- if (!this.state.subagentStartEvents.has(inference.agentName)) {
417
- this.state.subagentStartEvents.set(inference.agentName, []);
418
- }
419
- this.state.subagentStartEvents.get(inference.agentName).push({
420
- eventIndex: index,
421
- event: event,
422
- timestamp: event.timestamp,
423
- sessionId: sessionId
424
- });
425
- }
426
-
427
- // Track delegation boundaries and PM delegations
428
- if (event.tool_name === 'Task' && inference.type === 'subagent') {
429
- // Start of subagent delegation - create PM delegation entry
430
- const delegationId = `pm_${sessionId}_${index}_${inference.agentName}`;
431
- const pmDelegation = {
432
- id: delegationId,
433
- agentName: inference.agentName,
434
- sessionId: sessionId,
435
- startIndex: index,
436
- endIndex: null,
437
- pmCall: event, // Store the PM call event
438
- timestamp: event.timestamp,
439
- agentEvents: [] // Collect all events from this agent
440
- };
441
-
442
- this.state.pmDelegations.set(delegationId, pmDelegation);
443
- this.state.agentToDelegation.set(inference.agentName, delegationId);
444
-
445
- this.state.currentDelegation = {
446
- agentName: inference.agentName,
447
- sessionId: sessionId,
448
- startIndex: index,
449
- endIndex: null,
450
- delegationId: delegationId
451
- };
452
- console.log('Delegation started:', this.state.currentDelegation);
453
- } else if (inference.confidence === 'definitive' && inference.reason === 'SubagentStop event') {
454
- // End of subagent delegation
455
- if (this.state.currentDelegation) {
456
- this.state.currentDelegation.endIndex = index;
457
-
458
- // Update PM delegation end point
459
- const pmDelegation = this.state.pmDelegations.get(this.state.currentDelegation.delegationId);
460
- if (pmDelegation) {
461
- pmDelegation.endIndex = index;
462
- }
463
-
464
- console.log('Delegation ended:', this.state.currentDelegation);
465
- this.state.currentDelegation = null;
466
- }
467
- }
468
-
469
- // Track events within PM delegation context
470
- if (this.state.currentDelegation && finalAgent.type === 'subagent') {
471
- const pmDelegation = this.state.pmDelegations.get(this.state.currentDelegation.delegationId);
472
- if (pmDelegation) {
473
- pmDelegation.agentEvents.push({
474
- eventIndex: index,
475
- event: event,
476
- inference: finalAgent
477
- });
478
- }
479
- }
480
-
481
- // Store the inference result
482
- this.state.eventAgentMap.set(index, finalAgent);
483
-
484
- // Update session agent tracking
485
- this.state.sessionAgents.set(sessionId, finalAgent);
486
-
487
- // Debug first few inferences
488
- if (index < 5) {
489
- console.log(`Event ${index} agent inference:`, {
490
- event_type: event.type || event.hook_event_name,
491
- subtype: event.subtype,
492
- tool_name: event.tool_name,
493
- inference: finalAgent,
494
- hasData: !!event.data,
495
- agentType: event.agent_type || event.data?.agent_type
496
- });
497
- }
498
- } catch (error) {
499
- console.error(`Error processing event ${index} for agent inference:`, error);
500
-
501
- // Set a default finalAgent if not already set due to error
502
- if (!finalAgent) {
503
- finalAgent = {
504
- type: 'main_agent',
505
- confidence: 'error',
506
- agentName: 'PM',
507
- reason: 'error during processing'
508
- };
509
- }
510
-
511
- // Store the default inference for this event
512
- this.state.eventAgentMap.set(index, finalAgent);
513
- }
514
- });
515
-
516
- // Identify orphan subagents after all events are processed
517
- this.identifyOrphanSubagents(events);
518
-
519
- console.log('Agent inference processing complete. Results:', {
520
- total_events: events.length,
521
- inferred_agents: this.state.eventAgentMap.size,
522
- unique_sessions: this.state.sessionAgents.size,
523
- pm_delegations: this.state.pmDelegations.size,
524
- agent_to_delegation_mappings: this.state.agentToDelegation.size,
525
- orphan_subagents: this.state.orphanSubagents.size
526
- });
527
- }
528
-
529
- /**
530
- * Get inferred agent for a specific event
531
- * @param {number} eventIndex - Index of event in events array
532
- * @returns {Object|null} - Agent inference result or null
533
- */
534
- getInferredAgent(eventIndex) {
535
- return this.state.eventAgentMap.get(eventIndex) || null;
536
- }
537
-
538
- /**
539
- * Get inferred agent for an event object
540
- * @param {Object} event - Event object
541
- * @returns {Object|null} - Agent inference result or null
542
- */
543
- getInferredAgentForEvent(event) {
544
- const events = this.eventViewer.events;
545
-
546
- // Try to find by exact reference first
547
- let eventIndex = events.indexOf(event);
548
-
549
- // If exact match fails, try to find by timestamp or session_id + timestamp
550
- if (eventIndex === -1 && event.timestamp) {
551
- eventIndex = events.findIndex(e =>
552
- e.timestamp === event.timestamp &&
553
- e.session_id === event.session_id
554
- );
555
- }
556
-
557
- // If we still can't find it, perform inline inference
558
- if (eventIndex === -1) {
559
- console.log('Agent inference: Could not find event in events array, performing inline inference');
560
- return this.inferAgentFromEvent(event);
561
- }
562
-
563
- // Get cached inference or perform new inference
564
- let inference = this.getInferredAgent(eventIndex);
565
- if (!inference) {
566
- inference = this.inferAgentFromEvent(event);
567
- // Cache the result
568
- this.state.eventAgentMap.set(eventIndex, inference);
569
- }
570
-
571
- return inference;
572
- }
573
-
574
- /**
575
- * Get current delegation context
576
- * @returns {Object|null} - Current delegation or null
577
- */
578
- getCurrentDelegation() {
579
- return this.state.currentDelegation;
580
- }
581
-
582
- /**
583
- * Get session agents map
584
- * @returns {Map} - Map of session IDs to agent contexts
585
- */
586
- getSessionAgents() {
587
- return this.state.sessionAgents;
588
- }
589
-
590
- /**
591
- * Get event agent map
592
- * @returns {Map} - Map of event indices to agent contexts
593
- */
594
- getEventAgentMap() {
595
- return this.state.eventAgentMap;
596
- }
597
-
598
- /**
599
- * Get PM delegations for unique instance views
600
- * @returns {Map} - Map of delegation IDs to PM delegation contexts
601
- */
602
- getPMDelegations() {
603
- return this.state.pmDelegations;
604
- }
605
-
606
- /**
607
- * Get agent to delegation mapping
608
- * @returns {Map} - Map of agent names to delegation IDs
609
- */
610
- getAgentToDelegationMap() {
611
- return this.state.agentToDelegation;
612
- }
613
-
614
- /**
615
- * Build hierarchical delegation tree structure
616
- * @returns {Object} Tree structure with PM nodes and subagent children
617
- */
618
- buildDelegationHierarchy() {
619
- // Get all PM delegations
620
- const pmDelegations = this.getPMDelegations();
621
- const events = this.eventViewer.events;
622
-
623
- // Build hierarchy tree
624
- const hierarchy = {
625
- mainPM: {
626
- type: 'pm',
627
- name: 'PM',
628
- delegations: [],
629
- ownEvents: [],
630
- totalEvents: 0
631
- },
632
- impliedPM: {
633
- type: 'pm_implied',
634
- name: 'Implied PM',
635
- delegations: [],
636
- ownEvents: [],
637
- totalEvents: 0
638
- }
639
- };
640
-
641
- // Process explicit PM delegations
642
- for (const [delegationId, delegation] of pmDelegations) {
643
- hierarchy.mainPM.delegations.push({
644
- id: delegationId,
645
- agentName: delegation.agentName,
646
- taskContext: this.extractTaskContext(delegation.pmCall),
647
- events: delegation.agentEvents,
648
- startTime: delegation.timestamp,
649
- endTime: delegation.endIndex ? events[delegation.endIndex]?.timestamp : null,
650
- status: delegation.endIndex ? 'completed' : 'active'
651
- });
652
- hierarchy.mainPM.totalEvents += delegation.agentEvents.length;
653
- }
654
-
655
- // Find PM's own events
656
- events.forEach((event, index) => {
657
- const inference = this.getInferredAgent(index);
658
- if (inference && inference.type === 'main_agent') {
659
- hierarchy.mainPM.ownEvents.push({
660
- eventIndex: index,
661
- event: event
662
- });
663
- hierarchy.mainPM.totalEvents++;
664
- }
665
- });
666
-
667
- // Find orphan subagent events
668
- const orphanEvents = new Map();
669
- events.forEach((event, index) => {
670
- const inference = this.getInferredAgent(index);
671
- if (inference && inference.type === 'subagent') {
672
- // Check if this is part of any PM delegation
673
- let isOrphan = true;
674
- for (const [_, delegation] of pmDelegations) {
675
- if (delegation.agentEvents.some(e => e.eventIndex === index)) {
676
- isOrphan = false;
677
- break;
678
- }
679
- }
680
-
681
- if (isOrphan) {
682
- const agentName = inference.agentName;
683
- if (!orphanEvents.has(agentName)) {
684
- orphanEvents.set(agentName, []);
685
- }
686
- orphanEvents.get(agentName).push({
687
- eventIndex: index,
688
- event: event,
689
- inference: inference
690
- });
691
- }
692
- }
693
- });
694
-
695
- // Add orphan agents as implied PM delegations
696
- for (const [agentName, agentEvents] of orphanEvents) {
697
- hierarchy.impliedPM.delegations.push({
698
- id: `implied_${agentName}`,
699
- agentName: agentName,
700
- taskContext: 'No explicit PM delegation',
701
- events: agentEvents,
702
- startTime: agentEvents[0].event.timestamp,
703
- endTime: agentEvents[agentEvents.length - 1].event.timestamp,
704
- status: 'completed'
705
- });
706
- hierarchy.impliedPM.totalEvents += agentEvents.length;
707
- }
708
-
709
- return hierarchy;
710
- }
711
-
712
- /**
713
- * Extract task context from PM call
714
- * @param {Object} pmCall - PM's Task tool call
715
- * @returns {string} Task description
716
- */
717
- extractTaskContext(pmCall) {
718
- if (!pmCall) return 'Unknown task';
719
-
720
- const params = pmCall.tool_parameters || pmCall.data?.tool_parameters || {};
721
- return params.task || params.request || params.description || 'Task delegation';
722
- }
723
-
724
- /**
725
- * Identify orphan subagents (SubagentStart without PM Task delegation)
726
- * @param {Array} events - All events to analyze
727
- */
728
- identifyOrphanSubagents(events) {
729
- const ORPHAN_TIME_WINDOW = 5000; // 5 seconds to group orphans together
730
-
731
- // Check each SubagentStart event
732
- for (const [agentName, startEvents] of this.state.subagentStartEvents) {
733
- for (const startEvent of startEvents) {
734
- const eventIndex = startEvent.eventIndex;
735
- const timestamp = new Date(startEvent.timestamp).getTime();
736
-
737
- // Check if this SubagentStart has a corresponding PM Task delegation
738
- let hasTaskDelegation = false;
739
-
740
- // Look for a Task tool call within a reasonable time window before this SubagentStart
741
- for (let i = Math.max(0, eventIndex - 20); i < eventIndex; i++) {
742
- const prevEvent = events[i];
743
- if (!prevEvent) continue;
744
-
745
- const prevTimestamp = new Date(prevEvent.timestamp).getTime();
746
- const timeDiff = timestamp - prevTimestamp;
747
-
748
- // Check if this is a Task tool call within 10 seconds
749
- if (prevEvent.tool_name === 'Task' && timeDiff >= 0 && timeDiff < 10000) {
750
- const inference = this.state.eventAgentMap.get(i);
751
- if (inference && inference.agentName === agentName) {
752
- hasTaskDelegation = true;
753
- break;
754
- }
755
- }
756
- }
757
-
758
- // If no Task delegation found, mark as orphan
759
- if (!hasTaskDelegation) {
760
- this.state.orphanSubagents.set(eventIndex, {
761
- agentName: agentName,
762
- timestamp: startEvent.timestamp,
763
- sessionId: startEvent.sessionId,
764
- event: startEvent.event,
765
- groupingKey: null // Will be set by grouping logic
766
- });
767
- }
768
- }
769
- }
770
-
771
- // Group orphan subagents by time proximity or session
772
- this.groupOrphanSubagents(ORPHAN_TIME_WINDOW);
773
- }
774
-
775
- /**
776
- * Group orphan subagents that occur close together in time or same session
777
- * @param {number} timeWindow - Time window in milliseconds for grouping
778
- */
779
- groupOrphanSubagents(timeWindow) {
780
- const orphansList = Array.from(this.state.orphanSubagents.values())
781
- .sort((a, b) => new Date(a.timestamp) - new Date(b.timestamp));
782
-
783
- let currentGroup = null;
784
- let lastTimestamp = null;
785
-
786
- for (const orphan of orphansList) {
787
- const timestamp = new Date(orphan.timestamp).getTime();
788
-
789
- // Check if this orphan should be in the same group
790
- if (!currentGroup ||
791
- (lastTimestamp && timestamp - lastTimestamp > timeWindow)) {
792
- // Start a new group
793
- currentGroup = `implied_pm_${orphan.sessionId}_${timestamp}`;
794
- }
795
-
796
- orphan.groupingKey = currentGroup;
797
- lastTimestamp = timestamp;
798
- }
799
- }
800
-
801
- /**
802
- * Check if a subagent event is an orphan (no PM Task delegation)
803
- * @param {number} eventIndex - Index of the event
804
- * @returns {boolean} True if the event is from an orphan subagent
805
- */
806
- isOrphanSubagent(eventIndex) {
807
- return this.state.orphanSubagents.has(eventIndex);
808
- }
809
-
810
- /**
811
- * Get orphan subagent context for an event
812
- * @param {number} eventIndex - Index of the event
813
- * @returns {Object|null} Orphan context or null
814
- */
815
- getOrphanContext(eventIndex) {
816
- return this.state.orphanSubagents.get(eventIndex) || null;
817
- }
818
-
819
- /**
820
- * Get all orphan subagent groups
821
- * @returns {Map} Map of groupingKey -> array of orphan contexts
822
- */
823
- getOrphanGroups() {
824
- const groups = new Map();
825
-
826
- for (const orphan of this.state.orphanSubagents.values()) {
827
- const key = orphan.groupingKey;
828
- if (!groups.has(key)) {
829
- groups.set(key, []);
830
- }
831
- groups.get(key).push(orphan);
832
- }
833
-
834
- return groups;
835
- }
836
-
837
- /**
838
- * Get unique agent instances (one per agent type, consolidating multiple delegations)
839
- * This is used for the unique instance view in the agents tab
840
- * @returns {Array} - Array of unique agent instances
841
- */
842
- getUniqueAgentInstances() {
843
- const agentMap = new Map(); // agentName -> consolidated data
844
-
845
- // Consolidate all PM delegations by agent name
846
- for (const [delegationId, delegation] of this.state.pmDelegations) {
847
- const agentName = delegation.agentName;
848
-
849
- if (!agentMap.has(agentName)) {
850
- // First delegation for this agent type
851
- agentMap.set(agentName, {
852
- id: `consolidated_${agentName}`,
853
- type: 'consolidated_agent',
854
- agentName: agentName,
855
- delegations: [], // Array of all delegations
856
- pmCalls: [], // Array of all PM calls
857
- allEvents: [], // Combined events from all delegations
858
- firstTimestamp: delegation.timestamp,
859
- lastTimestamp: delegation.timestamp,
860
- totalEventCount: delegation.agentEvents.length,
861
- delegationCount: 1
862
- });
863
- }
864
-
865
- // Add this delegation to the consolidated agent
866
- const agent = agentMap.get(agentName);
867
- agent.delegations.push({
868
- id: delegationId,
869
- pmCall: delegation.pmCall,
870
- timestamp: delegation.timestamp,
871
- eventCount: delegation.agentEvents.length,
872
- startIndex: delegation.startIndex,
873
- endIndex: delegation.endIndex,
874
- events: delegation.agentEvents
875
- });
876
-
877
- if (delegation.pmCall) {
878
- agent.pmCalls.push(delegation.pmCall);
879
- }
880
-
881
- // Merge events from all delegations
882
- agent.allEvents = agent.allEvents.concat(delegation.agentEvents);
883
-
884
- // Update consolidated metadata
885
- if (new Date(delegation.timestamp) < new Date(agent.firstTimestamp)) {
886
- agent.firstTimestamp = delegation.timestamp;
887
- }
888
- if (new Date(delegation.timestamp) > new Date(agent.lastTimestamp)) {
889
- agent.lastTimestamp = delegation.timestamp;
890
- }
891
-
892
- agent.totalEventCount += delegation.agentEvents.length;
893
- agent.delegationCount++;
894
- }
895
-
896
- // Handle agents that appear without explicit PM delegation (implied PM)
897
- const events = this.eventViewer.events;
898
- for (let index = 0; index < events.length; index++) {
899
- const inference = this.getInferredAgent(index);
900
- if (inference && inference.type === 'subagent' && !agentMap.has(inference.agentName)) {
901
- // Create consolidated agent for implied delegation
902
- agentMap.set(inference.agentName, {
903
- id: `consolidated_${inference.agentName}`,
904
- type: 'consolidated_agent',
905
- agentName: inference.agentName,
906
- delegations: [{
907
- id: `implied_pm_${inference.agentName}_${index}`,
908
- pmCall: null,
909
- timestamp: events[index].timestamp,
910
- eventCount: 1,
911
- startIndex: index,
912
- endIndex: null,
913
- events: [{
914
- eventIndex: index,
915
- event: events[index],
916
- inference: inference
917
- }]
918
- }],
919
- pmCalls: [],
920
- allEvents: [{
921
- eventIndex: index,
922
- event: events[index],
923
- inference: inference
924
- }],
925
- firstTimestamp: events[index].timestamp,
926
- lastTimestamp: events[index].timestamp,
927
- totalEventCount: 1,
928
- delegationCount: 1,
929
- isImplied: true
930
- });
931
- }
932
- }
933
-
934
- // Convert map to array and sort by first appearance (timestamp)
935
- const uniqueInstances = Array.from(agentMap.values())
936
- .sort((a, b) => new Date(a.firstTimestamp) - new Date(b.firstTimestamp));
937
-
938
- console.log('Consolidated unique agents:', {
939
- total_unique_agents: uniqueInstances.length,
940
- agents: uniqueInstances.map(agent => ({
941
- name: agent.agentName,
942
- delegations: agent.delegationCount,
943
- totalEvents: agent.totalEventCount
944
- }))
945
- });
946
-
947
- return uniqueInstances;
948
- }
949
- }
950
-
951
- // ES6 Module export
952
- export { AgentInference };
953
- export default AgentInference;
954
-
955
- // Make AgentInference globally available for dist/dashboard.js
956
- window.AgentInference = AgentInference;