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
@@ -0,0 +1,215 @@
1
+ import React, { createContext, useContext, useReducer, ReactNode } from 'react';
2
+
3
+ // Types for events
4
+ export interface DashboardEvent {
5
+ type: string;
6
+ subtype?: string;
7
+ timestamp: number;
8
+ source: string;
9
+ data: any;
10
+ raw?: any;
11
+ }
12
+
13
+ // Types for connection state
14
+ export interface ConnectionState {
15
+ isConnected: boolean;
16
+ isConnecting: boolean;
17
+ connectionCount: number;
18
+ port: number;
19
+ }
20
+
21
+ // Dashboard state interface
22
+ export interface DashboardState {
23
+ events: DashboardEvent[];
24
+ connection: ConnectionState;
25
+ stats: {
26
+ totalEvents: number;
27
+ eventsPerSecond: number;
28
+ uniqueTypes: number;
29
+ };
30
+ filters: {
31
+ searchTerm: string;
32
+ typeFilter: string;
33
+ };
34
+ settings: {
35
+ autoScroll: boolean;
36
+ pauseStream: boolean;
37
+ maxEvents: number;
38
+ };
39
+ }
40
+
41
+ // Action types
42
+ type DashboardAction =
43
+ | { type: 'ADD_EVENT'; payload: DashboardEvent }
44
+ | { type: 'CLEAR_EVENTS' }
45
+ | { type: 'SET_CONNECTION_STATE'; payload: Partial<ConnectionState> }
46
+ | { type: 'UPDATE_STATS'; payload: Partial<DashboardState['stats']> }
47
+ | { type: 'SET_FILTER'; payload: { key: keyof DashboardState['filters']; value: string } }
48
+ | { type: 'SET_SETTING'; payload: { key: keyof DashboardState['settings']; value: any } };
49
+
50
+ // Initial state
51
+ const initialState: DashboardState = {
52
+ events: [],
53
+ connection: {
54
+ isConnected: false,
55
+ isConnecting: false,
56
+ connectionCount: 0,
57
+ port: 8765
58
+ },
59
+ stats: {
60
+ totalEvents: 0,
61
+ eventsPerSecond: 0,
62
+ uniqueTypes: 0
63
+ },
64
+ filters: {
65
+ searchTerm: '',
66
+ typeFilter: ''
67
+ },
68
+ settings: {
69
+ autoScroll: true,
70
+ pauseStream: false,
71
+ maxEvents: 1000
72
+ }
73
+ };
74
+
75
+ // Reducer function
76
+ function dashboardReducer(state: DashboardState, action: DashboardAction): DashboardState {
77
+ switch (action.type) {
78
+ case 'ADD_EVENT':
79
+ if (state.settings.pauseStream) return state;
80
+
81
+ const newEvents = [action.payload, ...state.events];
82
+ const trimmedEvents = newEvents.slice(0, state.settings.maxEvents);
83
+
84
+ return {
85
+ ...state,
86
+ events: trimmedEvents,
87
+ stats: {
88
+ ...state.stats,
89
+ totalEvents: state.stats.totalEvents + 1
90
+ }
91
+ };
92
+
93
+ case 'CLEAR_EVENTS':
94
+ return {
95
+ ...state,
96
+ events: [],
97
+ stats: {
98
+ ...state.stats,
99
+ totalEvents: 0
100
+ }
101
+ };
102
+
103
+ case 'SET_CONNECTION_STATE':
104
+ return {
105
+ ...state,
106
+ connection: {
107
+ ...state.connection,
108
+ ...action.payload
109
+ }
110
+ };
111
+
112
+ case 'UPDATE_STATS':
113
+ return {
114
+ ...state,
115
+ stats: {
116
+ ...state.stats,
117
+ ...action.payload
118
+ }
119
+ };
120
+
121
+ case 'SET_FILTER':
122
+ return {
123
+ ...state,
124
+ filters: {
125
+ ...state.filters,
126
+ [action.payload.key]: action.payload.value
127
+ }
128
+ };
129
+
130
+ case 'SET_SETTING':
131
+ return {
132
+ ...state,
133
+ settings: {
134
+ ...state.settings,
135
+ [action.payload.key]: action.payload.value
136
+ }
137
+ };
138
+
139
+ default:
140
+ return state;
141
+ }
142
+ }
143
+
144
+ // Context
145
+ interface DashboardContextType {
146
+ state: DashboardState;
147
+ dispatch: React.Dispatch<DashboardAction>;
148
+ addEvent: (event: DashboardEvent) => void;
149
+ clearEvents: () => void;
150
+ setConnectionState: (connectionState: Partial<ConnectionState>) => void;
151
+ updateStats: (stats: Partial<DashboardState['stats']>) => void;
152
+ setFilter: (key: keyof DashboardState['filters'], value: string) => void;
153
+ setSetting: (key: keyof DashboardState['settings'], value: any) => void;
154
+ }
155
+
156
+ const DashboardContext = createContext<DashboardContextType | null>(null);
157
+
158
+ // Provider component
159
+ interface DashboardProviderProps {
160
+ children: ReactNode;
161
+ }
162
+
163
+ export function DashboardProvider({ children }: DashboardProviderProps) {
164
+ const [state, dispatch] = useReducer(dashboardReducer, initialState);
165
+
166
+ const addEvent = (event: DashboardEvent) => {
167
+ dispatch({ type: 'ADD_EVENT', payload: event });
168
+ };
169
+
170
+ const clearEvents = () => {
171
+ dispatch({ type: 'CLEAR_EVENTS' });
172
+ };
173
+
174
+ const setConnectionState = (connectionState: Partial<ConnectionState>) => {
175
+ dispatch({ type: 'SET_CONNECTION_STATE', payload: connectionState });
176
+ };
177
+
178
+ const updateStats = (stats: Partial<DashboardState['stats']>) => {
179
+ dispatch({ type: 'UPDATE_STATS', payload: stats });
180
+ };
181
+
182
+ const setFilter = (key: keyof DashboardState['filters'], value: string) => {
183
+ dispatch({ type: 'SET_FILTER', payload: { key, value } });
184
+ };
185
+
186
+ const setSetting = (key: keyof DashboardState['settings'], value: any) => {
187
+ dispatch({ type: 'SET_SETTING', payload: { key, value } });
188
+ };
189
+
190
+ const value: DashboardContextType = {
191
+ state,
192
+ dispatch,
193
+ addEvent,
194
+ clearEvents,
195
+ setConnectionState,
196
+ updateStats,
197
+ setFilter,
198
+ setSetting
199
+ };
200
+
201
+ return (
202
+ <DashboardContext.Provider value={value}>
203
+ {children}
204
+ </DashboardContext.Provider>
205
+ );
206
+ }
207
+
208
+ // Hook to use dashboard context
209
+ export function useDashboard() {
210
+ const context = useContext(DashboardContext);
211
+ if (!context) {
212
+ throw new Error('useDashboard must be used within a DashboardProvider');
213
+ }
214
+ return context;
215
+ }
@@ -0,0 +1,165 @@
1
+ import React from 'react';
2
+ import { createRoot } from 'react-dom/client';
3
+ import { DashboardProvider } from '../contexts/DashboardContext';
4
+ import { EventViewer } from '../components/EventViewer/EventViewer';
5
+ import { ConnectionStatus } from '../components/shared/ConnectionStatus';
6
+ import { FilterBar } from '../components/shared/FilterBar';
7
+ import { useSocket } from '../hooks/useSocket';
8
+ import { useDashboard } from '../contexts/DashboardContext';
9
+ import { ErrorBoundary } from '../components/ErrorBoundary';
10
+
11
+ // Extend Window interface for TypeScript
12
+ declare global {
13
+ interface Window {
14
+ ClaudeMPMReact?: {
15
+ initializeReactEvents?: () => boolean;
16
+ };
17
+ initializeReactEvents?: () => boolean;
18
+ }
19
+ }
20
+
21
+ function EventsPageApp() {
22
+ // Initialize socket connection
23
+ useSocket();
24
+
25
+ const { state } = useDashboard();
26
+
27
+ return (
28
+ <div className="react-events-container">
29
+ {/* Statistics Panel */}
30
+ <div className="stats-panel">
31
+ <div className="stat-card">
32
+ <div className="stat-icon">📊</div>
33
+ <div className="stat-info">
34
+ <div className="stat-label">Total Events</div>
35
+ <div className="stat-value">{state.stats.totalEvents}</div>
36
+ </div>
37
+ </div>
38
+ <div className="stat-card">
39
+ <div className="stat-icon">⚡</div>
40
+ <div className="stat-info">
41
+ <div className="stat-label">Events/Sec</div>
42
+ <div className="stat-value">{state.stats.eventsPerSecond}</div>
43
+ </div>
44
+ </div>
45
+ <div className="stat-card">
46
+ <div className="stat-icon">🔗</div>
47
+ <div className="stat-info">
48
+ <div className="stat-label">Active Connections</div>
49
+ <div className="stat-value">{state.connection.connectionCount}</div>
50
+ </div>
51
+ </div>
52
+ <div className="stat-card">
53
+ <div className="stat-icon">📝</div>
54
+ <div className="stat-info">
55
+ <div className="stat-label">Event Types</div>
56
+ <div className="stat-value">{state.stats.uniqueTypes}</div>
57
+ </div>
58
+ </div>
59
+ </div>
60
+
61
+ {/* Filter Controls */}
62
+ <FilterBar />
63
+
64
+ {/* Event Viewer */}
65
+ <EventViewer />
66
+ </div>
67
+ );
68
+ }
69
+
70
+ function EventsPage() {
71
+ return (
72
+ <ErrorBoundary>
73
+ <DashboardProvider>
74
+ <EventsPageApp />
75
+ </DashboardProvider>
76
+ </ErrorBoundary>
77
+ );
78
+ }
79
+
80
+ // Initialize React app - throws errors instead of graceful fallback
81
+ function initializeReactEvents() {
82
+ console.log('Initializing React Events - strict mode (no fallback)');
83
+
84
+ // Check for required DOM element
85
+ const container = document.getElementById('react-events-root');
86
+ if (!container) {
87
+ const error = new Error('React initialization failed: Required DOM element \'#react-events-root\' not found');
88
+ console.error(error.message);
89
+ throw error;
90
+ }
91
+
92
+ // Check for Socket.IO availability
93
+ if (typeof window !== 'undefined' && typeof (window as any).io === 'undefined') {
94
+ const error = new Error('React initialization failed: Socket.IO dependency not loaded');
95
+ console.error(error.message);
96
+ throw error;
97
+ }
98
+
99
+ try {
100
+ const root = createRoot(container);
101
+ root.render(<EventsPage />);
102
+ console.log('React EventViewer initialized successfully');
103
+ return true;
104
+ } catch (error) {
105
+ const initError = new Error(`React initialization failed: Failed to render components - ${error instanceof Error ? error.message : String(error)}`);
106
+ console.error(initError.message);
107
+ throw initError;
108
+ }
109
+ }
110
+
111
+ // Export for module loading
112
+ export { initializeReactEvents };
113
+
114
+ // Expose to window for global access
115
+ if (typeof window !== 'undefined') {
116
+ // Create namespace if it doesn't exist
117
+ window.ClaudeMPMReact = window.ClaudeMPMReact || {};
118
+ window.ClaudeMPMReact.initializeReactEvents = initializeReactEvents;
119
+
120
+ // Also expose directly on window for easier access
121
+ window.initializeReactEvents = initializeReactEvents;
122
+
123
+ console.log('React events initialization function exposed on window');
124
+ }
125
+
126
+ // Auto-initialize if this script is loaded directly - throws errors on failure
127
+ if (typeof window !== 'undefined' && document.readyState === 'loading') {
128
+ document.addEventListener('DOMContentLoaded', () => {
129
+ // Always attempt initialization - let it throw if it fails
130
+ try {
131
+ initializeReactEvents();
132
+ } catch (error) {
133
+ // Display error to user instead of silent failure
134
+ const container = document.getElementById('react-events-root');
135
+ if (container) {
136
+ container.innerHTML = `
137
+ <div style="padding: 20px; background: rgba(248, 113, 113, 0.1); border: 1px solid #f87171; border-radius: 8px; color: #f87171; font-family: monospace;">
138
+ <h2>React Initialization Error</h2>
139
+ <p><strong>Error:</strong> ${error instanceof Error ? error.message : String(error)}</p>
140
+ <p>The React-based dashboard failed to load. Check the console for detailed error information.</p>
141
+ </div>
142
+ `;
143
+ }
144
+ throw error;
145
+ }
146
+ });
147
+ } else if (typeof window !== 'undefined') {
148
+ // Immediate initialization attempt - let it throw if it fails
149
+ try {
150
+ initializeReactEvents();
151
+ } catch (error) {
152
+ // Display error to user instead of silent failure
153
+ const container = document.getElementById('react-events-root');
154
+ if (container) {
155
+ container.innerHTML = `
156
+ <div style="padding: 20px; background: rgba(248, 113, 113, 0.1); border: 1px solid #f87171; border-radius: 8px; color: #f87171; font-family: monospace;">
157
+ <h2>React Initialization Error</h2>
158
+ <p><strong>Error:</strong> ${error instanceof Error ? error.message : String(error)}</p>
159
+ <p>The React-based dashboard failed to load. Check the console for detailed error information.</p>
160
+ </div>
161
+ `;
162
+ }
163
+ throw error;
164
+ }
165
+ }
@@ -0,0 +1,191 @@
1
+ import { useMemo } from 'react';
2
+ import { useDashboard, DashboardEvent } from '../contexts/DashboardContext';
3
+
4
+ /**
5
+ * Get event type category for styling and filtering
6
+ */
7
+ function getEventCategory(eventType?: string): string {
8
+ if (!eventType) return 'info';
9
+
10
+ const type = eventType.toLowerCase();
11
+
12
+ if (type.includes('agent') || type.includes('subagent')) return 'agent';
13
+ if (type.includes('tool') || type === 'bash' || type === 'edit' || type === 'read' || type === 'write') return 'tool';
14
+ if (type.includes('file') || type.includes('edit') || type.includes('write') || type.includes('read')) return 'file';
15
+ if (type.includes('session') || type === 'start' || type === 'stop') return 'session';
16
+ if (type.includes('error') || type.includes('fail')) return 'error';
17
+ if (type.includes('memory') || type.includes('todo')) return 'info';
18
+ if (type.includes('claude') || type.includes('request') || type.includes('response')) return 'info';
19
+
20
+ return 'info';
21
+ }
22
+
23
+ /**
24
+ * Format timestamp consistently
25
+ */
26
+ function formatTimestamp(timestamp: number): string {
27
+ if (!timestamp) return 'Unknown';
28
+
29
+ const date = new Date(timestamp);
30
+ return date.toLocaleTimeString('en-US', {
31
+ hour12: false,
32
+ hour: '2-digit',
33
+ minute: '2-digit',
34
+ second: '2-digit',
35
+ fractionalSecondDigits: 3
36
+ });
37
+ }
38
+
39
+ /**
40
+ * Enhanced event interface with computed properties
41
+ */
42
+ export interface EnhancedEvent extends DashboardEvent {
43
+ category: string;
44
+ formattedTime: string;
45
+ displayType: string;
46
+ preview: string;
47
+ size: number;
48
+ }
49
+
50
+ /**
51
+ * Hook for managing and filtering events with computed properties
52
+ */
53
+ export function useEvents() {
54
+ const { state, setFilter, setSetting } = useDashboard();
55
+
56
+ // Enhanced events with computed properties
57
+ const enhancedEvents = useMemo((): EnhancedEvent[] => {
58
+ return state.events.map(event => {
59
+ const category = getEventCategory(event.type);
60
+ const formattedTime = formatTimestamp(event.timestamp);
61
+
62
+ // Build display type
63
+ let displayType = event.type || 'unknown';
64
+ if (event.subtype) {
65
+ displayType += `:${event.subtype}`;
66
+ }
67
+
68
+ // Generate preview
69
+ const displayData = event.raw || event.data;
70
+ const preview = JSON.stringify(displayData || {})
71
+ .substring(0, 100)
72
+ .replace(/[\r\n]+/g, ' ');
73
+
74
+ // Calculate size
75
+ const size = JSON.stringify(event).length;
76
+
77
+ return {
78
+ ...event,
79
+ category,
80
+ formattedTime,
81
+ displayType,
82
+ preview: preview + (JSON.stringify(displayData || {}).length > 100 ? '...' : ''),
83
+ size
84
+ };
85
+ });
86
+ }, [state.events]);
87
+
88
+ // Filtered events based on current filters
89
+ const filteredEvents = useMemo((): EnhancedEvent[] => {
90
+ let filtered = [...enhancedEvents];
91
+
92
+ // Apply search filter
93
+ if (state.filters.searchTerm) {
94
+ const search = state.filters.searchTerm.toLowerCase();
95
+ filtered = filtered.filter(event =>
96
+ JSON.stringify(event).toLowerCase().includes(search)
97
+ );
98
+ }
99
+
100
+ // Apply type filter
101
+ if (state.filters.typeFilter) {
102
+ filtered = filtered.filter(event =>
103
+ event.category === state.filters.typeFilter
104
+ );
105
+ }
106
+
107
+ // Sort by timestamp (newest first)
108
+ filtered.sort((a, b) => (b.timestamp || 0) - (a.timestamp || 0));
109
+
110
+ return filtered;
111
+ }, [enhancedEvents, state.filters.searchTerm, state.filters.typeFilter]);
112
+
113
+ // Statistics for filtered events
114
+ const stats = useMemo(() => {
115
+ const types = new Set(filteredEvents.map(event => event.type));
116
+ const totalSize = filteredEvents.reduce((sum, event) => sum + event.size, 0);
117
+
118
+ // Calculate events in last minute
119
+ const now = Date.now();
120
+ const oneMinuteAgo = now - 60000;
121
+ const recentEvents = filteredEvents.filter(e => e.timestamp > oneMinuteAgo);
122
+
123
+ return {
124
+ totalFiltered: filteredEvents.length,
125
+ uniqueTypes: types.size,
126
+ eventsPerMinute: recentEvents.length,
127
+ averageSize: filteredEvents.length > 0 ? Math.round(totalSize / filteredEvents.length) : 0,
128
+ totalSize
129
+ };
130
+ }, [filteredEvents]);
131
+
132
+ // Event categories for filter dropdown
133
+ const availableCategories = useMemo(() => {
134
+ const categories = new Set(enhancedEvents.map(event => event.category));
135
+ return Array.from(categories).sort();
136
+ }, [enhancedEvents]);
137
+
138
+ // Actions
139
+ const setSearchTerm = (term: string) => {
140
+ setFilter('searchTerm', term);
141
+ };
142
+
143
+ const setTypeFilter = (type: string) => {
144
+ setFilter('typeFilter', type);
145
+ };
146
+
147
+ const toggleAutoScroll = () => {
148
+ setSetting('autoScroll', !state.settings.autoScroll);
149
+ };
150
+
151
+ const togglePauseStream = () => {
152
+ setSetting('pauseStream', !state.settings.pauseStream);
153
+ };
154
+
155
+ const exportEvents = () => {
156
+ const eventsToExport = filteredEvents.length > 0 ? filteredEvents : enhancedEvents;
157
+ const json = JSON.stringify(eventsToExport, null, 2);
158
+ const blob = new Blob([json], { type: 'application/json' });
159
+ const url = URL.createObjectURL(blob);
160
+ const a = document.createElement('a');
161
+ a.href = url;
162
+ a.download = `events-${Date.now()}.json`;
163
+ a.click();
164
+ URL.revokeObjectURL(url);
165
+ };
166
+
167
+ return {
168
+ // Data
169
+ events: filteredEvents,
170
+ allEvents: enhancedEvents,
171
+ stats,
172
+ availableCategories,
173
+
174
+ // State
175
+ searchTerm: state.filters.searchTerm,
176
+ typeFilter: state.filters.typeFilter,
177
+ autoScroll: state.settings.autoScroll,
178
+ pauseStream: state.settings.pauseStream,
179
+
180
+ // Actions
181
+ setSearchTerm,
182
+ setTypeFilter,
183
+ toggleAutoScroll,
184
+ togglePauseStream,
185
+ exportEvents,
186
+
187
+ // Utilities
188
+ getEventCategory,
189
+ formatTimestamp
190
+ };
191
+ }