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