---
title: "Файлы"
id: "343"
type: "page"
slug: "files"
published_at: "2026-05-19T11:30:45+00:00"
modified_at: "2026-10-03T16:51:42+00:00"
url: "https://pastukhov.com/agents/agent/docs/files"
markdown_url: "https://pastukhov.com/agents/agent/docs/files.md"
excerpt: "Окно «Файлы» — это встроенный файловый менеджер и редактор: смотреть и изменять файлы проекта можно…"
---

# Файлы

[https://pastukhov.com/agents/agent/docs/files.md](https://pastukhov.com/agents/agent/docs/files.md)

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

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

Откройте окно «Файлы», нажав кнопку «Файлы» в области ввода сообщений или на панели 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-сервер, добавьте в конфигурацию контейнера две переменные окружения ([полный список переменных](/agents/agent/docs/models)
):

- **`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 не используются.

**[← Чат](/agents/agent/docs/chat)**

**[Сборка и развёртывание →](/agents/agent/docs/build-deploy)**
