mcp-vector-search 0.12.1__tar.gz → 0.12.2__tar.gz

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 mcp-vector-search might be problematic. Click here for more details.

Files changed (176) hide show
  1. mcp_vector_search-0.12.2/INVESTIGATION_EXPANSION_BUG.md +229 -0
  2. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/PKG-INFO +62 -2
  3. mcp_vector_search-0.12.2/QA_REPORT_ContentPane.md +338 -0
  4. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/README.md +61 -1
  5. mcp_vector_search-0.12.2/ROOT_NODE_FIX_SUMMARY.md +71 -0
  6. mcp_vector_search-0.12.2/dev-mcp +202 -0
  7. mcp_vector_search-0.12.2/scripts/README_FAVICON.md +121 -0
  8. mcp_vector_search-0.12.2/scripts/generate_favicon.py +280 -0
  9. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/__init__.py +2 -2
  10. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/commands/visualize.py +22 -12
  11. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v1-1024.png +0 -0
  12. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v1-128.png +0 -0
  13. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v1-16.png +0 -0
  14. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v1-256.png +0 -0
  15. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v1-32.png +0 -0
  16. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v1-512.png +0 -0
  17. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v1-64.png +0 -0
  18. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v1.ico +0 -0
  19. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v2-1024.png +0 -0
  20. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v2-128.png +0 -0
  21. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v2-16.png +0 -0
  22. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v2-256.png +0 -0
  23. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v2-32.png +0 -0
  24. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v2-512.png +0 -0
  25. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v2-64.png +0 -0
  26. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v2.ico +0 -0
  27. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v3-1024.png +0 -0
  28. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v3-128.png +0 -0
  29. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v3-16.png +0 -0
  30. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v3-256.png +0 -0
  31. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v3-32.png +0 -0
  32. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v3-512.png +0 -0
  33. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v3-64.png +0 -0
  34. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/favicon-v3.ico +0 -0
  35. mcp_vector_search-0.12.2/src/mcp_vector_search/visualization/index.html +1008 -0
  36. mcp_vector_search-0.12.1/src/mcp_vector_search/visualization/index.html +0 -658
  37. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/.github/workflows/ci.yml +0 -0
  38. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/.gitignore +0 -0
  39. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/.pre-commit-config.yaml +0 -0
  40. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/CLAUDE.md +0 -0
  41. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/LICENSE +0 -0
  42. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/Makefile +0 -0
  43. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/PERFORMANCE_OPTIMIZATION_SUMMARY.md +0 -0
  44. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/CHANGELOG.md +0 -0
  45. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/CLI_FEATURES.md +0 -0
  46. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/DEPLOY.md +0 -0
  47. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/DEVELOPMENT.md +0 -0
  48. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/FEATURES.md +0 -0
  49. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/IMPROVEMENTS_SUMMARY.md +0 -0
  50. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/MCP_FILE_WATCHING.md +0 -0
  51. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/RELEASES.md +0 -0
  52. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/STRUCTURE.md +0 -0
  53. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/VERSIONING.md +0 -0
  54. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/VERSIONING_WORKFLOW.md +0 -0
  55. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/_archive/CLAUDE_20251009_pre_mpm_init.md +0 -0
  56. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/_archive/CLAUDE_MPM_INIT_SUMMARY_20251009.md +0 -0
  57. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/_archive/MPM_INIT_EXECUTIVE_SUMMARY.md +0 -0
  58. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/analysis/SEARCH_ANALYSIS_REPORT.md +0 -0
  59. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/analysis/SEARCH_IMPROVEMENT_PLAN.md +0 -0
  60. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/architecture/REINDEXING_WORKFLOW.md +0 -0
  61. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/debugging/SEARCH_BUG_ANALYSIS.md +0 -0
  62. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/developer/API.md +0 -0
  63. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/developer/CONTRIBUTING.md +0 -0
  64. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/developer/DEVELOPER.md +0 -0
  65. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/developer/LINTING.md +0 -0
  66. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/developer/REFACTORING_ANALYSIS.md +0 -0
  67. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/developer/TESTING.md +0 -0
  68. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/developer/TESTING_STRATEGY.md +0 -0
  69. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/developer/TEST_SUITE_SUMMARY.md +0 -0
  70. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/mcp-integration.md +0 -0
  71. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/optimizations/database-stats-chunked-processing.md +0 -0
  72. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/performance/CONNECTION_POOLING.md +0 -0
  73. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/performance/SEARCH_TIMING_ANALYSIS.md +0 -0
  74. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/prd/mcp_vector_search_prd_updated.md +0 -0
  75. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/reference/ENGINEER_TASK.md +0 -0
  76. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/reference/INSTALL.md +0 -0
  77. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/reference/INSTALL_COMMAND_ENHANCEMENTS.md +0 -0
  78. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/reference/MCP_SETUP.md +0 -0
  79. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/reference/PROJECT_ORGANIZATION.md +0 -0
  80. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/docs/technical/SIMILARITY_CALCULATION_FIX.md +0 -0
  81. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/examples/connection_pooling_example.py +0 -0
  82. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/examples/semi_automatic_reindexing_demo.py +0 -0
  83. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/mcp-vector-search-wrapper +0 -0
  84. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/pyproject.toml +0 -0
  85. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/pytest.ini +0 -0
  86. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/README.md +0 -0
  87. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/analyze_search_bottlenecks.py +0 -0
  88. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/build.sh +0 -0
  89. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/changeset.py +0 -0
  90. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/comprehensive_build.py +0 -0
  91. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/deploy-test.sh +0 -0
  92. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/dev-build.py +0 -0
  93. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/dev-setup.py +0 -0
  94. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/dev-test.sh +0 -0
  95. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/fix_linting.py +0 -0
  96. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/mcp-dev +0 -0
  97. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/monitor_search_performance.py +0 -0
  98. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/publish.sh +0 -0
  99. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/quick_search_timing.py +0 -0
  100. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/run_search_timing_tests.py +0 -0
  101. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/run_tests.py +0 -0
  102. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/search_performance_monitor.py +0 -0
  103. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/search_quality_analyzer.py +0 -0
  104. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/setup/mcp-vector-search.sh +0 -0
  105. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/setup/setup-alias.sh +0 -0
  106. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/setup-dev-mcp.sh +0 -0
  107. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/update_docs.py +0 -0
  108. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/version_manager.py +0 -0
  109. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/scripts/workflow.sh +0 -0
  110. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/__init__.py +0 -0
  111. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/commands/__init__.py +0 -0
  112. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/commands/auto_index.py +0 -0
  113. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/commands/config.py +0 -0
  114. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/commands/demo.py +0 -0
  115. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/commands/index.py +0 -0
  116. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/commands/init.py +0 -0
  117. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/commands/install.py +0 -0
  118. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/commands/install_old.py +0 -0
  119. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/commands/mcp.py +0 -0
  120. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/commands/reset.py +0 -0
  121. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/commands/search.py +0 -0
  122. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/commands/status.py +0 -0
  123. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/commands/uninstall.py +0 -0
  124. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/commands/watch.py +0 -0
  125. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/didyoumean.py +0 -0
  126. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/export.py +0 -0
  127. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/history.py +0 -0
  128. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/interactive.py +0 -0
  129. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/main.py +0 -0
  130. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/output.py +0 -0
  131. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/cli/suggestions.py +0 -0
  132. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/config/__init__.py +0 -0
  133. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/config/constants.py +0 -0
  134. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/config/defaults.py +0 -0
  135. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/config/settings.py +0 -0
  136. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/core/__init__.py +0 -0
  137. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/core/auto_indexer.py +0 -0
  138. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/core/connection_pool.py +0 -0
  139. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/core/database.py +0 -0
  140. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/core/directory_index.py +0 -0
  141. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/core/embeddings.py +0 -0
  142. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/core/exceptions.py +0 -0
  143. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/core/factory.py +0 -0
  144. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/core/git_hooks.py +0 -0
  145. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/core/indexer.py +0 -0
  146. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/core/models.py +0 -0
  147. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/core/project.py +0 -0
  148. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/core/scheduler.py +0 -0
  149. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/core/search.py +0 -0
  150. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/core/watcher.py +0 -0
  151. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/mcp/__init__.py +0 -0
  152. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/mcp/__main__.py +0 -0
  153. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/mcp/server.py +0 -0
  154. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/parsers/__init__.py +0 -0
  155. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/parsers/base.py +0 -0
  156. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/parsers/dart.py +0 -0
  157. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/parsers/html.py +0 -0
  158. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/parsers/javascript.py +0 -0
  159. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/parsers/php.py +0 -0
  160. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/parsers/python.py +0 -0
  161. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/parsers/registry.py +0 -0
  162. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/parsers/ruby.py +0 -0
  163. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/parsers/text.py +0 -0
  164. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/parsers/utils.py +0 -0
  165. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/py.typed +0 -0
  166. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/utils/__init__.py +0 -0
  167. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/utils/gitignore.py +0 -0
  168. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/utils/monorepo.py +0 -0
  169. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/utils/timing.py +0 -0
  170. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/src/mcp_vector_search/utils/version.py +0 -0
  171. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/tests/__init__.py +0 -0
  172. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/tests/conftest.py +0 -0
  173. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/tests/sample_code/ast_test_javascript.js +0 -0
  174. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/tests/sample_code/ast_test_python.py +0 -0
  175. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/tests/sample_code/ast_test_typescript.ts +0 -0
  176. {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.2}/uv.lock +0 -0
@@ -0,0 +1,229 @@
1
+ # Investigation Report: Node Expansion Not Working
2
+
3
+ ## Summary
4
+ User reports that directory/file nodes show expand/collapse icons ("+"/"-") but clicking them doesn't expand/collapse the hierarchy.
5
+
6
+ ## Code Analysis
7
+
8
+ ### 1. Click Handler Attachment ✓ CORRECT
9
+ **Location**: `/Users/masa/Projects/mcp-vector-search/src/mcp_vector_search/visualization/index.html:481`
10
+
11
+ ```javascript
12
+ .on("click", handleNodeClick)
13
+ ```
14
+
15
+ The click handler IS correctly attached to each node group (`<g>` element).
16
+
17
+ ### 2. Pointer Events ✓ CORRECT
18
+ **Locations**: Lines 123, 130, 542
19
+
20
+ All text elements (labels, icons, expand indicators) have `pointer-events: none`, which correctly allows clicks to pass through to the parent `<g>` element where the handler is attached.
21
+
22
+ ### 3. hasChildren() Function ✓ CORRECT
23
+ **Location**: Line 586-590
24
+
25
+ ```javascript
26
+ function hasChildren(node) {
27
+ return allLinks.some(l => (l.source.id || l.source) === node.id);
28
+ }
29
+ ```
30
+
31
+ This correctly checks if a node is a parent (source) in any link. The `(l.source.id || l.source)` pattern handles both:
32
+ - **Before D3 mutation**: `l.source` is a string (e.g., "dir_abc")
33
+ - **After D3 mutation**: `l.source` is an object with `.id` property
34
+
35
+ ### 4. handleNodeClick() Function ✓ LOGIC CORRECT
36
+ **Location**: Line 593-624
37
+
38
+ The logic flow is correct:
39
+ 1. Show content pane (always)
40
+ 2. Check if node has children
41
+ 3. If yes, toggle collapse/expand state
42
+ 4. Call `renderGraph()` to update visualization
43
+
44
+ ### 5. expandNode() Function ✓ LOGIC CORRECT
45
+ **Location**: Line 626-654
46
+
47
+ Correctly:
48
+ 1. Removes node from `collapsedNodes`
49
+ 2. Finds children by filtering `allLinks` for links where source matches node ID
50
+ 3. Adds each child to `visibleNodes`
51
+ 4. Adds each child to `collapsedNodes` (children start collapsed)
52
+
53
+ ### 6. Data Structure ✓ VERIFIED
54
+ **File**: `/Users/masa/Projects/mcp-vector-search/chunk-graph.json`
55
+
56
+ ```
57
+ Total nodes: 7015
58
+ Total links: 7006
59
+ Directory nodes: 26
60
+ Root directories: 5 (docs, examples, scripts, src, tests)
61
+ ```
62
+
63
+ Sample link structure:
64
+ ```json
65
+ {
66
+ "source": "dir_9f40c524",
67
+ "target": "dir_504f9a81",
68
+ "type": "dir_hierarchy"
69
+ }
70
+ ```
71
+
72
+ Example: `docs` directory has 22 child links, confirming hierarchy is correctly structured.
73
+
74
+ ## Debugging Added
75
+
76
+ I've added comprehensive console logging to help diagnose the issue:
77
+
78
+ ### Initial State Logging (Line 445-450)
79
+ Logs on page load:
80
+ - Total nodes and links
81
+ - Root nodes identified
82
+ - Initial visible and collapsed node sets
83
+
84
+ ### Click Handler Logging (Line 594-623)
85
+ Logs on every node click:
86
+ - Node name, type, and ID
87
+ - Whether node has children
88
+ - Whether node is collapsed
89
+ - Which action is taken (expand/collapse)
90
+
91
+ ### hasChildren() Logging (Line 587-590)
92
+ Logs every time it's called:
93
+ - Node name
94
+ - Result (true/false)
95
+ - Number of links checked
96
+
97
+ ### expandNode() Logging (Line 627-653)
98
+ Logs during expansion:
99
+ - Node being expanded
100
+ - Number of child links found
101
+ - Number of child nodes found
102
+ - Each child being added to visibleNodes
103
+ - Final visibleNodes size
104
+
105
+ ### renderGraph() Logging (Line 456-467)
106
+ Logs on every render:
107
+ - Size of visibleNodes and collapsedNodes sets
108
+ - Number of nodes being rendered
109
+ - Number of links being rendered
110
+
111
+ ## Testing Instructions
112
+
113
+ 1. **Open the visualization**:
114
+ ```bash
115
+ cd /Users/masa/Projects/mcp-vector-search/src/mcp_vector_search/visualization
116
+ open index.html
117
+ ```
118
+
119
+ 2. **Open Browser DevTools**:
120
+ - Press F12 or Cmd+Option+I (Mac)
121
+ - Go to the Console tab
122
+
123
+ 3. **Check Initial State**:
124
+ - You should see "=== INITIAL STATE ===" logged
125
+ - Verify root nodes are identified correctly
126
+ - Should show 5-9 root nodes
127
+
128
+ 4. **Click a Directory Node**:
129
+ - Click on "docs", "src", or another directory node
130
+ - Watch console for "=== NODE CLICKED ===" messages
131
+ - Check what happens:
132
+
133
+ ### Expected Behavior:
134
+ ```
135
+ === NODE CLICKED ===
136
+ Node: docs Type: directory ID: dir_9f40c524
137
+ hasChildren(docs): true Checking 7006 links for node ID: dir_9f40c524
138
+ Node has children: true
139
+ Node is collapsed: true
140
+ Expanding node...
141
+ expandNode(docs): Removing from collapsedNodes
142
+ Found 22 child links for node dir_9f40c524
143
+ Found 22 child nodes: [_archive, analysis, architecture, ...]
144
+ Adding child to visibleNodes: _archive (dir_504f9a81)
145
+ Adding child to visibleNodes: analysis (dir_abc123)
146
+ ...
147
+ visibleNodes now has 27 items
148
+ === renderGraph() called ===
149
+ visibleNodes.size: 27
150
+ Rendering 27 visible nodes
151
+ Rendering XX visible links
152
+ ```
153
+
154
+ ### Possible Issues to Look For:
155
+
156
+ #### Issue A: hasChildren() Returns False
157
+ **Symptom**: Console shows `Node has children: false`
158
+ **Cause**: Links not properly structured or node ID mismatch
159
+ **Check**:
160
+ - Are node IDs consistent between nodes and links?
161
+ - Are links properly loaded?
162
+
163
+ #### Issue B: No Children Found
164
+ **Symptom**: Console shows `Found 0 child links`
165
+ **Cause**: Link source/target ID mismatch or D3 mutation issue
166
+ **Check**:
167
+ - What is the format of `l.source` (string or object)?
168
+ - Does `l.source` or `l.source.id` match the node ID?
169
+
170
+ #### Issue C: Children Added But Not Rendered
171
+ **Symptom**: Console shows children added to visibleNodes, but renderGraph() shows same count
172
+ **Cause**: visibleNodes not being updated correctly
173
+ **Check**:
174
+ - Does `visibleNodes.size` increase after expansion?
175
+ - Are the new nodes actually being rendered?
176
+
177
+ #### Issue D: Click Handler Not Firing
178
+ **Symptom**: No "=== NODE CLICKED ===" in console
179
+ **Cause**: Event handler not attached or being blocked
180
+ **Check**:
181
+ - Are there any JavaScript errors on page load?
182
+ - Try clicking different parts of the node (center, edge, icon area)
183
+
184
+ ## Potential Root Causes
185
+
186
+ Based on the code analysis, here are the most likely issues:
187
+
188
+ ### 1. D3 Link Mutation Issue (MOST LIKELY)
189
+ **Problem**: D3's `forceLink()` mutates link objects, replacing string IDs with object references.
190
+
191
+ When `visibleLinks` is created by filtering `allLinks`, it creates a new array but **shares the same link objects**. When D3 mutates `visibleLinks`, it also mutates `allLinks`.
192
+
193
+ **Impact**: After first render, all links in `allLinks` have object references instead of strings. The `hasChildren()` function should still work due to the `(l.source.id || l.source)` pattern, but there could be edge cases.
194
+
195
+ **Test**: Check console to see if `hasChildren()` is returning the correct value after clicking.
196
+
197
+ ### 2. Event Propagation Issue
198
+ **Problem**: Click events might be consumed by drag handler or other events.
199
+
200
+ **Test**: Check if "=== NODE CLICKED ===" appears in console when clicking.
201
+
202
+ ### 3. Render Not Updating Visual State
203
+ **Problem**: Even if expansion logic works, the visual update might fail.
204
+
205
+ **Test**: Check if `renderGraph()` logs show increasing node counts after expansion.
206
+
207
+ ## Next Steps
208
+
209
+ 1. **Run the visualization with debugging**
210
+ 2. **Open browser console**
211
+ 3. **Click a directory node**
212
+ 4. **Copy all console output**
213
+ 5. **Analyze which of the above issues is occurring**
214
+
215
+ ## Files Modified
216
+
217
+ - `/Users/masa/Projects/mcp-vector-search/src/mcp_vector_search/visualization/index.html`
218
+ - Added comprehensive console.log() debugging throughout
219
+ - No logic changes - only added logging
220
+
221
+ ## Conclusion
222
+
223
+ The code logic appears correct. The issue is likely:
224
+
225
+ 1. **D3 link mutation** causing unexpected behavior in `hasChildren()` or `expandNode()`
226
+ 2. **Event handling** issue preventing clicks from being registered
227
+ 3. **Visual update** issue where expansion logic works but rendering doesn't update
228
+
229
+ The added debugging will help pinpoint the exact issue. Please run the visualization and check the browser console output when clicking nodes.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcp-vector-search
3
- Version: 0.12.1
3
+ Version: 0.12.2
4
4
  Summary: CLI-first semantic code search with MCP integration
5
5
  Project-URL: Homepage, https://github.com/bobmatnyc/mcp-vector-search
6
6
  Project-URL: Documentation, https://mcp-vector-search.readthedocs.io
@@ -490,6 +490,10 @@ uv sync
490
490
  # Install in development mode
491
491
  uv pip install -e .
492
492
 
493
+ # Test CLI from source (recommended during development)
494
+ ./dev-mcp version # Shows [DEV] indicator
495
+ ./dev-mcp search "test" # No reinstall needed after code changes
496
+
493
497
  # Run tests
494
498
  uv run pytest
495
499
 
@@ -498,6 +502,8 @@ uv run ruff check
498
502
  uv run mypy src/
499
503
  ```
500
504
 
505
+ For detailed development workflow and `dev-mcp` usage, see the [Development](#-development) section below.
506
+
501
507
  ### Adding Language Support
502
508
 
503
509
  1. Create a new parser in `src/mcp_vector_search/parsers/`
@@ -570,10 +576,64 @@ uv sync && uv pip install -e .
570
576
  # Run development tests
571
577
  ./scripts/dev-test.sh
572
578
 
573
- # Test CLI locally
579
+ # Run CLI from source (recommended during development)
580
+ ./dev-mcp version # Visual [DEV] indicator
581
+ ./dev-mcp status # Any command works
582
+ ./dev-mcp search "auth" # Immediate feedback on changes
583
+
584
+ # Alternative: use uv run directly
574
585
  uv run mcp-vector-search version
575
586
  ```
576
587
 
588
+ #### Using the `dev-mcp` Development Helper
589
+
590
+ The `./dev-mcp` script provides a streamlined way to run the CLI from source code during development, eliminating the need for repeated installations.
591
+
592
+ **Key Features:**
593
+ - **Visual [DEV] Indicator**: Shows `[DEV]` prefix to distinguish from installed version
594
+ - **No Reinstall Required**: Reflects code changes immediately
595
+ - **Complete Argument Forwarding**: Works with all CLI commands and options
596
+ - **Verbose Mode**: Debug output with `--verbose` flag
597
+ - **Built-in Help**: Script usage with `--help`
598
+
599
+ **Usage Examples:**
600
+ ```bash
601
+ # Basic commands (note the [DEV] prefix in output)
602
+ ./dev-mcp version
603
+ ./dev-mcp status
604
+ ./dev-mcp index
605
+ ./dev-mcp search "authentication logic"
606
+
607
+ # With CLI options
608
+ ./dev-mcp search "error handling" --limit 10
609
+ ./dev-mcp index --force
610
+
611
+ # Script verbose mode (shows Python interpreter, paths)
612
+ ./dev-mcp --verbose search "database"
613
+
614
+ # Script help (shows dev-mcp usage, not CLI help)
615
+ ./dev-mcp --help
616
+
617
+ # CLI command help (forwards --help to the CLI)
618
+ ./dev-mcp search --help
619
+ ./dev-mcp index --help
620
+ ```
621
+
622
+ **When to Use:**
623
+ - **`./dev-mcp`** → Development workflow (runs from source code)
624
+ - **`mcp-vector-search`** → Production usage (runs installed version via pipx/pip)
625
+
626
+ **Benefits:**
627
+ - **Instant Feedback**: Changes to source code are reflected immediately
628
+ - **No Build Step**: Skip the reinstall cycle during active development
629
+ - **Clear Context**: Visual `[DEV]` indicator prevents confusion about which version is running
630
+ - **Error Handling**: Built-in checks for uv installation and project structure
631
+
632
+ **Requirements:**
633
+ - Must have `uv` installed (`pip install uv`)
634
+ - Must run from project root directory
635
+ - Requires `pyproject.toml` in current directory
636
+
577
637
  **Stage B: Local Deployment Testing**
578
638
  ```bash
579
639
  # Build and test clean deployment
@@ -0,0 +1,338 @@
1
+ # QA Report: Content Pane Display Issue - RESOLVED
2
+
3
+ **Date:** 2025-10-30
4
+ **Reporter:** User
5
+ **QA Engineer:** Claude (QA Agent)
6
+ **Severity:** HIGH (Feature Not Working)
7
+ **Status:** FIXED ✓
8
+
9
+ ---
10
+
11
+ ## Issue Summary
12
+
13
+ **User Report:**
14
+ "Should see the data inspector for all node clicks. If it's a directory, a directory list. A file = full file listing, etc"
15
+
16
+ **Problem:**
17
+ The content pane (data inspector) was NOT appearing when clicking directory or file nodes. Only leaf nodes (nodes without children) showed the content pane.
18
+
19
+ ---
20
+
21
+ ## Root Cause Analysis
22
+
23
+ ### Investigation Process
24
+
25
+ 1. **Server Status Check:**
26
+ - Visualization server running on port 8090: ✓
27
+ - File path: `/Users/masa/Projects/mcp-vector-search/src/mcp_vector_search/visualization/index.html`
28
+
29
+ 2. **Code Analysis:**
30
+ - Examined click handler in deployed `index.html` (lines 482-497)
31
+ - Compared with template in `visualize.py` (lines 1106-1121)
32
+ - **Identified version mismatch:** Deployed file had outdated code
33
+
34
+ 3. **Data Analysis:**
35
+ - Verified `chunk-graph.json` structure
36
+ - Directory nodes: `has_content: False` (by design, will show listing)
37
+ - File nodes: `has_content: False` (will aggregate from chunks)
38
+ - Function/Class nodes: `has_content: True` ✓
39
+
40
+ ### Root Cause
41
+
42
+ The deployed `/Users/masa/Projects/mcp-vector-search/src/mcp_vector_search/visualization/index.html` contained an **outdated version** of the visualization code.
43
+
44
+ **Buggy Code (Deployed Version):**
45
+ ```javascript
46
+ function handleNodeClick(event, d) {
47
+ event.stopPropagation();
48
+
49
+ // If node has children, toggle expansion
50
+ if (hasChildren(d)) {
51
+ // PROBLEM: Only expand/collapse, NO content pane shown
52
+ if (collapsedNodes.has(d.id)) {
53
+ expandNode(d);
54
+ } else {
55
+ collapseNode(d);
56
+ }
57
+ renderGraph();
58
+ } else {
59
+ // Leaf node - show code viewer
60
+ showCodeViewer(d); // Only called for leaf nodes!
61
+ }
62
+ }
63
+ ```
64
+
65
+ **Issues with Buggy Code:**
66
+ - ❌ Directory nodes (have children) → Only expand/collapse
67
+ - ❌ File nodes (have children) → Only expand/collapse
68
+ - ✅ Leaf nodes (no children) → Show content pane
69
+ - ❌ Missing functions: `showContentPane()`, `showDirectoryContents()`, `showFileContents()`, etc.
70
+ - ❌ Missing CSS: `#content-pane` styling
71
+ - ❌ Missing HTML: `<div id="content-pane">` element
72
+ - ❌ Using old element: `#code-viewer` instead of `#content-pane`
73
+
74
+ ---
75
+
76
+ ## Fix Applied
77
+
78
+ ### Solution
79
+
80
+ Regenerated `index.html` from the correct template in `visualize.py` (lines 561-1464).
81
+
82
+ **Fixed Code (Template Version):**
83
+ ```javascript
84
+ function handleNodeClick(event, d) {
85
+ event.stopPropagation();
86
+
87
+ // Always show content pane when clicking any node
88
+ showContentPane(d); // ✓ FIXED: Called for ALL nodes
89
+
90
+ // If node has children, also toggle expansion
91
+ if (hasChildren(d)) {
92
+ if (collapsedNodes.has(d.id)) {
93
+ expandNode(d);
94
+ } else {
95
+ collapseNode(d);
96
+ }
97
+ renderGraph();
98
+ }
99
+ }
100
+ ```
101
+
102
+ ### Components Added/Fixed
103
+
104
+ **Functions Added:**
105
+ 1. ✓ `showContentPane(node)` - Main content display router (line 668)
106
+ 2. ✓ `showDirectoryContents(node, container)` - Directory listing (line 717)
107
+ 3. ✓ `showFileContents(node, container)` - File content aggregation (line 780)
108
+ 4. ✓ `showImportDetails(node, container)` - Import statement display (line 813)
109
+ 5. ✓ `showCodeContent(node, container)` - Code/docstring display (line 842)
110
+ 6. ✓ `closeContentPane()` - Close handler (line 870)
111
+
112
+ **CSS Added:**
113
+ - ✓ `#content-pane` - Fixed position, right-side panel (line 153)
114
+ - ✓ `#content-pane.visible` - Slide-in animation (line 168)
115
+ - ✓ `.pane-header`, `.pane-title`, `.pane-meta` - Header styling
116
+ - ✓ `.pane-content` - Content area styling
117
+ - ✓ `.directory-list` - Directory listing styles
118
+ - ✓ `.import-details` - Import statement styles
119
+
120
+ **HTML Added:**
121
+ ```html
122
+ <div id="content-pane">
123
+ <div class="pane-header">
124
+ <button class="collapse-btn" onclick="closeContentPane()">×</button>
125
+ <div class="pane-title" id="pane-title"></div>
126
+ <div class="pane-meta" id="pane-meta"></div>
127
+ </div>
128
+ <div class="pane-content" id="pane-content"></div>
129
+ </div>
130
+ ```
131
+
132
+ ### Implementation
133
+
134
+ ```bash
135
+ # Regenerated index.html from correct template
136
+ python3 << 'EOF'
137
+ import re
138
+
139
+ with open('src/mcp_vector_search/cli/commands/visualize.py', 'r') as f:
140
+ content = f.read()
141
+
142
+ match = re.search(r'html_content = """(.*?)"""', content, re.DOTALL)
143
+ if match:
144
+ html = match.group(1)
145
+ with open('src/mcp_vector_search/visualization/index.html', 'w') as f:
146
+ f.write(html)
147
+ EOF
148
+ ```
149
+
150
+ **File Details:**
151
+ - Location: `/Users/masa/Projects/mcp-vector-search/src/mcp_vector_search/visualization/index.html`
152
+ - Size: 32,145 bytes (previously: 23,632 bytes)
153
+ - Template source: `visualize.py` lines 561-1464
154
+
155
+ ---
156
+
157
+ ## Verification Results
158
+
159
+ ### Code Verification (Automated) ✓
160
+
161
+ ```
162
+ ✓ FIXED: handleNodeClick() now calls showContentPane(d) for all nodes
163
+ ✓ Found: function showContentPane
164
+ ✓ Found: function showDirectoryContents
165
+ ✓ Found: function showFileContents
166
+ ✓ Found: function showImportDetails
167
+ ✓ Found: function showCodeContent
168
+ ✓ Found: function closeContentPane
169
+ ✓ Found: #content-pane CSS styling
170
+ ✓ Found: <div id='content-pane'> HTML element
171
+ ✓ File size matches expected template size (32,145 bytes)
172
+ ```
173
+
174
+ ### Expected Behavior After Fix
175
+
176
+ **Test Case 1: Directory Node Click (📁)**
177
+ - ✓ Click directory node → Content pane slides in from right
178
+ - ✓ Shows directory name in header
179
+ - ✓ Displays directory listing (subdirectories, files, code chunks)
180
+ - ✓ Shows summary: "Total: X items (Y directories, Z files, N code chunks)"
181
+ - ✓ Node expands/collapses children (if any)
182
+
183
+ **Test Case 2: File Node Click (📄)**
184
+ - ✓ Click file node → Content pane slides in from right
185
+ - ✓ Shows filename in header
186
+ - ✓ Shows "Contains X code chunks"
187
+ - ✓ Displays full file content (aggregated from chunks, sorted by line)
188
+ - ✓ Node expands/collapses children (if any)
189
+
190
+ **Test Case 3: Import Node Click (⇄, L1)**
191
+ - ✓ Click import node → Content pane slides in from right
192
+ - ✓ Shows import statement as title
193
+ - ✓ Displays "Import Statement:" section with code
194
+ - ✓ Shows file path, line numbers, language metadata
195
+
196
+ **Test Case 4: Function/Class Node Click (ƒ, C)**
197
+ - ✓ Click function/class node → Content pane slides in from right
198
+ - ✓ Shows function/class name in header
199
+ - ✓ Displays docstring (if present) in highlighted section
200
+ - ✓ Shows full code content
201
+
202
+ **Test Case 5: UI/UX Verification**
203
+ - ✓ Content pane slides in smoothly (CSS animation)
204
+ - ✓ Fixed to right edge, 600px width, full height
205
+ - ✓ Close button (×) visible and functional
206
+ - ✓ Content scrollable if overflow
207
+ - ✓ Clicked node highlighted with yellow glow
208
+
209
+ ---
210
+
211
+ ## Manual Browser Testing Required
212
+
213
+ **Server:** http://localhost:8090
214
+ **Status:** Running on port 8090
215
+
216
+ ### Testing Instructions
217
+
218
+ **IMPORTANT:** You may need to **hard refresh** the browser to clear cache:
219
+ - **Chrome/Edge:** Ctrl+Shift+R (Windows/Linux) or Cmd+Shift+R (Mac)
220
+ - **Firefox:** Ctrl+F5 (Windows/Linux) or Cmd+Shift+R (Mac)
221
+ - **Safari:** Cmd+Option+R
222
+
223
+ ### Test Checklist
224
+
225
+ 1. **Directory Nodes:**
226
+ - [ ] Click a directory (📁) → Content pane appears
227
+ - [ ] Shows directory listing with folders/files/chunks
228
+ - [ ] Close button (×) works
229
+
230
+ 2. **File Nodes:**
231
+ - [ ] Click a file (📄) → Content pane appears
232
+ - [ ] Shows full file content or chunk listing
233
+ - [ ] Close button (×) works
234
+
235
+ 3. **Import Nodes:**
236
+ - [ ] Expand a file, click an L1 import (⇄) → Content pane appears
237
+ - [ ] Shows import statement and metadata
238
+ - [ ] Close button (×) works
239
+
240
+ 4. **Function/Class Nodes:**
241
+ - [ ] Expand a file, click a function (ƒ) or class (C) → Content pane appears
242
+ - [ ] Shows code and docstring (if present)
243
+ - [ ] Close button (×) works
244
+
245
+ 5. **Browser Console:**
246
+ - [ ] Open DevTools (F12)
247
+ - [ ] Check Console tab for errors
248
+ - [ ] Should see NO "undefined function" errors
249
+ - [ ] Should see NO JavaScript errors when clicking nodes
250
+
251
+ 6. **Visual Inspection:**
252
+ - [ ] Content pane slides in from right smoothly
253
+ - [ ] Pane is 600px wide, full height
254
+ - [ ] Clicked node has yellow highlight glow
255
+ - [ ] Content is readable and properly styled
256
+
257
+ ---
258
+
259
+ ## Success Criteria
260
+
261
+ - [x] ✓ Click handler calls `showContentPane()` for ALL nodes
262
+ - [x] ✓ All required display functions present
263
+ - [x] ✓ CSS styling for `#content-pane` present
264
+ - [x] ✓ HTML `<div id="content-pane">` element present
265
+ - [x] ✓ File size matches template (32KB+)
266
+ - [ ] ⏳ Manual browser testing confirms all node types display content
267
+ - [ ] ⏳ No JavaScript errors in browser console
268
+
269
+ **Status:** Code fix verified ✓ | Browser testing pending ⏳
270
+
271
+ ---
272
+
273
+ ## Technical Details
274
+
275
+ ### File Changes
276
+
277
+ **Modified File:**
278
+ - Path: `/Users/masa/Projects/mcp-vector-search/src/mcp_vector_search/visualization/index.html`
279
+ - Change: Regenerated from template in `visualize.py`
280
+ - Lines changed: Entire file (23,632 → 32,145 bytes)
281
+
282
+ **Key Code Changes:**
283
+
284
+ 1. **Click Handler (Line 1106-1121):**
285
+ ```diff
286
+ - if (hasChildren(d)) {
287
+ - expandNode/collapseNode(d);
288
+ - } else {
289
+ - showCodeViewer(d);
290
+ - }
291
+ + showContentPane(d); // Always show for ALL nodes
292
+ + if (hasChildren(d)) {
293
+ + expandNode/collapseNode(d);
294
+ + }
295
+ ```
296
+
297
+ 2. **Content Display Functions Added:**
298
+ - `showContentPane()` - Router based on node type
299
+ - `showDirectoryContents()` - Lists directory children
300
+ - `showFileContents()` - Aggregates file chunks
301
+ - `showImportDetails()` - Displays import statements
302
+ - `showCodeContent()` - Shows code and docstrings
303
+
304
+ 3. **UI Element Changed:**
305
+ - Old: `#code-viewer` (simple code display)
306
+ - New: `#content-pane` (full-featured inspector)
307
+
308
+ ### Why This Happened
309
+
310
+ The deployed `index.html` was out of sync with the template in `visualize.py`. The template contains the correct, feature-complete code, but it was never deployed to the actual visualization directory.
311
+
312
+ **Prevention:**
313
+ - Consider using a build step to ensure `index.html` is always generated from template
314
+ - Add a version comment to HTML files to track template sync
315
+ - Document the relationship between `visualize.py` template and deployed `index.html`
316
+
317
+ ---
318
+
319
+ ## Conclusion
320
+
321
+ **Issue:** RESOLVED ✓
322
+ **Fix Applied:** Regenerated index.html from correct template
323
+ **Code Verification:** PASSED ✓
324
+ **Browser Testing:** PENDING (manual verification required)
325
+
326
+ The content pane should now appear for ALL node clicks (directories, files, imports, functions, classes) as requested by the user. Each node type displays appropriate content in the data inspector panel.
327
+
328
+ **Next Steps:**
329
+ 1. Hard refresh browser (Cmd+Shift+R / Ctrl+Shift+R)
330
+ 2. Test each node type click
331
+ 3. Verify content pane appears and displays correct content
332
+ 4. Check browser console for errors
333
+ 5. Report any remaining issues
334
+
335
+ ---
336
+
337
+ **QA Sign-off:** Claude (QA Agent)
338
+ **Date:** 2025-10-30