mcp-vector-search 0.12.1__tar.gz → 0.12.3__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.
- mcp_vector_search-0.12.3/INVESTIGATION_EXPANSION_BUG.md +229 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/PKG-INFO +62 -2
- mcp_vector_search-0.12.3/QA_REPORT_ContentPane.md +338 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/README.md +61 -1
- mcp_vector_search-0.12.3/ROOT_NODE_FIX_SUMMARY.md +71 -0
- mcp_vector_search-0.12.3/dev-mcp +202 -0
- mcp_vector_search-0.12.3/scripts/README_FAVICON.md +121 -0
- mcp_vector_search-0.12.3/scripts/generate_favicon.py +280 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/__init__.py +2 -2
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/commands/visualize.py +22 -12
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v1-1024.png +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v1-128.png +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v1-16.png +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v1-256.png +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v1-32.png +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v1-512.png +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v1-64.png +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v1.ico +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v2-1024.png +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v2-128.png +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v2-16.png +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v2-256.png +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v2-32.png +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v2-512.png +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v2-64.png +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v2.ico +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v3-1024.png +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v3-128.png +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v3-16.png +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v3-256.png +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v3-32.png +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v3-512.png +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v3-64.png +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/favicon-v3.ico +0 -0
- mcp_vector_search-0.12.3/src/mcp_vector_search/visualization/index.html +2057 -0
- mcp_vector_search-0.12.1/src/mcp_vector_search/visualization/index.html +0 -658
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/.github/workflows/ci.yml +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/.gitignore +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/.pre-commit-config.yaml +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/CLAUDE.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/LICENSE +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/Makefile +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/PERFORMANCE_OPTIMIZATION_SUMMARY.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/CHANGELOG.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/CLI_FEATURES.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/DEPLOY.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/DEVELOPMENT.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/FEATURES.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/IMPROVEMENTS_SUMMARY.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/MCP_FILE_WATCHING.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/RELEASES.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/STRUCTURE.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/VERSIONING.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/VERSIONING_WORKFLOW.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/_archive/CLAUDE_20251009_pre_mpm_init.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/_archive/CLAUDE_MPM_INIT_SUMMARY_20251009.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/_archive/MPM_INIT_EXECUTIVE_SUMMARY.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/analysis/SEARCH_ANALYSIS_REPORT.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/analysis/SEARCH_IMPROVEMENT_PLAN.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/architecture/REINDEXING_WORKFLOW.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/debugging/SEARCH_BUG_ANALYSIS.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/developer/API.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/developer/CONTRIBUTING.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/developer/DEVELOPER.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/developer/LINTING.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/developer/REFACTORING_ANALYSIS.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/developer/TESTING.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/developer/TESTING_STRATEGY.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/developer/TEST_SUITE_SUMMARY.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/mcp-integration.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/optimizations/database-stats-chunked-processing.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/performance/CONNECTION_POOLING.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/performance/SEARCH_TIMING_ANALYSIS.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/prd/mcp_vector_search_prd_updated.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/reference/ENGINEER_TASK.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/reference/INSTALL.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/reference/INSTALL_COMMAND_ENHANCEMENTS.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/reference/MCP_SETUP.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/reference/PROJECT_ORGANIZATION.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/docs/technical/SIMILARITY_CALCULATION_FIX.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/examples/connection_pooling_example.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/examples/semi_automatic_reindexing_demo.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/mcp-vector-search-wrapper +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/pyproject.toml +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/pytest.ini +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/README.md +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/analyze_search_bottlenecks.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/build.sh +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/changeset.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/comprehensive_build.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/deploy-test.sh +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/dev-build.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/dev-setup.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/dev-test.sh +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/fix_linting.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/mcp-dev +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/monitor_search_performance.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/publish.sh +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/quick_search_timing.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/run_search_timing_tests.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/run_tests.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/search_performance_monitor.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/search_quality_analyzer.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/setup/mcp-vector-search.sh +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/setup/setup-alias.sh +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/setup-dev-mcp.sh +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/update_docs.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/version_manager.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/scripts/workflow.sh +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/__init__.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/commands/__init__.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/commands/auto_index.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/commands/config.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/commands/demo.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/commands/index.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/commands/init.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/commands/install.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/commands/install_old.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/commands/mcp.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/commands/reset.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/commands/search.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/commands/status.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/commands/uninstall.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/commands/watch.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/didyoumean.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/export.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/history.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/interactive.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/main.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/output.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/cli/suggestions.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/config/__init__.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/config/constants.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/config/defaults.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/config/settings.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/core/__init__.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/core/auto_indexer.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/core/connection_pool.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/core/database.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/core/directory_index.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/core/embeddings.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/core/exceptions.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/core/factory.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/core/git_hooks.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/core/indexer.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/core/models.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/core/project.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/core/scheduler.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/core/search.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/core/watcher.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/mcp/__init__.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/mcp/__main__.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/mcp/server.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/parsers/__init__.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/parsers/base.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/parsers/dart.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/parsers/html.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/parsers/javascript.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/parsers/php.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/parsers/python.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/parsers/registry.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/parsers/ruby.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/parsers/text.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/parsers/utils.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/py.typed +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/utils/__init__.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/utils/gitignore.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/utils/monorepo.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/utils/timing.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/src/mcp_vector_search/utils/version.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/tests/__init__.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/tests/conftest.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/tests/sample_code/ast_test_javascript.js +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/tests/sample_code/ast_test_python.py +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/tests/sample_code/ast_test_typescript.ts +0 -0
- {mcp_vector_search-0.12.1 → mcp_vector_search-0.12.3}/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.
|
|
3
|
+
Version: 0.12.3
|
|
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
|
-
#
|
|
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
|