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

Заметки

Блокнот с markdown, вложениями, категориями и чеклистами. Заметки — обычный текст для пользователя и для агента: можно отдать заметку агенту одним касанием (текст подставляется в поле ввода треда).

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

Снимок: 2026-10-11. Секция хаба Tools, тайл «Заметки» / «Notes», подпись «Заметки и идеи: сохранить и упорядочить». Доступен всегда.

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

  • Screen.Notes → NotesScreen (641 строка) — список заметок.
  • Screen.NoteEditor(isNew) → NoteEditorScreen (712) — редактор с markdown-предпросмотром.
  • ImageViewerScreen (237) — просмотр картинки-вложения.

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

Заметки и структура

  • Поля NoteEntity: id (UUID), title, body, category, createdAt, updatedAt, pinned, attachments.
  • Категории NoteCategory: WORK (Work), PERSONAL (Personal), IDEAS (Ideas), OTHER (Other).
  • Закрепление (togglePin/togglePinById) — закреплённые наверх.
  • Теги: allTags собирает из текста, textToTags/tagsToText.

Поиск, фильтры, сортировка

NotesViewModel (402 строки): updateSearch (полнотекстово), selectCategory, selectTag, setOnlyWithAttachments (только с вложениями), setSort, clearFilters, applyFilter. NoteFormat.filterNotes/sortNotes/matchRanges/snippetAround — подсветка совпадений и вырезка вокруг них. readSort — восстановление сортировки из prefs.

Чеклисты

toggleChecklist, appendChecklist — чекбоксы прямо в теле заметки; NoteMarkdown (200 строк) умеет разбирать и собирать markdown-структуру.

Вложения

  • NoteAttachment(name, mime, storedName, sizeBytes) — файл на диске.
  • addAttachment/removeAttachment, getAttachmentFile.
  • Просмотр: ImageViewerScreen, inline-превью InlineAttachmentCard, Coil для картинок.
  • openAttachmentExternally — открыть системным приложением.
  • loadNoteAttachment — загрузка во вьюпорт.

Редактор

  • NoteEditorScreen: заголовок, тело, категория, панель NoteEditorBar (NoteBarButton — чеклист, вложение, теги, закрепление).
  • Автосохранение: scheduleAutosave (по таймеру), saveNow/flushEditor (при уходе с экрана), saveEditorInternal.
  • Markdown-предпросмотр: buildPreviewChunks — текст режется на абзацы/код/ списки и рендерится.
  • Мета-строка: editorMetaLine — слова, символы, время изменения (wordCount, charCount, clockLabel).

Списки, карточки, действия

  • NoteCard (196) + NoteMonogram — карточка с монограммой.
  • SwipeToDeleteNote — свайп-удаление, undoDelete — отмена, purgeDeleted — окончательное удаление.
  • Лист действий NoteActionsSheet: поделиться (noteShareText), фильтры (NotesFilterSheet), передать агенту (NoteAgentSheet).
  • Копирование текста (copyText), exportZipName.

Экспорт и импорт

  • exportZip — zip: markdown-файлы с front matter + папка вложений.
  • importZip, importMarkdown, importJson — импорт; результат ImportResult(imported, skipped).

Передача агенту

NoteAgentSheet + noteDraftText — заметка (или её текст) попадает в поле ввода треда Codex как черновик. Это главный «мост» между блокнотом и агентом: написал идею → отдал агенту.

Где в коде

ФайлСтрокРоль
ui/notes/NoteEditorScreen.kt712Редактор, предпросмотр, панель действий
ui/notes/NotesScreen.kt641Список, свайп-удаление, действия
ui/notes/NotesViewModel.kt402Состояние, фильтры, автосохранение, вложения
ui/notes/NotesSheets.kt308Листы: действия, фильтры, агент
ui/notes/NoteFormat.kt207Форматирование, фильтры, метрики
ui/notes/NoteCard.kt196Карточка заметки
ui/notes/ImageViewerScreen.kt237Просмотр картинки
data/notes/NoteFileStore.kt231Файловое хранилище, zip
data/notes/NoteMarkdown.kt200Markdown-разбор
data/notes/NoteEntity.kt32Модель заметки

Данные и API

  • Хранилище — файлы, не Room. NoteFileStore: каждая заметка = отдельный файл {id}.json в filesDir/notes/, вложения — в filesDir/notes/attachments/{noteId}/.
  • Персист настроек — SharedPreferences (readSort).
  • Backend-эндпоинтов нет: заметки полностью локальные, доступ к Termux-файлам агент получает через file_read/file_write.
  • Мост: bridge.BridgeState.

Агент

MCP-тулы

Прямых «заметки»-тулов нет. Агент работает с ними как с файлами:

  • file_read/file_write (только /mcp) — прочитать/записать JSON заметки.
  • В чате — CodexAttach.

Путь «пользователь → агент»

noteDraftText кладёт текст заметки в поле ввода треда (Screen.CodexChat(draft=…)), пользователь жмёт «отправить». Обратно: агент может записать файл заметки через file_write, и она появится в списке.

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

  • Файлы, не база. Удаление файла = потеря заметки; синхронизации с облаком нет. Обмен — только zip.
  • Категория — enum с английскими названиями ("Work", "Ideas"), при импорте неизвестная категория падает в OTHER.
  • Автосохранение по таймеру. flushEditor обязателен при уходе — иначе последние правки могут не записаться.
  • Свайп-удаление обратимо только через undoDelete; purgeDeleted удаляет окончательно.
  • Фильтр «только с вложениями» скрывает заметки без файлов — при переносе папки вложений заметки «пустеют».

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

  • Каталог: data/InstrumentCatalog.kt (id notes).
  • Маршрут: ui/navigation/Screen.kt (Screen.Notes, Screen.NoteEditor).
  • Код UI: ui/notes/*.
  • Данные: data/notes/* (модель, файловое хранилище, markdown).
  • Мост: noteDraftText в MainRouter/CodexPages.

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