claude-mpm 4.21.0__py3-none-any.whl → 5.0.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (497) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +12 -0
  3. claude_mpm/agents/OUTPUT_STYLE.md +3 -48
  4. claude_mpm/agents/PM_INSTRUCTIONS.md +632 -334
  5. claude_mpm/agents/WORKFLOW.md +75 -2
  6. claude_mpm/agents/__init__.py +6 -0
  7. claude_mpm/agents/agent_loader.py +1 -4
  8. claude_mpm/agents/base_agent.json +6 -3
  9. claude_mpm/agents/frontmatter_validator.py +1 -1
  10. claude_mpm/agents/templates/{circuit_breakers.md → circuit-breakers.md} +370 -3
  11. claude_mpm/agents/templates/context-management-examples.md +544 -0
  12. claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +89 -19
  13. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  14. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  15. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  16. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  17. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  18. claude_mpm/cli/__init__.py +38 -2
  19. claude_mpm/cli/commands/agent_source.py +774 -0
  20. claude_mpm/cli/commands/agent_state_manager.py +125 -20
  21. claude_mpm/cli/commands/agents.py +684 -13
  22. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  23. claude_mpm/cli/commands/agents_discover.py +338 -0
  24. claude_mpm/cli/commands/aggregate.py +1 -1
  25. claude_mpm/cli/commands/analyze.py +3 -3
  26. claude_mpm/cli/commands/auto_configure.py +2 -6
  27. claude_mpm/cli/commands/cleanup.py +1 -1
  28. claude_mpm/cli/commands/config.py +7 -4
  29. claude_mpm/cli/commands/configure.py +478 -44
  30. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  31. claude_mpm/cli/commands/configure_navigation.py +63 -46
  32. claude_mpm/cli/commands/debug.py +12 -12
  33. claude_mpm/cli/commands/doctor.py +10 -2
  34. claude_mpm/cli/commands/hook_errors.py +277 -0
  35. claude_mpm/cli/commands/local_deploy.py +1 -4
  36. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  37. claude_mpm/cli/commands/mpm_init/core.py +50 -2
  38. claude_mpm/cli/commands/mpm_init/git_activity.py +10 -10
  39. claude_mpm/cli/commands/mpm_init/prompts.py +6 -6
  40. claude_mpm/cli/commands/run.py +124 -128
  41. claude_mpm/cli/commands/skill_source.py +694 -0
  42. claude_mpm/cli/commands/skills.py +435 -1
  43. claude_mpm/cli/executor.py +78 -3
  44. claude_mpm/cli/interactive/agent_wizard.py +919 -41
  45. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  46. claude_mpm/cli/parsers/agents_parser.py +173 -4
  47. claude_mpm/cli/parsers/base_parser.py +49 -0
  48. claude_mpm/cli/parsers/config_parser.py +96 -43
  49. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  50. claude_mpm/cli/parsers/skills_parser.py +138 -0
  51. claude_mpm/cli/parsers/source_parser.py +138 -0
  52. claude_mpm/cli/startup.py +499 -84
  53. claude_mpm/cli/startup_display.py +480 -0
  54. claude_mpm/cli/utils.py +1 -1
  55. claude_mpm/cli_module/commands.py +1 -1
  56. claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
  57. claude_mpm/commands/mpm-agents-detect.md +9 -0
  58. claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
  59. claude_mpm/commands/mpm-agents-recommend.md +9 -0
  60. claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
  61. claude_mpm/commands/mpm-doctor.md +9 -0
  62. claude_mpm/commands/mpm-help.md +14 -2
  63. claude_mpm/commands/mpm-init.md +27 -2
  64. claude_mpm/commands/mpm-monitor.md +9 -0
  65. claude_mpm/commands/mpm-session-resume.md +381 -0
  66. claude_mpm/commands/mpm-status.md +9 -0
  67. claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
  68. claude_mpm/commands/mpm-ticket-view.md +552 -0
  69. claude_mpm/commands/mpm-version.md +9 -0
  70. claude_mpm/commands/mpm.md +11 -0
  71. claude_mpm/config/agent_presets.py +258 -0
  72. claude_mpm/config/agent_sources.py +325 -0
  73. claude_mpm/config/skill_sources.py +590 -0
  74. claude_mpm/constants.py +12 -0
  75. claude_mpm/core/api_validator.py +1 -1
  76. claude_mpm/core/claude_runner.py +17 -10
  77. claude_mpm/core/config.py +24 -0
  78. claude_mpm/core/constants.py +1 -1
  79. claude_mpm/core/framework/__init__.py +3 -16
  80. claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
  81. claude_mpm/core/framework/processors/metadata_processor.py +1 -1
  82. claude_mpm/core/hook_error_memory.py +381 -0
  83. claude_mpm/core/hook_manager.py +41 -2
  84. claude_mpm/core/interactive_session.py +112 -5
  85. claude_mpm/core/logger.py +3 -1
  86. claude_mpm/core/oneshot_session.py +94 -4
  87. claude_mpm/dashboard/static/css/activity.css +69 -69
  88. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  89. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  90. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  91. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  92. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  93. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  94. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  95. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  96. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  97. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  98. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  99. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  100. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  101. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  102. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  103. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  104. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  105. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  106. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  107. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  108. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  109. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  110. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  111. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  112. claude_mpm/dashboard/templates/code_simple.html +23 -23
  113. claude_mpm/dashboard/templates/index.html +18 -18
  114. claude_mpm/experimental/cli_enhancements.py +1 -5
  115. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  116. claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
  117. claude_mpm/hooks/claude_hooks/installer.py +45 -0
  118. claude_mpm/hooks/failure_learning/__init__.py +2 -8
  119. claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
  120. claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
  121. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
  122. claude_mpm/hooks/kuzu_response_hook.py +1 -5
  123. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  124. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  125. claude_mpm/models/git_repository.py +198 -0
  126. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  127. claude_mpm/scripts/start_activity_logging.py +3 -1
  128. claude_mpm/services/agents/agent_builder.py +45 -9
  129. claude_mpm/services/agents/agent_preset_service.py +238 -0
  130. claude_mpm/services/agents/agent_selection_service.py +484 -0
  131. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  132. claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
  133. claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
  134. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  135. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
  136. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  137. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  138. claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
  139. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  140. claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
  141. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  142. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
  143. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  144. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
  145. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
  146. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  147. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
  148. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  149. claude_mpm/services/agents/git_source_manager.py +629 -0
  150. claude_mpm/services/agents/loading/framework_agent_loader.py +9 -12
  151. claude_mpm/services/agents/local_template_manager.py +50 -10
  152. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  153. claude_mpm/services/agents/sources/__init__.py +13 -0
  154. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  155. claude_mpm/services/agents/sources/git_source_sync_service.py +1055 -0
  156. claude_mpm/services/agents/startup_sync.py +239 -0
  157. claude_mpm/services/agents/toolchain_detector.py +474 -0
  158. claude_mpm/services/cli/session_pause_manager.py +1 -1
  159. claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
  160. claude_mpm/services/command_deployment_service.py +92 -1
  161. claude_mpm/services/core/base.py +26 -11
  162. claude_mpm/services/core/interfaces/__init__.py +1 -3
  163. claude_mpm/services/core/interfaces/health.py +1 -4
  164. claude_mpm/services/core/models/__init__.py +2 -11
  165. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  166. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  167. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  168. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  169. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  170. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  171. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  172. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  173. claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
  174. claude_mpm/services/event_bus/direct_relay.py +3 -3
  175. claude_mpm/services/event_bus/event_bus.py +36 -3
  176. claude_mpm/services/event_bus/relay.py +23 -7
  177. claude_mpm/services/events/consumers/logging.py +1 -2
  178. claude_mpm/services/git/__init__.py +21 -0
  179. claude_mpm/services/git/git_operations_service.py +494 -0
  180. claude_mpm/services/github/__init__.py +21 -0
  181. claude_mpm/services/github/github_cli_service.py +397 -0
  182. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  183. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  184. claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
  185. claude_mpm/services/instructions/__init__.py +9 -0
  186. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  187. claude_mpm/services/local_ops/__init__.py +3 -13
  188. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  189. claude_mpm/services/local_ops/health_manager.py +1 -4
  190. claude_mpm/services/local_ops/process_manager.py +1 -1
  191. claude_mpm/services/local_ops/resource_monitor.py +2 -2
  192. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  193. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
  194. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  195. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
  196. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  197. claude_mpm/services/memory/failure_tracker.py +19 -4
  198. claude_mpm/services/memory/optimizer.py +1 -1
  199. claude_mpm/services/model/model_router.py +8 -9
  200. claude_mpm/services/monitor/daemon.py +1 -1
  201. claude_mpm/services/monitor/server.py +2 -2
  202. claude_mpm/services/native_agent_converter.py +356 -0
  203. claude_mpm/services/port_manager.py +1 -1
  204. claude_mpm/services/pr/__init__.py +14 -0
  205. claude_mpm/services/pr/pr_template_service.py +329 -0
  206. claude_mpm/services/project/documentation_manager.py +2 -1
  207. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  208. claude_mpm/services/runner_configuration_service.py +1 -0
  209. claude_mpm/services/self_upgrade_service.py +165 -7
  210. claude_mpm/services/skills/__init__.py +18 -0
  211. claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
  212. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  213. claude_mpm/services/skills_config.py +547 -0
  214. claude_mpm/services/skills_deployer.py +955 -0
  215. claude_mpm/services/socketio/handlers/connection.py +1 -1
  216. claude_mpm/services/socketio/handlers/git.py +2 -2
  217. claude_mpm/services/socketio/server/core.py +1 -4
  218. claude_mpm/services/socketio/server/main.py +1 -3
  219. claude_mpm/services/system_instructions_service.py +1 -3
  220. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  221. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  222. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
  223. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  224. claude_mpm/services/unified/unified_deployment.py +1 -5
  225. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  226. claude_mpm/services/visualization/__init__.py +1 -5
  227. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  228. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  229. claude_mpm/skills/bundled/performance-profiling.md +6 -0
  230. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +2 -2
  231. claude_mpm/skills/skills_registry.py +0 -1
  232. claude_mpm/templates/questions/__init__.py +38 -0
  233. claude_mpm/templates/questions/base.py +193 -0
  234. claude_mpm/templates/questions/pr_strategy.py +311 -0
  235. claude_mpm/templates/questions/project_init.py +385 -0
  236. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  237. claude_mpm/tools/__main__.py +8 -8
  238. claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
  239. claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
  240. claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
  241. claude_mpm/tools/code_tree_analyzer/core.py +380 -0
  242. claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
  243. claude_mpm/tools/code_tree_analyzer/events.py +168 -0
  244. claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
  245. claude_mpm/tools/code_tree_analyzer/models.py +39 -0
  246. claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
  247. claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
  248. claude_mpm/utils/agent_dependency_loader.py +80 -13
  249. claude_mpm/utils/dependency_cache.py +3 -1
  250. claude_mpm/utils/gitignore.py +241 -0
  251. claude_mpm/utils/log_cleanup.py +3 -3
  252. claude_mpm/utils/progress.py +383 -0
  253. claude_mpm/utils/robust_installer.py +3 -5
  254. claude_mpm/utils/structured_questions.py +619 -0
  255. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/METADATA +429 -59
  256. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/RECORD +264 -427
  257. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  258. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  259. claude_mpm/agents/templates/agent-manager.json +0 -273
  260. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  261. claude_mpm/agents/templates/api_qa.json +0 -180
  262. claude_mpm/agents/templates/clerk-ops.json +0 -235
  263. claude_mpm/agents/templates/code_analyzer.json +0 -101
  264. claude_mpm/agents/templates/content-agent.json +0 -358
  265. claude_mpm/agents/templates/dart_engineer.json +0 -307
  266. claude_mpm/agents/templates/data_engineer.json +0 -225
  267. claude_mpm/agents/templates/documentation.json +0 -211
  268. claude_mpm/agents/templates/engineer.json +0 -210
  269. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  270. claude_mpm/agents/templates/golang_engineer.json +0 -270
  271. claude_mpm/agents/templates/imagemagick.json +0 -264
  272. claude_mpm/agents/templates/java_engineer.json +0 -346
  273. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  274. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  275. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  276. claude_mpm/agents/templates/memory_manager.json +0 -158
  277. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  278. claude_mpm/agents/templates/ops.json +0 -185
  279. claude_mpm/agents/templates/php-engineer.json +0 -287
  280. claude_mpm/agents/templates/product_owner.json +0 -338
  281. claude_mpm/agents/templates/project_organizer.json +0 -140
  282. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  283. claude_mpm/agents/templates/python_engineer.json +0 -387
  284. claude_mpm/agents/templates/qa.json +0 -242
  285. claude_mpm/agents/templates/react_engineer.json +0 -238
  286. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  287. claude_mpm/agents/templates/research.json +0 -188
  288. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  289. claude_mpm/agents/templates/rust_engineer.json +0 -275
  290. claude_mpm/agents/templates/security.json +0 -202
  291. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  292. claude_mpm/agents/templates/ticketing.json +0 -177
  293. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  294. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  295. claude_mpm/agents/templates/version_control.json +0 -157
  296. claude_mpm/agents/templates/web_qa.json +0 -399
  297. claude_mpm/agents/templates/web_ui.json +0 -189
  298. claude_mpm/commands/mpm-tickets.md +0 -102
  299. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  300. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  301. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  302. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  303. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  304. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  305. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  306. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  307. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  308. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  309. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  310. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  311. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  312. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  313. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  314. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  315. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  316. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  317. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  318. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  319. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  320. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  321. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  322. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  323. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  324. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  325. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  326. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  327. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  328. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  329. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  330. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  331. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  332. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  333. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  334. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  335. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  336. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  337. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  338. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  339. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  340. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  341. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  342. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  343. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  344. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  345. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  346. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  347. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  348. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  349. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  350. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  351. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  352. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  353. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  354. claude_mpm/dashboard/static/built/react/events.js +0 -30
  355. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  356. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  357. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  358. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  359. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  360. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  361. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  362. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  363. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  364. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  365. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  366. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  367. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  368. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  369. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  370. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  371. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  372. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  373. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  374. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  375. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  376. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  377. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  378. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  379. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  380. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  381. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  382. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  383. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  384. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  385. claude_mpm/dashboard/static/events.html +0 -607
  386. claude_mpm/dashboard/static/index.html +0 -635
  387. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  388. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  389. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  390. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  391. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  392. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  393. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  394. claude_mpm/dashboard/static/legacy/files.html +0 -747
  395. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  396. claude_mpm/dashboard/static/monitors.html +0 -431
  397. claude_mpm/dashboard/static/production/events.html +0 -659
  398. claude_mpm/dashboard/static/production/main.html +0 -698
  399. claude_mpm/dashboard/static/production/monitors.html +0 -483
  400. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  401. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  402. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  403. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  404. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  405. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
  406. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
  407. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
  408. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
  409. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
  410. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
  411. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
  412. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
  413. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
  414. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
  415. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
  416. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
  417. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
  418. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
  419. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
  420. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
  421. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
  422. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  423. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  424. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  425. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  426. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  427. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  428. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  429. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  430. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  431. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  432. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
  433. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
  434. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
  435. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
  436. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
  437. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
  438. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
  439. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  440. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  441. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  442. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  443. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
  444. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
  445. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  446. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  447. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  448. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  449. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
  450. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
  451. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
  452. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
  453. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
  454. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
  455. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
  456. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
  457. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
  458. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
  459. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
  460. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
  461. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
  462. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
  463. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
  464. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
  465. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
  466. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
  467. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
  468. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
  469. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
  470. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
  471. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
  472. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  473. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  474. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  475. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  476. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  477. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  478. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
  479. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
  480. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
  481. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
  482. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
  483. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
  484. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
  485. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
  486. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
  487. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
  488. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
  489. claude_mpm/tools/code_tree_analyzer.py +0 -1825
  490. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  491. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  492. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  493. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  494. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/WHEEL +0 -0
  495. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/entry_points.txt +0 -0
  496. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/licenses/LICENSE +0 -0
  497. {claude_mpm-4.21.0.dist-info → claude_mpm-5.0.2.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * File Viewer Component
3
- *
3
+ *
4
4
  * A simple file content viewer that displays file contents in a modal window.
5
5
  * This component handles file loading via HTTP requests and displays the content
6
6
  * with basic syntax highlighting support.
@@ -24,7 +24,7 @@ class FileViewer {
24
24
 
25
25
  this.createModal();
26
26
  this.setupEventHandlers();
27
-
27
+
28
28
  this.initialized = true;
29
29
  console.log('File viewer initialized');
30
30
  }
@@ -250,7 +250,7 @@ class FileViewer {
250
250
  async show(filePath) {
251
251
  console.log('[FileViewer] show() called with path:', filePath);
252
252
  console.log('[FileViewer] initialized:', this.initialized);
253
-
253
+
254
254
  if (!this.initialized) {
255
255
  console.log('[FileViewer] Not initialized, initializing now...');
256
256
  this.initialize();
@@ -258,10 +258,10 @@ class FileViewer {
258
258
 
259
259
  this.currentFile = filePath;
260
260
  this.modal.classList.add('show');
261
-
261
+
262
262
  // Update path
263
263
  document.getElementById('file-viewer-path').textContent = filePath;
264
-
264
+
265
265
  console.log('[FileViewer] Modal shown, loading file content...');
266
266
  // Load file content
267
267
  await this.loadFileContent(filePath);
@@ -280,63 +280,63 @@ class FileViewer {
280
280
  */
281
281
  async loadFileContent(filePath) {
282
282
  const codeContent = document.getElementById('file-viewer-code-content');
283
-
283
+
284
284
  console.log('[FileViewer] loadFileContent called with path:', filePath);
285
-
285
+
286
286
  // Check cache first
287
287
  if (this.contentCache.has(filePath)) {
288
288
  console.log('[FileViewer] Using cached content for:', filePath);
289
289
  this.displayContent(this.contentCache.get(filePath));
290
290
  return;
291
291
  }
292
-
292
+
293
293
  // Show loading state
294
294
  codeContent.textContent = 'Loading file content...';
295
-
295
+
296
296
  try {
297
297
  // Check if we have a socket connection available
298
298
  if (window.socket && window.socket.connected) {
299
299
  console.log('[FileViewer] Using Socket.IO to load file:', filePath);
300
-
300
+
301
301
  // Create a promise to wait for the response
302
302
  const responsePromise = new Promise((resolve, reject) => {
303
303
  const timeoutId = setTimeout(() => {
304
304
  console.error('[FileViewer] Socket.IO request timed out for:', filePath);
305
305
  reject(new Error('Socket.IO request timed out'));
306
306
  }, 10000); // 10 second timeout
307
-
307
+
308
308
  // Set up one-time listener for the response
309
309
  window.socket.once('file_content_response', (data) => {
310
310
  clearTimeout(timeoutId);
311
311
  console.log('[FileViewer] Received file_content_response:', data);
312
312
  resolve(data);
313
313
  });
314
-
314
+
315
315
  // Emit the read_file event
316
316
  console.log('[FileViewer] Emitting read_file event with data:', {
317
317
  file_path: filePath,
318
318
  working_dir: window.workingDirectory || '/',
319
319
  max_size: 5 * 1024 * 1024 // 5MB limit
320
320
  });
321
-
321
+
322
322
  window.socket.emit('read_file', {
323
323
  file_path: filePath,
324
324
  working_dir: window.workingDirectory || '/',
325
325
  max_size: 5 * 1024 * 1024 // 5MB limit
326
326
  });
327
327
  });
328
-
328
+
329
329
  // Wait for the response
330
330
  const data = await responsePromise;
331
-
331
+
332
332
  if (data.success && data.content !== undefined) {
333
333
  console.log('[FileViewer] Successfully loaded file content, caching...');
334
334
  // Cache the content
335
335
  this.contentCache.set(filePath, data.content);
336
-
336
+
337
337
  // Display the content
338
338
  this.displayContent(data.content);
339
-
339
+
340
340
  // Update file info
341
341
  this.updateFileInfo(data);
342
342
  } else {
@@ -350,7 +350,7 @@ class FileViewer {
350
350
  } catch (error) {
351
351
  console.error('[FileViewer] Error loading file:', error);
352
352
  console.error('[FileViewer] Error stack:', error.stack);
353
-
353
+
354
354
  // If API fails, show error message with helpful information
355
355
  this.displayError(filePath, error.message);
356
356
  }
@@ -361,22 +361,22 @@ class FileViewer {
361
361
  */
362
362
  displayContent(content) {
363
363
  const codeContent = document.getElementById('file-viewer-code-content');
364
-
364
+
365
365
  // Set the content
366
366
  codeContent.textContent = content || '(Empty file)';
367
-
367
+
368
368
  // Update line count
369
369
  const lines = content ? content.split('\n').length : 0;
370
370
  document.getElementById('file-viewer-lines').textContent = `Lines: ${lines}`;
371
-
371
+
372
372
  // Update file size
373
373
  const size = content ? new Blob([content]).size : 0;
374
374
  document.getElementById('file-viewer-size').textContent = `Size: ${this.formatFileSize(size)}`;
375
-
375
+
376
376
  // Detect and set file type
377
377
  const fileType = this.detectFileType(this.currentFile);
378
378
  document.getElementById('file-viewer-type').textContent = `Type: ${fileType}`;
379
-
379
+
380
380
  // Apply syntax highlighting if Prism is available
381
381
  if (window.Prism) {
382
382
  const language = this.detectLanguage(this.currentFile);
@@ -390,27 +390,27 @@ class FileViewer {
390
390
  */
391
391
  displayError(filePath, errorMessage) {
392
392
  const codeContent = document.getElementById('file-viewer-code-content');
393
-
393
+
394
394
  // For now, show a helpful message since the API endpoint doesn't exist yet
395
395
  const errorHtml = `
396
396
  <div class="file-viewer-error">
397
397
  ⚠️ File content loading is not yet implemented
398
-
398
+
399
399
  File path: ${filePath}
400
-
400
+
401
401
  The file viewing functionality requires:
402
402
  1. A server-side /api/file endpoint
403
403
  2. Proper file reading permissions
404
404
  3. Security validation for file access
405
-
405
+
406
406
  Error: ${errorMessage}
407
-
407
+
408
408
  This feature will be available once the backend API is implemented.
409
409
  </div>
410
410
  `;
411
-
411
+
412
412
  codeContent.innerHTML = errorHtml;
413
-
413
+
414
414
  // Update info
415
415
  document.getElementById('file-viewer-lines').textContent = 'Lines: --';
416
416
  document.getElementById('file-viewer-size').textContent = 'Size: --';
@@ -424,11 +424,11 @@ class FileViewer {
424
424
  if (data.lines !== undefined) {
425
425
  document.getElementById('file-viewer-lines').textContent = `Lines: ${data.lines}`;
426
426
  }
427
-
427
+
428
428
  if (data.size !== undefined) {
429
429
  document.getElementById('file-viewer-size').textContent = `Size: ${this.formatFileSize(data.size)}`;
430
430
  }
431
-
431
+
432
432
  if (data.type) {
433
433
  document.getElementById('file-viewer-type').textContent = `Type: ${data.type}`;
434
434
  }
@@ -439,11 +439,11 @@ class FileViewer {
439
439
  */
440
440
  formatFileSize(bytes) {
441
441
  if (bytes === 0) return '0 Bytes';
442
-
442
+
443
443
  const k = 1024;
444
444
  const sizes = ['Bytes', 'KB', 'MB', 'GB'];
445
445
  const i = Math.floor(Math.log(bytes) / Math.log(k));
446
-
446
+
447
447
  return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i];
448
448
  }
449
449
 
@@ -452,7 +452,7 @@ class FileViewer {
452
452
  */
453
453
  detectFileType(path) {
454
454
  if (!path) return 'Unknown';
455
-
455
+
456
456
  const ext = path.split('.').pop()?.toLowerCase();
457
457
  const typeMap = {
458
458
  'py': 'Python',
@@ -480,7 +480,7 @@ class FileViewer {
480
480
  'rb': 'Ruby',
481
481
  'php': 'PHP'
482
482
  };
483
-
483
+
484
484
  return typeMap[ext] || 'Text';
485
485
  }
486
486
 
@@ -489,7 +489,7 @@ class FileViewer {
489
489
  */
490
490
  detectLanguage(path) {
491
491
  if (!path) return 'plaintext';
492
-
492
+
493
493
  const ext = path.split('.').pop()?.toLowerCase();
494
494
  const languageMap = {
495
495
  'py': 'python',
@@ -516,7 +516,7 @@ class FileViewer {
516
516
  'rb': 'ruby',
517
517
  'php': 'php'
518
518
  };
519
-
519
+
520
520
  return languageMap[ext] || 'plaintext';
521
521
  }
522
522
 
@@ -527,15 +527,15 @@ class FileViewer {
527
527
  const codeContent = document.getElementById('file-viewer-code-content');
528
528
  const button = document.getElementById('file-viewer-copy');
529
529
  const content = codeContent.textContent;
530
-
530
+
531
531
  try {
532
532
  await navigator.clipboard.writeText(content);
533
-
533
+
534
534
  // Show feedback
535
535
  const originalText = button.textContent;
536
536
  button.textContent = '✅ Copied!';
537
537
  button.classList.add('copied');
538
-
538
+
539
539
  setTimeout(() => {
540
540
  button.textContent = originalText;
541
541
  button.classList.remove('copied');
@@ -565,7 +565,7 @@ window.fileViewerInstance = fileViewer;
565
565
  // Export for use in other modules
566
566
  if (typeof window !== 'undefined') {
567
567
  window.FileViewer = fileViewer;
568
-
568
+
569
569
  // Initialize when DOM is ready
570
570
  if (document.readyState === 'loading') {
571
571
  document.addEventListener('DOMContentLoaded', () => {
@@ -17,21 +17,21 @@ class ModuleViewer {
17
17
  // Global JSON visibility state - persisted across all events
18
18
  // When true, all events show JSON expanded; when false, all collapsed
19
19
  this.globalJsonExpanded = localStorage.getItem('dashboard-json-expanded') === 'true';
20
-
20
+
21
21
  // Separate state for Full Event Data sections
22
22
  this.fullEventDataExpanded = localStorage.getItem('dashboard-full-event-expanded') === 'true';
23
-
23
+
24
24
  // Track if keyboard listener has been added to avoid duplicates
25
25
  this.keyboardListenerAdded = false;
26
-
26
+
27
27
  // Initialize unified data viewer
28
28
  this.unifiedViewer = new UnifiedDataViewer('module-data-content');
29
-
29
+
30
30
  // Sync unified viewer's JSON state with module viewer's state
31
31
  // This ensures both viewers maintain consistent JSON visibility
32
32
  this.unifiedViewer.globalJsonExpanded = this.globalJsonExpanded;
33
33
  this.unifiedViewer.fullEventDataExpanded = this.fullEventDataExpanded;
34
-
34
+
35
35
  // Listen for JSON state changes from unified viewer
36
36
  document.addEventListener('jsonToggleChanged', (e) => {
37
37
  this.globalJsonExpanded = e.detail.expanded;
@@ -40,7 +40,7 @@ class ModuleViewer {
40
40
  this.unifiedViewer.globalJsonExpanded = e.detail.expanded;
41
41
  }
42
42
  });
43
-
43
+
44
44
  // Listen for Full Event Data state changes
45
45
  document.addEventListener('fullEventToggleChanged', (e) => {
46
46
  this.fullEventDataExpanded = e.detail.expanded;
@@ -118,7 +118,7 @@ class ModuleViewer {
118
118
  */
119
119
  showEventDetails(event) {
120
120
  this.currentEvent = event;
121
-
121
+
122
122
  if (!this.unifiedViewer) {
123
123
  console.warn('ModuleViewer: UnifiedDataViewer not available');
124
124
  // Fallback to legacy rendering
@@ -126,7 +126,7 @@ class ModuleViewer {
126
126
  this.renderJsonData(event);
127
127
  return;
128
128
  }
129
-
129
+
130
130
  // Use unified viewer to display event data
131
131
  this.unifiedViewer.display(event, 'event');
132
132
  }
@@ -868,13 +868,13 @@ class ModuleViewer {
868
868
  createCollapsibleJsonSection(event) {
869
869
  const uniqueId = 'json-section-' + Math.random().toString(36).substr(2, 9);
870
870
  const jsonString = this.formatJSON(event);
871
-
871
+
872
872
  // Use global state to determine initial visibility
873
873
  const isExpanded = this.globalJsonExpanded;
874
874
  const display = isExpanded ? 'block' : 'none';
875
875
  const arrow = isExpanded ? '▲' : '▼';
876
876
  const ariaExpanded = isExpanded ? 'true' : 'false';
877
-
877
+
878
878
  return `
879
879
  <div class="collapsible-json-section" id="${uniqueId}">
880
880
  <div class="json-toggle-header"
@@ -960,13 +960,13 @@ class ModuleViewer {
960
960
  toggleJsonSection() {
961
961
  // Toggle the global state
962
962
  this.globalJsonExpanded = !this.globalJsonExpanded;
963
-
963
+
964
964
  // Persist the preference to localStorage
965
965
  localStorage.setItem('dashboard-json-expanded', this.globalJsonExpanded.toString());
966
-
966
+
967
967
  // Update ALL JSON sections on the page
968
968
  this.updateAllJsonSections();
969
-
969
+
970
970
  // Dispatch event to notify other components of the change
971
971
  document.dispatchEvent(new CustomEvent('jsonToggleChanged', {
972
972
  detail: { expanded: this.globalJsonExpanded }
@@ -982,7 +982,7 @@ class ModuleViewer {
982
982
  const allJsonContents = document.querySelectorAll('.json-content-collapsible');
983
983
  const allArrows = document.querySelectorAll('.json-toggle-arrow');
984
984
  const allHeaders = document.querySelectorAll('.json-toggle-header');
985
-
985
+
986
986
  // Update each JSON section
987
987
  allJsonContents.forEach((jsonContent, index) => {
988
988
  if (this.globalJsonExpanded) {
@@ -1007,7 +1007,7 @@ class ModuleViewer {
1007
1007
  }
1008
1008
  }
1009
1009
  });
1010
-
1010
+
1011
1011
  // If expanded and there's content, scroll the first visible one into view
1012
1012
  if (this.globalJsonExpanded && allJsonContents.length > 0) {
1013
1013
  setTimeout(() => {
@@ -1221,7 +1221,7 @@ class ModuleViewer {
1221
1221
  if (!text || text.length <= maxLength) return text;
1222
1222
  return text.substring(0, maxLength) + '...';
1223
1223
  }
1224
-
1224
+
1225
1225
  /**
1226
1226
  * Format operation details object for display
1227
1227
  * @param {Object} details - Details object containing operation information
@@ -1231,40 +1231,40 @@ class ModuleViewer {
1231
1231
  if (!details || typeof details !== 'object') {
1232
1232
  return '';
1233
1233
  }
1234
-
1234
+
1235
1235
  let formattedDetails = '';
1236
-
1236
+
1237
1237
  // Display the bash command if available
1238
1238
  if (details.parameters && details.parameters.command) {
1239
1239
  formattedDetails += `<br><strong>Command:</strong> <code>${this.escapeHtml(details.parameters.command)}</code>`;
1240
1240
  }
1241
-
1241
+
1242
1242
  // Display success/error status
1243
1243
  if (details.success !== undefined) {
1244
1244
  formattedDetails += `<br><strong>Status:</strong> ${details.success ? '✅ Success' : '❌ Failed'}`;
1245
1245
  }
1246
-
1246
+
1247
1247
  // Display exit code if available
1248
1248
  if (details.exit_code !== undefined && details.exit_code !== null) {
1249
1249
  formattedDetails += `<br><strong>Exit Code:</strong> ${details.exit_code}`;
1250
1250
  }
1251
-
1251
+
1252
1252
  // Display duration if available
1253
1253
  if (details.duration_ms !== undefined && details.duration_ms !== null) {
1254
- const duration = details.duration_ms > 1000
1255
- ? `${(details.duration_ms / 1000).toFixed(2)}s`
1254
+ const duration = details.duration_ms > 1000
1255
+ ? `${(details.duration_ms / 1000).toFixed(2)}s`
1256
1256
  : `${details.duration_ms}ms`;
1257
1257
  formattedDetails += `<br><strong>Duration:</strong> ${duration}`;
1258
1258
  }
1259
-
1259
+
1260
1260
  // Display error message if available
1261
1261
  if (details.error) {
1262
1262
  formattedDetails += `<br><strong>Error:</strong> ${this.escapeHtml(this.truncateText(details.error, 200))}`;
1263
1263
  }
1264
-
1264
+
1265
1265
  return formattedDetails;
1266
1266
  }
1267
-
1267
+
1268
1268
  /**
1269
1269
  * Escape HTML to prevent XSS
1270
1270
  */
@@ -1552,7 +1552,7 @@ class ModuleViewer {
1552
1552
  const searchPattern = parameters.pattern || 'No pattern specified';
1553
1553
  const searchPath = parameters.path || parameters.directory || '.';
1554
1554
  const searchType = parameters.type || parameters.glob || 'all files';
1555
-
1555
+
1556
1556
  // Extract search results from result_summary
1557
1557
  let searchResultsContent = '';
1558
1558
  if (toolCall.result_summary) {
@@ -1,14 +1,14 @@
1
1
  /**
2
2
  * Session Manager Component
3
3
  * Handles session selection and management
4
- *
4
+ *
5
5
  * WHY: Provides session filtering and management for the dashboard, allowing users
6
6
  * to view events from specific sessions or all sessions.
7
- *
7
+ *
8
8
  * BROWSER COMPATIBILITY: This component runs in the browser. All Node.js-specific
9
9
  * globals (process, require, etc.) have been removed. Uses browser-compatible
10
10
  * alternatives for path handling and defaults.
11
- *
11
+ *
12
12
  * FIX APPLIED: Removed process.cwd() reference that caused "process is not defined"
13
13
  * error in browser. Now uses window.location.pathname or hardcoded fallbacks.
14
14
  */
@@ -94,7 +94,7 @@ class SessionManager {
94
94
 
95
95
  // Get the default working directory from various sources
96
96
  let defaultWorkingDir = '/';
97
-
97
+
98
98
  // Try to get from working directory manager
99
99
  if (window.dashboard && window.dashboard.workingDirectoryManager) {
100
100
  defaultWorkingDir = window.dashboard.workingDirectoryManager.getDefaultWorkingDir();
@@ -108,7 +108,7 @@ class SessionManager {
108
108
  }
109
109
  }
110
110
  }
111
-
111
+
112
112
  console.log('[SESSION-MANAGER] Using default working directory:', defaultWorkingDir);
113
113
 
114
114
  // Update "All Sessions" option to show working directory
@@ -129,19 +129,19 @@ class SessionManager {
129
129
  const startTime = new Date(session.startTime || session.last_activity).toLocaleString();
130
130
  const eventCount = session.eventCount || session.event_count || 0;
131
131
  const isActive = session.id === this.currentSessionId;
132
-
132
+
133
133
  // Extract working directory from session or events
134
134
  let workingDir = session.working_directory || session.workingDirectory || '';
135
-
135
+
136
136
  // Log for debugging
137
137
  console.log(`[SESSION-DROPDOWN] Session ${session.id.substring(0, 8)} working_directory:`, workingDir);
138
-
138
+
139
139
  if (!workingDir) {
140
140
  const sessionData = this.extractSessionInfoFromEvents(session.id);
141
141
  workingDir = sessionData.workingDir || defaultWorkingDir;
142
142
  console.log(`[SESSION-DROPDOWN] Extracted working directory from events:`, workingDir);
143
143
  }
144
-
144
+
145
145
  // Format display: working_directory | session_id...
146
146
  const shortId = session.id.substring(0, 8);
147
147
  const dirDisplay = workingDir || defaultWorkingDir;
@@ -220,8 +220,8 @@ class SessionManager {
220
220
  // Use browser-compatible fallback for working directory
221
221
  // WHY: Removed process.cwd() Node.js reference - not available in browser
222
222
  // BROWSER FIX: Use dashboard manager or server-provided config
223
- let workingDir = window.dashboard?.workingDirectoryManager?.getDefaultWorkingDir() ||
224
- window.dashboardConfig?.workingDirectory ||
223
+ let workingDir = window.dashboard?.workingDirectoryManager?.getDefaultWorkingDir() ||
224
+ window.dashboardConfig?.workingDirectory ||
225
225
  '.';
226
226
  let gitBranch = 'Unknown';
227
227
 
@@ -236,9 +236,9 @@ class SessionManager {
236
236
  if (this.currentSessionId) {
237
237
  const sessionData = this.extractSessionInfoFromEvents(this.currentSessionId);
238
238
  // Browser-compatible working directory fallback
239
- workingDir = sessionData.workingDir ||
240
- window.dashboard?.workingDirectoryManager?.getDefaultWorkingDir() ||
241
- window.dashboardConfig?.workingDirectory ||
239
+ workingDir = sessionData.workingDir ||
240
+ window.dashboard?.workingDirectoryManager?.getDefaultWorkingDir() ||
241
+ window.dashboardConfig?.workingDirectory ||
242
242
  '.';
243
243
  gitBranch = sessionData.gitBranch || 'Unknown';
244
244
  }
@@ -84,7 +84,7 @@ class SocketManager {
84
84
  // Expose socket globally for components like CodeTree
85
85
  window.socket = this.socketClient.socket;
86
86
  console.log('SocketManager: Exposed socket globally as window.socket');
87
-
87
+
88
88
  this.setupGitBranchListener();
89
89
  }
90
90
  }
@@ -62,7 +62,7 @@ class UIStateManager {
62
62
 
63
63
  this.setupEventHandlers();
64
64
  console.log('UI state manager initialized with hash navigation');
65
-
65
+
66
66
  // Initialize with current hash
67
67
  this.handleHashChange();
68
68
  }
@@ -114,16 +114,16 @@ class UIStateManager {
114
114
  console.log('[Hash Navigation] - Is hash in mapping?', hash in this.hashToTab);
115
115
  console.log('[Hash Navigation] - Hash length:', hash.length);
116
116
  console.log('[Hash Navigation] - Hash char codes:', hash.split('').map(c => c.charCodeAt(0)));
117
-
117
+
118
118
  const tabName = this.hashToTab[hash] || 'events';
119
119
  console.log('[Hash Navigation] Final resolved tab name:', tabName);
120
-
120
+
121
121
  // Special logging for File Tree tab
122
122
  if (tabName === 'claude-tree' || hash === '#file_tree') {
123
123
  console.log('[UIStateManager] FILE TREE TAB SELECTED via hash:', hash);
124
124
  console.log('[UIStateManager] Tab name resolved to:', tabName);
125
125
  }
126
-
126
+
127
127
  this.switchTab(tabName, false); // false = don't update hash (we're responding to hash change)
128
128
  }
129
129
 
@@ -143,11 +143,11 @@ class UIStateManager {
143
143
  document.querySelectorAll('.tab-button').forEach(button => {
144
144
  button.addEventListener('click', (e) => {
145
145
  console.log('[UIStateManager] Tab button clicked:', e.target);
146
-
146
+
147
147
  // Prevent default only if we're going to handle it
148
148
  const tabName = this.getTabNameFromButton(e.target);
149
149
  console.log('[UIStateManager] Resolved tab name:', tabName);
150
-
150
+
151
151
  if (tabName) {
152
152
  // Let the href attribute update the hash naturally, which will trigger our hashchange handler
153
153
  // But also explicitly trigger the switch in case href doesn't work
@@ -161,7 +161,7 @@ class UIStateManager {
161
161
  }
162
162
  });
163
163
  });
164
-
164
+
165
165
  console.log('[UIStateManager] Tab click handlers set up for', document.querySelectorAll('.tab-button').length, 'buttons');
166
166
  }
167
167
 
@@ -197,7 +197,7 @@ class UIStateManager {
197
197
  console.log('[getTabNameFromButton] DEBUG: button object:', button);
198
198
  console.log('[getTabNameFromButton] DEBUG: button.nodeType:', button.nodeType);
199
199
  console.log('[getTabNameFromButton] DEBUG: button.tagName:', button.tagName);
200
-
200
+
201
201
  // CRITICAL FIX: Make sure we're dealing with the actual button element
202
202
  // Sometimes the click target might be a child element (like the emoji icon)
203
203
  let targetButton = button;
@@ -205,29 +205,29 @@ class UIStateManager {
205
205
  targetButton = button.closest('.tab-button');
206
206
  console.log('[getTabNameFromButton] DEBUG: Used closest() to find actual button');
207
207
  }
208
-
208
+
209
209
  // First check for data-tab attribute
210
210
  const dataTab = targetButton ? targetButton.getAttribute('data-tab') : null;
211
211
  console.log('[getTabNameFromButton] DEBUG: data-tab attribute:', dataTab);
212
212
  console.log('[getTabNameFromButton] DEBUG: dataTab truthy:', !!dataTab);
213
-
213
+
214
214
  // CRITICAL: Specifically handle the File Tree case
215
215
  if (dataTab === 'claude-tree') {
216
216
  console.log('[getTabNameFromButton] DEBUG: Found claude-tree data-tab, returning it');
217
217
  return 'claude-tree';
218
218
  }
219
-
219
+
220
220
  if (dataTab) {
221
221
  console.log('[getTabNameFromButton] DEBUG: Returning dataTab:', dataTab);
222
222
  return dataTab;
223
223
  }
224
-
224
+
225
225
  // Fallback to text content matching
226
226
  const text = targetButton ? targetButton.textContent.toLowerCase() : '';
227
227
  console.log('[getTabNameFromButton] DEBUG: text content:', text);
228
228
  console.log('[getTabNameFromButton] DEBUG: text includes file tree:', text.includes('file tree'));
229
229
  console.log('[getTabNameFromButton] DEBUG: text includes events:', text.includes('events'));
230
-
230
+
231
231
  // CRITICAL: Check File Tree FIRST since it's the problematic one
232
232
  if (text.includes('file tree') || text.includes('📝')) {
233
233
  console.log('[getTabNameFromButton] DEBUG: Matched file tree, returning claude-tree');
@@ -241,7 +241,7 @@ class UIStateManager {
241
241
  if (text.includes('sessions')) return 'sessions';
242
242
  if (text.includes('system')) return 'system';
243
243
  if (text.includes('events') || text.includes('📊')) return 'events';
244
-
244
+
245
245
  console.log('[getTabNameFromButton] DEBUG: No match, falling back to events');
246
246
  return 'events';
247
247
  }