# InnerVoice — Telegram-бридж и MCP-сервер

## Назначение

Двусторонний Telegram-бридж для взаимодействия Claude (Code, IDE, браузер) с пользователем. MCP-сервер (Model Context Protocol) для стандартизированной интеграции. Поддержка нескольких проектов, очередь сообщений, удалённый запуск Claude, встроенный чатбот.

**Расположение:** `/home/innervoice/`
**PM2 процесс:** `innervoice`
**Порт:** 3456
**Стек:** TypeScript, Express 4.21, Telegraf 4.16, MCP SDK 1.22

## MCP-инструменты (7 штук)

| Инструмент | Описание |
|-----------|----------|
| `telegram_notify` | Отправка уведомления (info/success/warning/error/question) |
| `telegram_ask` | Вопрос с блокировкой до ответа (таймаут 5 мин) |
| `telegram_get_messages` | Получение непрочитанных сообщений |
| `telegram_reply` | Ответ пользователю |
| `telegram_check_health` | Статус бриджа, счётчики сообщений |
| `telegram_toggle_afk` | Вкл/выкл уведомлений |
| `telegram_check_queue` | Проверка очереди сообщений для проекта |

## Архитектура

```
Claude Code/IDE -> MCP Client -> MCP Server (stdio) -> HTTP (localhost:3456) -> Telegram Bot -> User
                                      |
                                 Auto-start bridge
                                 Register session
                                 Route tool calls
```

## Telegram-команды бота

```
/start     — инициализация, сохранение chat ID
/status    — здоровье бриджа
/sessions  — активные сессии Claude
/queue     — очередь сообщений
/projects  — зарегистрированные проекты
/register Name /path [--auto-spawn] — регистрация проекта
/unregister Name                    — удаление проекта
/spawn Name [prompt]                — запуск Claude в проекте
/spawned   — запущенные процессы Claude
/kill Name — остановка процесса Claude
/afk       — переключение AFK-режима
/rollback  — откат main на pre-chatbot тег (см. safety.md)
```

## Маршрутизация сообщений

Формат: `ProjectName: сообщение`

1. Ищет активную сессию Claude для проекта
2. Если Claude запущен -> доставляет в реальном времени
3. Если проект зарегистрирован с `--auto-spawn` -> запускает Claude
4. Если проект зарегистрирован без auto-spawn -> ставит в очередь
5. Если проект не найден -> ставит в очередь с пометкой "not registered"

**Важно:** URL-схемы (http, https, ftp и т.д.) исключены из парсинга как имена проектов.

## Чатбот

Встроенный чатбот для обработки сообщений без префикса проекта:
- Оценка сложности (simple/complex)
- История контекста (20 сообщений по умолчанию)
- Разбиение длинных ответов на части

## HTTP API

**Уведомления:** POST /notify, POST /toggle, GET /health, GET /status
**Сообщения:** GET /messages, POST /messages/read, POST /reply
**Вопросы:** POST /ask (блокирующий, с таймаутом)
**Сессии:** POST /session/register, GET /sessions
**Очередь:** GET /queue/:projectName, GET /queue/summary
**Проекты:** GET /projects, POST /projects/register, DELETE /projects/:name
**Спавн:** POST /spawn, GET /spawned, POST /kill/:projectName
**Задачи:** POST /tasks (интеграция с watchdog)

## Хранение данных

```
~/.innervoice/
├── queues/            # Очереди сообщений по проектам (JSON)
├── projects.json      # Реестр проектов
└── sessions.json      # Активные сессии
```

## Конфигурация

```env
TELEGRAM_BOT_TOKEN=...
TELEGRAM_CHAT_ID=...          # Автоопределение через /start
PORT=3456
HOST=localhost
ENABLED=true

CHATBOT_ENABLED=true
CHATBOT_CWD=/home/fitcrm-chatbot
CHATBOT_MAX_TURNS=10
CHATBOT_TIMEOUT=600000
CHATBOT_SESSION_TIMEOUT=1800000
CHATBOT_CONTEXT_MESSAGES=20

TASK_CWD=/home/fitcrm-chatbot
TASK_MAX_TURNS=50

# Безопасный merge (см. safety.md)
CHATBOT_AUTO_MERGE=true
CHATBOT_VALIDATE_LINT=true
CHATBOT_VALIDATE_TEST=true
CHATBOT_AUTO_RESTART=true
```

## Структура файлов

```
/home/innervoice/
├── src/
│   ├── index.ts              # Telegram бот + HTTP API, маршрутизация
│   ├── mcp-server.ts         # MCP-сервер (stdio), авто-старт бриджа
│   ├── chatbot.ts            # Чатбот: оценка сложности, контекст
│   ├── task-manager.ts       # CRUD задач через Claude Code API
│   ├── claude-spawner.ts     # Удалённый запуск Claude
│   ├── worktree-manager.ts   # Изоляция chatbot worktree, merge-протокол
│   ├── conflict-detector.ts  # Детекция конфликтов с мультиагентами
│   ├── project-registry.ts   # Управление проектами
│   └── queue-manager.ts      # Персистентная очередь сообщений
├── dist/                     # Скомпилированный JS
├── .env                      # Конфигурация
└── package.json
```

## Интеграция с Watchdog

Watchdog использует InnerVoice для:
- Отправки алертов: `POST /notify`
- Вопросов по dev backlog: `POST /ask`
- Создания задач: `POST /tasks`

## Команды

```bash
cd /home/innervoice
npm run build          # Сборка (tsc)
npm run dev            # Разработка
pm2 restart innervoice # Перезапуск
pm2 logs innervoice    # Логи
```
