claude-mpm 4.16.0__py3-none-any.whl → 4.25.10__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.
Files changed (531) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_ENGINEER.md +286 -0
  3. claude_mpm/agents/BASE_PM.md +272 -23
  4. claude_mpm/agents/OUTPUT_STYLE.md +3 -48
  5. claude_mpm/agents/PM_INSTRUCTIONS.md +1821 -32
  6. claude_mpm/agents/WORKFLOW.md +75 -2
  7. claude_mpm/agents/agent_loader.py +4 -4
  8. claude_mpm/agents/base_agent.json +6 -3
  9. claude_mpm/agents/frontmatter_validator.py +1 -1
  10. claude_mpm/agents/templates/api_qa.json +5 -2
  11. claude_mpm/agents/templates/circuit_breakers.md +108 -2
  12. claude_mpm/agents/templates/documentation.json +33 -6
  13. claude_mpm/agents/templates/engineer.json +5 -1
  14. claude_mpm/agents/templates/javascript_engineer_agent.json +380 -0
  15. claude_mpm/agents/templates/php-engineer.json +10 -4
  16. claude_mpm/agents/templates/pm_red_flags.md +89 -19
  17. claude_mpm/agents/templates/project_organizer.json +7 -3
  18. claude_mpm/agents/templates/python_engineer.json +8 -3
  19. claude_mpm/agents/templates/qa.json +2 -1
  20. claude_mpm/agents/templates/react_engineer.json +1 -0
  21. claude_mpm/agents/templates/research.json +82 -12
  22. claude_mpm/agents/templates/rust_engineer.json +12 -7
  23. claude_mpm/agents/templates/security.json +4 -4
  24. claude_mpm/agents/templates/svelte-engineer.json +225 -0
  25. claude_mpm/agents/templates/tauri_engineer.json +274 -0
  26. claude_mpm/agents/templates/ticketing.json +10 -6
  27. claude_mpm/agents/templates/version_control.json +4 -2
  28. claude_mpm/agents/templates/web_qa.json +2 -1
  29. claude_mpm/cli/README.md +253 -0
  30. claude_mpm/cli/__init__.py +11 -1
  31. claude_mpm/cli/commands/__init__.py +2 -0
  32. claude_mpm/cli/commands/aggregate.py +1 -1
  33. claude_mpm/cli/commands/analyze.py +3 -3
  34. claude_mpm/cli/commands/cleanup.py +1 -1
  35. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  36. claude_mpm/cli/commands/debug.py +12 -12
  37. claude_mpm/cli/commands/hook_errors.py +277 -0
  38. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  39. claude_mpm/cli/commands/mcp_install_commands.py.backup +284 -0
  40. claude_mpm/cli/commands/mpm_init/README.md +365 -0
  41. claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
  42. claude_mpm/cli/commands/mpm_init/core.py +573 -0
  43. claude_mpm/cli/commands/mpm_init/display.py +341 -0
  44. claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
  45. claude_mpm/cli/commands/mpm_init/modes.py +397 -0
  46. claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
  47. claude_mpm/cli/commands/mpm_init_cli.py +396 -0
  48. claude_mpm/cli/commands/mpm_init_handler.py +67 -1
  49. claude_mpm/cli/commands/run.py +124 -128
  50. claude_mpm/cli/commands/skills.py +922 -0
  51. claude_mpm/cli/executor.py +58 -0
  52. claude_mpm/cli/interactive/agent_wizard.py +5 -5
  53. claude_mpm/cli/parsers/base_parser.py +35 -0
  54. claude_mpm/cli/parsers/mpm_init_parser.py +42 -0
  55. claude_mpm/cli/parsers/skills_parser.py +275 -0
  56. claude_mpm/cli/startup.py +168 -8
  57. claude_mpm/cli/startup_display.py +480 -0
  58. claude_mpm/cli/utils.py +1 -1
  59. claude_mpm/cli_module/commands.py +1 -1
  60. claude_mpm/cli_module/refactoring_guide.md +253 -0
  61. claude_mpm/commands/mpm-auto-configure.md +52 -0
  62. claude_mpm/commands/mpm-help.md +6 -0
  63. claude_mpm/commands/mpm-init.md +130 -8
  64. claude_mpm/commands/mpm-resume.md +372 -0
  65. claude_mpm/commands/mpm-tickets.md +56 -7
  66. claude_mpm/commands/mpm-version.md +113 -0
  67. claude_mpm/commands/mpm.md +2 -0
  68. claude_mpm/config/agent_capabilities.yaml +658 -0
  69. claude_mpm/config/agent_config.py +2 -2
  70. claude_mpm/config/async_logging_config.yaml +145 -0
  71. claude_mpm/constants.py +24 -0
  72. claude_mpm/core/.claude-mpm/logs/hooks_20250730.log +34 -0
  73. claude_mpm/core/api_validator.py +1 -1
  74. claude_mpm/core/claude_runner.py +14 -1
  75. claude_mpm/core/config.py +50 -0
  76. claude_mpm/core/constants.py +1 -1
  77. claude_mpm/core/factories.py +1 -1
  78. claude_mpm/core/framework/processors/metadata_processor.py +1 -1
  79. claude_mpm/core/hook_error_memory.py +381 -0
  80. claude_mpm/core/hook_manager.py +41 -2
  81. claude_mpm/core/interactive_session.py +48 -3
  82. claude_mpm/core/interfaces.py +56 -1
  83. claude_mpm/core/logger.py +3 -1
  84. claude_mpm/core/oneshot_session.py +39 -0
  85. claude_mpm/core/optimized_agent_loader.py +3 -3
  86. claude_mpm/d2/.gitignore +22 -0
  87. claude_mpm/d2/ARCHITECTURE_COMPARISON.md +273 -0
  88. claude_mpm/d2/FLASK_INTEGRATION.md +156 -0
  89. claude_mpm/d2/IMPLEMENTATION_SUMMARY.md +452 -0
  90. claude_mpm/d2/QUICKSTART.md +186 -0
  91. claude_mpm/d2/README.md +232 -0
  92. claude_mpm/d2/STORE_FIX_SUMMARY.md +167 -0
  93. claude_mpm/d2/SVELTE5_STORES_GUIDE.md +180 -0
  94. claude_mpm/d2/TESTING.md +288 -0
  95. claude_mpm/d2/index.html +118 -0
  96. claude_mpm/d2/package.json +19 -0
  97. claude_mpm/d2/src/App.svelte +110 -0
  98. claude_mpm/d2/src/components/Header.svelte +153 -0
  99. claude_mpm/d2/src/components/MainContent.svelte +74 -0
  100. claude_mpm/d2/src/components/Sidebar.svelte +85 -0
  101. claude_mpm/d2/src/components/tabs/EventsTab.svelte +326 -0
  102. claude_mpm/d2/src/lib/socketio.js +144 -0
  103. claude_mpm/d2/src/main.js +7 -0
  104. claude_mpm/d2/src/stores/events.js +114 -0
  105. claude_mpm/d2/src/stores/socket.js +108 -0
  106. claude_mpm/d2/src/stores/theme.js +65 -0
  107. claude_mpm/d2/svelte.config.js +12 -0
  108. claude_mpm/d2/vite.config.js +15 -0
  109. claude_mpm/dashboard/.claude-mpm/memories/README.md +36 -0
  110. claude_mpm/dashboard/BUILD_NUMBER +1 -0
  111. claude_mpm/dashboard/README.md +121 -0
  112. claude_mpm/dashboard/VERSION +1 -0
  113. claude_mpm/dashboard/react/components/DataInspector/DataInspector.tsx +273 -0
  114. claude_mpm/dashboard/react/components/ErrorBoundary.tsx +75 -0
  115. claude_mpm/dashboard/react/components/EventViewer/EventViewer.tsx +141 -0
  116. claude_mpm/dashboard/react/components/shared/ConnectionStatus.tsx +36 -0
  117. claude_mpm/dashboard/react/components/shared/FilterBar.tsx +89 -0
  118. claude_mpm/dashboard/react/contexts/DashboardContext.tsx +215 -0
  119. claude_mpm/dashboard/react/entries/events.tsx +165 -0
  120. claude_mpm/dashboard/react/hooks/useEvents.ts +191 -0
  121. claude_mpm/dashboard/react/hooks/useSocket.ts +225 -0
  122. claude_mpm/dashboard/static/built/REFACTORING_SUMMARY.md +170 -0
  123. claude_mpm/dashboard/static/built/components/activity-tree.js.map +1 -0
  124. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +101 -101
  125. claude_mpm/dashboard/static/built/components/agent-inference.js.map +1 -0
  126. claude_mpm/dashboard/static/built/components/build-tracker.js +59 -59
  127. claude_mpm/dashboard/static/built/components/code-simple.js +107 -107
  128. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +29 -29
  129. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +24 -24
  130. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +27 -27
  131. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +25 -25
  132. claude_mpm/dashboard/static/built/components/code-tree.js.map +1 -0
  133. claude_mpm/dashboard/static/built/components/code-viewer.js.map +1 -0
  134. claude_mpm/dashboard/static/built/components/connection-debug.js +101 -101
  135. claude_mpm/dashboard/static/built/components/diff-viewer.js +113 -113
  136. claude_mpm/dashboard/static/built/components/event-processor.js.map +1 -0
  137. claude_mpm/dashboard/static/built/components/event-viewer.js.map +1 -0
  138. claude_mpm/dashboard/static/built/components/export-manager.js.map +1 -0
  139. claude_mpm/dashboard/static/built/components/file-change-tracker.js +57 -57
  140. claude_mpm/dashboard/static/built/components/file-change-viewer.js +74 -74
  141. claude_mpm/dashboard/static/built/components/file-tool-tracker.js.map +1 -0
  142. claude_mpm/dashboard/static/built/components/file-viewer.js.map +1 -0
  143. claude_mpm/dashboard/static/built/components/hud-library-loader.js.map +1 -0
  144. claude_mpm/dashboard/static/built/components/hud-manager.js.map +1 -0
  145. claude_mpm/dashboard/static/built/components/hud-visualizer.js.map +1 -0
  146. claude_mpm/dashboard/static/built/components/module-viewer.js.map +1 -0
  147. claude_mpm/dashboard/static/built/components/session-manager.js.map +1 -0
  148. claude_mpm/dashboard/static/built/components/socket-manager.js.map +1 -0
  149. claude_mpm/dashboard/static/built/components/ui-state-manager.js.map +1 -0
  150. claude_mpm/dashboard/static/built/components/unified-data-viewer.js.map +1 -0
  151. claude_mpm/dashboard/static/built/components/working-directory.js.map +1 -0
  152. claude_mpm/dashboard/static/built/connection-manager.js +76 -76
  153. claude_mpm/dashboard/static/built/dashboard.js.map +1 -0
  154. claude_mpm/dashboard/static/built/extension-error-handler.js +22 -22
  155. claude_mpm/dashboard/static/built/react/events.js.map +1 -0
  156. claude_mpm/dashboard/static/built/shared/dom-helpers.js +9 -9
  157. claude_mpm/dashboard/static/built/shared/event-bus.js +5 -5
  158. claude_mpm/dashboard/static/built/shared/logger.js +16 -16
  159. claude_mpm/dashboard/static/built/shared/tooltip-service.js +6 -6
  160. claude_mpm/dashboard/static/built/socket-client.js.map +1 -0
  161. claude_mpm/dashboard/static/css/activity.css +69 -69
  162. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  163. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  164. claude_mpm/dashboard/static/index.html +22 -22
  165. claude_mpm/dashboard/static/js/REFACTORING_SUMMARY.md +170 -0
  166. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  167. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  168. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  169. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  170. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  171. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  172. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  173. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  174. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  175. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  176. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  177. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  178. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  179. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  180. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  181. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  182. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  183. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  184. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  185. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  186. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  187. claude_mpm/dashboard/static/js/shared/dom-helpers.js +9 -9
  188. claude_mpm/dashboard/static/js/shared/event-bus.js +5 -5
  189. claude_mpm/dashboard/static/js/shared/logger.js +16 -16
  190. claude_mpm/dashboard/static/js/shared/tooltip-service.js +6 -6
  191. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  192. claude_mpm/dashboard/static/navigation-test-results.md +118 -0
  193. claude_mpm/dashboard/static/production/main.html +21 -21
  194. claude_mpm/dashboard/static/test-archive/dashboard.html +22 -22
  195. claude_mpm/dashboard/templates/.claude-mpm/memories/README.md +36 -0
  196. claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md +39 -0
  197. claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md +38 -0
  198. claude_mpm/dashboard/templates/code_simple.html +23 -23
  199. claude_mpm/dashboard/templates/index.html +18 -18
  200. claude_mpm/hooks/README.md +143 -0
  201. claude_mpm/hooks/__init__.py +8 -0
  202. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  203. claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
  204. claude_mpm/hooks/claude_hooks/installer.py +45 -0
  205. claude_mpm/hooks/claude_hooks/response_tracking.py +35 -1
  206. claude_mpm/hooks/session_resume_hook.py +121 -0
  207. claude_mpm/hooks/templates/README.md +180 -0
  208. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  209. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  210. claude_mpm/hooks/templates/settings.json.example +147 -0
  211. claude_mpm/models/resume_log.py +340 -0
  212. claude_mpm/schemas/agent_schema.json +596 -0
  213. claude_mpm/schemas/frontmatter_schema.json +165 -0
  214. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  215. claude_mpm/scripts/start_activity_logging.py +3 -1
  216. claude_mpm/services/agents/auto_config_manager.py +1 -1
  217. claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
  218. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  219. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  220. claude_mpm/services/agents/deployment/agent_record_service.py +1 -1
  221. claude_mpm/services/agents/deployment/agent_validator.py +17 -1
  222. claude_mpm/services/agents/deployment/async_agent_deployment.py +1 -1
  223. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  224. claude_mpm/services/agents/deployment/local_template_deployment.py +1 -1
  225. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  226. claude_mpm/services/agents/loading/framework_agent_loader.py +8 -8
  227. claude_mpm/services/agents/local_template_manager.py +4 -2
  228. claude_mpm/services/agents/recommender.py +47 -0
  229. claude_mpm/services/cli/resume_service.py +617 -0
  230. claude_mpm/services/cli/session_manager.py +87 -0
  231. claude_mpm/services/cli/session_pause_manager.py +504 -0
  232. claude_mpm/services/cli/session_resume_helper.py +372 -0
  233. claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
  234. claude_mpm/services/core/base.py +26 -11
  235. claude_mpm/services/core/interfaces.py +56 -1
  236. claude_mpm/services/core/models/agent_config.py +3 -0
  237. claude_mpm/services/core/models/process.py +4 -0
  238. claude_mpm/services/core/path_resolver.py +1 -1
  239. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  240. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  241. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  242. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  243. claude_mpm/services/diagnostics/doctor_reporter.py +6 -4
  244. claude_mpm/services/diagnostics/models.py +21 -0
  245. claude_mpm/services/event_bus/README.md +244 -0
  246. claude_mpm/services/event_bus/direct_relay.py +3 -3
  247. claude_mpm/services/event_bus/event_bus.py +36 -3
  248. claude_mpm/services/event_bus/relay.py +23 -7
  249. claude_mpm/services/events/README.md +303 -0
  250. claude_mpm/services/events/consumers/logging.py +1 -2
  251. claude_mpm/services/framework_claude_md_generator/README.md +119 -0
  252. claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
  253. claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
  254. claude_mpm/services/local_ops/__init__.py +2 -0
  255. claude_mpm/services/local_ops/process_manager.py +1 -1
  256. claude_mpm/services/local_ops/resource_monitor.py +2 -2
  257. claude_mpm/services/mcp_config_manager.py +7 -131
  258. claude_mpm/services/mcp_gateway/README.md +185 -0
  259. claude_mpm/services/mcp_gateway/auto_configure.py +31 -25
  260. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  261. claude_mpm/services/mcp_gateway/core/process_pool.py +19 -10
  262. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  263. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
  264. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +26 -21
  265. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  266. claude_mpm/services/memory/failure_tracker.py +19 -4
  267. claude_mpm/services/memory/optimizer.py +1 -1
  268. claude_mpm/services/model/model_router.py +8 -9
  269. claude_mpm/services/monitor/daemon.py +1 -1
  270. claude_mpm/services/monitor/server.py +2 -2
  271. claude_mpm/services/native_agent_converter.py +356 -0
  272. claude_mpm/services/port_manager.py +1 -1
  273. claude_mpm/services/project/documentation_manager.py +2 -1
  274. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  275. claude_mpm/services/runner_configuration_service.py +1 -0
  276. claude_mpm/services/self_upgrade_service.py +165 -7
  277. claude_mpm/services/session_manager.py +205 -1
  278. claude_mpm/services/skills_config.py +547 -0
  279. claude_mpm/services/skills_deployer.py +955 -0
  280. claude_mpm/services/socketio/handlers/connection.py +1 -1
  281. claude_mpm/services/socketio/handlers/connection.py.backup +217 -0
  282. claude_mpm/services/socketio/handlers/git.py +2 -2
  283. claude_mpm/services/socketio/handlers/hook.py.backup +154 -0
  284. claude_mpm/services/static/.gitkeep +2 -0
  285. claude_mpm/services/system_instructions_service.py +1 -3
  286. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  287. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  288. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
  289. claude_mpm/services/unified/deployment_strategies/local.py +1 -1
  290. claude_mpm/services/version_control/VERSION +1 -0
  291. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  292. claude_mpm/services/version_service.py +104 -1
  293. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  294. claude_mpm/skills/__init__.py +21 -0
  295. claude_mpm/skills/agent_skills_injector.py +324 -0
  296. claude_mpm/skills/bundled/.gitkeep +2 -0
  297. claude_mpm/skills/bundled/LICENSE_ATTRIBUTIONS.md +79 -0
  298. claude_mpm/skills/bundled/api-documentation.md +393 -0
  299. claude_mpm/skills/bundled/async-testing.md +571 -0
  300. claude_mpm/skills/bundled/code-review.md +143 -0
  301. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
  302. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
  303. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
  304. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
  305. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
  306. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
  307. claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
  308. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
  309. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
  310. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
  311. claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
  312. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
  313. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
  314. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
  315. claude_mpm/skills/bundled/database-migration.md +199 -0
  316. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
  317. claude_mpm/skills/bundled/debugging/root-cause-tracing/find-polluter.sh +63 -0
  318. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
  319. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
  320. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
  321. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
  322. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
  323. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
  324. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
  325. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
  326. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
  327. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
  328. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
  329. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
  330. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
  331. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
  332. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
  333. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
  334. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
  335. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
  336. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -0
  337. claude_mpm/skills/bundled/docker-containerization.md +194 -0
  338. claude_mpm/skills/bundled/express-local-dev.md +1429 -0
  339. claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
  340. claude_mpm/skills/bundled/git-workflow.md +414 -0
  341. claude_mpm/skills/bundled/imagemagick.md +204 -0
  342. claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
  343. claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
  344. claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
  345. claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
  346. claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
  347. claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
  348. claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
  349. claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
  350. claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
  351. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  352. claude_mpm/skills/bundled/json-data-handling.md +223 -0
  353. claude_mpm/skills/bundled/main/artifacts-builder/LICENSE.txt +202 -0
  354. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
  355. claude_mpm/skills/bundled/main/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  356. claude_mpm/skills/bundled/main/artifacts-builder/scripts/init-artifact.sh +322 -0
  357. claude_mpm/skills/bundled/main/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  358. claude_mpm/skills/bundled/main/internal-comms/LICENSE.txt +202 -0
  359. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
  360. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
  361. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
  362. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
  363. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
  364. claude_mpm/skills/bundled/main/mcp-builder/LICENSE.txt +202 -0
  365. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
  366. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
  367. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
  368. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
  369. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
  370. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
  371. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
  372. claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +157 -0
  373. claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +425 -0
  374. claude_mpm/skills/bundled/main/mcp-builder/scripts/example_evaluation.xml +22 -0
  375. claude_mpm/skills/bundled/main/mcp-builder/scripts/requirements.txt +2 -0
  376. claude_mpm/skills/bundled/main/skill-creator/LICENSE.txt +202 -0
  377. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
  378. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
  379. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
  380. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
  381. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
  382. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
  383. claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +303 -0
  384. claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +113 -0
  385. claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +72 -0
  386. claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
  387. claude_mpm/skills/bundled/pdf.md +141 -0
  388. claude_mpm/skills/bundled/performance-profiling.md +573 -0
  389. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
  390. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
  391. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
  392. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
  393. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
  394. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
  395. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
  396. claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
  397. claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
  398. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
  399. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
  400. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
  401. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
  402. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
  403. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
  404. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
  405. claude_mpm/skills/bundled/security-scanning.md +327 -0
  406. claude_mpm/skills/bundled/systematic-debugging.md +473 -0
  407. claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
  408. claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
  409. claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
  410. claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
  411. claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
  412. claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
  413. claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
  414. claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
  415. claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
  416. claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
  417. claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
  418. claude_mpm/skills/bundled/test-driven-development.md +378 -0
  419. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
  420. claude_mpm/skills/bundled/testing/condition-based-waiting/example.ts +158 -0
  421. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
  422. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
  423. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
  424. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
  425. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
  426. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
  427. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
  428. claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
  429. claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
  430. claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
  431. claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
  432. claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
  433. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
  434. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
  435. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
  436. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
  437. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
  438. claude_mpm/skills/bundled/testing/webapp-testing/LICENSE.txt +202 -0
  439. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
  440. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
  441. claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +35 -0
  442. claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +44 -0
  443. claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +34 -0
  444. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
  445. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
  446. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +129 -0
  447. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
  448. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
  449. claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
  450. claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
  451. claude_mpm/skills/bundled/xlsx.md +157 -0
  452. claude_mpm/skills/registry.py +97 -9
  453. claude_mpm/skills/skills_registry.py +347 -0
  454. claude_mpm/skills/skills_service.py +739 -0
  455. claude_mpm/templates/questions/EXAMPLES.md +501 -0
  456. claude_mpm/templates/questions/__init__.py +43 -0
  457. claude_mpm/templates/questions/base.py +193 -0
  458. claude_mpm/templates/questions/pr_strategy.py +314 -0
  459. claude_mpm/templates/questions/project_init.py +388 -0
  460. claude_mpm/templates/questions/ticket_mgmt.py +397 -0
  461. claude_mpm/tools/README_SOCKETIO_DEBUG.md +224 -0
  462. claude_mpm/tools/__main__.py +8 -8
  463. claude_mpm/tools/code_tree_analyzer/README.md +64 -0
  464. claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
  465. claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
  466. claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
  467. claude_mpm/tools/code_tree_analyzer/core.py +380 -0
  468. claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
  469. claude_mpm/tools/code_tree_analyzer/events.py +168 -0
  470. claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
  471. claude_mpm/tools/code_tree_analyzer/models.py +39 -0
  472. claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
  473. claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
  474. claude_mpm/utils/agent_dependency_loader.py +5 -5
  475. claude_mpm/utils/dependency_cache.py +3 -1
  476. claude_mpm/utils/gitignore.py +241 -0
  477. claude_mpm/utils/log_cleanup.py +3 -3
  478. claude_mpm/utils/robust_installer.py +3 -5
  479. claude_mpm/utils/structured_questions.py +619 -0
  480. claude_mpm-4.25.10.dist-info/METADATA +789 -0
  481. {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/RECORD +485 -240
  482. claude_mpm/agents/INSTRUCTIONS_OLD_DEPRECATED.md +0 -602
  483. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  484. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  485. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  486. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  487. claude_mpm/cli/commands/mpm_init.py +0 -2008
  488. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  489. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  490. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  491. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  492. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  493. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  494. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  495. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  496. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  497. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  498. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  499. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  500. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  501. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  502. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  503. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  504. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  505. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  506. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  507. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  508. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  509. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  510. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  511. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  512. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  513. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  514. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  515. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  516. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  517. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  518. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  519. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  520. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  521. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  522. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  523. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  524. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  525. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  526. claude_mpm/tools/code_tree_analyzer.py +0 -1825
  527. claude_mpm-4.16.0.dist-info/METADATA +0 -453
  528. {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/WHEEL +0 -0
  529. {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/entry_points.txt +0 -0
  530. {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/licenses/LICENSE +0 -0
  531. {claude_mpm-4.16.0.dist-info → claude_mpm-4.25.10.dist-info}/top_level.txt +0 -0
@@ -199,7 +199,9 @@ class KuzuMemoryService(BaseToolAdapter):
199
199
  try:
200
200
  if action == "store":
201
201
  result = await self.store_memory(
202
- params.get("content"), params.get("tags"), {} # metadata
202
+ params.get("content"),
203
+ params.get("tags"),
204
+ {}, # metadata
203
205
  )
204
206
  elif action == "recall":
205
207
  result = await self.recall_memories(
@@ -213,7 +215,9 @@ class KuzuMemoryService(BaseToolAdapter):
213
215
  )
214
216
  elif action == "context":
215
217
  result = await self.get_context(
216
- params.get("query", ""), 2, True # depth # include_related
218
+ params.get("query", ""),
219
+ 2,
220
+ True, # depth # include_related
217
221
  )
218
222
  else:
219
223
  return MCPToolResult(success=False, error=f"Unknown action: {action}")
@@ -29,6 +29,7 @@ Example flow:
29
29
 
30
30
  import logging
31
31
  import re
32
+ import threading
32
33
  from dataclasses import dataclass, field
33
34
  from datetime import datetime, timezone
34
35
  from typing import Dict, List, Optional, Tuple
@@ -536,6 +537,7 @@ class FailureTracker:
536
537
 
537
538
  # Singleton instance for session-level tracking
538
539
  _tracker_instance: Optional[FailureTracker] = None
540
+ _tracker_lock = threading.Lock()
539
541
 
540
542
 
541
543
  def get_failure_tracker() -> FailureTracker:
@@ -544,13 +546,23 @@ def get_failure_tracker() -> FailureTracker:
544
546
  WHY: Session-level tracking requires a singleton to maintain state
545
547
  across multiple hook invocations during the same session.
546
548
 
549
+ Thread-safe implementation using double-checked locking pattern to
550
+ prevent race conditions during concurrent initialization.
551
+
547
552
  Returns:
548
553
  The FailureTracker singleton instance
549
554
  """
550
555
  global _tracker_instance
551
- if _tracker_instance is None:
552
- _tracker_instance = FailureTracker()
553
- return _tracker_instance
556
+
557
+ # Fast path - check without lock
558
+ if _tracker_instance is not None:
559
+ return _tracker_instance
560
+
561
+ # Slow path - acquire lock and double-check
562
+ with _tracker_lock:
563
+ if _tracker_instance is None:
564
+ _tracker_instance = FailureTracker()
565
+ return _tracker_instance
554
566
 
555
567
 
556
568
  def reset_failure_tracker() -> None:
@@ -558,6 +570,9 @@ def reset_failure_tracker() -> None:
558
570
 
559
571
  WHY: Tests need to reset state between runs. Also useful for
560
572
  explicitly starting a new tracking session.
573
+
574
+ Thread-safe implementation ensures proper cleanup.
561
575
  """
562
576
  global _tracker_instance
563
- _tracker_instance = None
577
+ with _tracker_lock:
578
+ _tracker_instance = None
@@ -618,7 +618,7 @@ class MemoryOptimizer(LoggerMixin):
618
618
  )
619
619
 
620
620
  # Check for similar items
621
- consolidated, consolidated_count = self._consolidate_similar_items(
621
+ _consolidated, consolidated_count = self._consolidate_similar_items(
622
622
  unique_points
623
623
  )
624
624
  if consolidated_count > 0:
@@ -266,7 +266,7 @@ class ModelRouter(BaseService, IModelRouter):
266
266
 
267
267
  # Route based on strategy
268
268
  if self.strategy == RoutingStrategy.CLAUDE_ONLY:
269
- return await self._route_to_claude(content, task, model, **kwargs)
269
+ return await self._route_to_claude(content, task, model=model, **kwargs)
270
270
 
271
271
  if self.strategy in (
272
272
  RoutingStrategy.OLLAMA_ONLY,
@@ -275,13 +275,13 @@ class ModelRouter(BaseService, IModelRouter):
275
275
  return await self._route_to_ollama(
276
276
  content,
277
277
  task,
278
- model,
278
+ model=model,
279
279
  require_success=True,
280
280
  **kwargs,
281
281
  )
282
282
 
283
283
  # AUTO strategy
284
- return await self._route_auto(content, task, model, **kwargs)
284
+ return await self._route_auto(content, task, model=model, **kwargs)
285
285
 
286
286
  async def _route_auto(
287
287
  self,
@@ -308,7 +308,7 @@ class ModelRouter(BaseService, IModelRouter):
308
308
  response = await self._route_to_ollama(
309
309
  content,
310
310
  task,
311
- model,
311
+ model=model,
312
312
  require_success=False,
313
313
  **kwargs,
314
314
  )
@@ -325,7 +325,7 @@ class ModelRouter(BaseService, IModelRouter):
325
325
  # Ollama unavailable or failed - fallback to Claude
326
326
  if self.fallback_enabled:
327
327
  self.log_info("Falling back to Claude")
328
- return await self._route_to_claude(content, task, model, **kwargs)
328
+ return await self._route_to_claude(content, task, model=model, **kwargs)
329
329
  return self._create_error_response(
330
330
  task,
331
331
  model,
@@ -356,8 +356,7 @@ class ModelRouter(BaseService, IModelRouter):
356
356
  if require_success and not await self.ollama_provider.is_available():
357
357
  if self.strategy == RoutingStrategy.PRIVACY_FIRST:
358
358
  error_msg = (
359
- "Ollama not available. Privacy mode enabled - "
360
- "not sending to cloud."
359
+ "Ollama not available. Privacy mode enabled - not sending to cloud."
361
360
  )
362
361
  else:
363
362
  error_msg = "Ollama not available and required by configuration"
@@ -368,7 +367,7 @@ class ModelRouter(BaseService, IModelRouter):
368
367
  self._route_count["ollama"] += 1
369
368
 
370
369
  return await self.ollama_provider.analyze_content(
371
- content, task, model, **kwargs
370
+ content, task, model=model, **kwargs
372
371
  )
373
372
 
374
373
  async def _route_to_claude(
@@ -394,7 +393,7 @@ class ModelRouter(BaseService, IModelRouter):
394
393
  self._route_count["claude"] += 1
395
394
 
396
395
  return await self.claude_provider.analyze_content(
397
- content, task, model, **kwargs
396
+ content, task, model=model, **kwargs
398
397
  )
399
398
 
400
399
  def _create_error_response(
@@ -479,7 +479,7 @@ class UnifiedMonitorDaemon:
479
479
  except OSError:
480
480
  if i < 9:
481
481
  self.logger.debug(
482
- f"Port {self.port} still in use, waiting... ({i+1}/10)"
482
+ f"Port {self.port} still in use, waiting... ({i + 1}/10)"
483
483
  )
484
484
  time.sleep(1)
485
485
  else:
@@ -203,8 +203,8 @@ class UnifiedMonitorServer:
203
203
  # Create Socket.IO server with proper ping configuration
204
204
  self.sio = socketio.AsyncServer(
205
205
  cors_allowed_origins="*",
206
- logger=False,
207
- engineio_logger=False,
206
+ logger=True, # Enable to see Socket.IO events and connection lifecycle
207
+ engineio_logger=True, # Enable to see Engine.IO protocol handshake details
208
208
  ping_interval=30, # 30 seconds ping interval (matches client expectation)
209
209
  ping_timeout=60, # 60 seconds ping timeout (generous for stability)
210
210
  )
@@ -0,0 +1,356 @@
1
+ """Native Agent Converter Service
2
+
3
+ Converts MPM agent JSON definitions to Claude Code --agents flag format.
4
+
5
+ WHY: Claude Code 1.0.83+ supports native --agents flag for dynamic agent definition.
6
+ This allows agents to be passed directly via CLI instead of deployed to .claude/agents/.
7
+
8
+ DESIGN: Converts MPM agent schema → Claude native schema with field mappings:
9
+ - description → description (agent selection hint)
10
+ - system_instructions → prompt (agent behavior)
11
+ - allowed_tools → tools (tool limitations)
12
+ - model_tier → model (model selection)
13
+
14
+ USAGE:
15
+ converter = NativeAgentConverter()
16
+ agents_flag = converter.build_agents_flag(agent_configs)
17
+ # Returns: --agents '{"agent-name": {...}, ...}'
18
+ """
19
+
20
+ import json
21
+ from pathlib import Path
22
+ from typing import Any, Dict, List, Optional
23
+
24
+ from claude_mpm.core.logging_config import get_logger
25
+
26
+
27
+ class NativeAgentConverter:
28
+ """Converts MPM agent configurations to Claude Code --agents format."""
29
+
30
+ # Map MPM model tiers to Claude model names
31
+ MODEL_TIER_MAP = {
32
+ "opus": "opus",
33
+ "sonnet": "sonnet",
34
+ "haiku": "haiku",
35
+ "claude-3-opus": "opus",
36
+ "claude-3-sonnet": "sonnet",
37
+ "claude-3-haiku": "haiku",
38
+ "claude-3.5-sonnet": "sonnet",
39
+ "claude-4-sonnet": "sonnet",
40
+ "claude-4-opus": "opus",
41
+ }
42
+
43
+ # Map MPM tool names to Claude tool names
44
+ TOOL_NAME_MAP = {
45
+ "Read": "Read",
46
+ "Write": "Write",
47
+ "Edit": "Edit",
48
+ "MultiEdit": "MultiEdit",
49
+ "Bash": "Bash",
50
+ "Grep": "Grep",
51
+ "Glob": "Glob",
52
+ "LS": "LS",
53
+ "WebSearch": "WebSearch",
54
+ "WebFetch": "WebFetch",
55
+ "TodoWrite": "TodoWrite",
56
+ "NotebookEdit": "NotebookEdit",
57
+ "BashOutput": "BashOutput",
58
+ "KillShell": "KillShell",
59
+ "AskUserQuestion": "AskUserQuestion",
60
+ }
61
+
62
+ def __init__(self):
63
+ """Initialize the native agent converter."""
64
+ self.logger = get_logger(__name__)
65
+
66
+ def convert_mpm_agent_to_native(
67
+ self, agent_config: Dict[str, Any], agent_id: Optional[str] = None
68
+ ) -> Dict[str, Any]:
69
+ """Convert a single MPM agent config to Claude native format.
70
+
71
+ Args:
72
+ agent_config: MPM agent JSON configuration
73
+ agent_id: Optional agent ID (falls back to agent_config['agent_id'])
74
+
75
+ Returns:
76
+ Dict with Claude native agent format:
77
+ {
78
+ "description": "...",
79
+ "prompt": "...",
80
+ "tools": [...],
81
+ "model": "sonnet"
82
+ }
83
+ """
84
+ try:
85
+ # Extract agent ID
86
+ if not agent_id:
87
+ agent_id = agent_config.get("agent_id") or agent_config.get("name", "")
88
+
89
+ # Extract description (for agent selection)
90
+ description = agent_config.get("description", "")
91
+ if not description and "metadata" in agent_config:
92
+ description = agent_config["metadata"].get("description", "")
93
+
94
+ # Build prompt from instructions and BASE_*.md reference
95
+ prompt = self._build_agent_prompt(agent_config)
96
+
97
+ # Extract and map tools
98
+ tools = self._extract_and_map_tools(agent_config)
99
+
100
+ # Map model tier
101
+ model = self._map_model_tier(agent_config)
102
+
103
+ native_config = {
104
+ "description": description,
105
+ "prompt": prompt,
106
+ "tools": tools,
107
+ "model": model,
108
+ }
109
+
110
+ self.logger.debug(f"Converted agent '{agent_id}' to native format")
111
+ return native_config
112
+
113
+ except Exception as e:
114
+ self.logger.error(f"Error converting agent {agent_id}: {e}")
115
+ # Return minimal valid config as fallback
116
+ return {
117
+ "description": f"Agent {agent_id}",
118
+ "prompt": agent_config.get("instructions", ""),
119
+ "tools": [],
120
+ "model": "sonnet",
121
+ }
122
+
123
+ def _build_agent_prompt(self, agent_config: Dict[str, Any]) -> str:
124
+ """Build agent prompt from instructions and BASE_*.md reference.
125
+
126
+ OPTIMIZATION: Keep prompts concise for CLI argument length limits.
127
+ The BASE_*.md files contain full instructions, so we only need:
128
+ 1. Reference to BASE file
129
+ 2. Brief specialization note
130
+
131
+ Args:
132
+ agent_config: MPM agent configuration
133
+
134
+ Returns:
135
+ Concise prompt string
136
+ """
137
+ prompt_parts = []
138
+
139
+ # Add base instructions reference if available (most important)
140
+ if "knowledge" in agent_config:
141
+ base_file = agent_config["knowledge"].get("base_instructions_file")
142
+ if base_file:
143
+ prompt_parts.append(f"Follow {base_file} for all protocols.")
144
+
145
+ # Add main instructions (keep brief)
146
+ instructions = agent_config.get("instructions", "")
147
+ if instructions:
148
+ # Limit instruction length to avoid bloat
149
+ if len(instructions) > 300:
150
+ instructions = instructions[:300] + "..."
151
+ prompt_parts.append(instructions)
152
+
153
+ # Skip domain expertise and best practices for CLI mode
154
+ # These are already in BASE_*.md files referenced above
155
+ # Adding them here just bloats the JSON unnecessarily
156
+
157
+ return "\n".join(str(part) for part in prompt_parts if part)
158
+
159
+ def _extract_and_map_tools(self, agent_config: Dict[str, Any]) -> List[str]:
160
+ """Extract and map tools from MPM config to Claude tool names.
161
+
162
+ Args:
163
+ agent_config: MPM agent configuration
164
+
165
+ Returns:
166
+ List of Claude tool names
167
+ """
168
+ tools = []
169
+
170
+ # Check capabilities.tools
171
+ if "capabilities" in agent_config and "tools" in agent_config["capabilities"]:
172
+ mpm_tools = agent_config["capabilities"]["tools"]
173
+ for tool in mpm_tools:
174
+ mapped_tool = self.TOOL_NAME_MAP.get(tool, tool)
175
+ if mapped_tool not in tools:
176
+ tools.append(mapped_tool)
177
+
178
+ # If no tools specified, provide reasonable defaults
179
+ if not tools:
180
+ tools = ["Read", "Write", "Edit", "Bash", "Grep", "Glob"]
181
+
182
+ return tools
183
+
184
+ def _map_model_tier(self, agent_config: Dict[str, Any]) -> str:
185
+ """Map MPM model tier to Claude model name.
186
+
187
+ Args:
188
+ agent_config: MPM agent configuration
189
+
190
+ Returns:
191
+ Claude model name (opus, sonnet, haiku)
192
+ """
193
+ # Check capabilities.model
194
+ if "capabilities" in agent_config and "model" in agent_config["capabilities"]:
195
+ model_tier = agent_config["capabilities"]["model"]
196
+ return self.MODEL_TIER_MAP.get(model_tier.lower(), "sonnet")
197
+
198
+ # Check metadata.model_preference
199
+ if (
200
+ "metadata" in agent_config
201
+ and "model_preference" in agent_config["metadata"]
202
+ ):
203
+ model_tier = agent_config["metadata"]["model_preference"]
204
+ return self.MODEL_TIER_MAP.get(model_tier.lower(), "sonnet")
205
+
206
+ # Default to sonnet
207
+ return "sonnet"
208
+
209
+ def generate_agents_json(self, agents: List[Dict[str, Any]]) -> str:
210
+ """Generate complete --agents JSON string from list of agent configs.
211
+
212
+ Args:
213
+ agents: List of MPM agent configurations
214
+
215
+ Returns:
216
+ JSON string for --agents flag
217
+ """
218
+ native_agents = {}
219
+
220
+ for agent_config in agents:
221
+ agent_id = agent_config.get("agent_id") or agent_config.get("name", "")
222
+ if not agent_id:
223
+ self.logger.warning("Skipping agent without ID")
224
+ continue
225
+
226
+ # Skip PM agent (main Claude instance)
227
+ if agent_id.lower() in ["pm", "project_manager"]:
228
+ self.logger.debug(f"Skipping PM agent: {agent_id}")
229
+ continue
230
+
231
+ native_config = self.convert_mpm_agent_to_native(agent_config, agent_id)
232
+ native_agents[agent_id] = native_config
233
+
234
+ return json.dumps(native_agents, separators=(",", ":"))
235
+
236
+ def build_agents_flag(
237
+ self, agents: List[Dict[str, Any]], escape_for_shell: bool = True
238
+ ) -> str:
239
+ """Build complete --agents flag for CLI.
240
+
241
+ Args:
242
+ agents: List of MPM agent configurations
243
+ escape_for_shell: Whether to escape JSON for shell
244
+
245
+ Returns:
246
+ Complete flag string: --agents '{"agent1": {...}, ...}'
247
+ """
248
+ agents_json = self.generate_agents_json(agents)
249
+
250
+ # Check length (Claude CLI has argument length limits)
251
+ if len(agents_json) > 50000: # Conservative limit
252
+ self.logger.warning(
253
+ f"Agents JSON is very large ({len(agents_json)} chars). "
254
+ "Consider using file-based deployment."
255
+ )
256
+
257
+ if escape_for_shell:
258
+ # Escape for shell - wrap in single quotes
259
+ return f"--agents '{agents_json}'"
260
+
261
+ return f"--agents {agents_json}"
262
+
263
+ def load_agents_from_templates(
264
+ self, templates_dir: Optional[Path] = None
265
+ ) -> List[Dict[str, Any]]:
266
+ """Load all agent configs from templates directory.
267
+
268
+ Args:
269
+ templates_dir: Path to templates directory (defaults to MPM agents)
270
+
271
+ Returns:
272
+ List of agent configurations
273
+ """
274
+ if not templates_dir:
275
+ # Default to MPM agents directory
276
+ mpm_package_dir = Path(__file__).parent.parent / "agents" / "templates"
277
+ templates_dir = mpm_package_dir
278
+
279
+ if not templates_dir.exists():
280
+ self.logger.warning(f"Templates directory not found: {templates_dir}")
281
+ return []
282
+
283
+ agents = []
284
+ json_files = list(templates_dir.glob("*.json"))
285
+
286
+ self.logger.info(
287
+ f"Loading {len(json_files)} agent templates from {templates_dir}"
288
+ )
289
+
290
+ for json_file in json_files:
291
+ try:
292
+ # Skip base_agent.json
293
+ if json_file.stem == "base_agent":
294
+ continue
295
+
296
+ agent_config = json.loads(json_file.read_text())
297
+ agents.append(agent_config)
298
+ self.logger.debug(f"Loaded agent: {json_file.stem}")
299
+
300
+ except Exception as e:
301
+ self.logger.error(f"Error loading agent {json_file.name}: {e}")
302
+ continue
303
+
304
+ return agents
305
+
306
+ def estimate_json_size(self, agents: List[Dict[str, Any]]) -> int:
307
+ """Estimate the size of --agents JSON output.
308
+
309
+ Args:
310
+ agents: List of agent configurations
311
+
312
+ Returns:
313
+ Estimated size in bytes
314
+ """
315
+ agents_json = self.generate_agents_json(agents)
316
+ return len(agents_json.encode("utf-8"))
317
+
318
+ def get_conversion_summary(self, agents: List[Dict[str, Any]]) -> Dict[str, Any]:
319
+ """Get summary of agent conversion for reporting.
320
+
321
+ Args:
322
+ agents: List of agent configurations
323
+
324
+ Returns:
325
+ Summary dict with counts and size info
326
+ """
327
+ native_agents = {}
328
+ model_counts = {"opus": 0, "sonnet": 0, "haiku": 0}
329
+ tool_usage = {}
330
+
331
+ for agent_config in agents:
332
+ agent_id = agent_config.get("agent_id") or agent_config.get("name", "")
333
+ if not agent_id or agent_id.lower() in ["pm", "project_manager"]:
334
+ continue
335
+
336
+ native_config = self.convert_mpm_agent_to_native(agent_config, agent_id)
337
+ native_agents[agent_id] = native_config
338
+
339
+ # Count models
340
+ model = native_config.get("model", "sonnet")
341
+ model_counts[model] = model_counts.get(model, 0) + 1
342
+
343
+ # Count tools
344
+ for tool in native_config.get("tools", []):
345
+ tool_usage[tool] = tool_usage.get(tool, 0) + 1
346
+
347
+ json_size = len(json.dumps(native_agents, separators=(",", ":")))
348
+
349
+ return {
350
+ "total_agents": len(native_agents),
351
+ "json_size": json_size,
352
+ "json_size_kb": round(json_size / 1024, 2),
353
+ "model_distribution": model_counts,
354
+ "tool_usage": tool_usage,
355
+ "agents": list(native_agents.keys()),
356
+ }
@@ -431,7 +431,7 @@ class PortManager:
431
431
  return port
432
432
 
433
433
  self.logger.error(
434
- f"No available ports in range {self.PORT_RANGE.start}-{self.PORT_RANGE.stop-1}"
434
+ f"No available ports in range {self.PORT_RANGE.start}-{self.PORT_RANGE.stop - 1}"
435
435
  )
436
436
  return None
437
437
 
@@ -369,7 +369,8 @@ class DocumentationManager:
369
369
  sorted_sections = sorted(
370
370
  sections.items(),
371
371
  key=lambda x: self.SECTION_PRIORITY.get(
372
- self._get_section_key(x[0]), 50 # Default priority
372
+ self._get_section_key(x[0]),
373
+ 50, # Default priority
373
374
  ),
374
375
  reverse=True, # Higher priority first
375
376
  )
@@ -318,7 +318,9 @@ class ToolchainAnalyzerService(BaseService, IToolchainAnalyzer):
318
318
  else (
319
319
  3
320
320
  if f.confidence == ConfidenceLevel.MEDIUM
321
- else 2 if f.confidence == ConfidenceLevel.LOW else 1
321
+ else 2
322
+ if f.confidence == ConfidenceLevel.LOW
323
+ else 1
322
324
  )
323
325
  ),
324
326
  f.popularity_score,
@@ -168,6 +168,7 @@ class RunnerConfigurationService(BaseService, RunnerConfigurationInterface):
168
168
  "launch_method": kwargs.get("launch_method", "exec"),
169
169
  "enable_websocket": kwargs.get("enable_websocket", False),
170
170
  "websocket_port": kwargs.get("websocket_port", 8765),
171
+ "use_native_agents": kwargs.get("use_native_agents", False),
171
172
  }
172
173
 
173
174
  # Initialize main configuration using ConfigLoader