5.7 KiB
AGENTS.md - Verstak Platform
Руководство для coding agents, работающих над Верстаком.
Язык общения с пользователем: русский. Названия API, файлов, команд, commit messages и технических сущностей можно оставлять на английском.
1. Назначение проекта
Верстак - local-first рабочая платформа вокруг дел. Дело собирает заметки, файлы, документы, ссылки, действия, журнал, активность, браузерные материалы и секреты в одном локальном vault.
Новая архитектурная цель: Верстак не монолитное приложение, а платформа с динамическими плагинами.
2. Главные инварианты
- Core не содержит notes/files/editor/activity/journal/browser inbox как обязательные внутренние фичи.
- Пользовательские функции реализуются как динамические плагины.
- Официальные плагины работают через тот же plugin runtime, что и сторонние.
- Плагины зависят от capabilities, а не от конкретных plugin IDs, если им нужна способность.
- Отсутствие optional capability не ошибка; UI action просто не появляется или плагин работает в degraded mode.
- Выключение плагина не удаляет пользовательские данные.
- Vault остается local-first и человекочитаемым.
- Sync server, browser extension и official plugins должны быть выделяемыми репозиториями.
- Секреты не хранятся как plain text notes.
3. Архитектурные документы
Перед работой прочитать:
verstak-platform-docs/01_Product_Vision.mdverstak-platform-docs/02_Platform_Architecture.mdverstak-platform-docs/04_Plugin_System.mdverstak-platform-docs/05_Official_Plugins.mdverstak-platform-docs/06_Migration_Strategy.md
Если код противоречит документам, не молча подгонять документы под код. Сначала понять, это старый монолитный долг или осознанное новое решение.
4. Plugin Rules
Manifest обязателен. Плагин должен объявлять:
id;name;version;apiVersion;provides;requires;optionalRequires;permissions;frontend/backendentry, если есть;contributes, если есть UI/actions/settings.
Нельзя:
- импортировать другой плагин напрямую;
- вызывать приватные backend methods другого плагина;
- читать чужой storage namespace без разрешения;
- создавать actions, если нет нужной capability;
- ронять приложение при ошибке плагина.
5. Plugin Manager
Plugin Manager UI - обязательный core-модуль.
Он должен показывать:
- installed plugins;
- enable/disable;
- status: loaded, disabled, failed, incompatible, degraded;
- version/apiVersion;
- source: official/local/third-party;
- provided capabilities;
- required/optional capabilities;
- permissions;
- settings button, если плагин предоставляет settings panel;
- diagnostics/error text.
6. Note/File Rules
Для notes:
- canonical folder:
Notes/; - Overview note:
Notes/Overview.md; - title и filename должны быть синхронизированы;
- filename строится из title как человекочитаемая безопасная проекция;
- при конфликте имени операция не должна молча добавлять
_2; нужен conflict dialog/suggestion.
Для files:
- file plugin не должен жестко зависеть от markdown editor;
- edit/preview actions появляются только при наличии соответствующих capabilities;
- opening external app остается fallback.
7. Work Style
После каждого этапа:
- build/check;
- targeted tests;
- ручная проверка ключевого сценария, если есть UI;
- self-review на забытые imports, dead code, orphaned functions, old monolith paths;
- обновить документацию, если изменился контракт.
Не принимать отчет "сделано", пока не проверено:
- приложение собирается;
- старые сценарии не сломаны;
- plugin enable/disable не оставляет мусорный UI;
- optional capabilities реально optional;
- failed plugin не роняет shell.
8. Запрет на монолитный откат
Если задача просит добавить новую пользовательскую функцию, сначала определить:
- это core platform feature?
- это official plugin?
- это capability?
- это contribution point?
Если функция относится к заметкам, файлам, редакторам, просмотру, activity, journal, browser inbox, search, secrets, import/export - по умолчанию это плагин, а не core.