claude-mpm 4.20.3__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.

Potentially problematic release.


This version of claude-mpm might be problematic. Click here for more details.

Files changed (454) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +23 -6
  3. claude_mpm/agents/OUTPUT_STYLE.md +3 -48
  4. claude_mpm/agents/PM_INSTRUCTIONS.md +1783 -34
  5. claude_mpm/agents/WORKFLOW.md +75 -2
  6. claude_mpm/agents/base_agent.json +6 -3
  7. claude_mpm/agents/frontmatter_validator.py +1 -1
  8. claude_mpm/agents/templates/api_qa.json +5 -2
  9. claude_mpm/agents/templates/circuit_breakers.md +108 -2
  10. claude_mpm/agents/templates/documentation.json +33 -6
  11. claude_mpm/agents/templates/javascript_engineer_agent.json +380 -0
  12. claude_mpm/agents/templates/php-engineer.json +10 -4
  13. claude_mpm/agents/templates/pm_red_flags.md +89 -19
  14. claude_mpm/agents/templates/project_organizer.json +7 -3
  15. claude_mpm/agents/templates/qa.json +2 -1
  16. claude_mpm/agents/templates/react_engineer.json +1 -0
  17. claude_mpm/agents/templates/research.json +82 -12
  18. claude_mpm/agents/templates/security.json +4 -4
  19. claude_mpm/agents/templates/tauri_engineer.json +274 -0
  20. claude_mpm/agents/templates/ticketing.json +10 -6
  21. claude_mpm/agents/templates/version_control.json +4 -2
  22. claude_mpm/agents/templates/web_qa.json +2 -1
  23. claude_mpm/cli/README.md +253 -0
  24. claude_mpm/cli/__init__.py +11 -1
  25. claude_mpm/cli/commands/aggregate.py +1 -1
  26. claude_mpm/cli/commands/analyze.py +3 -3
  27. claude_mpm/cli/commands/cleanup.py +1 -1
  28. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  29. claude_mpm/cli/commands/debug.py +12 -12
  30. claude_mpm/cli/commands/hook_errors.py +277 -0
  31. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  32. claude_mpm/cli/commands/mcp_install_commands.py.backup +284 -0
  33. claude_mpm/cli/commands/mpm_init/README.md +365 -0
  34. claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
  35. claude_mpm/cli/commands/mpm_init/core.py +573 -0
  36. claude_mpm/cli/commands/mpm_init/display.py +341 -0
  37. claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
  38. claude_mpm/cli/commands/mpm_init/modes.py +397 -0
  39. claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
  40. claude_mpm/cli/commands/mpm_init_cli.py +396 -0
  41. claude_mpm/cli/commands/mpm_init_handler.py +67 -1
  42. claude_mpm/cli/commands/run.py +124 -128
  43. claude_mpm/cli/commands/skills.py +522 -34
  44. claude_mpm/cli/executor.py +56 -0
  45. claude_mpm/cli/interactive/agent_wizard.py +5 -5
  46. claude_mpm/cli/parsers/base_parser.py +28 -0
  47. claude_mpm/cli/parsers/mpm_init_parser.py +42 -0
  48. claude_mpm/cli/parsers/skills_parser.py +138 -0
  49. claude_mpm/cli/startup.py +111 -8
  50. claude_mpm/cli/startup_display.py +480 -0
  51. claude_mpm/cli/utils.py +1 -1
  52. claude_mpm/cli_module/commands.py +1 -1
  53. claude_mpm/cli_module/refactoring_guide.md +253 -0
  54. claude_mpm/commands/mpm-help.md +3 -0
  55. claude_mpm/commands/mpm-init.md +19 -3
  56. claude_mpm/commands/mpm-resume.md +372 -0
  57. claude_mpm/commands/mpm-tickets.md +56 -7
  58. claude_mpm/commands/mpm.md +1 -0
  59. claude_mpm/config/agent_capabilities.yaml +658 -0
  60. claude_mpm/config/async_logging_config.yaml +145 -0
  61. claude_mpm/constants.py +12 -0
  62. claude_mpm/core/.claude-mpm/logs/hooks_20250730.log +34 -0
  63. claude_mpm/core/api_validator.py +1 -1
  64. claude_mpm/core/claude_runner.py +14 -1
  65. claude_mpm/core/config.py +8 -0
  66. claude_mpm/core/constants.py +1 -1
  67. claude_mpm/core/framework/processors/metadata_processor.py +1 -1
  68. claude_mpm/core/hook_error_memory.py +381 -0
  69. claude_mpm/core/hook_manager.py +41 -2
  70. claude_mpm/core/interactive_session.py +48 -3
  71. claude_mpm/core/interfaces.py +56 -1
  72. claude_mpm/core/logger.py +3 -1
  73. claude_mpm/core/oneshot_session.py +39 -0
  74. claude_mpm/d2/.gitignore +22 -0
  75. claude_mpm/d2/ARCHITECTURE_COMPARISON.md +273 -0
  76. claude_mpm/d2/FLASK_INTEGRATION.md +156 -0
  77. claude_mpm/d2/IMPLEMENTATION_SUMMARY.md +452 -0
  78. claude_mpm/d2/QUICKSTART.md +186 -0
  79. claude_mpm/d2/README.md +232 -0
  80. claude_mpm/d2/STORE_FIX_SUMMARY.md +167 -0
  81. claude_mpm/d2/SVELTE5_STORES_GUIDE.md +180 -0
  82. claude_mpm/d2/TESTING.md +288 -0
  83. claude_mpm/d2/index.html +118 -0
  84. claude_mpm/d2/package.json +19 -0
  85. claude_mpm/d2/src/App.svelte +110 -0
  86. claude_mpm/d2/src/components/Header.svelte +153 -0
  87. claude_mpm/d2/src/components/MainContent.svelte +74 -0
  88. claude_mpm/d2/src/components/Sidebar.svelte +85 -0
  89. claude_mpm/d2/src/components/tabs/EventsTab.svelte +326 -0
  90. claude_mpm/d2/src/lib/socketio.js +144 -0
  91. claude_mpm/d2/src/main.js +7 -0
  92. claude_mpm/d2/src/stores/events.js +114 -0
  93. claude_mpm/d2/src/stores/socket.js +108 -0
  94. claude_mpm/d2/src/stores/theme.js +65 -0
  95. claude_mpm/d2/svelte.config.js +12 -0
  96. claude_mpm/d2/vite.config.js +15 -0
  97. claude_mpm/dashboard/.claude-mpm/memories/README.md +36 -0
  98. claude_mpm/dashboard/BUILD_NUMBER +1 -0
  99. claude_mpm/dashboard/README.md +121 -0
  100. claude_mpm/dashboard/VERSION +1 -0
  101. claude_mpm/dashboard/react/components/DataInspector/DataInspector.tsx +273 -0
  102. claude_mpm/dashboard/react/components/ErrorBoundary.tsx +75 -0
  103. claude_mpm/dashboard/react/components/EventViewer/EventViewer.tsx +141 -0
  104. claude_mpm/dashboard/react/components/shared/ConnectionStatus.tsx +36 -0
  105. claude_mpm/dashboard/react/components/shared/FilterBar.tsx +89 -0
  106. claude_mpm/dashboard/react/contexts/DashboardContext.tsx +215 -0
  107. claude_mpm/dashboard/react/entries/events.tsx +165 -0
  108. claude_mpm/dashboard/react/hooks/useEvents.ts +191 -0
  109. claude_mpm/dashboard/react/hooks/useSocket.ts +225 -0
  110. claude_mpm/dashboard/static/built/REFACTORING_SUMMARY.md +170 -0
  111. claude_mpm/dashboard/static/built/components/activity-tree.js.map +1 -0
  112. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +101 -101
  113. claude_mpm/dashboard/static/built/components/agent-inference.js.map +1 -0
  114. claude_mpm/dashboard/static/built/components/build-tracker.js +59 -59
  115. claude_mpm/dashboard/static/built/components/code-simple.js +107 -107
  116. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +29 -29
  117. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +24 -24
  118. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +27 -27
  119. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +25 -25
  120. claude_mpm/dashboard/static/built/components/code-tree.js.map +1 -0
  121. claude_mpm/dashboard/static/built/components/code-viewer.js.map +1 -0
  122. claude_mpm/dashboard/static/built/components/connection-debug.js +101 -101
  123. claude_mpm/dashboard/static/built/components/diff-viewer.js +113 -113
  124. claude_mpm/dashboard/static/built/components/event-processor.js.map +1 -0
  125. claude_mpm/dashboard/static/built/components/event-viewer.js.map +1 -0
  126. claude_mpm/dashboard/static/built/components/export-manager.js.map +1 -0
  127. claude_mpm/dashboard/static/built/components/file-change-tracker.js +57 -57
  128. claude_mpm/dashboard/static/built/components/file-change-viewer.js +74 -74
  129. claude_mpm/dashboard/static/built/components/file-tool-tracker.js.map +1 -0
  130. claude_mpm/dashboard/static/built/components/file-viewer.js.map +1 -0
  131. claude_mpm/dashboard/static/built/components/hud-library-loader.js.map +1 -0
  132. claude_mpm/dashboard/static/built/components/hud-manager.js.map +1 -0
  133. claude_mpm/dashboard/static/built/components/hud-visualizer.js.map +1 -0
  134. claude_mpm/dashboard/static/built/components/module-viewer.js.map +1 -0
  135. claude_mpm/dashboard/static/built/components/session-manager.js.map +1 -0
  136. claude_mpm/dashboard/static/built/components/socket-manager.js.map +1 -0
  137. claude_mpm/dashboard/static/built/components/ui-state-manager.js.map +1 -0
  138. claude_mpm/dashboard/static/built/components/unified-data-viewer.js.map +1 -0
  139. claude_mpm/dashboard/static/built/components/working-directory.js.map +1 -0
  140. claude_mpm/dashboard/static/built/connection-manager.js +76 -76
  141. claude_mpm/dashboard/static/built/dashboard.js.map +1 -0
  142. claude_mpm/dashboard/static/built/extension-error-handler.js +22 -22
  143. claude_mpm/dashboard/static/built/react/events.js.map +1 -0
  144. claude_mpm/dashboard/static/built/shared/dom-helpers.js +9 -9
  145. claude_mpm/dashboard/static/built/shared/event-bus.js +5 -5
  146. claude_mpm/dashboard/static/built/shared/logger.js +16 -16
  147. claude_mpm/dashboard/static/built/shared/tooltip-service.js +6 -6
  148. claude_mpm/dashboard/static/built/socket-client.js.map +1 -0
  149. claude_mpm/dashboard/static/css/activity.css +69 -69
  150. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  151. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  152. claude_mpm/dashboard/static/index.html +22 -22
  153. claude_mpm/dashboard/static/js/REFACTORING_SUMMARY.md +170 -0
  154. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  155. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  156. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  157. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  158. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  159. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  160. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  161. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  162. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  163. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  164. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  165. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  166. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  167. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  168. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  169. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  170. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  171. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  172. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  173. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  174. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  175. claude_mpm/dashboard/static/js/shared/dom-helpers.js +9 -9
  176. claude_mpm/dashboard/static/js/shared/event-bus.js +5 -5
  177. claude_mpm/dashboard/static/js/shared/logger.js +16 -16
  178. claude_mpm/dashboard/static/js/shared/tooltip-service.js +6 -6
  179. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  180. claude_mpm/dashboard/static/navigation-test-results.md +118 -0
  181. claude_mpm/dashboard/static/production/main.html +21 -21
  182. claude_mpm/dashboard/static/test-archive/dashboard.html +22 -22
  183. claude_mpm/dashboard/templates/.claude-mpm/memories/README.md +36 -0
  184. claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md +39 -0
  185. claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md +38 -0
  186. claude_mpm/dashboard/templates/code_simple.html +23 -23
  187. claude_mpm/dashboard/templates/index.html +18 -18
  188. claude_mpm/hooks/README.md +143 -0
  189. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  190. claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
  191. claude_mpm/hooks/claude_hooks/installer.py +45 -0
  192. claude_mpm/hooks/templates/README.md +180 -0
  193. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  194. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  195. claude_mpm/hooks/templates/settings.json.example +147 -0
  196. claude_mpm/schemas/agent_schema.json +596 -0
  197. claude_mpm/schemas/frontmatter_schema.json +165 -0
  198. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  199. claude_mpm/scripts/start_activity_logging.py +3 -1
  200. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  201. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  202. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  203. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  204. claude_mpm/services/agents/loading/framework_agent_loader.py +8 -8
  205. claude_mpm/services/agents/local_template_manager.py +3 -1
  206. claude_mpm/services/cli/session_pause_manager.py +504 -0
  207. claude_mpm/services/cli/session_resume_helper.py +36 -16
  208. claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
  209. claude_mpm/services/core/base.py +26 -11
  210. claude_mpm/services/core/interfaces.py +56 -1
  211. claude_mpm/services/core/models/agent_config.py +3 -0
  212. claude_mpm/services/core/models/process.py +4 -0
  213. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  214. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  215. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  216. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  217. claude_mpm/services/diagnostics/doctor_reporter.py +6 -4
  218. claude_mpm/services/diagnostics/models.py +21 -0
  219. claude_mpm/services/event_bus/README.md +244 -0
  220. claude_mpm/services/event_bus/direct_relay.py +3 -3
  221. claude_mpm/services/event_bus/event_bus.py +36 -3
  222. claude_mpm/services/event_bus/relay.py +23 -7
  223. claude_mpm/services/events/README.md +303 -0
  224. claude_mpm/services/events/consumers/logging.py +1 -2
  225. claude_mpm/services/framework_claude_md_generator/README.md +119 -0
  226. claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
  227. claude_mpm/services/local_ops/__init__.py +2 -0
  228. claude_mpm/services/local_ops/process_manager.py +1 -1
  229. claude_mpm/services/local_ops/resource_monitor.py +2 -2
  230. claude_mpm/services/mcp_gateway/README.md +185 -0
  231. claude_mpm/services/mcp_gateway/auto_configure.py +31 -25
  232. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  233. claude_mpm/services/mcp_gateway/core/process_pool.py +19 -10
  234. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  235. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
  236. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +26 -21
  237. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  238. claude_mpm/services/memory/failure_tracker.py +19 -4
  239. claude_mpm/services/memory/optimizer.py +1 -1
  240. claude_mpm/services/model/model_router.py +8 -9
  241. claude_mpm/services/monitor/daemon.py +1 -1
  242. claude_mpm/services/monitor/server.py +2 -2
  243. claude_mpm/services/native_agent_converter.py +356 -0
  244. claude_mpm/services/port_manager.py +1 -1
  245. claude_mpm/services/project/documentation_manager.py +2 -1
  246. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  247. claude_mpm/services/runner_configuration_service.py +1 -0
  248. claude_mpm/services/self_upgrade_service.py +165 -7
  249. claude_mpm/services/skills_config.py +547 -0
  250. claude_mpm/services/skills_deployer.py +955 -0
  251. claude_mpm/services/socketio/handlers/connection.py +1 -1
  252. claude_mpm/services/socketio/handlers/connection.py.backup +217 -0
  253. claude_mpm/services/socketio/handlers/git.py +2 -2
  254. claude_mpm/services/socketio/handlers/hook.py.backup +154 -0
  255. claude_mpm/services/static/.gitkeep +2 -0
  256. claude_mpm/services/system_instructions_service.py +1 -3
  257. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  258. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  259. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
  260. claude_mpm/services/version_control/VERSION +1 -0
  261. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  262. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  263. claude_mpm/skills/__init__.py +3 -3
  264. claude_mpm/skills/agent_skills_injector.py +42 -49
  265. claude_mpm/skills/bundled/.gitkeep +2 -0
  266. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +4 -0
  267. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +108 -114
  268. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
  269. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
  270. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
  271. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
  272. claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
  273. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +46 -41
  274. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
  275. claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
  276. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +36 -73
  277. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
  278. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
  279. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +100 -125
  280. claude_mpm/skills/bundled/debugging/root-cause-tracing/find-polluter.sh +63 -0
  281. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
  282. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
  283. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
  284. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
  285. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +28 -72
  286. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +11 -0
  287. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
  288. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
  289. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +272 -0
  290. claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
  291. claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
  292. claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
  293. claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
  294. claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
  295. claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
  296. claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
  297. claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
  298. claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
  299. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  300. claude_mpm/skills/bundled/main/artifacts-builder/LICENSE.txt +202 -0
  301. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +13 -1
  302. claude_mpm/skills/bundled/main/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  303. claude_mpm/skills/bundled/main/artifacts-builder/scripts/init-artifact.sh +322 -0
  304. claude_mpm/skills/bundled/main/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  305. claude_mpm/skills/bundled/main/internal-comms/LICENSE.txt +202 -0
  306. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +11 -0
  307. claude_mpm/skills/bundled/main/mcp-builder/LICENSE.txt +202 -0
  308. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +109 -277
  309. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
  310. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
  311. claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +17 -10
  312. claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +92 -39
  313. claude_mpm/skills/bundled/main/mcp-builder/scripts/example_evaluation.xml +22 -0
  314. claude_mpm/skills/bundled/main/mcp-builder/scripts/requirements.txt +2 -0
  315. claude_mpm/skills/bundled/main/skill-creator/LICENSE.txt +202 -0
  316. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +135 -155
  317. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
  318. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
  319. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
  320. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
  321. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
  322. claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +13 -12
  323. claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +5 -3
  324. claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +19 -12
  325. claude_mpm/skills/bundled/performance-profiling.md +6 -0
  326. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
  327. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
  328. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
  329. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
  330. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
  331. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
  332. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
  333. claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
  334. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
  335. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
  336. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
  337. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
  338. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
  339. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
  340. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
  341. claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
  342. claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
  343. claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
  344. claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
  345. claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
  346. claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
  347. claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
  348. claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
  349. claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
  350. claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
  351. claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
  352. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +21 -25
  353. claude_mpm/skills/bundled/testing/condition-based-waiting/example.ts +158 -0
  354. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
  355. claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
  356. claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
  357. claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
  358. claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
  359. claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
  360. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +86 -250
  361. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
  362. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
  363. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
  364. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
  365. claude_mpm/skills/bundled/testing/webapp-testing/LICENSE.txt +202 -0
  366. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +145 -57
  367. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
  368. claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +6 -6
  369. claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +13 -9
  370. claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +8 -8
  371. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
  372. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
  373. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +37 -15
  374. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
  375. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
  376. claude_mpm/skills/skills_registry.py +44 -48
  377. claude_mpm/skills/skills_service.py +117 -108
  378. claude_mpm/templates/questions/EXAMPLES.md +501 -0
  379. claude_mpm/templates/questions/__init__.py +43 -0
  380. claude_mpm/templates/questions/base.py +193 -0
  381. claude_mpm/templates/questions/pr_strategy.py +314 -0
  382. claude_mpm/templates/questions/project_init.py +388 -0
  383. claude_mpm/templates/questions/ticket_mgmt.py +397 -0
  384. claude_mpm/tools/README_SOCKETIO_DEBUG.md +224 -0
  385. claude_mpm/tools/__main__.py +8 -8
  386. claude_mpm/tools/code_tree_analyzer/README.md +64 -0
  387. claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
  388. claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
  389. claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
  390. claude_mpm/tools/code_tree_analyzer/core.py +380 -0
  391. claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
  392. claude_mpm/tools/code_tree_analyzer/events.py +168 -0
  393. claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
  394. claude_mpm/tools/code_tree_analyzer/models.py +39 -0
  395. claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
  396. claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
  397. claude_mpm/utils/agent_dependency_loader.py +3 -3
  398. claude_mpm/utils/dependency_cache.py +3 -1
  399. claude_mpm/utils/gitignore.py +241 -0
  400. claude_mpm/utils/log_cleanup.py +3 -3
  401. claude_mpm/utils/robust_installer.py +3 -5
  402. claude_mpm/utils/structured_questions.py +619 -0
  403. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/METADATA +218 -31
  404. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/RECORD +409 -246
  405. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  406. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  407. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  408. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  409. claude_mpm/cli/commands/mpm_init.py +0 -2093
  410. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  411. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  412. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  413. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  414. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  415. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  416. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  417. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  418. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  419. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  420. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  421. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  422. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  423. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  424. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  425. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  426. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  427. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  428. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  429. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  430. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  431. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  432. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  433. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  434. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  435. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  436. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  437. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  438. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  439. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  440. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  441. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  442. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  443. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  444. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  445. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  446. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  447. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  448. claude_mpm/skills/bundled/debugging/verification-before-completion/references/common-failures.md +0 -213
  449. claude_mpm/tools/code_tree_analyzer.py +0 -1825
  450. /claude_mpm/skills/bundled/collaboration/requesting-code-review/{code-reviewer.md → references/code-reviewer-template.md} +0 -0
  451. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/WHEEL +0 -0
  452. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/entry_points.txt +0 -0
  453. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/licenses/LICENSE +0 -0
  454. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/top_level.txt +0 -0
@@ -37,7 +37,7 @@ class Dashboard {
37
37
  this.eventViewer = null;
38
38
  this.moduleViewer = null;
39
39
  this.sessionManager = null;
40
-
40
+
41
41
  // Retry prevention
42
42
  this.activityTreeRetryCount = 0;
43
43
  this.maxRetryAttempts = 10;
@@ -66,7 +66,7 @@ class Dashboard {
66
66
  try {
67
67
  // Fetch server configuration first
68
68
  this.fetchServerConfig();
69
-
69
+
70
70
  // Initialize modules in dependency order
71
71
  this.initializeSocketManager();
72
72
  this.initializeCoreComponents();
@@ -85,6 +85,11 @@ class Dashboard {
85
85
  // Initialize from URL parameters
86
86
  this.initializeFromURL();
87
87
 
88
+ // FIX: Render current tab after initialization to display any existing data
89
+ // WHY: If events were loaded before dashboard init completed, they won't be visible
90
+ console.log('[Dashboard] Initial render after dashboard initialization');
91
+ this.renderCurrentTab();
92
+
88
93
  console.log('Claude MPM Dashboard initialized successfully');
89
94
  } catch (error) {
90
95
  console.error('Error during dashboard initialization:', error);
@@ -92,7 +97,7 @@ class Dashboard {
92
97
  throw error;
93
98
  }
94
99
  }
95
-
100
+
96
101
  /**
97
102
  * Fetch server configuration for dashboard initialization
98
103
  */
@@ -102,18 +107,18 @@ class Dashboard {
102
107
  .then(config => {
103
108
  // Store config globally for other components
104
109
  window.dashboardConfig = config;
105
-
110
+
106
111
  // Update initial UI elements if they exist
107
112
  const workingDirEl = document.getElementById('working-dir-path');
108
113
  if (workingDirEl && config.workingDirectory) {
109
114
  workingDirEl.textContent = config.workingDirectory;
110
115
  }
111
-
116
+
112
117
  const gitBranchEl = document.getElementById('footer-git-branch');
113
118
  if (gitBranchEl && config.gitBranch) {
114
119
  gitBranchEl.textContent = config.gitBranch;
115
120
  }
116
-
121
+
117
122
  console.log('Dashboard configuration loaded:', config);
118
123
  })
119
124
  .catch(error => {
@@ -125,7 +130,7 @@ class Dashboard {
125
130
  };
126
131
  });
127
132
  }
128
-
133
+
129
134
  /**
130
135
  * Validate that all critical components are initialized
131
136
  * WHY: Ensures dashboard is in a valid state after initialization
@@ -136,7 +141,7 @@ class Dashboard {
136
141
  { name: 'eventViewer', component: this.eventViewer },
137
142
  { name: 'agentHierarchy', component: this.agentHierarchy }
138
143
  ];
139
-
144
+
140
145
  const missing = criticalComponents.filter(c => !c.component);
141
146
  if (missing.length > 0) {
142
147
  console.warn('Missing critical components:', missing.map(c => c.name));
@@ -148,7 +153,7 @@ class Dashboard {
148
153
  * WHY: Some components need to reference window.dashboard but it's not available
149
154
  * during constructor execution. This method is called after the Dashboard instance
150
155
  * is assigned to window.dashboard, ensuring proper initialization order.
151
- *
156
+ *
152
157
  * DESIGN DECISION: Separate post-init phase prevents "cannot read property of undefined"
153
158
  * errors when components try to access window.dashboard during construction.
154
159
  */
@@ -158,7 +163,7 @@ class Dashboard {
158
163
  if (this.agentHierarchy) {
159
164
  window.dashboard.agentHierarchy = this.agentHierarchy;
160
165
  }
161
-
166
+
162
167
  // Initialize any other components that need window.dashboard
163
168
  this.validateInitialization();
164
169
  } catch (error) {
@@ -201,10 +206,10 @@ class Dashboard {
201
206
  */
202
207
  initializeBuildTracker() {
203
208
  this.buildTracker = new BuildTracker();
204
-
209
+
205
210
  // Set the socket client for receiving updates
206
211
  this.buildTracker.setSocketClient(this.socketClient);
207
-
212
+
208
213
  // Mount to header with retry logic for DOM readiness
209
214
  const mountBuildTracker = () => {
210
215
  const headerTitle = document.querySelector('.header-title');
@@ -218,10 +223,10 @@ class Dashboard {
218
223
  setTimeout(mountBuildTracker, 100);
219
224
  }
220
225
  };
221
-
226
+
222
227
  // Try to mount immediately, with retry logic if needed
223
228
  mountBuildTracker();
224
-
229
+
225
230
  // Make available globally for debugging
226
231
  window.buildTracker = this.buildTracker;
227
232
  }
@@ -233,7 +238,7 @@ class Dashboard {
233
238
  this.agentInference = new AgentInference(this.eventViewer);
234
239
  this.agentInference.initialize();
235
240
  }
236
-
241
+
237
242
  /**
238
243
  * Initialize agent hierarchy component
239
244
  * WHY: Creates the agent hierarchy visualization component but defers global
@@ -340,6 +345,11 @@ class Dashboard {
340
345
  this.workingDirectoryManager.updateGitBranch(
341
346
  this.workingDirectoryManager.getCurrentWorkingDir()
342
347
  );
348
+
349
+ // FIX: Force render current tab to display initial/historical event data
350
+ // WHY: Events are loaded on connection but panes aren't rendered with this data
351
+ console.log('[Dashboard] Connection established - rendering current tab with initial data');
352
+ this.renderCurrentTab();
343
353
  }
344
354
  });
345
355
 
@@ -364,6 +374,14 @@ class Dashboard {
364
374
  document.addEventListener('sessionFilterChanged', (e) => {
365
375
  this.renderCurrentTab();
366
376
  });
377
+
378
+ // FIX: Listen for history loaded event to render initial data
379
+ // WHY: When historical events are loaded from server, panes need to be rendered
380
+ document.addEventListener('historyLoaded', (e) => {
381
+ console.log('[Dashboard] History loaded event received:', e.detail);
382
+ console.log('[Dashboard] Rendering current tab with historical data');
383
+ this.renderCurrentTab();
384
+ });
367
385
  }
368
386
 
369
387
  /**
@@ -443,22 +461,22 @@ class Dashboard {
443
461
  if (window.ActivityTree && typeof window.ActivityTree === 'function') {
444
462
  // Reset retry count on successful load
445
463
  this.activityTreeRetryCount = 0;
446
-
464
+
447
465
  // Create or get instance
448
466
  if (!window.activityTreeInstance) {
449
467
  window.activityTreeInstance = new window.ActivityTree();
450
468
  }
451
-
469
+
452
470
  // Initialize if needed and render
453
471
  if (window.activityTreeInstance) {
454
472
  if (!window.activityTreeInstance.initialized) {
455
473
  window.activityTreeInstance.initialize();
456
474
  }
457
-
475
+
458
476
  if (typeof window.activityTreeInstance.renderWhenVisible === 'function') {
459
477
  window.activityTreeInstance.renderWhenVisible();
460
478
  }
461
-
479
+
462
480
  // Force show to ensure the tree is visible
463
481
  if (typeof window.activityTreeInstance.forceShow === 'function') {
464
482
  window.activityTreeInstance.forceShow();
@@ -521,23 +539,23 @@ class Dashboard {
521
539
  renderAgents() {
522
540
  const agentsList = document.getElementById('agents-list');
523
541
  if (!agentsList) return;
524
-
542
+
525
543
  // Get filter values
526
544
  const searchText = document.getElementById('agents-search-input')?.value || '';
527
545
  const agentType = document.getElementById('agents-type-filter')?.value || '';
528
-
546
+
529
547
  // Generate flat HTML
530
548
  const flatHTML = this.renderAgentsFlat(searchText, agentType);
531
549
  agentsList.innerHTML = flatHTML;
532
-
550
+
533
551
  // Remove hierarchy controls if they exist
534
552
  this.removeHierarchyControls();
535
-
553
+
536
554
  // Update filter dropdowns with available agent types
537
555
  const uniqueInstances = this.agentInference.getUniqueAgentInstances();
538
556
  this.updateAgentsFilterDropdowns(uniqueInstances);
539
557
  }
540
-
558
+
541
559
  /**
542
560
  * Remove hierarchy control buttons (flat view doesn't need them)
543
561
  */
@@ -547,11 +565,11 @@ class Dashboard {
547
565
  existingControls.remove();
548
566
  }
549
567
  }
550
-
568
+
551
569
  /**
552
570
  * Render agents as a flat chronological list
553
571
  * @param {string} searchText - Search filter
554
- * @param {string} agentType - Agent type filter
572
+ * @param {string} agentType - Agent type filter
555
573
  * @returns {string} HTML for flat agent list
556
574
  */
557
575
  renderAgentsFlat(searchText, agentType) {
@@ -559,11 +577,11 @@ class Dashboard {
559
577
  if (!events || events.length === 0) {
560
578
  return '<div class="no-events">No agent events found...</div>';
561
579
  }
562
-
580
+
563
581
  // Process agent inference to get agent mappings
564
582
  this.agentInference.processAgentInference();
565
583
  const eventAgentMap = this.agentInference.getEventAgentMap();
566
-
584
+
567
585
  // Collect all agent events with metadata
568
586
  const agentEvents = [];
569
587
  events.forEach((event, index) => {
@@ -571,7 +589,7 @@ class Dashboard {
571
589
  if (inference && (inference.type === 'subagent' || inference.type === 'main_agent')) {
572
590
  // Apply filters
573
591
  let includeEvent = true;
574
-
592
+
575
593
  if (searchText) {
576
594
  const searchLower = searchText.toLowerCase();
577
595
  includeEvent = includeEvent && (
@@ -580,11 +598,11 @@ class Dashboard {
580
598
  (event.data && JSON.stringify(event.data).toLowerCase().includes(searchLower))
581
599
  );
582
600
  }
583
-
601
+
584
602
  if (agentType) {
585
603
  includeEvent = includeEvent && inference.agentName.includes(agentType);
586
604
  }
587
-
605
+
588
606
  if (includeEvent) {
589
607
  agentEvents.push({
590
608
  event,
@@ -595,20 +613,20 @@ class Dashboard {
595
613
  }
596
614
  }
597
615
  });
598
-
616
+
599
617
  if (agentEvents.length === 0) {
600
618
  return '<div class="no-events">No agent events match the current filters...</div>';
601
619
  }
602
-
620
+
603
621
  // Generate HTML for each event
604
622
  const html = agentEvents.map((item, listIndex) => {
605
623
  const { event, inference, index, timestamp } = item;
606
-
624
+
607
625
  // Determine action/tool
608
626
  let action = 'Activity';
609
627
  let actionIcon = '📋';
610
628
  let details = '';
611
-
629
+
612
630
  if (event.event_type === 'SubagentStart') {
613
631
  action = 'Started';
614
632
  actionIcon = '🟢';
@@ -620,7 +638,7 @@ class Dashboard {
620
638
  } else if (event.tool_name) {
621
639
  action = `Tool: ${event.tool_name}`;
622
640
  actionIcon = this.getToolIcon(event.tool_name);
623
-
641
+
624
642
  // Add tool parameters as details
625
643
  if (event.data && event.data.tool_parameters) {
626
644
  const params = event.data.tool_parameters;
@@ -635,7 +653,7 @@ class Dashboard {
635
653
  }
636
654
  }
637
655
  }
638
-
656
+
639
657
  // Status based on event type
640
658
  let status = 'completed';
641
659
  if (event.event_type === 'SubagentStart') {
@@ -643,7 +661,7 @@ class Dashboard {
643
661
  } else if (event.data && event.data.error) {
644
662
  status = 'error';
645
663
  }
646
-
664
+
647
665
  return `
648
666
  <div class="agent-event-item" data-index="${listIndex}" onclick="window.dashboard.showCardDetails('agents', ${index})">
649
667
  <div class="agent-event-header">
@@ -662,10 +680,10 @@ class Dashboard {
662
680
  </div>
663
681
  `;
664
682
  }).join('');
665
-
683
+
666
684
  return `<div class="agent-events-flat">${html}</div>`;
667
685
  }
668
-
686
+
669
687
  /**
670
688
  * Get icon for agent type
671
689
  */
@@ -673,7 +691,7 @@ class Dashboard {
673
691
  const agentIcons = {
674
692
  'PM': '🎯',
675
693
  'Engineer Agent': '🔧',
676
- 'Research Agent': '🔍',
694
+ 'Research Agent': '🔍',
677
695
  'QA Agent': '✅',
678
696
  'Documentation Agent': '📝',
679
697
  'Security Agent': '🔒',
@@ -684,7 +702,7 @@ class Dashboard {
684
702
  };
685
703
  return agentIcons[agentName] || '🤖';
686
704
  }
687
-
705
+
688
706
  /**
689
707
  * Get icon for tool
690
708
  */
@@ -701,7 +719,7 @@ class Dashboard {
701
719
  };
702
720
  return toolIcons[toolName] || '🔧';
703
721
  }
704
-
722
+
705
723
  /**
706
724
  * Get icon for status
707
725
  */
@@ -714,19 +732,19 @@ class Dashboard {
714
732
  };
715
733
  return statusIcons[status] || '❓';
716
734
  }
717
-
735
+
718
736
  /**
719
737
  * Format timestamp for display
720
738
  */
721
739
  formatTimestamp(timestamp) {
722
740
  return timestamp.toLocaleTimeString('en-US', {
723
741
  hour: '2-digit',
724
- minute: '2-digit',
742
+ minute: '2-digit',
725
743
  second: '2-digit',
726
744
  hour12: false
727
745
  });
728
746
  }
729
-
747
+
730
748
  /**
731
749
  * Escape HTML for safe display
732
750
  */
@@ -1251,7 +1269,7 @@ async function updateFileViewerModal(modal, filePath, workingDir) {
1251
1269
  const loadingElement = modal.querySelector('.file-viewer-loading');
1252
1270
  const errorElement = modal.querySelector('.file-viewer-error');
1253
1271
  const contentArea = modal.querySelector('.file-viewer-content-area');
1254
-
1272
+
1255
1273
  if (loadingElement) {
1256
1274
  loadingElement.style.display = 'flex';
1257
1275
  }
@@ -1265,7 +1283,7 @@ async function updateFileViewerModal(modal, filePath, workingDir) {
1265
1283
  try {
1266
1284
  // Get the Socket.IO client
1267
1285
  const socket = window.socket || window.dashboard?.socketClient?.socket || window.socketClient?.socket;
1268
-
1286
+
1269
1287
  console.log('[FileViewer] Socket search results:', {
1270
1288
  'window.socket': !!window.socket,
1271
1289
  'window.socket.connected': window.socket?.connected,
@@ -1274,15 +1292,15 @@ async function updateFileViewerModal(modal, filePath, workingDir) {
1274
1292
  'window.socketClient.socket': !!window.socketClient?.socket,
1275
1293
  'window.socketClient.socket.connected': window.socketClient?.socket?.connected
1276
1294
  });
1277
-
1295
+
1278
1296
  if (!socket) {
1279
1297
  throw new Error('No socket connection available. Please ensure the dashboard is connected.');
1280
1298
  }
1281
-
1299
+
1282
1300
  if (!socket.connected) {
1283
1301
  console.warn('[FileViewer] Socket found but not connected, attempting to use anyway...');
1284
1302
  }
1285
-
1303
+
1286
1304
  console.log('[FileViewer] Socket found, setting up listener for file_content_response');
1287
1305
 
1288
1306
  // Set up one-time listener for file content response
@@ -1579,7 +1597,7 @@ function formatFileSize(bytes) {
1579
1597
  // File Viewer Modal Functions
1580
1598
  window.showFileViewerModal = async function(filePath) {
1581
1599
  console.log('[FileViewer] Opening file:', filePath);
1582
-
1600
+
1583
1601
  // Use the dashboard's current working directory
1584
1602
  let workingDir = '';
1585
1603
  if (window.dashboard && window.dashboard.currentWorkingDir) {
@@ -1670,7 +1688,7 @@ function displayFileContentError(modal, result) {
1670
1688
  const suggestionsElement = modal.querySelector('.error-suggestions');
1671
1689
  const loadingElement = modal.querySelector('.file-viewer-loading');
1672
1690
  const contentArea = modal.querySelector('.file-viewer-content-area');
1673
-
1691
+
1674
1692
  // Hide loading and content areas, show error
1675
1693
  if (loadingElement) {
1676
1694
  loadingElement.style.display = 'none';
@@ -1818,7 +1836,7 @@ function updateSearchViewerModal(modal, searchParams, searchResults) {
1818
1836
  // Display search results
1819
1837
  if (resultsDisplay && searchResults) {
1820
1838
  let resultsHTML = '';
1821
-
1839
+
1822
1840
  if (typeof searchResults === 'string') {
1823
1841
  // If results are a string, display as preformatted text
1824
1842
  resultsHTML = `<pre class="search-results-text">${escapeHtml(searchResults)}</pre>`;
@@ -1840,7 +1858,7 @@ function updateSearchViewerModal(modal, searchParams, searchResults) {
1840
1858
  // Fallback: display as text
1841
1859
  resultsHTML = `<div class="search-results-text">${escapeHtml(String(searchResults))}</div>`;
1842
1860
  }
1843
-
1861
+
1844
1862
  resultsDisplay.innerHTML = resultsHTML;
1845
1863
  }
1846
1864
  }
@@ -1865,15 +1883,15 @@ document.addEventListener('DOMContentLoaded', function() {
1865
1883
  try {
1866
1884
  // Create dashboard instance
1867
1885
  window.dashboard = new Dashboard();
1868
-
1886
+
1869
1887
  // Call post-initialization setup that requires window.dashboard
1870
1888
  // This must happen after window.dashboard is set
1871
1889
  if (window.dashboard && typeof window.dashboard.postInit === 'function') {
1872
1890
  window.dashboard.postInit();
1873
1891
  }
1874
-
1892
+
1875
1893
  console.log('Dashboard loaded and initialized successfully');
1876
-
1894
+
1877
1895
  // Dispatch custom event to signal dashboard ready
1878
1896
  document.dispatchEvent(new CustomEvent('dashboardReady', {
1879
1897
  detail: { dashboard: window.dashboard }
@@ -1,13 +1,13 @@
1
1
  /**
2
2
  * Browser Extension Error Handler
3
- *
3
+ *
4
4
  * WHY: Browser extensions (like password managers, ad blockers, etc.) often inject
5
5
  * scripts that use Chrome's message passing API. When these extensions have bugs
6
6
  * or async handlers that don't properly respond, they generate console errors.
7
- *
7
+ *
8
8
  * This module prevents those external errors from affecting our dashboard and
9
9
  * provides clean error handling for known browser extension issues.
10
- *
10
+ *
11
11
  * DESIGN DECISION: Rather than trying to fix third-party extension bugs, we:
12
12
  * 1. Detect and suppress known harmless extension errors
13
13
  * 2. Log them separately for debugging if needed
@@ -26,21 +26,21 @@ class ExtensionErrorHandler {
26
26
  /Cannot access contents of url.*Extension/i,
27
27
  /Blocked a frame with origin.*from accessing a cross-origin frame/i
28
28
  ];
29
-
29
+
30
30
  this.setupErrorHandling();
31
31
  }
32
-
32
+
33
33
  /**
34
34
  * Set up global error handling to catch and suppress extension errors
35
35
  */
36
36
  setupErrorHandling() {
37
37
  // Store original console.error
38
38
  const originalConsoleError = console.error;
39
-
39
+
40
40
  // Override console.error to filter extension errors
41
41
  console.error = (...args) => {
42
42
  const errorString = args.join(' ');
43
-
43
+
44
44
  // Check if this is a known extension error
45
45
  if (this.isExtensionError(errorString)) {
46
46
  // Log to our internal list for debugging
@@ -49,41 +49,41 @@ class ExtensionErrorHandler {
49
49
  error: errorString,
50
50
  suppressed: true
51
51
  });
52
-
52
+
53
53
  // Optionally log with a prefix if debug mode is enabled
54
54
  if (window.DEBUG_EXTENSION_ERRORS) {
55
55
  originalConsoleError.call(console, '[SUPPRESSED EXTENSION ERROR]:', ...args);
56
56
  }
57
-
57
+
58
58
  // Don't propagate the error
59
59
  return;
60
60
  }
61
-
61
+
62
62
  // Pass through non-extension errors
63
63
  originalConsoleError.call(console, ...args);
64
64
  };
65
-
65
+
66
66
  // Handle uncaught promise rejections that might come from extensions
67
67
  window.addEventListener('unhandledrejection', (event) => {
68
68
  const errorString = event.reason?.toString() || '';
69
-
69
+
70
70
  if (this.isExtensionError(errorString)) {
71
71
  // Prevent the default error handling
72
72
  event.preventDefault();
73
-
73
+
74
74
  this.extensionErrors.push({
75
75
  timestamp: new Date().toISOString(),
76
76
  error: errorString,
77
77
  type: 'unhandled_rejection',
78
78
  suppressed: true
79
79
  });
80
-
80
+
81
81
  if (window.DEBUG_EXTENSION_ERRORS) {
82
82
  console.warn('[SUPPRESSED EXTENSION REJECTION]:', event.reason);
83
83
  }
84
84
  }
85
85
  });
86
-
86
+
87
87
  // Add a global message event listener with proper error handling
88
88
  // This prevents our app from being affected by misbehaving extensions
89
89
  window.addEventListener('message', (event) => {
@@ -91,13 +91,13 @@ class ExtensionErrorHandler {
91
91
  if (event.origin !== window.location.origin) {
92
92
  return;
93
93
  }
94
-
94
+
95
95
  // Add timeout protection for any async operations
96
96
  if (event.data && event.data.requiresResponse) {
97
97
  const timeoutId = setTimeout(() => {
98
98
  console.warn('Message handler timeout - no response sent');
99
99
  }, 5000);
100
-
100
+
101
101
  // Clear timeout when response is sent
102
102
  if (event.ports && event.ports[0]) {
103
103
  const originalPostMessage = event.ports[0].postMessage;
@@ -109,7 +109,7 @@ class ExtensionErrorHandler {
109
109
  }
110
110
  });
111
111
  }
112
-
112
+
113
113
  /**
114
114
  * Check if an error string matches known extension error patterns
115
115
  * @param {string} errorString - The error message to check
@@ -118,7 +118,7 @@ class ExtensionErrorHandler {
118
118
  isExtensionError(errorString) {
119
119
  return this.suppressedPatterns.some(pattern => pattern.test(errorString));
120
120
  }
121
-
121
+
122
122
  /**
123
123
  * Get suppressed extension errors for debugging
124
124
  * @returns {Array} - List of suppressed errors
@@ -126,21 +126,21 @@ class ExtensionErrorHandler {
126
126
  getSuppressedErrors() {
127
127
  return this.extensionErrors;
128
128
  }
129
-
129
+
130
130
  /**
131
131
  * Clear the suppressed errors list
132
132
  */
133
133
  clearSuppressedErrors() {
134
134
  this.extensionErrors = [];
135
135
  }
136
-
136
+
137
137
  /**
138
138
  * Enable or disable debug logging of extension errors
139
139
  * @param {boolean} enabled - Whether to enable debug logging
140
140
  */
141
141
  setDebugMode(enabled) {
142
142
  window.DEBUG_EXTENSION_ERRORS = enabled;
143
-
143
+
144
144
  if (enabled) {
145
145
  console.log('Extension error debug mode enabled. Suppressed errors will be logged with [SUPPRESSED] prefix.');
146
146
  console.log('Current suppressed errors:', this.getSuppressedErrors());
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * DOM Helper Utilities
3
- *
3
+ *
4
4
  * Common DOM manipulation utilities for dashboard components.
5
5
  * Provides safe, consistent methods for element creation and manipulation.
6
- *
6
+ *
7
7
  * @module dom-helpers
8
8
  */
9
9
 
@@ -17,7 +17,7 @@ const domHelpers = {
17
17
  */
18
18
  createElement(tag, attrs = {}, content = null) {
19
19
  const element = document.createElement(tag);
20
-
20
+
21
21
  // Set attributes
22
22
  for (const [key, value] of Object.entries(attrs)) {
23
23
  if (key === 'className') {
@@ -35,12 +35,12 @@ const domHelpers = {
35
35
  element.setAttribute(key, value);
36
36
  }
37
37
  }
38
-
38
+
39
39
  // Add content
40
40
  if (content !== null) {
41
41
  this.setContent(element, content);
42
42
  }
43
-
43
+
44
44
  return element;
45
45
  },
46
46
 
@@ -296,19 +296,19 @@ const domHelpers = {
296
296
  */
297
297
  isInViewport(element, partial = false) {
298
298
  if (!element) return false;
299
-
299
+
300
300
  const rect = element.getBoundingClientRect();
301
301
  const windowHeight = window.innerHeight || document.documentElement.clientHeight;
302
302
  const windowWidth = window.innerWidth || document.documentElement.clientWidth;
303
-
303
+
304
304
  const vertInView = partial
305
305
  ? rect.top < windowHeight && rect.bottom > 0
306
306
  : rect.top >= 0 && rect.bottom <= windowHeight;
307
-
307
+
308
308
  const horInView = partial
309
309
  ? rect.left < windowWidth && rect.right > 0
310
310
  : rect.left >= 0 && rect.right <= windowWidth;
311
-
311
+
312
312
  return vertInView && horInView;
313
313
  },
314
314