# BPMSoft CRM — RAG поиск по коду

Семантический поиск по кодовой базе проекта `C:\Work\BPMSoft\crm`.
Стек: **Qdrant** (векторная БД) + **Ollama nomic-embed-text** (эмбеддинги) + **MCP сервер** для Claude Code + **веб-интерфейс**.

---

## Инфраструктура

| Компонент        | Адрес                             | Описание                 |
| ---------------- | --------------------------------- | ------------------------ |
| Qdrant           | `http://localhost:6333`           | Векторная БД, Docker     |
| Qdrant Dashboard | `http://localhost:6333/dashboard` | Веб-интерфейс Qdrant     |
| Ollama           | `http://localhost:11434`          | Локальные эмбеддинги     |
| Веб-поиск        | `http://localhost:8765`           | Интерфейс поиска по коду |

Файлы проекта: `C:\Work\BPMSoft\crm\.rag\`

---

## Команды

### Запустить Qdrant (Docker)
```bash
docker start qdrant
```
> Контейнер настроен на `restart=always` — стартует автоматически вместе с Docker.

### Запустить веб-интерфейс поиска
```bash
python C:\Work\BPMSoft\crm\.rag\search_server.py
```
Открыть в браузере: `http://localhost:8765`

### Инкрементальное обновление индекса (только изменённые файлы)
```bash
python C:\Work\BPMSoft\crm\.rag\index_incremental.py
```
Запускать после изменения/добавления файлов в проекте. Работает быстро — обрабатывает только изменённые файлы.

### Полная переиндексация (редко, при крупных изменениях)
```bash
python C:\Work\BPMSoft\crm\.rag\index_codebase.py --reindex
```
> Занимает несколько часов — пересоздаёт всю коллекцию с нуля.

---

## Что индексируется

### C# (`BPMSoft.Configuration`)
- Методы, конструкторы → тип `method`
- Классы, структуры → тип `class` / `struct`
- Интерфейсы → тип `interface`
- Enum'ы → тип `enum`
- XML doc-комментарии включены в контекст

### JavaScript (`BPMSoft.Configuration`)
- ExtJS BPMSoft схемы (`/Schemas/*.js`) → тип `extjs_schema`
- Методы внутри схем → тип `extjs_method`
- Mixins схем → тип `extjs_mixins`
- Angular/src файлы (`/Files/src/js/`) → `function`, `js_class`, `js_method`
- Autogenerated JS платформы (`/Autogenerated/Src/`)

### Исключено из индекса
- `SvnPackages/` — SVN пакеты
- `node_modules/`, `bin/`, `obj/`, `dist/`
- `*.min.js` — минифицированные файлы
- Angular build cache `/.nx/`

---

## MCP сервер для Claude Code

Зарегистрирован автоматически. Доступные инструменты:

| Инструмент | Описание |
|------------|----------|
| `search_codebase` | Семантический поиск по запросу |
| `find_symbol` | Поиск класса/метода по имени |
| `find_in_namespace` | Все символы в namespace или по пути |

### Регистрация вручную (если слетела)
```bash
claude mcp add --transport stdio crm-rag -- cmd /c python C:\Work\BPMSoft\crm\.rag\mcp_server.py
```

### Проверить статус
```bash
claude mcp list
```

---

## Файлы

```
C:\Work\BPMSoft\crm\.rag\
├── index_codebase.py       # Полная индексация
├── index_incremental.py    # Инкрементальное обновление
├── mcp_server.py           # MCP сервер для Claude Code
├── search_server.py        # Веб-сервер поиска (FastAPI)
├── search_ui.html          # Интерфейс поиска
├── file_hashes.json        # Хеши файлов для инкрементальной индексации
└── qdrant_storage/         # Данные Qdrant (Docker volume)
```

---

## Зависимости Python

```bash
pip install qdrant-client tree-sitter tree-sitter-c-sharp tree-sitter-javascript requests fastapi uvicorn mcp
```

---

## Управление Docker контейнером

```bash
docker ps | grep qdrant          # статус
docker stop qdrant               # остановить
docker start qdrant              # запустить
docker logs qdrant               # логи
docker restart qdrant            # перезапустить
```
