---
name: db-list
description: Управление реестром баз данных 1С (.v8-project.json). Используй когда пользователь говорит про базы данных, список баз, "добавь базу", "какие базы есть"
argument-hint: "[add|remove|show]"
allowed-tools:
  - Read
  - Write
  - Glob
  - AskUserQuestion
---

# /db-list — Управление реестром баз данных

Управляет файлом `.v8-project.json` — реестром информационных баз проекта. Файл хранит параметры подключения, алиасы, привязку к веткам Git.

## Usage

```
/db-list                    — показать список баз
/db-list add                — добавить базу (интерактивно)
/db-list remove <id>        — удалить базу из реестра
/db-list show <id|alias>    — подробности по базе
```

## Формат `.v8-project.json`

Файл размещается в корне проекта (рядом с `.git/`).

```json
{
  "v8path": "C:\\Program Files\\1cv8\\8.3.25.1257\\bin",
  "databases": [
    {
      "id": "dev",
      "name": "Разработка",
      "type": "file",
      "path": "C:\\Bases\\MyApp_Dev",
      "user": "Admin",
      "password": "",
      "aliases": ["dev", "разработка"],
      "branches": ["dev", "develop", "feature/*"],
      "configSrc": "C:\\WS\\myapp\\cfsrc"
    },
    {
      "id": "test",
      "name": "Тестовая",
      "type": "server",
      "server": "srv01",
      "ref": "MyApp_Test",
      "user": "Admin",
      "password": "123",
      "aliases": ["test", "тест"]
    }
  ],
  "default": "dev"
}
```

### Поля корневого объекта

| Поле | Тип | Описание |
|------|-----|----------|
| `v8path` | string | Каталог bin платформы 1С. Необязательный — если не задан, автоопределение |
| `databases` | array | Массив баз данных |
| `default` | string | id базы по умолчанию |

### Поля объекта базы данных

| Поле | Тип | Обязательное | Описание |
|------|-----|:------------:|----------|
| `id` | string | да | Уникальный идентификатор (латиница, без пробелов) |
| `name` | string | да | Человекочитаемое имя |
| `type` | `"file"` / `"server"` | да | Тип подключения |
| `path` | string | для file | Путь к каталогу файловой базы |
| `server` | string | для server | Адрес сервера 1С |
| `ref` | string | для server | Имя базы на сервере |
| `user` | string | нет | Имя пользователя 1С |
| `password` | string | нет | Пароль |
| `aliases` | string[] | нет | Альтернативные имена для быстрого доступа |
| `branches` | string[] | нет | Git-ветки или glob-паттерны (`release/*`, `feature/*`), привязанные к этой базе |
| `configSrc` | string | нет | Каталог XML-выгрузки конфигурации |

## Алгоритм разрешения базы данных

Этот алгоритм используется ВСЕМИ навыками (`db-*`, `epf-build`, `epf-dump`, `erf-build`, `erf-dump`) для определения целевой базы.

1. Если пользователь указал **параметры подключения** (путь, сервер) — используй напрямую
2. Если пользователь указал **базу по имени** — ищи совпадение в таком порядке:
   1. По `id` (точное совпадение)
   2. По `aliases` (совпадение в массиве с учётом морфологии: «тестовую» = «тестовая» = «тестовой»)
   3. По `name` (нечёткое совпадение с учётом морфологии и регистра)
3. Если пользователь **не указал** базу — сопоставь текущую ветку Git с `databases[].branches`:
   - Точное совпадение: ветка `dev` → `"branches": ["dev"]`
   - Glob-паттерн: ветка `release/2.1` → `"branches": ["release/*"]`
4. Если ветка не совпала — используй `default`
5. Если не найдено или неоднозначно — спроси пользователя
6. Если файл `.v8-project.json` не найден — спроси параметры подключения и предложи создать файл

После выполнения: если использованная база не зарегистрирована — предложи добавить через `/db-list add`.

### Автоопределение платформы

Если `v8path` не задан в конфиге:

```powershell
$v8 = Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" | Sort-Object -Descending | Select-Object -First 1
```

## Операции

### Показать список баз

Прочитай `.v8-project.json`, выведи таблицу:

```
ID      Имя           Тип      Путь/Сервер              По умолч.
dev     Разработка    file     C:\Bases\MyApp_Dev       ✓
test    Тестовая      server   srv01/MyApp_Test
```

### Добавить базу

Спроси у пользователя через AskUserQuestion:
- id, name, type (file/server)
- path (для file) или server + ref (для server)
- user, password (необязательно)
- aliases, branches (необязательно)

Добавь в массив `databases`. Если это первая база — установи как `default`.

### Удалить базу

Удали из массива `databases` по id. Если удаляемая была `default` — спросить новый default.

### Подробности по базе

Выведи все поля конкретной базы.

## Формирование строки подключения

Для использования в шаблонах команд других навыков:

**Файловая база:**
```
/F "<path>"
```

**Серверная база:**
```
/S "<server>/<ref>"
```

**Аутентификация** (добавляется если user задан):
```
/N"<user>" /P"<password>"
```

> **Важно**: между `/N` и именем пробела нет. Между `/P` и паролем пробела нет. Если пароль пустой — опусти `/P` целиком.
