Go to file
mirivlad 4df83cd361 security: стабилизационный аудит Lua plugin system
Исправления:
- Install: идемпотентность (no duplicates in InstalledPlugins)
- ReloadPlugins: StopSchedulers + CallShutdownHooks перед CloseRuntimes
- StopSchedulers: обнуление scheduler=nil после остановки
- Scheduler.Stop: обнуление tasks после wg.Wait
- Lua sandbox: блокировка package.loadlib/seeall/preload/loaders/loaded/path/cpath/config/searchpath
- Lua sandbox: блокировка load (глобальная функция)
- CallPluginFunction: валидация funcName (regex [a-zA-Z_][a-zA-Z0-9_]*, max 3 segments)
- CallPluginFunction: убрана строковая сборка Lua-кодa, вызов через PCall напрямую
- PluginPage.svelte: проверка e.source === iframeEl.contentWindow
- PluginPage.svelte: type checking для msg.source, msg.action

Тесты:
- security_test.go: 18 новых тестов (sandbox, lifecycle, validation)
- Все существующие тесты проходят

Документация:
- docs/plugins-security.md: модель безопасности, sandbox, протокол, lifecycle
2026-06-07 19:19:44 +08:00
.codex feat: ШАГ 1 — Bridge HTTP-сервер для браузерного расширения 2026-06-06 18:23:47 +08:00
build/linux chore: add wails.json, remove wails3 artifacts, rebuild binaries 2026-06-03 01:48:12 +08:00
cmd security: стабилизационный аудит Lua plugin system 2026-06-07 19:19:44 +08:00
contrib/plugins feat: plugin install/uninstall lifecycle + UI buttons 2026-06-07 15:28:37 +08:00
docs security: стабилизационный аудит Lua plugin system 2026-06-07 19:19:44 +08:00
extension feat: плагин-система Lua + Calendar reference plugin 2026-06-07 14:59:46 +08:00
extension-firefox feat: плагин-система Lua + Calendar reference plugin 2026-06-07 14:59:46 +08:00
frontend security: стабилизационный аудит Lua plugin system 2026-06-07 19:19:44 +08:00
internal security: стабилизационный аудит Lua plugin system 2026-06-07 19:19:44 +08:00
migrations steps 4-6 + doc overhaul: files, notes, GUI, plugins docs 2026-05-30 20:35:04 +08:00
scripts feat: иконки для Chrome и Firefox расширений 2026-06-06 19:21:28 +08:00
.gitignore fix: transaction-safe AcceptSuggestionWith + safe eventIds fallback + debug logging 2026-06-03 15:10:25 +08:00
AGENTS.md Add Verstak agent project rules 2026-06-06 01:33:39 +08:00
README.md feat: плагин-система Lua + Calendar reference plugin 2026-06-07 14:59:46 +08:00
go.mod feat: плагин-система Lua + Calendar reference plugin 2026-06-07 14:59:46 +08:00
go.sum feat: плагин-система Lua + Calendar reference plugin 2026-06-07 14:59:46 +08:00
test_smoke_sync.sh test: update smoke test for user auth flow 2026-06-01 23:36:38 +08:00
wails.json chore: add wails.json, remove wails3 artifacts, rebuild binaries 2026-06-03 01:48:12 +08:00

README.md

Верстак

Верстак — local-first рабочий vault. Всё организовано вокруг дел, а не задач.

Дело может быть: клиентом, проектом, набором документов, рецептом, архивом, разовой работой. Внутри дела: вложенные папки, Markdown-заметки, файлы, действия (URL/файл/папка/команда), журнал работ, история активности.

Стек

Слой Технология
GUI Wails v2 + Svelte 4
CLI Go
Backend Go
Хранилище SQLite (индекс) + файловая система (vault)
Плагины Lua
Синхронизация HTTP API (опциональный сервер)

Архитектура

                    ┌────────────────────┐
                    │   GUI (Wails v2)   │
                    └─────────┬──────────┘
                              │
                    ┌─────────▼────────┐   ┌─────────────┐
                    │   Core Library   │◄──│ CLI Commands │
                    └─────────┬────────┘   └─────────────┘
                              │
                    ┌─────────▼──────────┐
                    │ Local Vault+SQLite │
                    └─────────┬──────────┘
                              │
                    ┌─────────▼──────────┐
                    │    Sync Client     │
                    └─────────┬──────────┘
                              │
                    ┌─────────▼──────────┐
                    │   Sync Server      │
                    └────────────────────┘

Быстрый старт

Требования

  • Go 1.25+
  • Node.js 20+
  • libwebkit2gtk-4.1-dev, libgtk-3-dev и другие Wails-зависимости (см. wails.io/docs/desktop/linux)
  • npm

Сборка

# Всё сразу (GUI + сервер)
./scripts/build.sh

# Или по отдельности
./scripts/build.sh gui      # только GUI
./scripts/build.sh server   # только сервер

Проверка GUI перед коммитом:

./scripts/check-gui.sh

Она проверяет локали, production-сборку фронтенда, актуальность embedded Wails assets и компиляцию GUI-бинаря. Дополнительно запускается headless Chromium smoke через Wails-mock: проверяются first-run, recovery, основное окно, Settings, workspace, вкладки дела, файлы, журнал, активность и мобильный viewport. Smoke выполняет реальные UI-действия: создание заметки, запись worklog, создание узла, вход в папку и возврат назад, а также Sync Now с предупреждениями о conflicts/applyErrors. Скриншоты пишутся в /tmp/verstak-gui-smoke.

Бинарники попадают в build/:

  • verstak-gui-linux-amd64 — GUI-приложение
  • verstak-server-linux-amd64 — опциональный сервер синхронизации

Запуск

# GUI (после сборки)
./build/verstak-gui-linux-amd64

# Сервер (после сборки)
./build/verstak-server-linux-amd64 --help

# CLI
go run ./cmd/verstak/ --help

Структура проекта

.
├── cmd/                   # Точки входа
│   ├── verstak/           #   CLI
│   ├── verstak-gui/       #   Wails GUI
│   └── verstak-server/    #   Sync server
├── internal/
│   ├── core/              # Бизнес-логика
│   │   ├── actions/       #   Действия (URL, папка, команда)
│   │   ├── config/        #   Конфигурация
│   │   ├── files/         #   Файлы и импорт
│   │   ├── i18n/          #   Интернационализация (Go)
│   │   ├── nodes/         #   Дела/узлы дерева
│   │   ├── plugins/       #   Lua-плагины
│   │   ├── search/        #   Поиск
│   │   ├── storage/       #   SQLite + миграции
│   │   ├── sync/          #   Синхронизация
│   │   ├── templates/     #   Шаблоны дел
│   │   ├── vault/         #   Vault layout
│   │   └── worklog/       #   Журнал работ
│   └── gui/               # Wails bridge (embedded HTML)
├── frontend/              # Svelte-приложение
│   └── src/
│       ├── lib/
│       │   └── i18n/      #   Локали (JS)
│       └── ...svelte      #   Компоненты
├── migrations/            # SQL-миграции
├── docs/                  # Документация
└── scripts/               # Вспомогательные скрипты и сборка

CLI команды

go run ./cmd/verstak/ sync           # Синхронизация с сервером
go run ./cmd/verstak/ sync configure # Настройка сервера
go run ./cmd/verstak/ sync status    # Статус синхронизации

Vault layout

Данные хранятся в локальной папке (vault). Структура на диске:

vault/
  .verstak/              # Служебные данные: index.db, config.yml, trash, blobs
  Проекты/               # Пользовательские папки-дела
    Клиенты/
    Рабочие/
    Archive/

Внутри папок-дел: Notes/, Files/, Documents/, Overview.md. Vault открывается в любом файловом менеджере без специальных инструментов.

Документация

Раздел Описание
Описание продукта Аудитория, сценарии, фичи
Архитектура Компоненты, плагины, sync
Модель данных SQLite, vault, файлы
Синхронизация Sync, backup, activity
UI/UX Экраны GUI
Плагины Lua-плагины, шаблоны
Сервер синхронизации Установка и настройка сервера
Vault layout Структура папок на диске
План Дорожная карта
Шаблоны Шаблоны дел

Лицензия

MIT