claude-mpm 4.21.3__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 (484) 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 +11 -2
  63. claude_mpm/commands/mpm-init.md +27 -2
  64. claude_mpm/commands/mpm-monitor.md +9 -0
  65. claude_mpm/commands/{mpm-resume.md → mpm-session-resume.md} +9 -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 +10 -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/interfaces/__init__.py +1 -3
  162. claude_mpm/services/core/interfaces/health.py +1 -4
  163. claude_mpm/services/core/models/__init__.py +2 -11
  164. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  165. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  166. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  167. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  168. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  169. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  170. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  171. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  172. claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
  173. claude_mpm/services/event_bus/direct_relay.py +3 -3
  174. claude_mpm/services/event_bus/event_bus.py +36 -3
  175. claude_mpm/services/events/consumers/logging.py +1 -2
  176. claude_mpm/services/git/__init__.py +21 -0
  177. claude_mpm/services/git/git_operations_service.py +494 -0
  178. claude_mpm/services/github/__init__.py +21 -0
  179. claude_mpm/services/github/github_cli_service.py +397 -0
  180. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  181. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  182. claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
  183. claude_mpm/services/instructions/__init__.py +9 -0
  184. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  185. claude_mpm/services/local_ops/__init__.py +3 -13
  186. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  187. claude_mpm/services/local_ops/health_manager.py +1 -4
  188. claude_mpm/services/local_ops/process_manager.py +1 -1
  189. claude_mpm/services/local_ops/resource_monitor.py +2 -2
  190. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  191. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
  192. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  193. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
  194. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  195. claude_mpm/services/memory/optimizer.py +1 -1
  196. claude_mpm/services/model/model_router.py +8 -9
  197. claude_mpm/services/monitor/daemon.py +1 -1
  198. claude_mpm/services/monitor/server.py +2 -2
  199. claude_mpm/services/native_agent_converter.py +356 -0
  200. claude_mpm/services/port_manager.py +1 -1
  201. claude_mpm/services/pr/__init__.py +14 -0
  202. claude_mpm/services/pr/pr_template_service.py +329 -0
  203. claude_mpm/services/project/documentation_manager.py +2 -1
  204. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  205. claude_mpm/services/runner_configuration_service.py +1 -0
  206. claude_mpm/services/self_upgrade_service.py +165 -7
  207. claude_mpm/services/skills/__init__.py +18 -0
  208. claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
  209. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  210. claude_mpm/services/skills_config.py +547 -0
  211. claude_mpm/services/skills_deployer.py +955 -0
  212. claude_mpm/services/socketio/handlers/connection.py +1 -1
  213. claude_mpm/services/socketio/handlers/git.py +2 -2
  214. claude_mpm/services/socketio/server/core.py +1 -4
  215. claude_mpm/services/socketio/server/main.py +1 -3
  216. claude_mpm/services/system_instructions_service.py +1 -3
  217. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  218. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  219. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
  220. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  221. claude_mpm/services/unified/unified_deployment.py +1 -5
  222. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  223. claude_mpm/services/visualization/__init__.py +1 -5
  224. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  225. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  226. claude_mpm/skills/bundled/performance-profiling.md +6 -0
  227. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +2 -2
  228. claude_mpm/skills/skills_registry.py +0 -1
  229. claude_mpm/templates/questions/__init__.py +38 -0
  230. claude_mpm/templates/questions/base.py +193 -0
  231. claude_mpm/templates/questions/pr_strategy.py +311 -0
  232. claude_mpm/templates/questions/project_init.py +385 -0
  233. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  234. claude_mpm/tools/__main__.py +8 -8
  235. claude_mpm/tools/code_tree_analyzer/analysis.py +1 -1
  236. claude_mpm/utils/agent_dependency_loader.py +80 -13
  237. claude_mpm/utils/dependency_cache.py +3 -1
  238. claude_mpm/utils/gitignore.py +241 -0
  239. claude_mpm/utils/log_cleanup.py +3 -3
  240. claude_mpm/utils/progress.py +383 -0
  241. claude_mpm/utils/robust_installer.py +3 -5
  242. claude_mpm/utils/structured_questions.py +619 -0
  243. {claude_mpm-4.21.3.dist-info → claude_mpm-5.0.2.dist-info}/METADATA +429 -59
  244. {claude_mpm-4.21.3.dist-info → claude_mpm-5.0.2.dist-info}/RECORD +252 -425
  245. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  246. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  247. claude_mpm/agents/templates/agent-manager.json +0 -273
  248. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  249. claude_mpm/agents/templates/api_qa.json +0 -180
  250. claude_mpm/agents/templates/clerk-ops.json +0 -235
  251. claude_mpm/agents/templates/code_analyzer.json +0 -101
  252. claude_mpm/agents/templates/content-agent.json +0 -358
  253. claude_mpm/agents/templates/dart_engineer.json +0 -307
  254. claude_mpm/agents/templates/data_engineer.json +0 -225
  255. claude_mpm/agents/templates/documentation.json +0 -211
  256. claude_mpm/agents/templates/engineer.json +0 -210
  257. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  258. claude_mpm/agents/templates/golang_engineer.json +0 -270
  259. claude_mpm/agents/templates/imagemagick.json +0 -264
  260. claude_mpm/agents/templates/java_engineer.json +0 -346
  261. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  262. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  263. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  264. claude_mpm/agents/templates/memory_manager.json +0 -158
  265. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  266. claude_mpm/agents/templates/ops.json +0 -185
  267. claude_mpm/agents/templates/php-engineer.json +0 -287
  268. claude_mpm/agents/templates/product_owner.json +0 -338
  269. claude_mpm/agents/templates/project_organizer.json +0 -140
  270. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  271. claude_mpm/agents/templates/python_engineer.json +0 -387
  272. claude_mpm/agents/templates/qa.json +0 -242
  273. claude_mpm/agents/templates/react_engineer.json +0 -238
  274. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  275. claude_mpm/agents/templates/research.json +0 -188
  276. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  277. claude_mpm/agents/templates/rust_engineer.json +0 -275
  278. claude_mpm/agents/templates/security.json +0 -202
  279. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  280. claude_mpm/agents/templates/ticketing.json +0 -177
  281. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  282. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  283. claude_mpm/agents/templates/version_control.json +0 -157
  284. claude_mpm/agents/templates/web_qa.json +0 -399
  285. claude_mpm/agents/templates/web_ui.json +0 -189
  286. claude_mpm/commands/mpm-tickets.md +0 -102
  287. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  288. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  289. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  290. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  291. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  292. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  293. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  294. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  295. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  296. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  297. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  298. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  299. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  300. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  301. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  302. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  303. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  304. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  305. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  306. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  307. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  308. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  309. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  310. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  311. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  312. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  313. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  314. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  315. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  316. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  317. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  318. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  319. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  320. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  321. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  322. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  323. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  324. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  325. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  326. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  327. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  328. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  329. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  330. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  331. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  332. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  333. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  334. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  335. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  336. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  337. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  338. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  339. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  340. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  341. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  342. claude_mpm/dashboard/static/built/react/events.js +0 -30
  343. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  344. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  345. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  346. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  347. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  348. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  349. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  350. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  351. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  352. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  353. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  354. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  355. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  356. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  357. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  358. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  359. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  360. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  361. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  362. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  363. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  364. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  365. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  366. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  367. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  368. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  369. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  370. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  371. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  372. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  373. claude_mpm/dashboard/static/events.html +0 -607
  374. claude_mpm/dashboard/static/index.html +0 -635
  375. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  376. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  377. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  378. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  379. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  380. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  381. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  382. claude_mpm/dashboard/static/legacy/files.html +0 -747
  383. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  384. claude_mpm/dashboard/static/monitors.html +0 -431
  385. claude_mpm/dashboard/static/production/events.html +0 -659
  386. claude_mpm/dashboard/static/production/main.html +0 -698
  387. claude_mpm/dashboard/static/production/monitors.html +0 -483
  388. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  389. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  390. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  391. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  392. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  393. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
  394. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
  395. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
  396. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
  397. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
  398. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
  399. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
  400. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
  401. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
  402. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
  403. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
  404. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
  405. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
  406. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
  407. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
  408. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
  409. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
  410. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  411. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  412. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  413. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  414. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  415. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  416. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  417. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  418. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  419. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  420. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
  421. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
  422. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
  423. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
  424. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
  425. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
  426. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
  427. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  428. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  429. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  430. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  431. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
  432. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
  433. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  434. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  435. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  436. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  437. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
  438. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
  439. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
  440. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
  441. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
  442. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
  443. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
  444. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
  445. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
  446. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
  447. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
  448. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
  449. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
  450. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
  451. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
  452. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
  453. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
  454. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
  455. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
  456. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
  457. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
  458. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
  459. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
  460. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  461. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  462. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  463. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  464. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  465. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  466. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
  467. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
  468. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
  469. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
  470. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
  471. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
  472. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
  473. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
  474. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
  475. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
  476. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
  477. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  478. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  479. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  480. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  481. {claude_mpm-4.21.3.dist-info → claude_mpm-5.0.2.dist-info}/WHEEL +0 -0
  482. {claude_mpm-4.21.3.dist-info → claude_mpm-5.0.2.dist-info}/entry_points.txt +0 -0
  483. {claude_mpm-4.21.3.dist-info → claude_mpm-5.0.2.dist-info}/licenses/LICENSE +0 -0
  484. {claude_mpm-4.21.3.dist-info → claude_mpm-5.0.2.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