claude-mpm 4.24.0__py3-none-any.whl → 5.0.9__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 (502) 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 +721 -911
  5. claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
  6. claude_mpm/agents/WORKFLOW.md +4 -4
  7. claude_mpm/agents/__init__.py +6 -0
  8. claude_mpm/agents/agent_loader.py +1 -4
  9. claude_mpm/agents/base_agent.json +6 -3
  10. claude_mpm/agents/base_agent_loader.py +10 -35
  11. claude_mpm/agents/frontmatter_validator.py +1 -1
  12. claude_mpm/agents/templates/{circuit_breakers.md → circuit-breakers.md} +370 -3
  13. claude_mpm/agents/templates/context-management-examples.md +544 -0
  14. claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +48 -0
  15. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  16. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  17. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  18. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  19. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  20. claude_mpm/cli/__init__.py +38 -2
  21. claude_mpm/cli/commands/__init__.py +2 -0
  22. claude_mpm/cli/commands/agent_source.py +774 -0
  23. claude_mpm/cli/commands/agent_state_manager.py +188 -30
  24. claude_mpm/cli/commands/agents.py +959 -36
  25. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  26. claude_mpm/cli/commands/agents_discover.py +338 -0
  27. claude_mpm/cli/commands/aggregate.py +1 -1
  28. claude_mpm/cli/commands/analyze.py +3 -3
  29. claude_mpm/cli/commands/auto_configure.py +2 -6
  30. claude_mpm/cli/commands/config.py +7 -4
  31. claude_mpm/cli/commands/configure.py +769 -45
  32. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  33. claude_mpm/cli/commands/configure_navigation.py +63 -46
  34. claude_mpm/cli/commands/debug.py +12 -12
  35. claude_mpm/cli/commands/doctor.py +10 -2
  36. claude_mpm/cli/commands/hook_errors.py +277 -0
  37. claude_mpm/cli/commands/local_deploy.py +1 -4
  38. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  39. claude_mpm/cli/commands/mpm_init/core.py +49 -1
  40. claude_mpm/cli/commands/mpm_init/git_activity.py +10 -10
  41. claude_mpm/cli/commands/mpm_init/prompts.py +6 -6
  42. claude_mpm/cli/commands/postmortem.py +401 -0
  43. claude_mpm/cli/commands/run.py +123 -165
  44. claude_mpm/cli/commands/skill_source.py +694 -0
  45. claude_mpm/cli/commands/skills.py +757 -20
  46. claude_mpm/cli/executor.py +78 -3
  47. claude_mpm/cli/interactive/agent_wizard.py +955 -45
  48. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  49. claude_mpm/cli/parsers/agents_parser.py +256 -4
  50. claude_mpm/cli/parsers/base_parser.py +53 -0
  51. claude_mpm/cli/parsers/config_parser.py +96 -43
  52. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  53. claude_mpm/cli/parsers/skills_parser.py +145 -0
  54. claude_mpm/cli/parsers/source_parser.py +138 -0
  55. claude_mpm/cli/startup.py +538 -106
  56. claude_mpm/cli/startup_display.py +480 -0
  57. claude_mpm/cli/utils.py +1 -1
  58. claude_mpm/cli_module/commands.py +1 -1
  59. claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
  60. claude_mpm/commands/mpm-agents-detect.md +9 -0
  61. claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
  62. claude_mpm/commands/mpm-agents-recommend.md +9 -0
  63. claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
  64. claude_mpm/commands/mpm-doctor.md +9 -0
  65. claude_mpm/commands/mpm-help.md +14 -2
  66. claude_mpm/commands/mpm-init.md +27 -2
  67. claude_mpm/commands/mpm-monitor.md +9 -0
  68. claude_mpm/commands/mpm-postmortem.md +123 -0
  69. claude_mpm/commands/{mpm-resume.md → mpm-session-resume.md} +9 -0
  70. claude_mpm/commands/mpm-status.md +9 -0
  71. claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
  72. claude_mpm/commands/mpm-ticket-view.md +552 -0
  73. claude_mpm/commands/mpm-version.md +9 -0
  74. claude_mpm/commands/mpm.md +10 -0
  75. claude_mpm/config/agent_presets.py +488 -0
  76. claude_mpm/config/agent_sources.py +325 -0
  77. claude_mpm/config/skill_presets.py +392 -0
  78. claude_mpm/config/skill_sources.py +590 -0
  79. claude_mpm/constants.py +13 -0
  80. claude_mpm/core/claude_runner.py +5 -34
  81. claude_mpm/core/config.py +16 -0
  82. claude_mpm/core/constants.py +1 -1
  83. claude_mpm/core/framework/__init__.py +3 -16
  84. claude_mpm/core/framework/loaders/file_loader.py +54 -101
  85. claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
  86. claude_mpm/core/hook_error_memory.py +381 -0
  87. claude_mpm/core/hook_manager.py +41 -2
  88. claude_mpm/core/interactive_session.py +91 -10
  89. claude_mpm/core/logger.py +3 -1
  90. claude_mpm/core/oneshot_session.py +71 -8
  91. claude_mpm/core/protocols/__init__.py +23 -0
  92. claude_mpm/core/protocols/runner_protocol.py +103 -0
  93. claude_mpm/core/protocols/session_protocol.py +131 -0
  94. claude_mpm/core/shared/singleton_manager.py +11 -4
  95. claude_mpm/core/system_context.py +38 -0
  96. claude_mpm/dashboard/static/css/activity.css +69 -69
  97. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  98. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  99. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  100. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  101. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  102. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  103. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  104. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  105. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  106. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  107. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  108. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  109. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  110. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  111. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  112. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  113. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  114. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  115. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  116. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  117. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  118. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  119. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  120. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  121. claude_mpm/dashboard/templates/code_simple.html +23 -23
  122. claude_mpm/dashboard/templates/index.html +18 -18
  123. claude_mpm/experimental/cli_enhancements.py +1 -5
  124. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
  125. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
  126. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
  127. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
  128. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
  129. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
  130. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  131. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
  132. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
  133. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
  134. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
  135. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
  136. claude_mpm/hooks/failure_learning/__init__.py +2 -8
  137. claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
  138. claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
  139. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
  140. claude_mpm/hooks/kuzu_response_hook.py +1 -5
  141. claude_mpm/models/git_repository.py +198 -0
  142. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  143. claude_mpm/scripts/start_activity_logging.py +3 -1
  144. claude_mpm/services/agents/agent_builder.py +45 -9
  145. claude_mpm/services/agents/agent_preset_service.py +238 -0
  146. claude_mpm/services/agents/agent_selection_service.py +484 -0
  147. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  148. claude_mpm/services/agents/cache_git_manager.py +621 -0
  149. claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
  150. claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
  151. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  152. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
  153. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  154. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  155. claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
  156. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  157. claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
  158. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  159. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
  160. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  161. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
  162. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
  163. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  164. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
  165. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  166. claude_mpm/services/agents/git_source_manager.py +629 -0
  167. claude_mpm/services/agents/loading/framework_agent_loader.py +9 -12
  168. claude_mpm/services/agents/local_template_manager.py +50 -10
  169. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  170. claude_mpm/services/agents/sources/__init__.py +13 -0
  171. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  172. claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
  173. claude_mpm/services/agents/startup_sync.py +239 -0
  174. claude_mpm/services/agents/toolchain_detector.py +474 -0
  175. claude_mpm/services/analysis/__init__.py +25 -0
  176. claude_mpm/services/analysis/postmortem_reporter.py +474 -0
  177. claude_mpm/services/analysis/postmortem_service.py +765 -0
  178. claude_mpm/services/cli/session_pause_manager.py +1 -1
  179. claude_mpm/services/command_deployment_service.py +200 -6
  180. claude_mpm/services/core/base.py +7 -2
  181. claude_mpm/services/core/interfaces/__init__.py +1 -3
  182. claude_mpm/services/core/interfaces/health.py +1 -4
  183. claude_mpm/services/core/models/__init__.py +2 -11
  184. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  185. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  186. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  187. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  188. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  189. claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
  190. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  191. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  192. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  193. claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
  194. claude_mpm/services/event_bus/direct_relay.py +3 -3
  195. claude_mpm/services/events/consumers/logging.py +1 -2
  196. claude_mpm/services/git/__init__.py +21 -0
  197. claude_mpm/services/git/git_operations_service.py +494 -0
  198. claude_mpm/services/github/__init__.py +21 -0
  199. claude_mpm/services/github/github_cli_service.py +397 -0
  200. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  201. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  202. claude_mpm/services/instructions/__init__.py +9 -0
  203. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  204. claude_mpm/services/local_ops/__init__.py +3 -13
  205. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  206. claude_mpm/services/local_ops/health_manager.py +1 -4
  207. claude_mpm/services/local_ops/resource_monitor.py +1 -1
  208. claude_mpm/services/mcp_config_manager.py +75 -145
  209. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  210. claude_mpm/services/mcp_gateway/core/process_pool.py +22 -16
  211. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
  212. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  213. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  214. claude_mpm/services/mcp_service_verifier.py +6 -3
  215. claude_mpm/services/model/model_router.py +1 -2
  216. claude_mpm/services/monitor/daemon.py +29 -9
  217. claude_mpm/services/monitor/daemon_manager.py +96 -19
  218. claude_mpm/services/monitor/server.py +2 -2
  219. claude_mpm/services/port_manager.py +1 -1
  220. claude_mpm/services/pr/__init__.py +14 -0
  221. claude_mpm/services/pr/pr_template_service.py +329 -0
  222. claude_mpm/services/project/documentation_manager.py +2 -1
  223. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  224. claude_mpm/services/runner_configuration_service.py +16 -3
  225. claude_mpm/services/session_management_service.py +16 -4
  226. claude_mpm/services/skills/__init__.py +18 -0
  227. claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
  228. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  229. claude_mpm/services/skills_config.py +547 -0
  230. claude_mpm/services/skills_deployer.py +955 -0
  231. claude_mpm/services/socketio/handlers/connection.py +1 -1
  232. claude_mpm/services/socketio/handlers/git.py +1 -1
  233. claude_mpm/services/socketio/server/core.py +1 -4
  234. claude_mpm/services/socketio/server/main.py +1 -3
  235. claude_mpm/services/system_instructions_service.py +1 -3
  236. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  237. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  238. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  239. claude_mpm/services/unified/unified_deployment.py +1 -5
  240. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  241. claude_mpm/services/visualization/__init__.py +1 -5
  242. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  243. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +2 -2
  244. claude_mpm/skills/skills_registry.py +0 -1
  245. claude_mpm/templates/questions/__init__.py +38 -0
  246. claude_mpm/templates/questions/base.py +193 -0
  247. claude_mpm/templates/questions/pr_strategy.py +311 -0
  248. claude_mpm/templates/questions/project_init.py +385 -0
  249. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  250. claude_mpm/tools/__main__.py +8 -8
  251. claude_mpm/utils/agent_dependency_loader.py +77 -10
  252. claude_mpm/utils/agent_filters.py +288 -0
  253. claude_mpm/utils/dependency_cache.py +3 -1
  254. claude_mpm/utils/gitignore.py +241 -0
  255. claude_mpm/utils/migration.py +372 -0
  256. claude_mpm/utils/progress.py +387 -0
  257. claude_mpm/utils/robust_installer.py +2 -4
  258. claude_mpm/utils/structured_questions.py +619 -0
  259. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/METADATA +396 -43
  260. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/RECORD +268 -422
  261. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  262. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  263. claude_mpm/agents/templates/agent-manager.json +0 -273
  264. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  265. claude_mpm/agents/templates/api_qa.json +0 -183
  266. claude_mpm/agents/templates/clerk-ops.json +0 -235
  267. claude_mpm/agents/templates/code_analyzer.json +0 -101
  268. claude_mpm/agents/templates/content-agent.json +0 -358
  269. claude_mpm/agents/templates/dart_engineer.json +0 -307
  270. claude_mpm/agents/templates/data_engineer.json +0 -225
  271. claude_mpm/agents/templates/documentation.json +0 -238
  272. claude_mpm/agents/templates/engineer.json +0 -210
  273. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  274. claude_mpm/agents/templates/golang_engineer.json +0 -270
  275. claude_mpm/agents/templates/imagemagick.json +0 -264
  276. claude_mpm/agents/templates/java_engineer.json +0 -346
  277. claude_mpm/agents/templates/javascript_engineer_agent.json +0 -380
  278. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  279. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  280. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  281. claude_mpm/agents/templates/memory_manager.json +0 -158
  282. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  283. claude_mpm/agents/templates/ops.json +0 -185
  284. claude_mpm/agents/templates/php-engineer.json +0 -287
  285. claude_mpm/agents/templates/product_owner.json +0 -338
  286. claude_mpm/agents/templates/project_organizer.json +0 -144
  287. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  288. claude_mpm/agents/templates/python_engineer.json +0 -387
  289. claude_mpm/agents/templates/qa.json +0 -243
  290. claude_mpm/agents/templates/react_engineer.json +0 -239
  291. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  292. claude_mpm/agents/templates/research.json +0 -188
  293. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  294. claude_mpm/agents/templates/rust_engineer.json +0 -275
  295. claude_mpm/agents/templates/security.json +0 -202
  296. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  297. claude_mpm/agents/templates/tauri_engineer.json +0 -274
  298. claude_mpm/agents/templates/ticketing.json +0 -178
  299. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  300. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  301. claude_mpm/agents/templates/version_control.json +0 -159
  302. claude_mpm/agents/templates/web_qa.json +0 -400
  303. claude_mpm/agents/templates/web_ui.json +0 -189
  304. claude_mpm/commands/mpm-tickets.md +0 -151
  305. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  306. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  307. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  308. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  309. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  310. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  311. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  312. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  313. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  314. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  315. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  316. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  317. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  318. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  319. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  320. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  321. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  322. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  323. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  324. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  325. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  326. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  327. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  328. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  329. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  330. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  331. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  332. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  333. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  334. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  335. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  336. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  337. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  338. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  339. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  340. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  341. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  342. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  343. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  344. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  345. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  346. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  347. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  348. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  349. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  350. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  351. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  352. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  353. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  354. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  355. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  356. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  357. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  358. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  359. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  360. claude_mpm/dashboard/static/built/react/events.js +0 -30
  361. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  362. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  363. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  364. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  365. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  366. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  367. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  368. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  369. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  370. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  371. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  372. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  373. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  374. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  375. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  376. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  377. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  378. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  379. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  380. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  381. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  382. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  383. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  384. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  385. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  386. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  387. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  388. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  389. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  390. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  391. claude_mpm/dashboard/static/events.html +0 -607
  392. claude_mpm/dashboard/static/index.html +0 -635
  393. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  394. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  395. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  396. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  397. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  398. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  399. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  400. claude_mpm/dashboard/static/legacy/files.html +0 -747
  401. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  402. claude_mpm/dashboard/static/monitors.html +0 -431
  403. claude_mpm/dashboard/static/production/events.html +0 -659
  404. claude_mpm/dashboard/static/production/main.html +0 -698
  405. claude_mpm/dashboard/static/production/monitors.html +0 -483
  406. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  407. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  408. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  409. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  410. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  411. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
  412. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
  413. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
  414. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
  415. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
  416. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
  417. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
  418. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
  419. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
  420. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
  421. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
  422. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
  423. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
  424. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
  425. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
  426. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
  427. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
  428. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  429. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  430. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  431. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  432. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  433. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  434. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  435. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  436. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  437. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  438. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
  439. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
  440. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
  441. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
  442. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
  443. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
  444. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
  445. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  446. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  447. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  448. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  449. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
  450. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
  451. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  452. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  453. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  454. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  455. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
  456. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
  457. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
  458. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
  459. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
  460. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
  461. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
  462. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
  463. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
  464. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
  465. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
  466. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
  467. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
  468. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
  469. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
  470. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
  471. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
  472. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
  473. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
  474. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
  475. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
  476. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
  477. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
  478. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  479. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  480. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  481. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  482. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  483. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  484. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
  485. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
  486. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
  487. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
  488. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
  489. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
  490. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
  491. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
  492. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
  493. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
  494. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
  495. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  496. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  497. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  498. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  499. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/WHEEL +0 -0
  500. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/entry_points.txt +0 -0
  501. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/licenses/LICENSE +0 -0
  502. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/top_level.txt +0 -0
@@ -1,10 +1,10 @@
1
1
  /**
2
2
  * Diff Viewer Component
3
- *
3
+ *
4
4
  * Shows side-by-side or unified diffs for file changes.
5
5
  * Supports syntax highlighting, navigation between changes,
6
6
  * and displays timestamps and operation types.
7
- *
7
+ *
8
8
  * Features:
9
9
  * - Side-by-side and unified diff views
10
10
  * - Syntax highlighting for code
@@ -17,23 +17,23 @@ class DiffViewer {
17
17
  this.currentFile = null;
18
18
  this.currentMode = 'side-by-side'; // 'side-by-side' or 'unified'
19
19
  this.initialized = false;
20
-
20
+
21
21
  // Diff computation cache
22
22
  this.diffCache = new Map();
23
23
  }
24
-
24
+
25
25
  /**
26
26
  * Initialize the diff viewer
27
27
  */
28
28
  initialize() {
29
29
  if (this.initialized) return;
30
-
30
+
31
31
  this.createModal();
32
32
  this.setupEventHandlers();
33
33
  this.initialized = true;
34
34
  console.log('DiffViewer initialized');
35
35
  }
36
-
36
+
37
37
  /**
38
38
  * Create the modal HTML structure
39
39
  */
@@ -62,7 +62,7 @@ class DiffViewer {
62
62
  <button class="diff-viewer-close" id="diff-viewer-close">×</button>
63
63
  </div>
64
64
  </div>
65
-
65
+
66
66
  <div class="diff-viewer-subheader">
67
67
  <div class="diff-operations-summary" id="diff-operations-summary">
68
68
  <span class="op-count">0 operations</span>
@@ -78,11 +78,11 @@ class DiffViewer {
78
78
  </button>
79
79
  </div>
80
80
  </div>
81
-
81
+
82
82
  <div class="diff-viewer-body" id="diff-viewer-body">
83
83
  <!-- Diff content will be inserted here -->
84
84
  </div>
85
-
85
+
86
86
  <div class="diff-viewer-footer">
87
87
  <div class="diff-timeline" id="diff-timeline">
88
88
  <!-- Operation timeline will be inserted here -->
@@ -91,21 +91,21 @@ class DiffViewer {
91
91
  </div>
92
92
  </div>
93
93
  `;
94
-
94
+
95
95
  document.body.insertAdjacentHTML('beforeend', modalHTML);
96
96
  this.modal = document.getElementById('diff-viewer-modal');
97
-
97
+
98
98
  // Add CSS for the diff viewer
99
99
  this.injectStyles();
100
100
  }
101
-
101
+
102
102
  /**
103
103
  * Inject CSS styles for the diff viewer
104
104
  */
105
105
  injectStyles() {
106
106
  const styleId = 'diff-viewer-styles';
107
107
  if (document.getElementById(styleId)) return;
108
-
108
+
109
109
  const styles = `
110
110
  <style id="${styleId}">
111
111
  .diff-viewer-modal {
@@ -120,13 +120,13 @@ class DiffViewer {
120
120
  padding: 20px;
121
121
  overflow: auto;
122
122
  }
123
-
123
+
124
124
  .diff-viewer-modal.show {
125
125
  display: flex;
126
126
  align-items: center;
127
127
  justify-content: center;
128
128
  }
129
-
129
+
130
130
  .diff-viewer-content {
131
131
  background: white;
132
132
  border-radius: 8px;
@@ -137,7 +137,7 @@ class DiffViewer {
137
137
  flex-direction: column;
138
138
  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
139
139
  }
140
-
140
+
141
141
  .diff-viewer-header {
142
142
  display: flex;
143
143
  justify-content: space-between;
@@ -147,7 +147,7 @@ class DiffViewer {
147
147
  background: #f8fafc;
148
148
  border-radius: 8px 8px 0 0;
149
149
  }
150
-
150
+
151
151
  .diff-viewer-title {
152
152
  display: flex;
153
153
  align-items: center;
@@ -156,22 +156,22 @@ class DiffViewer {
156
156
  font-weight: 600;
157
157
  color: #2d3748;
158
158
  }
159
-
159
+
160
160
  .diff-file-icon {
161
161
  font-size: 18px;
162
162
  }
163
-
163
+
164
164
  .diff-file-path {
165
165
  font-family: 'SF Mono', Monaco, monospace;
166
166
  font-size: 13px;
167
167
  }
168
-
168
+
169
169
  .diff-viewer-controls {
170
170
  display: flex;
171
171
  align-items: center;
172
172
  gap: 16px;
173
173
  }
174
-
174
+
175
175
  .diff-mode-toggle {
176
176
  display: flex;
177
177
  gap: 4px;
@@ -179,7 +179,7 @@ class DiffViewer {
179
179
  padding: 2px;
180
180
  border-radius: 4px;
181
181
  }
182
-
182
+
183
183
  .diff-mode-btn {
184
184
  padding: 4px 12px;
185
185
  border: none;
@@ -189,27 +189,27 @@ class DiffViewer {
189
189
  border-radius: 3px;
190
190
  transition: all 0.2s;
191
191
  }
192
-
192
+
193
193
  .diff-mode-btn.active {
194
194
  background: white;
195
195
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
196
196
  }
197
-
197
+
198
198
  .diff-stats {
199
199
  display: flex;
200
200
  gap: 8px;
201
201
  font-size: 12px;
202
202
  font-family: monospace;
203
203
  }
204
-
204
+
205
205
  .diff-stats .additions {
206
206
  color: #22c55e;
207
207
  }
208
-
208
+
209
209
  .diff-stats .deletions {
210
210
  color: #ef4444;
211
211
  }
212
-
212
+
213
213
  .diff-viewer-close {
214
214
  width: 32px;
215
215
  height: 32px;
@@ -224,12 +224,12 @@ class DiffViewer {
224
224
  border-radius: 4px;
225
225
  transition: all 0.2s;
226
226
  }
227
-
227
+
228
228
  .diff-viewer-close:hover {
229
229
  background: #e2e8f0;
230
230
  color: #2d3748;
231
231
  }
232
-
232
+
233
233
  .diff-viewer-subheader {
234
234
  display: flex;
235
235
  justify-content: space-between;
@@ -238,20 +238,20 @@ class DiffViewer {
238
238
  border-bottom: 1px solid #e2e8f0;
239
239
  background: #fafbfc;
240
240
  }
241
-
241
+
242
242
  .diff-operations-summary {
243
243
  display: flex;
244
244
  gap: 16px;
245
245
  font-size: 13px;
246
246
  color: #4a5568;
247
247
  }
248
-
248
+
249
249
  .diff-navigation {
250
250
  display: flex;
251
251
  align-items: center;
252
252
  gap: 8px;
253
253
  }
254
-
254
+
255
255
  .diff-nav-btn {
256
256
  padding: 4px 12px;
257
257
  border: 1px solid #cbd5e0;
@@ -261,37 +261,37 @@ class DiffViewer {
261
261
  border-radius: 4px;
262
262
  transition: all 0.2s;
263
263
  }
264
-
264
+
265
265
  .diff-nav-btn:hover:not(:disabled) {
266
266
  background: #f8fafc;
267
267
  border-color: #4299e1;
268
268
  }
269
-
269
+
270
270
  .diff-nav-btn:disabled {
271
271
  opacity: 0.5;
272
272
  cursor: not-allowed;
273
273
  }
274
-
274
+
275
275
  .diff-nav-info {
276
276
  font-size: 12px;
277
277
  color: #718096;
278
278
  padding: 0 8px;
279
279
  }
280
-
280
+
281
281
  .diff-viewer-body {
282
282
  flex: 1;
283
283
  overflow: auto;
284
284
  padding: 20px;
285
285
  background: #fafbfc;
286
286
  }
287
-
287
+
288
288
  /* Side-by-side diff styles */
289
289
  .diff-side-by-side {
290
290
  display: flex;
291
291
  gap: 16px;
292
292
  height: 100%;
293
293
  }
294
-
294
+
295
295
  .diff-panel {
296
296
  flex: 1;
297
297
  background: white;
@@ -299,7 +299,7 @@ class DiffViewer {
299
299
  border-radius: 4px;
300
300
  overflow: hidden;
301
301
  }
302
-
302
+
303
303
  .diff-panel-header {
304
304
  padding: 8px 12px;
305
305
  background: #f8fafc;
@@ -308,12 +308,12 @@ class DiffViewer {
308
308
  font-weight: 600;
309
309
  color: #4a5568;
310
310
  }
311
-
311
+
312
312
  .diff-panel-content {
313
313
  overflow: auto;
314
314
  height: calc(100% - 36px);
315
315
  }
316
-
316
+
317
317
  .diff-line {
318
318
  display: flex;
319
319
  font-family: 'SF Mono', Monaco, monospace;
@@ -321,7 +321,7 @@ class DiffViewer {
321
321
  line-height: 1.5;
322
322
  white-space: pre;
323
323
  }
324
-
324
+
325
325
  .diff-line-number {
326
326
  width: 50px;
327
327
  padding: 0 8px;
@@ -331,33 +331,33 @@ class DiffViewer {
331
331
  border-right: 1px solid #e2e8f0;
332
332
  user-select: none;
333
333
  }
334
-
334
+
335
335
  .diff-line-content {
336
336
  flex: 1;
337
337
  padding: 0 12px;
338
338
  overflow-x: auto;
339
339
  }
340
-
340
+
341
341
  .diff-line-added {
342
342
  background: #d4f4dd;
343
343
  }
344
-
344
+
345
345
  .diff-line-added .diff-line-content {
346
346
  background: #e7fced;
347
347
  }
348
-
348
+
349
349
  .diff-line-removed {
350
350
  background: #ffd4d4;
351
351
  }
352
-
352
+
353
353
  .diff-line-removed .diff-line-content {
354
354
  background: #ffeaea;
355
355
  }
356
-
356
+
357
357
  .diff-line-context {
358
358
  color: #4a5568;
359
359
  }
360
-
360
+
361
361
  /* Unified diff styles */
362
362
  .diff-unified {
363
363
  background: white;
@@ -365,7 +365,7 @@ class DiffViewer {
365
365
  border-radius: 4px;
366
366
  overflow: auto;
367
367
  }
368
-
368
+
369
369
  .diff-hunk-header {
370
370
  padding: 8px 12px;
371
371
  background: #f1f5f9;
@@ -374,7 +374,7 @@ class DiffViewer {
374
374
  font-size: 12px;
375
375
  border-bottom: 1px solid #e2e8f0;
376
376
  }
377
-
377
+
378
378
  /* Timeline styles */
379
379
  .diff-viewer-footer {
380
380
  padding: 12px 20px;
@@ -382,14 +382,14 @@ class DiffViewer {
382
382
  background: #f8fafc;
383
383
  border-radius: 0 0 8px 8px;
384
384
  }
385
-
385
+
386
386
  .diff-timeline {
387
387
  display: flex;
388
388
  gap: 8px;
389
389
  overflow-x: auto;
390
390
  padding: 8px 0;
391
391
  }
392
-
392
+
393
393
  .timeline-item {
394
394
  display: flex;
395
395
  flex-direction: column;
@@ -404,36 +404,36 @@ class DiffViewer {
404
404
  min-width: 80px;
405
405
  font-size: 11px;
406
406
  }
407
-
407
+
408
408
  .timeline-item:hover {
409
409
  background: #edf2f7;
410
410
  border-color: #4299e1;
411
411
  }
412
-
412
+
413
413
  .timeline-item.active {
414
414
  background: #4299e1;
415
415
  color: white;
416
416
  border-color: #3182ce;
417
417
  }
418
-
418
+
419
419
  .timeline-operation {
420
420
  font-weight: 600;
421
421
  }
422
-
422
+
423
423
  .timeline-time {
424
424
  color: #718096;
425
425
  font-size: 10px;
426
426
  }
427
-
427
+
428
428
  .timeline-item.active .timeline-time {
429
429
  color: rgba(255, 255, 255, 0.9);
430
430
  }
431
431
  </style>
432
432
  `;
433
-
433
+
434
434
  document.head.insertAdjacentHTML('beforeend', styles);
435
435
  }
436
-
436
+
437
437
  /**
438
438
  * Setup event handlers
439
439
  */
@@ -442,38 +442,38 @@ class DiffViewer {
442
442
  document.getElementById('diff-viewer-close').addEventListener('click', () => {
443
443
  this.hide();
444
444
  });
445
-
445
+
446
446
  // Modal background click
447
447
  this.modal.addEventListener('click', (e) => {
448
448
  if (e.target === this.modal) {
449
449
  this.hide();
450
450
  }
451
451
  });
452
-
452
+
453
453
  // Escape key
454
454
  document.addEventListener('keydown', (e) => {
455
455
  if (e.key === 'Escape' && this.modal.classList.contains('show')) {
456
456
  this.hide();
457
457
  }
458
458
  });
459
-
459
+
460
460
  // Mode toggle
461
461
  document.querySelectorAll('.diff-mode-btn').forEach(btn => {
462
462
  btn.addEventListener('click', (e) => {
463
463
  this.setMode(e.target.dataset.mode);
464
464
  });
465
465
  });
466
-
466
+
467
467
  // Navigation
468
468
  document.getElementById('diff-prev-change').addEventListener('click', () => {
469
469
  this.navigateToPreviousChange();
470
470
  });
471
-
471
+
472
472
  document.getElementById('diff-next-change').addEventListener('click', () => {
473
473
  this.navigateToNextChange();
474
474
  });
475
475
  }
476
-
476
+
477
477
  /**
478
478
  * Show the diff viewer for a file
479
479
  * @param {Object} diffData - Diff data from FileChangeTracker
@@ -482,23 +482,23 @@ class DiffViewer {
482
482
  if (!this.initialized) {
483
483
  this.initialize();
484
484
  }
485
-
485
+
486
486
  this.currentFile = diffData;
487
487
  this.modal.classList.add('show');
488
-
488
+
489
489
  // Update header
490
490
  document.getElementById('diff-file-path').textContent = diffData.filePath;
491
-
491
+
492
492
  // Generate and display diff
493
493
  this.generateDiff(diffData);
494
-
494
+
495
495
  // Update operations timeline
496
496
  this.updateTimeline(diffData.operations);
497
-
497
+
498
498
  // Update statistics
499
499
  this.updateStatistics(diffData);
500
500
  }
501
-
501
+
502
502
  /**
503
503
  * Hide the diff viewer
504
504
  */
@@ -506,35 +506,35 @@ class DiffViewer {
506
506
  this.modal.classList.remove('show');
507
507
  this.currentFile = null;
508
508
  }
509
-
509
+
510
510
  /**
511
511
  * Set diff display mode
512
512
  * @param {string} mode - 'side-by-side' or 'unified'
513
513
  */
514
514
  setMode(mode) {
515
515
  this.currentMode = mode;
516
-
516
+
517
517
  // Update button states
518
518
  document.querySelectorAll('.diff-mode-btn').forEach(btn => {
519
519
  btn.classList.toggle('active', btn.dataset.mode === mode);
520
520
  });
521
-
521
+
522
522
  // Regenerate diff display
523
523
  if (this.currentFile) {
524
524
  this.generateDiff(this.currentFile);
525
525
  }
526
526
  }
527
-
527
+
528
528
  /**
529
529
  * Generate diff display
530
530
  * @param {Object} diffData - Diff data
531
531
  */
532
532
  generateDiff(diffData) {
533
533
  const { initialContent, currentContent } = diffData;
534
-
534
+
535
535
  // Compute diff
536
536
  const diff = this.computeDiff(initialContent || '', currentContent || '');
537
-
537
+
538
538
  // Display based on mode
539
539
  const body = document.getElementById('diff-viewer-body');
540
540
  if (this.currentMode === 'side-by-side') {
@@ -543,7 +543,7 @@ class DiffViewer {
543
543
  body.innerHTML = this.renderUnifiedDiff(diff);
544
544
  }
545
545
  }
546
-
546
+
547
547
  /**
548
548
  * Compute diff between two strings
549
549
  * @param {string} oldText - Original text
@@ -553,18 +553,18 @@ class DiffViewer {
553
553
  computeDiff(oldText, newText) {
554
554
  const oldLines = oldText.split('\n');
555
555
  const newLines = newText.split('\n');
556
-
556
+
557
557
  // Simple line-by-line diff algorithm
558
558
  const diff = [];
559
559
  const maxLines = Math.max(oldLines.length, newLines.length);
560
-
560
+
561
561
  let oldIndex = 0;
562
562
  let newIndex = 0;
563
-
563
+
564
564
  while (oldIndex < oldLines.length || newIndex < newLines.length) {
565
565
  const oldLine = oldIndex < oldLines.length ? oldLines[oldIndex] : null;
566
566
  const newLine = newIndex < newLines.length ? newLines[newIndex] : null;
567
-
567
+
568
568
  if (oldLine === newLine) {
569
569
  // Unchanged line
570
570
  diff.push({
@@ -595,7 +595,7 @@ class DiffViewer {
595
595
  } else {
596
596
  // Changed line - try to find matching lines ahead
597
597
  let found = false;
598
-
598
+
599
599
  // Look ahead in new lines for old line
600
600
  for (let i = newIndex + 1; i < Math.min(newIndex + 5, newLines.length); i++) {
601
601
  if (newLines[i] === oldLine) {
@@ -612,7 +612,7 @@ class DiffViewer {
612
612
  break;
613
613
  }
614
614
  }
615
-
615
+
616
616
  if (!found) {
617
617
  // Look ahead in old lines for new line
618
618
  for (let i = oldIndex + 1; i < Math.min(oldIndex + 5, oldLines.length); i++) {
@@ -631,7 +631,7 @@ class DiffViewer {
631
631
  }
632
632
  }
633
633
  }
634
-
634
+
635
635
  if (!found) {
636
636
  // True change - show as remove + add
637
637
  diff.push({
@@ -649,10 +649,10 @@ class DiffViewer {
649
649
  }
650
650
  }
651
651
  }
652
-
652
+
653
653
  return diff;
654
654
  }
655
-
655
+
656
656
  /**
657
657
  * Render side-by-side diff
658
658
  * @param {Array} diff - Diff chunks
@@ -663,7 +663,7 @@ class DiffViewer {
663
663
  renderSideBySideDiff(diff, oldContent, newContent) {
664
664
  const oldLines = [];
665
665
  const newLines = [];
666
-
666
+
667
667
  for (const chunk of diff) {
668
668
  if (chunk.type === 'unchanged') {
669
669
  oldLines.push({
@@ -700,7 +700,7 @@ class DiffViewer {
700
700
  });
701
701
  }
702
702
  }
703
-
703
+
704
704
  return `
705
705
  <div class="diff-side-by-side">
706
706
  <div class="diff-panel">
@@ -718,7 +718,7 @@ class DiffViewer {
718
718
  </div>
719
719
  `;
720
720
  }
721
-
721
+
722
722
  /**
723
723
  * Render diff lines
724
724
  * @param {Array} lines - Lines to render
@@ -730,7 +730,7 @@ class DiffViewer {
730
730
  line.type === 'added' ? 'diff-line-added' :
731
731
  line.type === 'empty' ? 'diff-line-empty' :
732
732
  'diff-line-context';
733
-
733
+
734
734
  return `
735
735
  <div class="diff-line ${lineClass}">
736
736
  <span class="diff-line-number">${line.number}</span>
@@ -739,7 +739,7 @@ class DiffViewer {
739
739
  `;
740
740
  }).join('');
741
741
  }
742
-
742
+
743
743
  /**
744
744
  * Render unified diff
745
745
  * @param {Array} diff - Diff chunks
@@ -747,7 +747,7 @@ class DiffViewer {
747
747
  */
748
748
  renderUnifiedDiff(diff) {
749
749
  const lines = [];
750
-
750
+
751
751
  for (const chunk of diff) {
752
752
  if (chunk.type === 'unchanged') {
753
753
  lines.push(`
@@ -775,44 +775,44 @@ class DiffViewer {
775
775
  `);
776
776
  }
777
777
  }
778
-
778
+
779
779
  return `
780
780
  <div class="diff-unified">
781
781
  ${lines.join('')}
782
782
  </div>
783
783
  `;
784
784
  }
785
-
785
+
786
786
  /**
787
787
  * Update operations timeline
788
788
  * @param {Array} operations - File operations
789
789
  */
790
790
  updateTimeline(operations) {
791
791
  const timeline = document.getElementById('diff-timeline');
792
-
792
+
793
793
  if (!operations || operations.length === 0) {
794
794
  timeline.innerHTML = '<div class="timeline-empty">No operations recorded</div>';
795
795
  return;
796
796
  }
797
-
797
+
798
798
  // Sort operations by timestamp
799
- const sortedOps = [...operations].sort((a, b) =>
799
+ const sortedOps = [...operations].sort((a, b) =>
800
800
  new Date(a.timestamp) - new Date(b.timestamp)
801
801
  );
802
-
802
+
803
803
  timeline.innerHTML = sortedOps.map((op, index) => {
804
804
  const time = new Date(op.timestamp);
805
805
  const timeStr = time.toLocaleTimeString();
806
-
806
+
807
807
  return `
808
- <div class="timeline-item ${index === 0 ? 'active' : ''}"
808
+ <div class="timeline-item ${index === 0 ? 'active' : ''}"
809
809
  data-index="${index}">
810
810
  <div class="timeline-operation">${op.operation}</div>
811
811
  <div class="timeline-time">${timeStr}</div>
812
812
  </div>
813
813
  `;
814
814
  }).join('');
815
-
815
+
816
816
  // Add click handlers
817
817
  timeline.querySelectorAll('.timeline-item').forEach(item => {
818
818
  item.addEventListener('click', (e) => {
@@ -821,7 +821,7 @@ class DiffViewer {
821
821
  });
822
822
  });
823
823
  }
824
-
824
+
825
825
  /**
826
826
  * Select an operation in the timeline
827
827
  * @param {number} index - Operation index
@@ -831,11 +831,11 @@ class DiffViewer {
831
831
  document.querySelectorAll('.timeline-item').forEach((item, i) => {
832
832
  item.classList.toggle('active', i === index);
833
833
  });
834
-
834
+
835
835
  // Could implement showing diff up to this operation
836
836
  console.log('Selected operation:', index);
837
837
  }
838
-
838
+
839
839
  /**
840
840
  * Update statistics
841
841
  * @param {Object} diffData - Diff data
@@ -845,18 +845,18 @@ class DiffViewer {
845
845
  diffData.initialContent || '',
846
846
  diffData.currentContent || ''
847
847
  );
848
-
848
+
849
849
  const additions = diff.filter(d => d.type === 'added').length;
850
850
  const deletions = diff.filter(d => d.type === 'removed').length;
851
-
851
+
852
852
  document.querySelector('.diff-stats .additions').textContent = `+${additions}`;
853
853
  document.querySelector('.diff-stats .deletions').textContent = `-${deletions}`;
854
-
854
+
855
855
  const opCount = diffData.operations ? diffData.operations.length : 0;
856
- document.querySelector('.op-count').textContent =
856
+ document.querySelector('.op-count').textContent =
857
857
  `${opCount} operation${opCount !== 1 ? 's' : ''}`;
858
858
  }
859
-
859
+
860
860
  /**
861
861
  * Navigate to previous change
862
862
  */
@@ -864,7 +864,7 @@ class DiffViewer {
864
864
  console.log('Navigate to previous change');
865
865
  // Implementation would scroll to previous diff chunk
866
866
  }
867
-
867
+
868
868
  /**
869
869
  * Navigate to next change
870
870
  */
@@ -872,7 +872,7 @@ class DiffViewer {
872
872
  console.log('Navigate to next change');
873
873
  // Implementation would scroll to next diff chunk
874
874
  }
875
-
875
+
876
876
  /**
877
877
  * Escape HTML for safe display
878
878
  * @param {string} text - Text to escape