Файлы

Окно «Файлы» — это встроенный файловый менеджер и редактор: смотреть и изменять файлы проекта можно прямо в браузере, без установки дополнительных программ. Оно пригодится, чтобы вручную посмотреть или поправить то, что сделал агент, — или подготовить файлы для него.


Открытие окна «Файлы»

Откройте окно «Файлы», нажав кнопку «Файлы» в области ввода сообщений или на панели Git. Оно также открывается при нажатии на значок редактирования файла на панели Git, по кнопке «Редактировать файл» в представлении diff или когда агент редактирует файл через сообщения инструментов.

Окно выглядит как большое перекрывающее окно с двумя частями: слева — дерево файлов (структура проекта), справа — редактор для просмотра и изменения содержимого. Такое разделение позволяет быстро переходить между файлами, не теряя из виду код.

Если окно открыто с панели Git или из сообщения инструмента, оно сразу показывает соответствующий файл. В остальных случаях — последний просмотренный файл или выбор по умолчанию.

Как открыть файл с панели Git:

  • Значок редактирования — у каждого файла на панели Git есть значок ручки: нажмите, чтобы открыть этот файл в окне «Файлы»
  • Кнопка «Файлы» — на панели Git есть своя кнопка «Файлы», открывающая окно от корня проекта
  • Редактировать файл в diff — в представлении diff Git есть кнопка «Редактировать файл», которая открывает изменённый файл в редакторе

Просмотр файлов в диалоге «Навыки»:

У диалога «Навыки» есть собственный просмотрщик файлов — чтобы смотреть и править файлы навыков (например, SKILL.md) отдельно от основного окна «Файлы».


Дерево файлов

Дерево файлов слева показывает всю структуру проекта: папки с раскрывающимся содержимым, файлы — со значками в зависимости от типа.

Навигация по дереву:

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

Клавиатурные сокращения:

  • Стрелки — перемещение вверх и вниз по файлам и папкам
  • Enter — открыть выбранный файл или развернуть/свернуть выбранную папку
  • Delete — удалить выбранный файл или папку (с подтверждением)
  • + (плюс) — развернуть выбранную папку
  • — (минус) — свернуть выбранную папку
  • F2 — переименовать выбранный файл или папку

Дерево запоминает, какие папки раскрыты: после закрытия и повторного открытия окна всё останется как вы оставили — не придётся разворачивать заново.


Редактор файлов

Редактор справа умеет всё, что нужно для работы с кодом прямо в браузере. Выберите файл в дереве — его содержимое появится в редакторе, готовое к просмотру и изменению.

Возможности редактора:

  • Подсветка синтаксиса — код раскрашивается по смыслу (ключевые слова, строки, комментарии), читать становится заметно проще
  • Номера строк — слева, чтобы удобно ссылаться на конкретные строки
  • Автосохранение — изменения сохраняются при вводе, ничего не потеряется
  • Счётчик токенов — внизу редактора: сколько «порций текста» занимает файл; полезно понимать расход при работе с ИИ
  • Выбор темы — светлая, тёмная или высококонтрастная — на ваш вкус

Поддерживаются обычные операции с текстом: ввод, удаление, выделение, копирование, вставка, отмена/повтор. Клавиши Ctrl+S (или Cmd+S на Mac) сохраняют файл вручную в любой момент, даже при включённом автосохранении.

Большие файлы загружаются эффективно, редактор остаётся отзывчивым даже на крупных проектах. Подсветка подстраивается под расширение файла автоматически: TypeScript, JavaScript, Python, HTML, CSS и другие языки распознаются без ручной настройки.


Запуск скриптов

Скрипт — это файл с набором команд (расширение .sh), который выполняет работу автоматически. Когда скрипт открыт в редакторе, в заголовке появляется кнопка «Запустить»: нажмите — и выполнение начнётся, вывод будет виден в реальном времени в окне «Вывод скрипта».

Окно «Вывод скрипта»:

В заголовке окна — имя скрипта, проект, к которому он относится, и счётчик прошедшего времени. Вывод идёт строка за строкой с автоматической прокруткой; если прокрутить вверх, чтобы посмотреть прошлое, автопрокрутка приостановится, и появится кнопка прокрутки вниз.

  • Копировать — копирует полный вывод в буфер обмена (отключена во время выполнения, чтобы не скопировать неполный результат)
  • Остановить — анимированная кнопка в заголовке завершает скрипт; закрытие окна тоже останавливает выполнение
  • Звук завершения — оповещение, когда скрипт закончил работу, даже если окно не в фокусе

Подсветка ошибок в выводе:

Вывод скрипта автоматически анализируется: строки, похожие на ошибки, подсвечиваются красным, предупреждения — оранжевым. Правила подсветки задаются файлом output.parser в папке .pastukhov/ проекта. Этот же формат используется для вывода сборок (build.parser) и развёртываний (deploy.parser).

Файл парсера прост: блоки [ERROR] и [WARNING] с шаблонами поиска по тексту (регулярные выражения). Для многострочных шаблонов (например, стек-трейсов Python) выражение заключается в двойные фигурные скобки: {{regex}}. Строки, начинающиеся с #, — комментарии.

# Shell command not found
[ERROR]
.*command not found
[/ERROR]

# Python traceback (multi-line)
[ERROR]
^Traceback \(most recent call last\)\:
{{.*}}
[/ERROR]

Править файл output.parser можно в окне «Файлы». Изменения вступают в силу при следующем запуске скрипта — перезапуск сервера не нужен.


Создание файлов и папок

Добавлять новые элементы можно панелью инструментов вверху окна или контекстным меню по правой кнопке мыши — набор функций одинаковый, выбирайте как удобнее.

Чтобы создать новый файл:

  • Нажмите кнопку «Новый файл» на панели инструментов или правой кнопкой мыши по дереву файлов → «Новый файл»
  • Появится окно с предложением ввести имя файла
  • Введите имя с расширением (например: helper.ts или styles.css)
  • Чтобы создать файл внутри определённой папки, укажите путь (например: src/utils/helper.ts)
  • Нажмите Enter или кнопку «Создать»

Чтобы создать новую папку:

  • Нажмите кнопку «Новая папка» на панели инструментов или правой кнопкой мыши по дереву файлов → «Новая папка»
  • Введите имя папки (например: components или tests)
  • Вложенные папки создаются через прямые слэши (например: src/components/ui)
  • Нажмите Enter или кнопку «Создать»

Новый файл сразу открывается в редакторе — можно начинать наполнять его содержимым. Новые папки появляются в дереве и раскрываются (пока пустые). Система проверяет имена на недопустимые символы и конфликты с уже существующими элементами.


Переименование файлов и папок

Переименование помогает навести порядок в проекте или исправить ошибку в имени: содержимое и расположение элемента сохраняются, меняется только имя.

Чтобы переименовать элемент:

  1. Выберите файл или папку в дереве одним нажатием
  2. Нажмите F2 или правой кнопкой мыши → «Переименовать»
  3. Введите новое имя (для файлов — с расширением)
  4. Нажмите Enter или кнопку «Переименовать»

Система не даст переименовать элемент в имя, которое уже есть в этой папке, — появится сообщение об ошибке.

Переименование папки автоматически обновляет пути всех файлов и подпапок внутри. Но если в коде есть жёстко прописанные пути или строки импорта со старым именем, их придётся обновить вручную.


Перемещение файлов и папок

Перемещение помогает реорганизовать структуру проекта: элемент переносится в другое место, сохраняя содержимое и свойства.

Чтобы переместить элемент:

  1. Выберите файл или папку в дереве одним нажатием
  2. Правой кнопкой мыши → «Переместить»
  3. В окне выбора папки перейдите по дереву к месту назначения
  4. Выберите папку и нажмите «Переместить»

При перемещении папки всё её содержимое (файлы и подпапки) переезжает вместе с ней, внутренняя структура сохраняется. Система проверит, что в месте назначения нет элемента с тем же именем, — случайная перезапись исключена.

Перемещение автоматически обновляет внутренние пути элементов. Но, как и при переименовании, относительные пути и строки импорта в коде со старым расположением, возможно, придётся поправить вручную. Например, перенос служебного файла из src/utils/ в src/lib/ потребует обновить все import, ссылающиеся на старый путь.


Удаление файлов и папок

Удаление убирает элементы насовсем, поэтому система всегда спрашивает подтверждение — чтобы случайно не потерять данные.

Чтобы удалить элемент:

  1. Выберите файл или папку в дереве одним нажатием
  2. Нажмите Delete или правой кнопкой мыши → «Удалить»
  3. Подтвердите в появившемся диалоге
  4. Проверьте имя и путь элемента — убедитесь, что выбрали правильный
  5. Нажмите «Удалить» или «Отмена», чтобы передумать

При удалении папки удаляются и все файлы внутри неё; диалог показывает, сколько элементов будет удалено, чтобы вы понимали масштаб.

Важно: удаление необратимо — корзины в приложении нет. Случайно удалённые файлы придётся восстанавливать из резервной копии (если она есть) или создавать заново. Всегда проверяйте диалог подтверждения перед нажатием «Удалить».


Путь к файлу

Над редактором видна панель пути — полный адрес открытого файла в структуре проекта. Он нужен, чтобы быстро ориентироваться и возвращаться к родительским папкам.

Например, для файла src/utils/helper.ts панель показывает:

src › utils › helper.ts

Каждый сегмент пути кликабелен: нажатие на папку открывает её в дереве файлов. Особенно удобно с глубоко вложенными файлами — путь позволяет быстро вернуться к родительским папкам, не прокручивая дерево вручную. При переключении между файлами путь обновляется сам и всегда показывает, какой файл сейчас активен.


Встроенный FTP-сервер

Оба Docker-образа (dev и min) содержат встроенный FTP-сервер vsftpd. FTP — это распространённый протокол передачи файлов: через него к файлам проекта можно подключаться привычными программами — FileZilla, WinSCP и другими — без захода в веб-интерфейс. Удобно, например, выгрузить сразу много файлов или работать с проектом из любимого файлового менеджера.

FTP-сервер живёт внутри Docker-контейнера и запускается автоматически при старте, если заданы учётные данные. Корневой каталог — /project, то есть доступны все файлы вашего проекта.

Настройка

Чтобы включить FTP-сервер, добавьте в конфигурацию контейнера две переменные окружения (полный список переменных):

  • AGENT_FTP_USER — имя пользователя для FTP-доступа
  • AGENT_FTP_PASSWORD — пароль для FTP-доступа

Пример в docker-compose.yml:

services:
  pastukhov_agent:
    image: maxpastukhov/agent:dev-latest
    ports:
      - "5001:80"
      - "21:21"          # FTP-порт
      - "30000-30009:30000-30009"  # пассивный режим
    volumes:
      - "./MyProject:/project"
    environment:
      - AGENT_LOGIN=agent
      - AGENT_PASSWORD=...
      - AGENT_FTP_USER=myuser
      - AGENT_FTP_PASSWORD=mypassword

Дополнительные переменные

  • AGENT_FTP_MIN_PORT — минимальный порт пассивного режима (по умолчанию: 30000)
  • AGENT_FTP_MAX_PORT — максимальный порт пассивного режима (по умолчанию: 30009)
  • AGENT_FTP_ADDRESS — адрес сервера для пассивного режима (по умолчанию определяется автоматически)

Порты

FTP-сервер использует два порта:

  • Порт 21 — командный канал (управление соединением)
  • Порты 30000–30009 — пассивный режим передачи данных

Оба диапазона нужно пробросить в docker-compose.yml (см. пример выше). Без проброса пассивных портов FTP-клиенты подключатся, но не смогут передавать файлы.

Если переменные AGENT_FTP_USER и AGENT_FTP_PASSWORD не заданы, FTP-сервер не запускается, и порты 21 и 30000–30009 не используются.