Окно «Файлы» — это встроенный файловый менеджер и редактор: смотреть и изменять файлы проекта можно прямо в браузере, без установки дополнительных программ. Оно пригодится, чтобы вручную посмотреть или поправить то, что сделал агент, — или подготовить файлы для него.
Открытие окна «Файлы»
Откройте окно «Файлы», нажав кнопку «Файлы» в области ввода сообщений или на панели 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 или кнопку «Создать»
Новый файл сразу открывается в редакторе — можно начинать наполнять его содержимым. Новые папки появляются в дереве и раскрываются (пока пустые). Система проверяет имена на недопустимые символы и конфликты с уже существующими элементами.
Переименование файлов и папок
Переименование помогает навести порядок в проекте или исправить ошибку в имени: содержимое и расположение элемента сохраняются, меняется только имя.
Чтобы переименовать элемент:
- Выберите файл или папку в дереве одним нажатием
- Нажмите F2 или правой кнопкой мыши → «Переименовать»
- Введите новое имя (для файлов — с расширением)
- Нажмите Enter или кнопку «Переименовать»
Система не даст переименовать элемент в имя, которое уже есть в этой папке, — появится сообщение об ошибке.
Переименование папки автоматически обновляет пути всех файлов и подпапок внутри. Но если в коде есть жёстко прописанные пути или строки импорта со старым именем, их придётся обновить вручную.
Перемещение файлов и папок
Перемещение помогает реорганизовать структуру проекта: элемент переносится в другое место, сохраняя содержимое и свойства.
Чтобы переместить элемент:
- Выберите файл или папку в дереве одним нажатием
- Правой кнопкой мыши → «Переместить»
- В окне выбора папки перейдите по дереву к месту назначения
- Выберите папку и нажмите «Переместить»
При перемещении папки всё её содержимое (файлы и подпапки) переезжает вместе с ней, внутренняя структура сохраняется. Система проверит, что в месте назначения нет элемента с тем же именем, — случайная перезапись исключена.
Перемещение автоматически обновляет внутренние пути элементов. Но, как и при переименовании, относительные пути и строки импорта в коде со старым расположением, возможно, придётся поправить вручную. Например, перенос служебного файла из src/utils/ в src/lib/ потребует обновить все import, ссылающиеся на старый путь.
Удаление файлов и папок
Удаление убирает элементы насовсем, поэтому система всегда спрашивает подтверждение — чтобы случайно не потерять данные.
Чтобы удалить элемент:
- Выберите файл или папку в дереве одним нажатием
- Нажмите Delete или правой кнопкой мыши → «Удалить»
- Подтвердите в появившемся диалоге
- Проверьте имя и путь элемента — убедитесь, что выбрали правильный
- Нажмите «Удалить» или «Отмена», чтобы передумать
При удалении папки удаляются и все файлы внутри неё; диалог показывает, сколько элементов будет удалено, чтобы вы понимали масштаб.
Важно: удаление необратимо — корзины в приложении нет. Случайно удалённые файлы придётся восстанавливать из резервной копии (если она есть) или создавать заново. Всегда проверяйте диалог подтверждения перед нажатием «Удалить».
Путь к файлу
Над редактором видна панель пути — полный адрес открытого файла в структуре проекта. Он нужен, чтобы быстро ориентироваться и возвращаться к родительским папкам.
Например, для файла 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 не используются.