y83 code / инструмент

Файлы

Файловый менеджер с двумя источниками: локальная файловая система Termux и удалённые хосты (SSH-агенты). Это не системный Android-файловик — он ходит через backend ws-backend по REST (/api/v1/fs/ и /api/v1/remote/fs/), поэтому одинаково работает с /data/data/com.termux/files/home и с удалёнными серверами.

раздел реестра
Инструменты
код
3 924 строк в 10 файлах
документ
02-files.md

Снимок: 2026-10-11. Секция хаба Tools, тайл «Файлы» / «Files», подпись «Просмотр, правка и передача файлов на устройстве и серверах» / «View, edit and transfer files on device and servers». Доступен всегда.

Что это

Плюс просмотрщик текста/картинок/markdown/кода (FileViewerScreen).

Экран и навигация

Маршруты:

  • Screen.LocalFiles → FileManagerScreen с переключателем источников (showSources = true): termux плюс каждый SSH-сервер из remote_servers. Выбор источника живёт в шапке: подпись :termux ⌄ в терминальном промпте открывает окно FileSourceWindow (секции «Устройство» / «SSH-серверы»); строка чипов над списком убрана, чтобы не занимать место у клавиатуры.
  • Screen.ServerFiles(serverId) → тот же экран, но источник прибит к серверу (пункт «Файлы» в меню карточки сервера и мост server_files). Требует только SSH — туннель и codex app-server не нужны.
  • Screen.FsFile(path) → тот же FileManagerScreen, но viewerOnly = true (открытие файла-вложения из чата/моста).
  • Источник: FsSource — интерфейс с двумя реализациями (host-local через /api/v1/fs/*, remote через /api/v1/remote/fs/*); варианты собирает fileSourceOptions (ui/files/FileSources.kt), недоступные серверы несут причину и чип гаснет.

Возможности (подробно)

Обзор и навигация

  • Старт: bootstrap → probeLocations — список корней (Termux HOME, sdcard, пользовательские addLocation).
  • loadDir(dir) — листинг, refresh, up/goToPath(path) — навигация, customRoots — свои корни, forgetLastPath — сброс последнего пути.
  • Хлебные крошки (breadcrumb), скрытые файлы (toggleHidden), поиск (startSearch/clearSearch — через /api/v1/fs/search).

Сортировка и фильтры

  • applySort (имя/размер/дата/тип), filterItems, sortItems в FileFormat.kt.
  • FileSortSheet — bottomSheet выбора сортировки.

Выделение и массовые операции

  • toggleSelect/selectAll/clearSelection — множественное выделение.
  • Буфер обмена ФМ: setClipboard/paste/clearClipboard.
  • Массовые действия (FileBulkSheet): копировать, переместить, удалить, скачать/загрузить. copySelectionTo/moveSelectionTo → runOperation.

Создание, переименование, удаление

  • createFolder, createFile (через /api/v1/fs/mkdir + запись), rename (через /api/v1/fs/move), delete (через /api/v1/fs/delete).
  • Диалоги: FileNameDialog (создать/переименовать), FileActionsSheet, FileMoreSheet, FileNewSheet.

Свойства и размер

  • loadProperties/closeProperties — панель свойств (FilePropertiesSheet): права, размер, дата, тип.
  • computeSize — рекурсивный размер папки (через /api/v1/fs/du).

Передача файлов (upload/download)

  • upload — загрузка с устройства в backend-хоста (multipart, /api/v1/fs/upload), downloadFiles/startDownload — скачивание на устройство (через DownloadManager + mediaStoreSink/SAF).
  • Прогресс: setTransfer/reportProgress/cancelTransfer — панель FileTransferBar с процентами и отменой.

Просмотр и редактирование

  • FileViewerScreen (453 строки) + ZoomableImage — просмотр картинок с зумом.
  • guessMime — определение типа по расширению, fileKind/fileKindLabel — категория (изображение/текст/код/markdown/медиа/архив).
  • openFileExternally — открыть системным приложением, shareFileExternally — поделиться, copyTextToClipboard — копировать текст.
  • saveToDownloads — сохранить картинку из просмотрщика.

Ошибки и устойчивость

  • friendlyFsError — человеческие сообщения вместо сырых кодов.
  • isProtectedPath — защита системных путей от записи.

Где в коде

ФайлСтрокРоль
ui/files/FileManagerScreen.kt983Главный экран, PickerBar, открытие/скачивание
ui/files/FileManagerViewModel.kt631Состояние, операции, передача, локации
ui/files/FileSheets.kt478BottomSheet: действия, массовые, сортировка, свойства, локации
ui/files/FileViewerScreen.kt453Просмотрщик, зум картинок
ui/files/FileRows.kt436Строки файлов, панели управления/выбора/передачи
ui/files/FileFormat.kt265Форматирование, типы файлов, ошибки
ui/files/FsSource.kt137Источник: локальный /fs/* или remote /remote/fs/*
ui/files/FileSources.kt96Варианты источников (termux + серверы), причины блокировки
ui/files/FileModels.kt107Модели данных

Данные и API

data/api/BackendApiFs.kt + data/api/RemoteFsApi.kt — два параллельных набора по 13 операций (home, list, stat, statfs, du, search, mkdir, move, copy, delete, read, write, upload/download) для локального хоста и remote.

Репозиторий: data/repo/FsRepository.kt. Сеть: data/net/HttpClients (OkHttp). Права на sdcard/фото — через SAF (filemanager.StorageAccess).

Агент

MCP-тулы

  • file_read(path, mode=lines|bytes, offset, limit, cursor) — прочитать куском, только профиль /mcp.
  • file_write(path, content) — записать атомарно в whitelist-корни (backend/, y83-ws, uploads/, tmp/…), только /mcp.
  • json_query(json|path, query) — запрос по dot-пути к JSON, только /mcp.

В чате Codex агент ходит по файлам через CodexAttach/fs/*, а не через MCP-файловые тулы (их нет в /mcp/codex).

Мост

  • app_files — список файлов/папок в директории.
  • app_navigate + app_ui_action — открыть ФМ и работать по элементам.

Как агент открывает

app_navigate на Screen.LocalFiles, или MCP file_read/file_write без открытия экрана (предпочтительнее для агента).

Подводные камни

  • Два источника, один UI. FsSource выбирается по текущему хосту; один и тот же путь на локальном хосте и на сервере — разные файлы.
  • Права на sdcard. Через SAF, не через Termux-права — на Android 13+ запись в公共ные папки требует выданного доступа.
  • Передача больших файлов. upload идёт multipart через OkHttp — при обрыве прогресс теряется, есть только отмена.
  • du на больших папках. Рекурсивный размер — дорогая операция.
  • isProtectedPath. Попытка писать в системные пути блокируется.

Как обновлять

  • Каталог: data/InstrumentCatalog.kt (id files).
  • Маршрут: ui/navigation/Screen.kt (Screen.LocalFiles, Screen.FsFile), MainRouter.
  • Код: ui/files/*.
  • API: data/api/BackendApiFs.kt, data/api/RemoteFsApi.kt, backend/internal/api/v1/routes.go (/api/v1/fs/*, /api/v1/remote/fs/*).
  • Репозиторий: data/repo/FsRepository.kt.

Источник: docs/project/hub/02-files.md · Инструменты · 3 924 строк в 10 файлах. Страница собирается из документации проекта при сборке сайта.