Возможности
- Список заготовок с поиском: ищет по названию, тегам и самому тексту.
- Фильтр по тегам чипами, первым идёт «все».
- У каждой строки видно название и первую непустую строку текста, причём вместо подстановок в ней многоточие.
- Счётчик использований показывается справа, но только у уже использованных заготовок.
- Звёздочка у закреплённых заготовок, закреплённые всегда выше остальных.
- В шапке — счётчик: сколько заготовок и сколько из них встроенных.
- Кнопка «+» открывает пустую заготовку с уже готовым скелетом текста и тремя полями: цель (обязательное), контекст, критерий готовности (обязательное).
- Меню «⋮»: обновить из файла, скопировать всю библиотеку в буфер как JSON, заменить библиотеку документом из буфера.
- Кнопка «Встроенные» возвращает встроенные заготовки, которых нет в файле.
- Форма работает в двух режимах и переключается одной кнопкой в шапке: «Заполнить» и «Изменить».
- В режиме заполнения — поля заготовки плюс предпросмотр готового текста с числом символов в заголовке секции.
- Подстановки
{{project}},{{thread}},{{model}}показываются отдельными полями, но только если они реально упомянуты в тексте заготовки; из чата они приходят уже заполненными, и их можно поправить руками. - Пока не заполнено хоть одно обязательное поле, главная кнопка неактивна и под полями красной строкой перечислено, что дописать.
- В режиме правки: название, теги через запятую, тело текста, редакторы полей с ключом, подписью, значением по умолчанию и переключателями «обязательное» и «многострочное», добавление и удаление полей.
- Кнопки «Создать» / «Сохранить», «Дублировать», «Удалить» с подтверждением.
- Кнопка удаления прямо пишет, что заготовку можно вернуть встроенной кнопкой.
- Дубликат получает название с пометкой «(копия)», счётчик обнуляется, закрепление снимается.
- Перед сохранением показывается карточка «Не сохранилось» с первыми шестью проблемами — ждать ошибки от сервера не нужно.
- Импорт из буфера заменяет библиотеку целиком, а не дополняет её.
- Главная кнопка зависит от того, откуда открыт экран: из чата — «Вставить в чат», из хаба — «Скопировать». Если вставка не сработала, текст всё равно попадает в буфер, а под кнопкой появляется об этом сообщение.
- Если фильтры ничего не нашли, в списке будет подсказка снять фильтры или вернуть встроенные заготовки.
- Счётчик использований растёт сразу в списке, а на сервер уходит фоном.
- В файле рядом лежит резервная копия библиотеки — она переписывается перед каждой записью.
Технические данные
| Параметр | Значение |
|---|---|
| Где лежит | файл ~/.y83-ws/prompts.json на сервере |
| Резервная копия | тот же файл с расширением .bak, один уровень |
| Версия документа | 1 |
| Заготовок максимум | 200 |
| Полей в заготовке максимум | 12 |
| Длина тела максимум | 8000 байт |
| Длина названия максимум | 80 символов |
| Идентификатор | латиница, цифры, дефис, подчёркивание |
| Ключ поля | латиница и цифры, начинается с буквы |
| Теги | до 8 штук, приводятся в нижний регистр, повторы убираются |
| Значение по умолчанию | обрезается до 200 символов |
| Иконка | только латинские буквы, иначе стирается |
| Зарезервированные подстановки | {{project}}, {{thread}}, {{model}} |
| Встроенных заготовок | 13 |
| Длина предпросмотра в списке | 96 символов |
| Запросов к серверу | 4 |
Более длинные границы: идентификатор до 48 символов, ключ поля до 32, один тег до 24 символов.
Четыре запроса: прочитать документ, записать документ, вернуть встроенные заготовки, отметить использование.
Что во встроенных заготовках
Тринадцать заготовок приезжают вместе с сервером, каждая под одну частую задачу и с проверяемым критерием готовности.
| Заготовка | Под что |
|---|---|
| Багфикс с воспроизведением | симптом, где, приёмка |
| UI-правка по y83-ux | что не так, экран и файл, приёмка |
| Собрать APK и поставить | что менялось |
| Ревью изменений | что ревьюить, базовая ветка |
| Разведка подсистемы | что разведать, без правок |
| План крупной задачи | задача, как поймём что готово |
| Разбить монолит-файл | файл, целевой размер |
| Разбор «зависло / пропали шаги» | что видно в приложении |
| Релиз на прод | что вошло, версия |
| Фича по существующему образцу | что сделать, образец в коде |
| Починить падающую сборку или тест | текст ошибки, команда проверки |
| Объяснить незнакомый код | что объяснить, насколько глубоко |
| Исследование темы с источниками | тема, зачем это нам |
Почти все они заточены под этот проект: в тексте прямо названы инструменты разработки и правила репозитория, так что заготовку про релиз или ревью имеет смысл читать перед отправкой.
Их можно править и удалять как обычные: кнопка «Встроенные» не затирает правки, а возвращает только те, которых в файле не хватает.
Подстановки и пустые строки
Плейсхолдер в тексте записывается как {{ключ}}, ключ — латиница, цифры и подчёркивание. Если значение поля не заполнено, берётся значение по умолчанию; если и его нет, подстановка считается пустой.
Рендер убирает из результата строки, в которых не осталось ничего, кроме подписи с двоеточием. Например, строка «Контекст: {{where}}» при незаполненном поле исчезает целиком, и в сообщение не попадает хвост с висящим двоеточием. Строка, где вокруг подстановки есть свой текст, остаётся: «Цель: собрать APK {{notes}}» — это не дыра.
Подряд идущие пустые строки тоже не дублируются, а лишние пробелы и переводы строк в конце текста срезаются.
Проверки на двух сторонах
Приложение проверяет документ до отправки, сервер проверяет после. Формулировки ошибок совпадают, чтобы сообщение не менялось в зависимости от того, кто заметил проблему первым.
Проверяется: уникальность идентификатора, непустое название в пределах лимита, непустое тело в пределах лимита, количество полей, формат ключа поля, запрет объявлять зарезервированный ключ, уникальность ключей, непустая подпись поля, каждый плейсхолдер в теле объявлен полем или зарезервирован, каждое обязательное поле реально встречается в теле.
Мелкие огрехи сервер не считает ошибкой, а молча чинит: пустую иконку стирает, теги приводит к нижнему регистру, длинное значение по умолчанию обрезает, идентификатор и ключи в нижний регистр, переносы строк приводит к unix-виду.
Почему заготовок нет в самом приложении
Вся библиотека лежит в одном файле на сервере, и этим же файлом пользуются инструменты агента. Второй копии нет намеренно: если бы экран держал свою версию, правки из чата и правки агента разъезжались бы, и пришлось бы разрешать конфликты. Вместо этого при недоступном сервере экран показывает текст ошибки и кнопку «Обновить».
Что агент умеет с заготовками
prompt_list— список заготовок с идентификатором, названием, тегами, объявленными полями и счётчиком, с фильтрами по подстроке и по тегу.prompt_get— подставить значения в текст заготовки и вернуть готовый текст и список незаполненных обязательных полей.prompt_save— создать или изменить заготовку, правила те же, что на экране; правки встроенных разрешены, счётчик и признак встроенной при этом не сбрасываются.
Чего агент не умеет: вставить текст в поле ввода вашего чата. Он получает готовый текст сам и может отправить его в свой ход, а кнопка «Вставить в чат» остаётся ручным действием.
Чего нет на экране: закрепления, ручного порядка и иконки. Эти три поля заготовка хранит, и агент может их задать через prompt_save, но вручную из приложения поставить их нельзя — ни закрепить заготовку, ни поднять её выше другой. Сортировка в списке: сначала закреплённые, дальше по заданному порядку, при равенстве по названию; заготовки без порядка уходят в конец.
Ограничения
- Экран бесполезен без сервера: локальной копии библиотеки нет, будет только текст ошибки и кнопка «Обновить».
- Импорт заменяет библиотеку целиком. Если в буфере документ из трёх заготовок, после импорта не останется ничего кроме них.
- Кнопка «Встроенные» возвращает только встроенные заготовки. Свою удалённую заготовку вернуть можно лишь импортом из буфера или из резервной копии файла, а кнопка удаления обещает возврат всем подряд — на деле это верно только для встроенных.
- Подстановки
{{project}},{{thread}},{{model}}заполняются только при открытии из чата. Из хаба они пустые и останутся пустыми, если не вписать руками. - Счётчик использований может не сохраниться, если связь с сервером пропала сразу после вставки: в списке он уже вырос, в файле — нет.
- Ключи полей и идентификаторы пишутся только латиницей. У русского названия без латинских букв идентификатор не получится — сохранится как
prompt-N. - Правила проверки существуют в двух местах и правятся вручную. Расхождение проявится только формулировкой сообщения, а не сутью проверки.