mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-06 01:54:11 +08:00
- Implement tests for migration 005 to verify removal of deprecated fields in the database schema. - Ensure that new databases are created with a clean schema. - Validate that keywords are correctly extracted from the normalized file_keywords table. - Test symbol insertion without deprecated fields and subdir operations without direct_files. - Create a detailed search comparison test to evaluate vector search vs hybrid search performance. - Add a script for reindexing projects to extract code relationships and verify GraphAnalyzer functionality. - Include a test script to check TreeSitter parser availability and relationship extraction from sample files.
142 lines
3.9 KiB
Bash
142 lines
3.9 KiB
Bash
#!/bin/bash
|
||
# 重新索引项目以提取代码关系数据
|
||
# 用于解决 Graph Explorer 显示为空的问题
|
||
|
||
set -e
|
||
|
||
PROJECT_PATH="${1:-D:/Claude_dms3}"
|
||
INDEX_DIR="$HOME/.codexlens/indexes"
|
||
|
||
# 规范化路径用于索引目录
|
||
NORMALIZED_PATH=$(echo "$PROJECT_PATH" | sed 's|^/\([a-z]\)/|\U\1/|' | sed 's|^/||')
|
||
INDEX_DB_DIR="$INDEX_DIR/$NORMALIZED_PATH"
|
||
INDEX_DB="$INDEX_DB_DIR/_index.db"
|
||
|
||
echo "=========================================="
|
||
echo "CodexLens 重新索引工具"
|
||
echo "=========================================="
|
||
echo "项目路径: $PROJECT_PATH"
|
||
echo "索引路径: $INDEX_DB"
|
||
echo ""
|
||
|
||
# 检查数据库是否存在
|
||
if [ ! -f "$INDEX_DB" ]; then
|
||
echo "❌ 索引数据库不存在: $INDEX_DB"
|
||
echo "请先运行: codex init $PROJECT_PATH"
|
||
exit 1
|
||
fi
|
||
|
||
# 检查当前数据统计
|
||
echo "📊 当前数据统计:"
|
||
sqlite3 "$INDEX_DB" "
|
||
SELECT
|
||
'文件数: ' || (SELECT COUNT(*) FROM files) ||
|
||
' | 符号数: ' || (SELECT COUNT(*) FROM symbols) ||
|
||
' | 关系数: ' || (SELECT COUNT(*) FROM code_relationships);
|
||
"
|
||
|
||
RELATIONSHIPS_COUNT=$(sqlite3 "$INDEX_DB" "SELECT COUNT(*) FROM code_relationships;")
|
||
|
||
if [ "$RELATIONSHIPS_COUNT" -gt 0 ]; then
|
||
echo ""
|
||
echo "✅ 数据库已包含 $RELATIONSHIPS_COUNT 个代码关系"
|
||
echo "如果 Graph Explorer 仍然显示为空,请检查前端控制台错误"
|
||
exit 0
|
||
fi
|
||
|
||
echo ""
|
||
echo "⚠️ 检测到 code_relationships 表为空"
|
||
echo ""
|
||
echo "解决方案:"
|
||
echo "1. 备份现有索引(推荐)"
|
||
echo "2. 删除旧索引"
|
||
echo "3. 重新索引项目"
|
||
echo ""
|
||
|
||
read -p "是否继续?这将删除并重建索引。(y/N) " -n 1 -r
|
||
echo
|
||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||
echo "已取消"
|
||
exit 0
|
||
fi
|
||
|
||
# 1. 备份现有索引
|
||
BACKUP_DIR="$INDEX_DB_DIR/backup_$(date +%Y%m%d_%H%M%S)"
|
||
echo ""
|
||
echo "📦 备份现有索引到: $BACKUP_DIR"
|
||
mkdir -p "$BACKUP_DIR"
|
||
cp "$INDEX_DB" "$BACKUP_DIR/"
|
||
echo "✓ 备份完成"
|
||
|
||
# 2. 删除旧索引
|
||
echo ""
|
||
echo "🗑️ 删除旧索引..."
|
||
rm -f "$INDEX_DB"
|
||
echo "✓ 已删除"
|
||
|
||
# 3. 重新索引
|
||
echo ""
|
||
echo "🔍 重新索引项目(这可能需要几分钟)..."
|
||
cd "$PROJECT_PATH"
|
||
|
||
# 使用 CodexLens CLI 重新索引
|
||
if command -v codex &> /dev/null; then
|
||
codex init .
|
||
else
|
||
echo "❌ 未找到 codex 命令"
|
||
echo "请先安装 CodexLens:"
|
||
echo " cd codex-lens"
|
||
echo " pip install -e ."
|
||
exit 1
|
||
fi
|
||
|
||
# 4. 验证结果
|
||
echo ""
|
||
echo "📊 重新索引后的数据统计:"
|
||
sqlite3 "$INDEX_DB" "
|
||
SELECT
|
||
'文件数: ' || (SELECT COUNT(*) FROM files) ||
|
||
' | 符号数: ' || (SELECT COUNT(*) FROM symbols) ||
|
||
' | 关系数: ' || (SELECT COUNT(*) FROM code_relationships);
|
||
"
|
||
|
||
RELATIONSHIPS_AFTER=$(sqlite3 "$INDEX_DB" "SELECT COUNT(*) FROM code_relationships;")
|
||
|
||
echo ""
|
||
if [ "$RELATIONSHIPS_AFTER" -gt 0 ]; then
|
||
echo "✅ 成功!已提取 $RELATIONSHIPS_AFTER 个代码关系"
|
||
echo ""
|
||
echo "📋 示例关系:"
|
||
sqlite3 "$INDEX_DB" "
|
||
SELECT
|
||
s.name || ' --[' || r.relationship_type || ']--> ' || r.target_qualified_name
|
||
FROM code_relationships r
|
||
JOIN symbols s ON r.source_symbol_id = s.id
|
||
LIMIT 5;
|
||
" | head -5
|
||
echo ""
|
||
echo "下一步:"
|
||
echo "1. 启动 CCW Dashboard: ccw view"
|
||
echo "2. 点击左侧边栏的 Graph 图标"
|
||
echo "3. 应该能看到代码关系图谱"
|
||
else
|
||
echo "⚠️ 警告:关系数据仍然为 0"
|
||
echo ""
|
||
echo "可能原因:"
|
||
echo "1. 项目中没有 Python/JavaScript/TypeScript 文件"
|
||
echo "2. TreeSitter 解析器未正确安装"
|
||
echo "3. 文件语法错误导致解析失败"
|
||
echo ""
|
||
echo "调试步骤:"
|
||
echo "1. 检查项目语言:"
|
||
sqlite3 "$INDEX_DB" "SELECT DISTINCT language FROM files LIMIT 10;"
|
||
echo ""
|
||
echo "2. 测试 GraphAnalyzer:"
|
||
echo " python -c 'from codexlens.semantic.graph_analyzer import GraphAnalyzer; print(GraphAnalyzer(\"python\").is_available())'"
|
||
fi
|
||
|
||
echo ""
|
||
echo "=========================================="
|
||
echo "完成"
|
||
echo "=========================================="
|