claude-mpm 4.20.3__py3-none-any.whl → 4.25.10__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of claude-mpm might be problematic. Click here for more details.

Files changed (454) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +23 -6
  3. claude_mpm/agents/OUTPUT_STYLE.md +3 -48
  4. claude_mpm/agents/PM_INSTRUCTIONS.md +1783 -34
  5. claude_mpm/agents/WORKFLOW.md +75 -2
  6. claude_mpm/agents/base_agent.json +6 -3
  7. claude_mpm/agents/frontmatter_validator.py +1 -1
  8. claude_mpm/agents/templates/api_qa.json +5 -2
  9. claude_mpm/agents/templates/circuit_breakers.md +108 -2
  10. claude_mpm/agents/templates/documentation.json +33 -6
  11. claude_mpm/agents/templates/javascript_engineer_agent.json +380 -0
  12. claude_mpm/agents/templates/php-engineer.json +10 -4
  13. claude_mpm/agents/templates/pm_red_flags.md +89 -19
  14. claude_mpm/agents/templates/project_organizer.json +7 -3
  15. claude_mpm/agents/templates/qa.json +2 -1
  16. claude_mpm/agents/templates/react_engineer.json +1 -0
  17. claude_mpm/agents/templates/research.json +82 -12
  18. claude_mpm/agents/templates/security.json +4 -4
  19. claude_mpm/agents/templates/tauri_engineer.json +274 -0
  20. claude_mpm/agents/templates/ticketing.json +10 -6
  21. claude_mpm/agents/templates/version_control.json +4 -2
  22. claude_mpm/agents/templates/web_qa.json +2 -1
  23. claude_mpm/cli/README.md +253 -0
  24. claude_mpm/cli/__init__.py +11 -1
  25. claude_mpm/cli/commands/aggregate.py +1 -1
  26. claude_mpm/cli/commands/analyze.py +3 -3
  27. claude_mpm/cli/commands/cleanup.py +1 -1
  28. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  29. claude_mpm/cli/commands/debug.py +12 -12
  30. claude_mpm/cli/commands/hook_errors.py +277 -0
  31. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  32. claude_mpm/cli/commands/mcp_install_commands.py.backup +284 -0
  33. claude_mpm/cli/commands/mpm_init/README.md +365 -0
  34. claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
  35. claude_mpm/cli/commands/mpm_init/core.py +573 -0
  36. claude_mpm/cli/commands/mpm_init/display.py +341 -0
  37. claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
  38. claude_mpm/cli/commands/mpm_init/modes.py +397 -0
  39. claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
  40. claude_mpm/cli/commands/mpm_init_cli.py +396 -0
  41. claude_mpm/cli/commands/mpm_init_handler.py +67 -1
  42. claude_mpm/cli/commands/run.py +124 -128
  43. claude_mpm/cli/commands/skills.py +522 -34
  44. claude_mpm/cli/executor.py +56 -0
  45. claude_mpm/cli/interactive/agent_wizard.py +5 -5
  46. claude_mpm/cli/parsers/base_parser.py +28 -0
  47. claude_mpm/cli/parsers/mpm_init_parser.py +42 -0
  48. claude_mpm/cli/parsers/skills_parser.py +138 -0
  49. claude_mpm/cli/startup.py +111 -8
  50. claude_mpm/cli/startup_display.py +480 -0
  51. claude_mpm/cli/utils.py +1 -1
  52. claude_mpm/cli_module/commands.py +1 -1
  53. claude_mpm/cli_module/refactoring_guide.md +253 -0
  54. claude_mpm/commands/mpm-help.md +3 -0
  55. claude_mpm/commands/mpm-init.md +19 -3
  56. claude_mpm/commands/mpm-resume.md +372 -0
  57. claude_mpm/commands/mpm-tickets.md +56 -7
  58. claude_mpm/commands/mpm.md +1 -0
  59. claude_mpm/config/agent_capabilities.yaml +658 -0
  60. claude_mpm/config/async_logging_config.yaml +145 -0
  61. claude_mpm/constants.py +12 -0
  62. claude_mpm/core/.claude-mpm/logs/hooks_20250730.log +34 -0
  63. claude_mpm/core/api_validator.py +1 -1
  64. claude_mpm/core/claude_runner.py +14 -1
  65. claude_mpm/core/config.py +8 -0
  66. claude_mpm/core/constants.py +1 -1
  67. claude_mpm/core/framework/processors/metadata_processor.py +1 -1
  68. claude_mpm/core/hook_error_memory.py +381 -0
  69. claude_mpm/core/hook_manager.py +41 -2
  70. claude_mpm/core/interactive_session.py +48 -3
  71. claude_mpm/core/interfaces.py +56 -1
  72. claude_mpm/core/logger.py +3 -1
  73. claude_mpm/core/oneshot_session.py +39 -0
  74. claude_mpm/d2/.gitignore +22 -0
  75. claude_mpm/d2/ARCHITECTURE_COMPARISON.md +273 -0
  76. claude_mpm/d2/FLASK_INTEGRATION.md +156 -0
  77. claude_mpm/d2/IMPLEMENTATION_SUMMARY.md +452 -0
  78. claude_mpm/d2/QUICKSTART.md +186 -0
  79. claude_mpm/d2/README.md +232 -0
  80. claude_mpm/d2/STORE_FIX_SUMMARY.md +167 -0
  81. claude_mpm/d2/SVELTE5_STORES_GUIDE.md +180 -0
  82. claude_mpm/d2/TESTING.md +288 -0
  83. claude_mpm/d2/index.html +118 -0
  84. claude_mpm/d2/package.json +19 -0
  85. claude_mpm/d2/src/App.svelte +110 -0
  86. claude_mpm/d2/src/components/Header.svelte +153 -0
  87. claude_mpm/d2/src/components/MainContent.svelte +74 -0
  88. claude_mpm/d2/src/components/Sidebar.svelte +85 -0
  89. claude_mpm/d2/src/components/tabs/EventsTab.svelte +326 -0
  90. claude_mpm/d2/src/lib/socketio.js +144 -0
  91. claude_mpm/d2/src/main.js +7 -0
  92. claude_mpm/d2/src/stores/events.js +114 -0
  93. claude_mpm/d2/src/stores/socket.js +108 -0
  94. claude_mpm/d2/src/stores/theme.js +65 -0
  95. claude_mpm/d2/svelte.config.js +12 -0
  96. claude_mpm/d2/vite.config.js +15 -0
  97. claude_mpm/dashboard/.claude-mpm/memories/README.md +36 -0
  98. claude_mpm/dashboard/BUILD_NUMBER +1 -0
  99. claude_mpm/dashboard/README.md +121 -0
  100. claude_mpm/dashboard/VERSION +1 -0
  101. claude_mpm/dashboard/react/components/DataInspector/DataInspector.tsx +273 -0
  102. claude_mpm/dashboard/react/components/ErrorBoundary.tsx +75 -0
  103. claude_mpm/dashboard/react/components/EventViewer/EventViewer.tsx +141 -0
  104. claude_mpm/dashboard/react/components/shared/ConnectionStatus.tsx +36 -0
  105. claude_mpm/dashboard/react/components/shared/FilterBar.tsx +89 -0
  106. claude_mpm/dashboard/react/contexts/DashboardContext.tsx +215 -0
  107. claude_mpm/dashboard/react/entries/events.tsx +165 -0
  108. claude_mpm/dashboard/react/hooks/useEvents.ts +191 -0
  109. claude_mpm/dashboard/react/hooks/useSocket.ts +225 -0
  110. claude_mpm/dashboard/static/built/REFACTORING_SUMMARY.md +170 -0
  111. claude_mpm/dashboard/static/built/components/activity-tree.js.map +1 -0
  112. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +101 -101
  113. claude_mpm/dashboard/static/built/components/agent-inference.js.map +1 -0
  114. claude_mpm/dashboard/static/built/components/build-tracker.js +59 -59
  115. claude_mpm/dashboard/static/built/components/code-simple.js +107 -107
  116. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +29 -29
  117. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +24 -24
  118. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +27 -27
  119. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +25 -25
  120. claude_mpm/dashboard/static/built/components/code-tree.js.map +1 -0
  121. claude_mpm/dashboard/static/built/components/code-viewer.js.map +1 -0
  122. claude_mpm/dashboard/static/built/components/connection-debug.js +101 -101
  123. claude_mpm/dashboard/static/built/components/diff-viewer.js +113 -113
  124. claude_mpm/dashboard/static/built/components/event-processor.js.map +1 -0
  125. claude_mpm/dashboard/static/built/components/event-viewer.js.map +1 -0
  126. claude_mpm/dashboard/static/built/components/export-manager.js.map +1 -0
  127. claude_mpm/dashboard/static/built/components/file-change-tracker.js +57 -57
  128. claude_mpm/dashboard/static/built/components/file-change-viewer.js +74 -74
  129. claude_mpm/dashboard/static/built/components/file-tool-tracker.js.map +1 -0
  130. claude_mpm/dashboard/static/built/components/file-viewer.js.map +1 -0
  131. claude_mpm/dashboard/static/built/components/hud-library-loader.js.map +1 -0
  132. claude_mpm/dashboard/static/built/components/hud-manager.js.map +1 -0
  133. claude_mpm/dashboard/static/built/components/hud-visualizer.js.map +1 -0
  134. claude_mpm/dashboard/static/built/components/module-viewer.js.map +1 -0
  135. claude_mpm/dashboard/static/built/components/session-manager.js.map +1 -0
  136. claude_mpm/dashboard/static/built/components/socket-manager.js.map +1 -0
  137. claude_mpm/dashboard/static/built/components/ui-state-manager.js.map +1 -0
  138. claude_mpm/dashboard/static/built/components/unified-data-viewer.js.map +1 -0
  139. claude_mpm/dashboard/static/built/components/working-directory.js.map +1 -0
  140. claude_mpm/dashboard/static/built/connection-manager.js +76 -76
  141. claude_mpm/dashboard/static/built/dashboard.js.map +1 -0
  142. claude_mpm/dashboard/static/built/extension-error-handler.js +22 -22
  143. claude_mpm/dashboard/static/built/react/events.js.map +1 -0
  144. claude_mpm/dashboard/static/built/shared/dom-helpers.js +9 -9
  145. claude_mpm/dashboard/static/built/shared/event-bus.js +5 -5
  146. claude_mpm/dashboard/static/built/shared/logger.js +16 -16
  147. claude_mpm/dashboard/static/built/shared/tooltip-service.js +6 -6
  148. claude_mpm/dashboard/static/built/socket-client.js.map +1 -0
  149. claude_mpm/dashboard/static/css/activity.css +69 -69
  150. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  151. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  152. claude_mpm/dashboard/static/index.html +22 -22
  153. claude_mpm/dashboard/static/js/REFACTORING_SUMMARY.md +170 -0
  154. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  155. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  156. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  157. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  158. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  159. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  160. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  161. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  162. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  163. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  164. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  165. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  166. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  167. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  168. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  169. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  170. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  171. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  172. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  173. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  174. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  175. claude_mpm/dashboard/static/js/shared/dom-helpers.js +9 -9
  176. claude_mpm/dashboard/static/js/shared/event-bus.js +5 -5
  177. claude_mpm/dashboard/static/js/shared/logger.js +16 -16
  178. claude_mpm/dashboard/static/js/shared/tooltip-service.js +6 -6
  179. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  180. claude_mpm/dashboard/static/navigation-test-results.md +118 -0
  181. claude_mpm/dashboard/static/production/main.html +21 -21
  182. claude_mpm/dashboard/static/test-archive/dashboard.html +22 -22
  183. claude_mpm/dashboard/templates/.claude-mpm/memories/README.md +36 -0
  184. claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md +39 -0
  185. claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md +38 -0
  186. claude_mpm/dashboard/templates/code_simple.html +23 -23
  187. claude_mpm/dashboard/templates/index.html +18 -18
  188. claude_mpm/hooks/README.md +143 -0
  189. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  190. claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
  191. claude_mpm/hooks/claude_hooks/installer.py +45 -0
  192. claude_mpm/hooks/templates/README.md +180 -0
  193. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  194. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  195. claude_mpm/hooks/templates/settings.json.example +147 -0
  196. claude_mpm/schemas/agent_schema.json +596 -0
  197. claude_mpm/schemas/frontmatter_schema.json +165 -0
  198. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  199. claude_mpm/scripts/start_activity_logging.py +3 -1
  200. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  201. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  202. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  203. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  204. claude_mpm/services/agents/loading/framework_agent_loader.py +8 -8
  205. claude_mpm/services/agents/local_template_manager.py +3 -1
  206. claude_mpm/services/cli/session_pause_manager.py +504 -0
  207. claude_mpm/services/cli/session_resume_helper.py +36 -16
  208. claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
  209. claude_mpm/services/core/base.py +26 -11
  210. claude_mpm/services/core/interfaces.py +56 -1
  211. claude_mpm/services/core/models/agent_config.py +3 -0
  212. claude_mpm/services/core/models/process.py +4 -0
  213. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  214. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  215. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  216. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  217. claude_mpm/services/diagnostics/doctor_reporter.py +6 -4
  218. claude_mpm/services/diagnostics/models.py +21 -0
  219. claude_mpm/services/event_bus/README.md +244 -0
  220. claude_mpm/services/event_bus/direct_relay.py +3 -3
  221. claude_mpm/services/event_bus/event_bus.py +36 -3
  222. claude_mpm/services/event_bus/relay.py +23 -7
  223. claude_mpm/services/events/README.md +303 -0
  224. claude_mpm/services/events/consumers/logging.py +1 -2
  225. claude_mpm/services/framework_claude_md_generator/README.md +119 -0
  226. claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
  227. claude_mpm/services/local_ops/__init__.py +2 -0
  228. claude_mpm/services/local_ops/process_manager.py +1 -1
  229. claude_mpm/services/local_ops/resource_monitor.py +2 -2
  230. claude_mpm/services/mcp_gateway/README.md +185 -0
  231. claude_mpm/services/mcp_gateway/auto_configure.py +31 -25
  232. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  233. claude_mpm/services/mcp_gateway/core/process_pool.py +19 -10
  234. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  235. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
  236. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +26 -21
  237. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  238. claude_mpm/services/memory/failure_tracker.py +19 -4
  239. claude_mpm/services/memory/optimizer.py +1 -1
  240. claude_mpm/services/model/model_router.py +8 -9
  241. claude_mpm/services/monitor/daemon.py +1 -1
  242. claude_mpm/services/monitor/server.py +2 -2
  243. claude_mpm/services/native_agent_converter.py +356 -0
  244. claude_mpm/services/port_manager.py +1 -1
  245. claude_mpm/services/project/documentation_manager.py +2 -1
  246. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  247. claude_mpm/services/runner_configuration_service.py +1 -0
  248. claude_mpm/services/self_upgrade_service.py +165 -7
  249. claude_mpm/services/skills_config.py +547 -0
  250. claude_mpm/services/skills_deployer.py +955 -0
  251. claude_mpm/services/socketio/handlers/connection.py +1 -1
  252. claude_mpm/services/socketio/handlers/connection.py.backup +217 -0
  253. claude_mpm/services/socketio/handlers/git.py +2 -2
  254. claude_mpm/services/socketio/handlers/hook.py.backup +154 -0
  255. claude_mpm/services/static/.gitkeep +2 -0
  256. claude_mpm/services/system_instructions_service.py +1 -3
  257. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  258. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  259. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
  260. claude_mpm/services/version_control/VERSION +1 -0
  261. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  262. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  263. claude_mpm/skills/__init__.py +3 -3
  264. claude_mpm/skills/agent_skills_injector.py +42 -49
  265. claude_mpm/skills/bundled/.gitkeep +2 -0
  266. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +4 -0
  267. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +108 -114
  268. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
  269. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
  270. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
  271. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
  272. claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
  273. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +46 -41
  274. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
  275. claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
  276. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +36 -73
  277. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
  278. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
  279. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +100 -125
  280. claude_mpm/skills/bundled/debugging/root-cause-tracing/find-polluter.sh +63 -0
  281. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
  282. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
  283. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
  284. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
  285. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +28 -72
  286. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +11 -0
  287. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
  288. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
  289. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +272 -0
  290. claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
  291. claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
  292. claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
  293. claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
  294. claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
  295. claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
  296. claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
  297. claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
  298. claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
  299. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  300. claude_mpm/skills/bundled/main/artifacts-builder/LICENSE.txt +202 -0
  301. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +13 -1
  302. claude_mpm/skills/bundled/main/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  303. claude_mpm/skills/bundled/main/artifacts-builder/scripts/init-artifact.sh +322 -0
  304. claude_mpm/skills/bundled/main/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  305. claude_mpm/skills/bundled/main/internal-comms/LICENSE.txt +202 -0
  306. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +11 -0
  307. claude_mpm/skills/bundled/main/mcp-builder/LICENSE.txt +202 -0
  308. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +109 -277
  309. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
  310. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
  311. claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +17 -10
  312. claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +92 -39
  313. claude_mpm/skills/bundled/main/mcp-builder/scripts/example_evaluation.xml +22 -0
  314. claude_mpm/skills/bundled/main/mcp-builder/scripts/requirements.txt +2 -0
  315. claude_mpm/skills/bundled/main/skill-creator/LICENSE.txt +202 -0
  316. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +135 -155
  317. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
  318. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
  319. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
  320. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
  321. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
  322. claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +13 -12
  323. claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +5 -3
  324. claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +19 -12
  325. claude_mpm/skills/bundled/performance-profiling.md +6 -0
  326. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
  327. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
  328. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
  329. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
  330. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
  331. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
  332. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
  333. claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
  334. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
  335. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
  336. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
  337. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
  338. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
  339. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
  340. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
  341. claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
  342. claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
  343. claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
  344. claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
  345. claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
  346. claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
  347. claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
  348. claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
  349. claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
  350. claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
  351. claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
  352. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +21 -25
  353. claude_mpm/skills/bundled/testing/condition-based-waiting/example.ts +158 -0
  354. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
  355. claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
  356. claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
  357. claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
  358. claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
  359. claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
  360. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +86 -250
  361. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
  362. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
  363. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
  364. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
  365. claude_mpm/skills/bundled/testing/webapp-testing/LICENSE.txt +202 -0
  366. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +145 -57
  367. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
  368. claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +6 -6
  369. claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +13 -9
  370. claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +8 -8
  371. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
  372. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
  373. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +37 -15
  374. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
  375. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
  376. claude_mpm/skills/skills_registry.py +44 -48
  377. claude_mpm/skills/skills_service.py +117 -108
  378. claude_mpm/templates/questions/EXAMPLES.md +501 -0
  379. claude_mpm/templates/questions/__init__.py +43 -0
  380. claude_mpm/templates/questions/base.py +193 -0
  381. claude_mpm/templates/questions/pr_strategy.py +314 -0
  382. claude_mpm/templates/questions/project_init.py +388 -0
  383. claude_mpm/templates/questions/ticket_mgmt.py +397 -0
  384. claude_mpm/tools/README_SOCKETIO_DEBUG.md +224 -0
  385. claude_mpm/tools/__main__.py +8 -8
  386. claude_mpm/tools/code_tree_analyzer/README.md +64 -0
  387. claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
  388. claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
  389. claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
  390. claude_mpm/tools/code_tree_analyzer/core.py +380 -0
  391. claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
  392. claude_mpm/tools/code_tree_analyzer/events.py +168 -0
  393. claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
  394. claude_mpm/tools/code_tree_analyzer/models.py +39 -0
  395. claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
  396. claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
  397. claude_mpm/utils/agent_dependency_loader.py +3 -3
  398. claude_mpm/utils/dependency_cache.py +3 -1
  399. claude_mpm/utils/gitignore.py +241 -0
  400. claude_mpm/utils/log_cleanup.py +3 -3
  401. claude_mpm/utils/robust_installer.py +3 -5
  402. claude_mpm/utils/structured_questions.py +619 -0
  403. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/METADATA +218 -31
  404. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/RECORD +409 -246
  405. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  406. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  407. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  408. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  409. claude_mpm/cli/commands/mpm_init.py +0 -2093
  410. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  411. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  412. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  413. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  414. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  415. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  416. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  417. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  418. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  419. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  420. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  421. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  422. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  423. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  424. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  425. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  426. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  427. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  428. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  429. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  430. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  431. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  432. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  433. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  434. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  435. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  436. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  437. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  438. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  439. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  440. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  441. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  442. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  443. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  444. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  445. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  446. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  447. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  448. claude_mpm/skills/bundled/debugging/verification-before-completion/references/common-failures.md +0 -213
  449. claude_mpm/tools/code_tree_analyzer.py +0 -1825
  450. /claude_mpm/skills/bundled/collaboration/requesting-code-review/{code-reviewer.md → references/code-reviewer-template.md} +0 -0
  451. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/WHEEL +0 -0
  452. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/entry_points.txt +0 -0
  453. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/licenses/LICENSE +0 -0
  454. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/top_level.txt +0 -0
@@ -37,7 +37,7 @@ class SimpleCodeView {
37
37
  this.container = null;
38
38
  this.apiBase = window.location.origin;
39
39
  console.log('[SimpleCodeView] API base:', this.apiBase);
40
-
40
+
41
41
  // Tree view properties
42
42
  this.currentView = 'directory';
43
43
  this.socket = null;
@@ -52,16 +52,16 @@ class SimpleCodeView {
52
52
 
53
53
  init(container) {
54
54
  console.log('[SimpleCodeView.init] Starting with container:', container);
55
-
55
+
56
56
  if (!container) {
57
57
  console.error('[SimpleCodeView.init] No container provided!');
58
58
  document.body.innerHTML += '<div style="color:red;font-size:20px;">ERROR: No container for SimpleCodeView</div>';
59
59
  return;
60
60
  }
61
-
61
+
62
62
  this.container = container;
63
63
  this.render();
64
-
64
+
65
65
  // Load initial directory after a short delay to ensure DOM is ready
66
66
  setTimeout(() => {
67
67
  console.log('[SimpleCodeView.init] Loading initial directory after delay');
@@ -71,45 +71,45 @@ class SimpleCodeView {
71
71
 
72
72
  render() {
73
73
  console.log('[SimpleCodeView.render] Rendering UI');
74
-
74
+
75
75
  const html = `
76
76
  <div class="simple-code-view" style="padding: 20px;">
77
77
  <h2>Simple Code Browser</h2>
78
-
78
+
79
79
  <div class="view-toggle" style="margin: 10px 0; padding: 10px; background: #f0f0f0; border-radius: 4px;">
80
- <button id="dir-view-btn" onclick="window.simpleCodeView.setView('directory')" class="active"
80
+ <button id="dir-view-btn" onclick="window.simpleCodeView.setView('directory')" class="active"
81
81
  style="margin-right: 10px; padding: 8px 16px; border: 1px solid #ccc; background: #007cba; color: white; border-radius: 4px; cursor: pointer;">
82
82
  📁 Directory View
83
83
  </button>
84
- <button id="tree-view-btn" onclick="window.simpleCodeView.setView('tree')"
84
+ <button id="tree-view-btn" onclick="window.simpleCodeView.setView('tree')"
85
85
  style="padding: 8px 16px; border: 1px solid #ccc; background: #f9f9f9; color: #333; border-radius: 4px; cursor: pointer;">
86
86
  🌳 Tree View
87
87
  </button>
88
88
  </div>
89
-
89
+
90
90
  <div id="status-bar" style="padding: 10px; background: #e0e0e0; border-radius: 4px; margin-bottom: 10px;">
91
91
  Status: Initializing...
92
92
  </div>
93
-
93
+
94
94
  <div class="path-bar" style="margin: 10px 0; padding: 10px; background: #f0f0f0; border-radius: 4px;">
95
- <strong>Current Path:</strong>
95
+ <strong>Current Path:</strong>
96
96
  <input type="text" id="path-input" value="${this.currentPath}" style="width: 50%; margin: 0 10px;">
97
97
  <button id="load-btn" onclick="loadDir(document.getElementById('path-input').value)">Load</button>
98
98
  <button id="up-btn" onclick="goUp()">Go Up</button>
99
99
  </div>
100
-
100
+
101
101
  <div id="error-display" style="display:none; padding: 10px; background: #fee; color: red; border: 1px solid #fcc; border-radius: 4px; margin: 10px 0;">
102
102
  </div>
103
-
103
+
104
104
  <div id="directory-contents" style="border: 1px solid #ccc; padding: 10px; min-height: 400px; background: white;">
105
105
  <div style="color: #666;">Waiting to load directory...</div>
106
106
  </div>
107
-
107
+
108
108
  <div id="tree-view-container" style="display: none;">
109
109
  <div class="file-selector" style="margin: 10px 0; padding: 10px; background: #f9f9f9; border-radius: 4px;">
110
- <input type="text" id="file-path-input" placeholder="Enter file path to analyze (e.g., ./src/claude_mpm/core/framework_loader.py)"
110
+ <input type="text" id="file-path-input" placeholder="Enter file path to analyze (e.g., ./src/claude_mpm/core/framework_loader.py)"
111
111
  style="width: 70%; padding: 8px; margin-right: 10px; border: 1px solid #ccc; border-radius: 4px;">
112
- <button onclick="window.simpleCodeView.analyzeFile()"
112
+ <button onclick="window.simpleCodeView.analyzeFile()"
113
113
  style="padding: 8px 16px; border: 1px solid #ccc; background: #28a745; color: white; border-radius: 4px; cursor: pointer;">
114
114
  Analyze File
115
115
  </button>
@@ -118,7 +118,7 @@ class SimpleCodeView {
118
118
  <div style="padding: 20px; text-align: center; color: #666;">Enter a file path above and click "Analyze File" to view AST tree</div>
119
119
  </div>
120
120
  </div>
121
-
121
+
122
122
  <div id="debug-info" style="margin-top: 10px; padding: 10px; background: #f9f9f9; font-family: monospace; font-size: 12px;">
123
123
  <strong>Debug Info:</strong><br>
124
124
  API Base: ${this.apiBase}<br>
@@ -127,10 +127,10 @@ class SimpleCodeView {
127
127
  </div>
128
128
  </div>
129
129
  `;
130
-
130
+
131
131
  this.container.innerHTML = html;
132
132
  console.log('[SimpleCodeView.render] UI rendered');
133
-
133
+
134
134
  this.updateStatus('UI Rendered - Ready to load directory', 'blue');
135
135
  }
136
136
 
@@ -162,23 +162,23 @@ class SimpleCodeView {
162
162
 
163
163
  async loadDirectory(path) {
164
164
  console.log('[SimpleCodeView.loadDirectory] Loading path:', path);
165
-
165
+
166
166
  this.currentPath = path;
167
167
  this.hideError();
168
168
  this.updateStatus(`Loading ${path}...`, 'blue');
169
-
169
+
170
170
  // Update path input
171
171
  const pathInput = document.getElementById('path-input');
172
172
  if (pathInput) {
173
173
  pathInput.value = path;
174
174
  }
175
-
175
+
176
176
  // Update debug info
177
177
  const debugDiv = document.getElementById('debug-info');
178
178
  const contentsDiv = document.getElementById('directory-contents');
179
-
179
+
180
180
  const apiUrl = `${this.apiBase}/api/directory/list?path=${encodeURIComponent(path)}`;
181
-
181
+
182
182
  if (debugDiv) {
183
183
  debugDiv.innerHTML = `
184
184
  <strong>Debug Info:</strong><br>
@@ -187,20 +187,20 @@ class SimpleCodeView {
187
187
  Status: Fetching...
188
188
  `;
189
189
  }
190
-
190
+
191
191
  try {
192
192
  console.log('[SimpleCodeView.loadDirectory] Fetching:', apiUrl);
193
-
193
+
194
194
  const response = await fetch(apiUrl);
195
195
  console.log('[SimpleCodeView.loadDirectory] Response status:', response.status);
196
-
196
+
197
197
  if (!response.ok) {
198
198
  throw new Error(`HTTP ${response.status}: ${response.statusText}`);
199
199
  }
200
-
200
+
201
201
  const data = await response.json();
202
202
  console.log('[SimpleCodeView.loadDirectory] Data received:', data);
203
-
203
+
204
204
  // Update debug info with response and filtering status
205
205
  if (debugDiv) {
206
206
  let debugContent = `
@@ -211,7 +211,7 @@ class SimpleCodeView {
211
211
  Is Directory: ${data.is_directory}<br>
212
212
  Item Count: ${data.contents ? data.contents.length : 0}<br>
213
213
  `;
214
-
214
+
215
215
  // Add filtering information
216
216
  if (data.filtered) {
217
217
  debugContent += `<strong>Filtering:</strong> ${data.filter_info || 'Filtered view'}<br>`;
@@ -219,17 +219,17 @@ class SimpleCodeView {
219
219
  debugContent += `<strong>Items:</strong> ${data.summary.directories} directories, ${data.summary.code_files} code files<br>`;
220
220
  }
221
221
  }
222
-
222
+
223
223
  debugContent += `
224
224
  <details>
225
225
  <summary>Raw Response (click to expand)</summary>
226
226
  <pre style="overflow-x: auto;">${JSON.stringify(data, null, 2)}</pre>
227
227
  </details>
228
228
  `;
229
-
229
+
230
230
  debugDiv.innerHTML = debugContent;
231
231
  }
232
-
232
+
233
233
  // Display contents
234
234
  if (!data.exists) {
235
235
  contentsDiv.innerHTML = '<p style="color: red;">❌ Path does not exist</p>';
@@ -250,18 +250,18 @@ class SimpleCodeView {
250
250
  headerText += ` (${data.summary.directories} directories, ${data.summary.code_files} code files)`;
251
251
  }
252
252
  headerText += ':';
253
-
253
+
254
254
  let html = `<div style="margin-bottom: 10px; color: #666;">${headerText}</div>`;
255
-
255
+
256
256
  // Add filtering notice if applicable
257
257
  if (data.filtered) {
258
258
  html += `<div style="margin-bottom: 10px; padding: 8px; background: #e8f4fd; border-left: 3px solid #2196f3; color: #1565c0; font-size: 13px;">
259
259
  🔍 Filtered view: ${data.filter_info || 'Showing only code-related files and directories'}
260
260
  </div>`;
261
261
  }
262
-
262
+
263
263
  html += '<ul style="list-style: none; padding: 0; margin: 0;">';
264
-
264
+
265
265
  // Sort: directories first, then files
266
266
  const sorted = data.contents.sort((a, b) => {
267
267
  if (a.is_directory !== b.is_directory) {
@@ -269,7 +269,7 @@ class SimpleCodeView {
269
269
  }
270
270
  return a.name.localeCompare(b.name);
271
271
  });
272
-
272
+
273
273
  for (const item of sorted) {
274
274
  if (item.is_directory) {
275
275
  // Make directories clickable
@@ -282,7 +282,7 @@ class SimpleCodeView {
282
282
  // Check if it's a code file and make it clickable
283
283
  const isCodeFile = this.isCodeFile(item.name);
284
284
  const fileIcon = this.getFileIcon(item.name);
285
-
285
+
286
286
  if (isCodeFile) {
287
287
  // Code files - clickable to show AST
288
288
  html += `<li style="padding: 5px 0;">
@@ -298,18 +298,18 @@ class SimpleCodeView {
298
298
  }
299
299
  }
300
300
  }
301
-
301
+
302
302
  html += '</ul>';
303
303
  contentsDiv.innerHTML = html;
304
304
  this.updateStatus(`Loaded ${data.contents.length} items`, 'green');
305
305
  }
306
-
306
+
307
307
  } catch (error) {
308
308
  console.error('[SimpleCodeView.loadDirectory] Error:', error);
309
-
309
+
310
310
  const errorMsg = `Failed to load directory: ${error.message}`;
311
311
  this.showError(errorMsg);
312
-
312
+
313
313
  if (contentsDiv) {
314
314
  contentsDiv.innerHTML = `
315
315
  <div style="color: red;">
@@ -319,7 +319,7 @@ class SimpleCodeView {
319
319
  </div>
320
320
  `;
321
321
  }
322
-
322
+
323
323
  if (debugDiv) {
324
324
  debugDiv.innerHTML += `<br><span style="color:red;">ERROR: ${error.stack || error.message}</span>`;
325
325
  }
@@ -333,7 +333,7 @@ class SimpleCodeView {
333
333
  this.updateStatus('Already at root directory', 'orange');
334
334
  return;
335
335
  }
336
-
336
+
337
337
  const lastSlash = this.currentPath.lastIndexOf('/');
338
338
  const parent = lastSlash > 0 ? this.currentPath.substring(0, lastSlash) : '/';
339
339
  console.log('[SimpleCodeView.goUp] Going up to:', parent);
@@ -344,35 +344,35 @@ class SimpleCodeView {
344
344
  setView(view) {
345
345
  console.log('[SimpleCodeView.setView] Switching to view:', view);
346
346
  this.currentView = view;
347
-
347
+
348
348
  const dirContents = document.getElementById('directory-contents');
349
349
  const treeContainer = document.getElementById('tree-view-container');
350
350
  const dirBtn = document.getElementById('dir-view-btn');
351
351
  const treeBtn = document.getElementById('tree-view-btn');
352
-
352
+
353
353
  if (view === 'tree') {
354
354
  dirContents.style.display = 'none';
355
355
  treeContainer.style.display = 'block';
356
-
356
+
357
357
  // Update button styles
358
358
  dirBtn.style.background = '#f9f9f9';
359
359
  dirBtn.style.color = '#333';
360
360
  dirBtn.classList.remove('active');
361
-
361
+
362
362
  treeBtn.style.background = '#007cba';
363
363
  treeBtn.style.color = 'white';
364
364
  treeBtn.classList.add('active');
365
-
365
+
366
366
  this.initializeTreeView();
367
367
  } else {
368
368
  dirContents.style.display = 'block';
369
369
  treeContainer.style.display = 'none';
370
-
370
+
371
371
  // Update button styles
372
372
  treeBtn.style.background = '#f9f9f9';
373
373
  treeBtn.style.color = '#333';
374
374
  treeBtn.classList.remove('active');
375
-
375
+
376
376
  dirBtn.style.background = '#007cba';
377
377
  dirBtn.style.color = 'white';
378
378
  dirBtn.classList.add('active');
@@ -381,52 +381,52 @@ class SimpleCodeView {
381
381
 
382
382
  initializeTreeView() {
383
383
  console.log('[SimpleCodeView.initializeTreeView] Initializing tree view');
384
-
384
+
385
385
  if (!window.d3) {
386
386
  this.updateStatus('D3.js not loaded - cannot initialize tree view', 'red');
387
387
  return;
388
388
  }
389
-
389
+
390
390
  this.initializeSocket();
391
391
  }
392
392
 
393
393
  initializeSocket() {
394
394
  console.log('[SimpleCodeView.initializeSocket] Initializing Socket.IO connection');
395
-
395
+
396
396
  if (!window.io) {
397
397
  this.updateStatus('Socket.IO not loaded - using fallback mode', 'orange');
398
398
  return;
399
399
  }
400
-
400
+
401
401
  try {
402
402
  this.socket = io('/');
403
-
403
+
404
404
  this.socket.on('connect', () => {
405
405
  console.log('[SimpleCodeView] Socket connected');
406
406
  this.updateStatus('Connected to analysis server', 'green');
407
407
  });
408
-
408
+
409
409
  this.socket.on('disconnect', () => {
410
410
  console.log('[SimpleCodeView] Socket disconnected');
411
411
  this.updateStatus('Disconnected from analysis server', 'orange');
412
412
  });
413
-
413
+
414
414
  this.socket.on('analysis_progress', (data) => {
415
415
  console.log('[SimpleCodeView] Analysis progress:', data);
416
416
  this.updateStatus(`Analysis: ${data.message}`, 'blue');
417
417
  });
418
-
418
+
419
419
  this.socket.on('analysis_complete', (data) => {
420
420
  console.log('[SimpleCodeView] Analysis complete:', data);
421
421
  this.updateStatus('Analysis complete - rendering tree', 'green');
422
422
  this.renderTree(data);
423
423
  });
424
-
424
+
425
425
  this.socket.on('analysis_error', (error) => {
426
426
  console.error('[SimpleCodeView] Analysis error:', error);
427
427
  this.showError(`Analysis failed: ${error.message || error}`);
428
428
  });
429
-
429
+
430
430
  } catch (error) {
431
431
  console.error('[SimpleCodeView] Failed to initialize socket:', error);
432
432
  this.updateStatus('Socket connection failed - using fallback mode', 'orange');
@@ -435,24 +435,24 @@ class SimpleCodeView {
435
435
 
436
436
  async analyzeFile() {
437
437
  console.log('[SimpleCodeView.analyzeFile] Starting file analysis');
438
-
438
+
439
439
  const fileInput = document.getElementById('file-path-input');
440
440
  const filePath = fileInput.value.trim();
441
-
441
+
442
442
  if (!filePath) {
443
443
  this.showError('Please enter a file path');
444
444
  return;
445
445
  }
446
-
446
+
447
447
  this.hideError();
448
448
  this.updateStatus(`Analyzing file: ${filePath}`, 'blue');
449
-
449
+
450
450
  // Clear previous tree
451
451
  const treeViz = document.getElementById('tree-visualization');
452
452
  if (treeViz) {
453
453
  treeViz.innerHTML = '<div style="padding: 20px; text-align: center; color: #666;">Analyzing file...</div>';
454
454
  }
455
-
455
+
456
456
  try {
457
457
  if (this.socket && this.socket.connected) {
458
458
  // Use Socket.IO for real-time analysis
@@ -472,7 +472,7 @@ class SimpleCodeView {
472
472
 
473
473
  async analyzeFileHTTP(filePath) {
474
474
  console.log('[SimpleCodeView.analyzeFileHTTP] Using HTTP fallback for:', filePath);
475
-
475
+
476
476
  try {
477
477
  // Create a simple mock analysis for demonstration
478
478
  // In a real implementation, this would call a proper analysis endpoint
@@ -480,7 +480,7 @@ class SimpleCodeView {
480
480
  const mockData = this.createMockTreeData(filePath);
481
481
  this.renderTree(mockData);
482
482
  }, 1000);
483
-
483
+
484
484
  } catch (error) {
485
485
  throw new Error(`HTTP analysis failed: ${error.message}`);
486
486
  }
@@ -490,13 +490,13 @@ class SimpleCodeView {
490
490
  // Create mock AST data for demonstration
491
491
  const fileName = filePath.split('/').pop() || 'file';
492
492
  const ext = fileName.split('.').pop()?.toLowerCase();
493
-
493
+
494
494
  let mockData = {
495
495
  name: fileName,
496
496
  type: 'module',
497
497
  children: []
498
498
  };
499
-
499
+
500
500
  if (ext === 'py') {
501
501
  mockData.children = [
502
502
  {
@@ -549,62 +549,62 @@ class SimpleCodeView {
549
549
  { name: 'Content Section 3', type: 'section' }
550
550
  ];
551
551
  }
552
-
552
+
553
553
  return mockData;
554
554
  }
555
555
 
556
556
  renderTree(data) {
557
557
  console.log('[SimpleCodeView.renderTree] Rendering tree with data:', data);
558
-
558
+
559
559
  if (!data || !window.d3) {
560
560
  this.showError('Cannot render tree: missing data or D3.js');
561
561
  return;
562
562
  }
563
-
563
+
564
564
  this.treeData = data;
565
-
565
+
566
566
  // Clear previous visualization
567
567
  const container = document.getElementById('tree-visualization');
568
568
  if (!container) {
569
569
  this.showError('Tree visualization container not found');
570
570
  return;
571
571
  }
572
-
572
+
573
573
  container.innerHTML = '';
574
-
574
+
575
575
  // Create SVG
576
576
  const margin = this.margin;
577
577
  const width = this.width - margin.left - margin.right;
578
578
  const height = this.height - margin.top - margin.bottom;
579
-
579
+
580
580
  this.svg = d3.select('#tree-visualization')
581
581
  .append('svg')
582
582
  .attr('width', this.width)
583
583
  .attr('height', this.height);
584
-
584
+
585
585
  // Add zoom behavior
586
586
  const zoom = d3.zoom()
587
587
  .scaleExtent([0.1, 4])
588
588
  .on('zoom', (event) => {
589
589
  this.treeGroup.attr('transform', event.transform);
590
590
  });
591
-
591
+
592
592
  this.svg.call(zoom);
593
-
593
+
594
594
  // Create main group
595
595
  this.treeGroup = this.svg.append('g')
596
596
  .attr('transform', `translate(${margin.left},${margin.top})`);
597
-
597
+
598
598
  // Create tree layout
599
599
  this.treeLayout = d3.tree()
600
600
  .size([height, width]);
601
-
601
+
602
602
  // Convert data to hierarchy
603
603
  const hierarchy = d3.hierarchy(data);
604
-
604
+
605
605
  // Generate tree layout
606
606
  const treeData = this.treeLayout(hierarchy);
607
-
607
+
608
608
  // Add links
609
609
  const links = this.treeGroup.selectAll('.link')
610
610
  .data(treeData.links())
@@ -618,7 +618,7 @@ class SimpleCodeView {
618
618
  .style('fill', 'none')
619
619
  .style('stroke', '#ccc')
620
620
  .style('stroke-width', '2px');
621
-
621
+
622
622
  // Add nodes
623
623
  const nodes = this.treeGroup.selectAll('.node')
624
624
  .data(treeData.descendants())
@@ -626,14 +626,14 @@ class SimpleCodeView {
626
626
  .append('g')
627
627
  .attr('class', 'tree-node')
628
628
  .attr('transform', d => `translate(${d.y},${d.x})`);
629
-
629
+
630
630
  // Add circles for nodes
631
631
  nodes.append('circle')
632
632
  .attr('r', 6)
633
633
  .style('fill', d => this.getNodeColor(d.data.type))
634
634
  .style('stroke', '#333')
635
635
  .style('stroke-width', '2px');
636
-
636
+
637
637
  // Add labels
638
638
  nodes.append('text')
639
639
  .attr('dy', '.35em')
@@ -642,14 +642,14 @@ class SimpleCodeView {
642
642
  .style('font-size', '12px')
643
643
  .style('font-family', 'Arial, sans-serif')
644
644
  .text(d => d.data.name);
645
-
645
+
646
646
  // Add tooltips
647
647
  nodes.append('title')
648
648
  .text(d => `${d.data.type}: ${d.data.name}`);
649
-
649
+
650
650
  // Add legend
651
651
  this.addLegend(container);
652
-
652
+
653
653
  this.updateStatus('Tree visualization rendered successfully', 'green');
654
654
  }
655
655
 
@@ -685,7 +685,7 @@ class SimpleCodeView {
685
685
  const ext = filename.toLowerCase().substring(filename.lastIndexOf('.'));
686
686
  const iconMap = {
687
687
  '.py': '🐍',
688
- '.js': '📜',
688
+ '.js': '📜',
689
689
  '.jsx': '⚛️',
690
690
  '.ts': '📘',
691
691
  '.tsx': '⚛️',
@@ -730,16 +730,16 @@ class SimpleCodeView {
730
730
  // New method to analyze file from directory click
731
731
  analyzeFileFromPath(filePath) {
732
732
  console.log('[SimpleCodeView.analyzeFileFromPath] Analyzing file:', filePath);
733
-
733
+
734
734
  // Switch to tree view
735
735
  this.setView('tree');
736
-
736
+
737
737
  // Set the file path in the input
738
738
  const fileInput = document.getElementById('file-path-input');
739
739
  if (fileInput) {
740
740
  fileInput.value = filePath;
741
741
  }
742
-
742
+
743
743
  // Trigger analysis
744
744
  this.analyzeFile();
745
745
  }
@@ -750,10 +750,10 @@ class SimpleCodeView {
750
750
  if (existingLegend) {
751
751
  existingLegend.remove();
752
752
  }
753
-
753
+
754
754
  const legend = document.createElement('div');
755
755
  legend.className = 'tree-legend';
756
-
756
+
757
757
  const legendTypes = [
758
758
  { type: 'module', label: 'Module/File' },
759
759
  { type: 'class', label: 'Class' },
@@ -764,7 +764,7 @@ class SimpleCodeView {
764
764
  { type: 'section', label: 'Section' },
765
765
  { type: 'hook', label: 'Hook/Other' }
766
766
  ];
767
-
767
+
768
768
  legend.innerHTML = `
769
769
  <strong>Legend</strong><br>
770
770
  ${legendTypes.map(item => `
@@ -779,10 +779,10 @@ class SimpleCodeView {
779
779
  Pan: Click and drag
780
780
  </div>
781
781
  `;
782
-
782
+
783
783
  container.appendChild(legend);
784
784
  }
785
-
785
+
786
786
  /**
787
787
  * Get initial path from various sources
788
788
  * @returns {string} Initial path to use
@@ -793,34 +793,34 @@ class SimpleCodeView {
793
793
  const dir = window.dashboard.workingDirectoryManager.getCurrentWorkingDir();
794
794
  if (dir) return dir;
795
795
  }
796
-
796
+
797
797
  // Try to get from working directory element
798
798
  const workingDirPath = document.getElementById('working-dir-path');
799
799
  if (workingDirPath && workingDirPath.textContent && workingDirPath.textContent !== 'Loading...') {
800
800
  return workingDirPath.textContent.trim();
801
801
  }
802
-
802
+
803
803
  // Try to get from footer
804
804
  const footerDir = document.getElementById('footer-working-dir');
805
805
  if (footerDir && footerDir.textContent && footerDir.textContent !== 'Unknown') {
806
806
  return footerDir.textContent.trim();
807
807
  }
808
-
808
+
809
809
  // Try to get from recent events
810
810
  if (window.socketClient && window.socketClient.events) {
811
811
  const eventsWithDir = window.socketClient.events
812
812
  .filter(e => e.data && (e.data.working_directory || e.data.cwd || e.data.working_dir))
813
813
  .reverse();
814
-
814
+
815
815
  if (eventsWithDir.length > 0) {
816
816
  const recentEvent = eventsWithDir[0];
817
- const dir = recentEvent.data.working_directory ||
818
- recentEvent.data.cwd ||
817
+ const dir = recentEvent.data.working_directory ||
818
+ recentEvent.data.cwd ||
819
819
  recentEvent.data.working_dir;
820
820
  if (dir) return dir;
821
821
  }
822
822
  }
823
-
823
+
824
824
  // Default fallback
825
825
  return '/';
826
826
  }