Skip to content

Частые проблемы ​

Что вы научитесь делать ​

  • ✅ Быстро диагностировать и решать проблемы с занятым портом
  • ✅ Понимать, почему браузер не открылся автоматически, и знать, как получить доступ
  • ✅ Устранять проблемы с отображением плана или код-ревью
  • ✅ Обрабатывать ситуации с ошибками выполнения Git-команд
  • ✅ Решать ошибки, связанные с загрузкой изображений
  • ✅ Диагностировать причины сбоя интеграции с Obsidian/Bear
  • ✅ Правильно получать доступ к Plannotator в удалённой среде

Ваша текущая ситуация ​

При использовании Plannotator вы можете столкнуться со следующими проблемами:

  • Проблема 1: При запуске появляется сообщение о занятом порте, сервер не запускается
  • Проблема 2: Браузер не открылся автоматически, непонятно, как получить доступ к интерфейсу ревью
  • Проблема 3: Страница плана или код-ревью пустая, контент не загружается
  • Проблема 4: При выполнении /plannotator-review появляется ошибка Git
  • Проблема 5: Загрузка изображения не удалась или изображение не отображается
  • Проблема 6: Интеграция с Obsidian/Bear настроена, но план не сохраняется автоматически
  • Проблема 7: В удалённой среде невозможно получить доступ к локальному серверу

Эти проблемы прерывают ваш рабочий процесс и влияют на удобство использования.

Основная концепция ​

Механизм обработки ошибок

Сервер Plannotator реализует механизм автоматического повтора:

  • Максимальное количество попыток: 5 раз
  • Задержка между попытками: 500 миллисекунд
  • Применимые сценарии: Занятый порт (ошибка EADDRINUSE)

При конфликте портов система автоматически пробует другие порты. Ошибка выдаётся только после 5 неудачных попыток.

Обработка ошибок в Plannotator следует следующим принципам:

  1. Приоритет локального вывода: Все сообщения об ошибках выводятся в терминал или консоль
  2. Плавная деградация: Сбой интеграции (например, сохранение в Obsidian) не блокирует основной процесс
  3. Чёткие подсказки: Предоставляются конкретные сообщения об ошибках и рекомендуемые решения

Частые проблемы и решения ​

Проблема 1: Занятый порт ​

Сообщение об ошибке:

Port 19432 in use after 5 retries

Анализ причин:

  • Порт уже занят другим процессом
  • В удалённом режиме настроен фиксированный порт, но возник конфликт
  • Предыдущий процесс Plannotator не завершился корректно

Решения:

Способ 1: Дождаться автоматического повтора (только для локального режима) ​

В локальном режиме Plannotator автоматически пробует случайные порты. Если вы видите ошибку занятого порта, это обычно означает:

  • Все 5 случайных портов заняты (крайне редко)
  • Настроен фиксированный порт (PLANNOTATOR_PORT), но он конфликтует

Вы должны увидеть: В терминале отображается "Port X in use after 5 retries"

Способ 2: Использовать фиксированный порт (удалённый режим) ​

В удалённой среде необходимо настроить PLANNOTATOR_PORT:

bash
export PLANNOTATOR_PORT=9999
plannotator start
powershell
$env:PLANNOTATOR_PORT = "9999"
plannotator start

Рекомендации по выбору порта

  • Выбирайте порт в диапазоне 1024-49151 (пользовательские порты)
  • Избегайте портов распространённых сервисов (80, 443, 3000, 5000 и т.д.)
  • Убедитесь, что порт не заблокирован файрволом

Способ 3: Завершить процесс, занимающий порт ​

bash
# Найти процесс, занимающий порт (замените 19432 на ваш порт)
lsof -i :19432  # macOS/Linux
netstat -ano | findstr :19432  # Windows

# Завершить процесс (замените PID на фактический ID процесса)
kill -9 <PID>  # macOS/Linux
taskkill /PID <PID> /F  # Windows

Внимание

Перед завершением процесса убедитесь, что это не важное приложение. Plannotator автоматически закрывает сервер после получения решения, обычно ручное завершение не требуется.


Проблема 2: Браузер не открылся автоматически ​

Симптом: В терминале отображается, что сервер запущен, но браузер не открылся.

Анализ причин:

СценарийПричина
Удалённая средаPlannotator обнаружил удалённый режим и пропустил автоматическое открытие браузера
Неверная настройка PLANNOTATOR_BROWSERНеправильный путь или имя браузера
Браузер не установленБраузер по умолчанию отсутствует в системе

Решения:

Сценарий 1: Удалённая среда (SSH, Devcontainer, WSL) ​

Проверьте, является ли среда удалённой:

bash
echo $PLANNOTATOR_REMOTE
# Вывод "1" или "true" означает удалённый режим

В удалённой среде:

  1. В терминале отображается URL для доступа:
Plannotator running at: http://localhost:9999
Press Ctrl+C to stop
  1. Откройте браузер вручную и перейдите по отображаемому URL

  2. Настройте проброс портов (если требуется доступ с локальной машины)

Вы должны увидеть: В терминале вывод типа "Plannotator running at: http://localhost:19432"

Сценарий 2: Локальный режим, но браузер не открылся ​

Проверьте настройку PLANNOTATOR_BROWSER:

bash
echo $PLANNOTATOR_BROWSER
# Должно вывести имя или путь браузера
powershell
echo $env:PLANNOTATOR_BROWSER

Сбросьте пользовательскую настройку браузера:

bash
unset PLANNOTATOR_BROWSER
plannotator start
powershell
$env:PLANNOTATOR_BROWSER = ""
plannotator start

Настройте правильный браузер (если требуется кастомизация):

bash
# macOS: используйте имя приложения
export PLANNOTATOR_BROWSER="Google Chrome"

# Linux: используйте путь к исполняемому файлу
export PLANNOTATOR_BROWSER="/usr/bin/google-chrome"

# Windows: используйте путь к исполняемому файлу
set PLANNOTATOR_BROWSER="C:\Program Files\Google\Chrome\Application\chrome.exe"

Проблема 3: План или код-ревью не отображается ​

Симптом: Браузер открылся, но страница пустая или не загружается.

Возможные причины:

ПричинаРевью планаКод-ревью
Параметр Plan пустой✅ Часто❌ Не применимо
Проблема с Git-репозиторием❌ Не применимо✅ Часто
Нет diff для отображения❌ Не применимо✅ Часто
Сервер не запустился✅ Возможно✅ Возможно

Решения:

Случай 1: Ревью плана не отображается ​

Проверьте вывод терминала:

bash
# Найти сообщения об ошибках
plannotator start 2>&1 | grep -i error

Частая ошибка 1: Параметр Plan пустой

Сообщение об ошибке:

400 Bad Request - Missing plan or plan is empty

Причина: Claude Code или OpenCode передали пустую строку в качестве plan.

Решение:

  • Убедитесь, что AI Agent сгенерировал валидное содержимое плана
  • Проверьте правильность настройки Hook или Plugin
  • Просмотрите логи Claude Code/OpenCode для получения дополнительной информации

Частая ошибка 2: Сервер не запустился корректно

Решение:

  • Проверьте, отображается ли в терминале сообщение "Plannotator running at"
  • Если нет, обратитесь к разделу "Проблема 1: Занятый порт"
  • Просмотрите Настройка переменных окружения для проверки конфигурации

Случай 2: Код-ревью не отображается ​

Проверьте вывод терминала:

bash
/plannotator-review 2>&1 | grep -i error

Частая ошибка 1: Нет Git-репозитория

Сообщение об ошибке:

fatal: not a git repository

Решение:

bash
# Инициализировать Git-репозиторий
git init

# Добавить файлы и закоммитить (если есть незакоммиченные изменения)
git add .
git commit -m "Initial commit"

# Запустить снова
/plannotator-review

Вы должны увидеть: В браузере отображается diff viewer

Частая ошибка 2: Нет diff для отображения

Симптом: На странице отображается "No changes" или подобное сообщение.

Решение:

bash
# Проверить наличие незакоммиченных изменений
git status

# Проверить наличие staged изменений
git diff --staged

# Проверить наличие коммитов
git log --oneline

# Переключить тип diff для просмотра разных диапазонов
# В интерфейсе код-ревью нажмите на выпадающее меню:
# - Uncommitted changes
# - Staged changes
# - Last commit
# - vs main (если на ветке)

Вы должны увидеть: diff viewer показывает изменения кода или сообщение "No changes"

Частая ошибка 3: Ошибка выполнения Git-команды

Сообщение об ошибке:

Git diff error for uncommitted: [конкретное сообщение об ошибке]

Возможные причины:

  • Git не установлен
  • Устаревшая версия Git
  • Проблема с конфигурацией Git

Решение:

bash
# Проверить версию Git
git --version

# Протестировать команду Git diff
git diff HEAD

# Если Git работает нормально, проблема может быть внутренней ошибкой Plannotator
# Просмотрите полное сообщение об ошибке и сообщите о баге

Проблема 4: Ошибка загрузки изображения ​

Сообщение об ошибке:

400 Bad Request - No file provided
500 Internal Server Error - Upload failed

Возможные причины:

ПричинаРешение
Файл не выбранНажмите кнопку загрузки и выберите изображение
Формат файла не поддерживаетсяИспользуйте формат png/jpeg/webp
Файл слишком большойСожмите изображение перед загрузкой
Проблема с правами на временную директориюПроверьте права на директорию /tmp/plannotator

Решения:

Проверьте загружаемый файл ​

Поддерживаемые форматы:

  • ✅ PNG (.png)
  • ✅ JPEG (.jpg, .jpeg)
  • ✅ WebP (.webp)

Неподдерживаемые форматы:

  • ❌ BMP (.bmp)
  • ❌ GIF (.gif)
  • ❌ SVG (.svg)

Вы должны увидеть: После успешной загрузки изображение отображается в интерфейсе ревью

Проверьте права на временную директорию ​

Plannotator автоматически создаёт директорию /tmp/plannotator. Если загрузка всё равно не удаётся, проверьте права на системную временную директорию.

Если требуется ручная проверка:

bash
# Проверить права на директорию
ls -la /tmp/plannotator

# Проверка в Windows
dir %TEMP%\plannotator

Вы должны увидеть: drwxr-xr-x (или аналогичные права) означает, что директория доступна для записи

Просмотрите инструменты разработчика браузера ​

  1. Нажмите F12, чтобы открыть инструменты разработчика
  2. Перейдите на вкладку "Network"
  3. Нажмите кнопку загрузки
  4. Найдите запрос /api/upload
  5. Проверьте статус запроса и ответ

Вы должны увидеть:

  • Код статуса: 200 OK (успех)
  • Ответ: {"path": "/tmp/plannotator/xxx.png"}

Проблема 5: Сбой интеграции с Obsidian/Bear ​

Симптом: После одобрения плана в приложении для заметок нет сохранённого плана.

Возможные причины:

ПричинаObsidianBear
Интеграция не включена✅✅
Vault/App не обнаружен✅N/A
Неверная настройка пути✅✅
Конфликт имён файлов✅✅
Сбой x-callback-urlN/A✅

Решения:

Проблемы интеграции с Obsidian ​

Шаг 1: Проверьте, включена ли интеграция

  1. В интерфейсе Plannotator нажмите на настройки (значок шестерёнки)
  2. Найдите раздел "Obsidian Integration"
  3. Убедитесь, что переключатель включён

Вы должны увидеть: Переключатель отображается синим цветом (включён)

Шаг 2: Проверьте обнаружение Vault

Автоматическое обнаружение:

  • Plannotator автоматически читает файл конфигурации Obsidian
  • Расположение файла конфигурации:
    • macOS: ~/Library/Application Support/obsidian/obsidian.json
    • Windows: %APPDATA%\obsidian\obsidian.json
    • Linux: ~/.config/obsidian/obsidian.json

Ручная проверка:

bash
cat ~/Library/Application\ Support/obsidian/obsidian.json
powershell
cat $env:APPDATA\obsidian\obsidian.json
bash
cat ~/.config/obsidian/obsidian.json

Вы должны увидеть: JSON-файл, содержащий поле vaults

Шаг 3: Настройте путь к Vault вручную

Если автоматическое обнаружение не сработало:

  1. В настройках Plannotator
  2. Нажмите "Manually enter vault path"
  3. Введите полный путь к Vault

Примеры путей:

  • macOS: /Users/yourname/Documents/ObsidianVault
  • Windows: C:\Users\yourname\Documents\ObsidianVault
  • Linux: /home/yourname/Documents/ObsidianVault

Вы должны увидеть: В выпадающем меню отображается введённое вами имя Vault

Шаг 4: Проверьте вывод терминала

Результат сохранения в Obsidian выводится в терминал:

bash
[Obsidian] Saved plan to: /path/to/vault/plannotator/Title - Jan 24, 2026 2-30pm.md

Сообщение об ошибке:

[Obsidian] Save failed: [конкретное сообщение об ошибке]

Частые ошибки:

  • Недостаточно прав → Проверьте права на директорию Vault
  • Недостаточно места на диске → Освободите место
  • Неверный путь → Убедитесь в правильности написания пути

Проблемы интеграции с Bear ​

Проверьте приложение Bear

  • Убедитесь, что Bear установлен на macOS
  • Убедитесь, что приложение Bear запущено

Протестируйте x-callback-url:

bash
# Тест в терминале
open "bear://x-callback-url/create?title=Test&text=Hello"

Вы должны увидеть: Bear открывается и создаёт новую заметку

Проверьте вывод терминала:

bash
[Bear] Saved plan to Bear

Сообщение об ошибке:

[Bear] Save failed: [конкретное сообщение об ошибке]

Решение:

  • Перезапустите приложение Bear
  • Убедитесь, что Bear обновлён до последней версии
  • Проверьте настройки прав macOS (разрешите Bear доступ к файлам)

Проблема 6: Проблемы доступа в удалённой среде ​

Симптом: В SSH, Devcontainer или WSL невозможно получить доступ к серверу из локального браузера.

Основная концепция:

Что такое удалённая среда

Удалённая среда — это удалённая вычислительная среда, доступ к которой осуществляется через SSH, Devcontainer или WSL. В такой среде необходимо использовать проброс портов для отображения удалённого порта на локальный, чтобы получить доступ к удалённому серверу из локального браузера.

Решения:

Шаг 1: Настройте удалённый режим ​

Установите переменные окружения в удалённой среде:

bash
export PLANNOTATOR_REMOTE=1
export PLANNOTATOR_PORT=9999
powershell
$env:PLANNOTATOR_REMOTE = "1"
$env:PLANNOTATOR_PORT = "9999"

Вы должны увидеть: В терминале вывод "Using remote mode with fixed port: 9999"

Шаг 2: Настройте проброс портов ​

Сценарий 1: Удалённый SSH-сервер

Отредактируйте ~/.ssh/config:

Host your-server
    HostName server.example.com
    User yourname
    LocalForward 9999 localhost:9999

Подключитесь к серверу:

bash
ssh your-server

Вы должны увидеть: После установки SSH-соединения локальный порт 9999 пробрасывается на удалённый порт 9999

Сценарий 2: VS Code Devcontainer

VS Code Devcontainer обычно автоматически пробрасывает порты.

Как проверить:

  1. В VS Code откройте вкладку "Ports"
  2. Найдите порт 9999
  3. Убедитесь, что статус порта "Forwarded"

Вы должны увидеть: Вкладка Ports показывает "Local Address: localhost:9999"

Сценарий 3: WSL (Windows Subsystem for Linux)

WSL по умолчанию использует проброс через localhost.

Способ доступа:

В браузере Windows напрямую перейдите по адресу:

http://localhost:9999

Вы должны увидеть: Интерфейс Plannotator отображается нормально

Шаг 3: Проверьте доступ ​

  1. Запустите Plannotator в удалённой среде
  2. В локальном браузере перейдите по адресу http://localhost:9999
  3. Убедитесь, что страница отображается нормально

Вы должны увидеть: Интерфейс ревью плана или код-ревью загружается нормально


Проблема 7: План/аннотации не сохраняются корректно ​

Симптом: После одобрения или отклонения плана аннотации не сохраняются или сохраняются в неправильном месте.

Возможные причины:

ПричинаРешение
Сохранение плана отключеноПроверьте опцию "Plan Save" в настройках
Неверный пользовательский путьПроверьте, доступен ли путь для записи
Содержимое аннотации пустоеЭто нормальное поведение (сохраняется только при наличии аннотаций)
Проблема с правами сервераПроверьте права на директорию сохранения

Решения:

Проверьте настройки сохранения плана ​

  1. В интерфейсе Plannotator нажмите на настройки (значок шестерёнки)
  2. Просмотрите раздел "Plan Save"
  3. Убедитесь, что переключатель включён

Вы должны увидеть: Переключатель "Save plans and annotations" синего цвета (включён)

Проверьте путь сохранения ​

Расположение по умолчанию:

bash
~/.plannotator/plans/  # Планы и аннотации сохраняются в этой директории

Пользовательский путь:

В настройках можно указать пользовательский путь сохранения.

Проверьте доступность пути для записи:

bash
ls -la ~/.plannotator
mkdir -p ~/.plannotator/plans
touch ~/.plannotator/plans/test.txt
rm ~/.plannotator/plans/test.txt
powershell
dir $env:USERPROFILE\.plannotator
New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\.plannotator\plans"

Вы должны увидеть: Команды выполняются успешно, без ошибок прав доступа

Просмотрите вывод терминала ​

Результат сохранения выводится в терминал:

bash
[Plan] Saved annotations to: ~/.plannotator/annotations/slug.json
[Plan] Saved snapshot to: ~/.plannotator/plans/slug-approved.md

Вы должны увидеть: Подобные сообщения об успехе


Итоги урока ​

В этом уроке вы научились:

  • Диагностировать проблемы с занятым портом: Использовать фиксированный порт или завершать занимающий процесс
  • Обрабатывать ситуацию, когда браузер не открылся: Определять удалённый режим, получать доступ вручную или настраивать браузер
  • Устранять проблемы с отображением контента: Проверять параметр Plan, Git-репозиторий, статус diff
  • Решать проблемы с загрузкой изображений: Проверять формат файла, права на директорию, инструменты разработчика
  • Исправлять сбои интеграции: Проверять конфигурацию, пути, права и вывод терминала
  • Настраивать удалённый доступ: Использовать PLANNOTATOR_REMOTE и проброс портов
  • Сохранять планы и аннотации: Включать сохранение планов и проверять права на путь

Запомните:

  1. Вывод терминала — лучший источник отладочной информации
  2. Удалённая среда требует проброса портов
  3. Сбой интеграции не блокирует основной процесс
  4. Используйте инструменты разработчика для просмотра деталей сетевых запросов

Следующие шаги ​

Если ваша проблема не описана в этом уроке, обратитесь к:


Приложение: Справочник по исходному коду ​

Нажмите, чтобы развернуть расположение исходного кода

Дата обновления: 2026-01-24

ФункцияПуть к файлуСтроки
Логика запуска сервера и повторных попытокpackages/server/index.ts79-335
Обработка ошибки занятого порта (ревью плана)packages/server/index.ts319-334
Обработка ошибки занятого порта (код-ревью)packages/server/review.ts252-267
Определение удалённого режимаpackages/server/remote.tsВесь файл
Логика открытия браузераpackages/server/browser.tsВесь файл
Выполнение Git-команд и обработка ошибокpackages/server/git.ts36-147
Обработка загрузки изображений (ревью плана)packages/server/index.ts153-174
Обработка загрузки изображений (код-ревью)packages/server/review.ts181-201
Интеграция с Obsidianpackages/server/integrations.tsВесь файл
Сохранение планаpackages/server/storage.tsВесь файл

Ключевые константы:

КонстантаЗначениеОписание
MAX_RETRIES5Максимальное количество попыток запуска сервера
RETRY_DELAY_MS500Задержка между попытками (миллисекунды)

Ключевые функции:

  • startPlannotatorServer() - Запуск сервера ревью плана
  • startReviewServer() - Запуск сервера код-ревью
  • isRemoteSession() - Определение удалённой среды
  • getServerPort() - Получение порта сервера
  • openBrowser() - Открытие браузера
  • runGitDiff() - Выполнение команды Git diff
  • detectObsidianVaults() - Обнаружение Obsidian vaults
  • saveToObsidian() - Сохранение плана в Obsidian
  • saveToBear() - Сохранение плана в Bear