5.8 KiB
AGENTS.md — Verstak Desktop
Назначение
verstak-desktop — Core Platform + UI Shell. Это минимальное ядро, которое запускает приложение, управляет плагинами и предоставляет общий интерфейс. Core не содержит бизнес-функций пользователя.
Главные инварианты
- Core не импортирует official plugins как обязательные модули.
- Core не содержит notes/files/editor/activity/journal как внутренние фичи.
- Все пользовательские функции приходят через динамические плагины.
- Plugin Manager UI — обязательный компонент core с первого этапа.
- Capability registry и contribution registry — механизмы связи, а не жёсткие импорты.
- Плагины не могут обращаться к Wails backend методам напрямую — только через VerstakPluginAPI.
Технологии
- Backend: Go (Wails v2)
- Frontend: Svelte (plain JS, без
lang="ts") - UI Shell: окно, навигация, command palette, settings, plugin manager, dialogs/toasts
Что НЕ входит в core
- Markdown editor (это плагин)
- File manager (это плагин)
- Notes workflow (это плагин)
- Activity / journal (это плагины)
- Browser inbox (это плагин)
- Search (это плагин)
- Secrets (это плагин)
- Templates (это плагин)
Plugin Runtime
- Discovery — сканирование plugin directories, чтение plugin.json
- Validation — проверка schemaVersion, apiVersion, обязательных полей
- State check — enabled/disabled
- Capability resolution — проверка requires/optionalRequires
- Permissions — запрос, отображение пользователю
- Backend sidecar — launch, если нужен
- Frontend bundle — загрузка, если есть
- Registration — capabilities и contributions в registry
- Status — loaded / degraded / failed / incompatible / missing-required-capability
Структура репозитория
verstak-desktop/
AGENTS.md
go.mod
main.go
cmd/
internal/
core/
plugin/
discovery.go
manifest.go
state.go
lifecycle.go
capability/
registry.go
contribution/
registry.go
permissions/
registry.go
events/
bus.go
settings/
registry.go
vault/
api.go
storage/
api.go
diagnostics/
api.go
sync/
boundary.go
shell/
app/
navigation/
window/
command-palette/
plugin-manager/
ui/
settings/
dialogs/
api/
plugin.go
frontend/
src/
wails.json
...
Verification language policy
Do not say "checked", "verified", "works", or "all good" unless a concrete verification command or user scenario was executed.
Use exact labels:
- Build checked
- Unit tests checked
- Backend behavior checked
- Frontend E2E checked
- Real desktop GUI checked
- Not checked / requires manual verification
If GUI behavior was not clicked and asserted, report: "GUI behavior was not verified."
GUI testing
Frontend E2E tests are in frontend/e2e/. Run with npm run test:e2e.
These tests use Playwright + mocked Wails bindings. They test Svelte component
logic and user interactions in a real Chromium browser.
Limitations: Playwright tests do NOT test the real WebKitGTK/Wails native shell. For real desktop GUI verification, a separate AT-SPI/xdotool layer is needed (not yet implemented).
See docs/GUI_TESTING.md for details.
Debug logging
Always use debug logging when investigating issues. Never rely on "it should work" — look at the logs.
Backend debug
Enable with --debug flag:
./verstak-desktop --debug
Logs go to: ~/.local/share/verstak/debug/verstak-YYYY-MM-DD-HHMMSS.log
View in real-time:
tail -f ~/.local/share/verstak/debug/verstak-*.log
What's logged (when --debug is active):
- Plugin discovery: dirs scanned, each plugin found (id, name, version, source, root)
- Plugin lifecycle: capability registration, contribution registration, status transitions
- API calls: GetPlugins, GetContributions, GetCapabilities, ReloadPlugins, EnablePlugin, DisablePlugin
- Vault operations: open/close/status
Frontend debug
Enable via either:
- URL query param:
?debug(not practical in Wails, use #2) - In browser console:
localStorage.setItem('verstak-debug', 'true')then reload
Logs go to:
- Browser console (with
[debug]prefix) - localStorage buffer:
localStorage.getItem('verstak-debug-log')(last 1000 entries)
Export frontend log from console:
copy(JSON.parse(localStorage.getItem('verstak-debug-log')))
// or
window.__verstakDebug.exportLog()
What's logged:
- App startup: checkVault, GetAppSettings, GetVaultStatus
- Navigation: onNav, onOpenView, onOpenSettings, onCloseSettings
- PluginManager: loadAll (start/end, plugin count, each plugin status), reload, enable/disable
- Sidebar: onMount (plugins loaded, sidebar items count), handleNav, handleSidebarItem
Debug workflow
- User reports issue
- Restart app with
--debugand reproduce - Run
tail -f ~/.local/share/verstak/debug/verstak-*.logand share output - For frontend issues: enable frontend debug view
exportLog()output - Analyze logs, identify root cause, fix
- Verify fix by asking user to reproduce again with debug on
Never skip step 2-4. Always look at real logs before proposing fixes.