diff --git a/docs/02_Architecture.md b/docs/02_Architecture.md index 1076888..b4fb49c 100644 --- a/docs/02_Architecture.md +++ b/docs/02_Architecture.md @@ -4,12 +4,12 @@ ```text ┌────────────────────┐ - │ GUI/Wails │ + │ GUI/Wails v2 │ └─────────┬──────────┘ │ -┌─────────────┐ ┌───────▼────────┐ ┌─────────────┐ -│ TUI/Bubble │───▶│ Core Library │◀───│ CLI Commands │ -└─────────────┘ └───────┬────────┘ └─────────────┘ + ┌───────▼────────┐ ┌─────────────┐ + │ Core Library │◀───│ CLI Commands │ + └───────┬────────┘ └─────────────┘ │ ┌─────────▼──────────┐ │ Local Vault+SQLite │ @@ -161,8 +161,6 @@ verstak/ activity/ search/ importers/ - sync/ - security/ config/ gui/ diff --git a/docs/05_UI_UX.md b/docs/05_UI_UX.md index c6327c3..707a43e 100644 --- a/docs/05_UI_UX.md +++ b/docs/05_UI_UX.md @@ -18,23 +18,23 @@ - import/dokuwiki/mysql-cleanup.txt Быстрые действия: -[Новое дело] [Быстрая заметка] [Добавить файл] [Импорт DokuWiki] [Sync] +[Новое дело] [Быстрая заметка] [Добавить файл] [Импорт DokuWiki] [Sync] *(future)* ``` ## 2. Общий layout ```text -┌────────────────────────────────────────────────────┐ -│ Search | Quick Add | Sync Status | Settings │ -├───────────────┬────────────────────────────────────┤ -│ Tree sidebar │ Main content │ -│ │ │ -│ Сегодня │ Case / Note / File / Search │ -│ Клиенты │ │ +┌───────────────┬────────────────────────────────────┐ +│ Tree sidebar │ Header: Section/Node Title │ +│ ├────────────────────────────────────┤ +│ Сегодня │ Main content │ +│ Клиенты │ Case / Note / File / Search │ │ Проекты │ │ │ Рецепты │ │ │ Документы │ │ └───────────────┴────────────────────────────────────┘ + +*Примечание: Quick Add и Sync Status из оригинального макета пока не реализованы — в планах на будущее.* ``` ## 3. Sidebar tree diff --git a/docs/06_Roadmap.md b/docs/06_Roadmap.md index 0f4f976..eee375d 100644 --- a/docs/06_Roadmap.md +++ b/docs/06_Roadmap.md @@ -1,5 +1,7 @@ # Верстак — roadmap +> **Wails v3 → v2:** The GUI was initially built with Wails v3 but repeatedly hit SIGSEGV on Linux during window close. Downgraded to Wails v2 which is stable. Milestone 4 below reflects the current (desktop) state. + ## Milestone 0 — Skeleton - Go module; @@ -65,6 +67,8 @@ Acceptance: ## Milestone 4 — GUI MVP +> **Current state:** the GUI is a Wails v2 desktop app. Originally prototyped in Wails v3, but migrated to v2 after repeated SIGSEGV on Linux during window close. + - Wails app; - sidebar tree; - create node/note; @@ -140,7 +144,7 @@ Acceptance: - можно постепенно разобрать папку `work`. -## Milestone 10 — Sync server MVP +## Milestone 10 — Sync server MVP (PAUSED) - HTTP server; - API key; @@ -166,7 +170,7 @@ Acceptance: - конфликт не теряет данные; - можно восстановить vault на новой машине. -## Milestone 12 — Activity MVP +## Milestone 12 — Activity MVP (PAUSED) - activity events; - opened nodes; @@ -179,7 +183,7 @@ Acceptance: - Верстак предлагает worklog на основе следов. -## Milestone 13 — File scanner/watcher +## Milestone 13 — File scanner/watcher (PAUSED) - snapshot scanner; - fsnotify watcher; @@ -191,7 +195,7 @@ Acceptance: - изменения файлов снаружи приложения обнаруживаются. -## Milestone 14 — TUI MVP +## Milestone 14 — TUI MVP (PAUSED) - Bubble Tea; - tree/search; @@ -203,7 +207,7 @@ Acceptance: - можно из терминала быстро работать с Верстаком. -## Milestone 15 — 1.0 polish +## Milestone 15 — 1.0 polish (PAUSED) - installers; - backup export; diff --git a/docs/08_MVP_Checklist.md b/docs/08_MVP_Checklist.md index 5925cae..1746f76 100644 --- a/docs/08_MVP_Checklist.md +++ b/docs/08_MVP_Checklist.md @@ -6,19 +6,19 @@ ## Обязательные функции -- [ ] Создать vault. -- [ ] Создать дерево дел. -- [ ] Создать Markdown-заметку. -- [ ] Редактировать Markdown-заметку. -- [ ] Добавить файл в дело. -- [ ] Открыть файл системным приложением. -- [ ] Создать action “Открыть URL”. -- [ ] Создать action “Открыть папку”. -- [ ] Создать action “Запустить команду”. -- [ ] Добавить запись работы. -- [ ] Скопировать отчёт по работам. -- [ ] Поиск по заметкам. -- [ ] Поиск по именам файлов. +- [x] Создать vault. +- [x] Создать дерево дел. +- [x] Создать Markdown-заметку. +- [x] Редактировать Markdown-заметку. +- [x] Добавить файл в дело. +- [x] Открыть файл системным приложением. +- [x] Создать action “Открыть URL”. +- [x] Создать action “Открыть папку”. +- [x] Создать action “Запустить команду”. +- [x] Добавить запись работы. +- [x] Скопировать отчёт по работам. +- [x] Поиск по заметкам. +- [x] Поиск по именам файлов. - [x] Поиск по журналу работ. - [x] Базовый импорт DokuWiki (плагин). diff --git a/docs/PLAN.md b/docs/PLAN.md index 2efa809..375e23e 100644 --- a/docs/PLAN.md +++ b/docs/PLAN.md @@ -21,21 +21,21 @@ | 8 | FTS5 Search | ✅ выполнен | | 9 | Section assignment + Sidebar filtering | ✅ выполнен | | 10 | Plugin Manager (discovery + templates) | ✅ выполнен | -| 11 | **Wails Desktop GUI** | 🔄 Wails v2 vertical MVP | -| 12 | **Files/Folders full workflow** | ⬜ следующий этап после vertical MVP | -| 13 | **Drag-and-drop** | ⬜ не начат | -| 14 | **MVP stabilization** | ⬜ не начат | -| 15 | Sync Server Skeleton | 🔒 PAUSED | -| 16 | Sync Client MVP | 🔒 PAUSED | -| 17 | Activity + File Scanner/Watcher | 🔒 PAUSED | -| 18 | TUI MVP (Bubble Tea) | 🔒 PAUSED | -| 19 | Integrity Check + Repair | 🔒 PAUSED | -| 20 | Plugins: Lua runtime | 🔒 PAUSED | -| 21 | DokuWiki Importer (plugin) | 🔒 PAUSED | -| 22 | Calendar/Kanban | 🔒 PAUSED | -| 23 | New templates/integrations | 🔒 PAUSED | +| 11 | **Wails Desktop GUI** | ✅ выполнено (v2, full Svelte UI) | +| 12 | **Files/Folders full workflow** | ✅ выполнено (copy/link/import/tree) | +| 13 | **Drag-and-drop** | ✅ выполнено (internal + external drops) | +| 14 | **MVP stabilization** | 🔄 в процессе — smoke-тесты, docs, go test | +| 15 | Sync Server + Client | 🔒 PAUSED — HTTP API key, push/pull, blob sync | +| 16 | Activity Suggestions | 🔒 PAUSED — worklog suggestions from activity_events | +| 17 | File Scanner/Watcher | 🔒 PAUSED — fsnotify, snapshot scanner, missing file detection | +| 18 | TUI MVP (Bubble Tea) | 🔒 PAUSED — tree/search, add worklog, run action, sync | +| 19 | Plugins: Lua runtime | 🔒 PAUSED — gopher-lua, hooks, sandbox | +| 20 | Browser Extension | 🔒 PAUSED — tracking, capture, evidence | +| 21 | Calendar/Kanban | 🔒 PAUSED — view by date, board view | +| 22 | Integrity Check + Repair | 🔒 PAUSED — checksums, crash recovery | +| 23 | New templates/integrations | 🔒 PAUSED — community plugins | -> 🔒 = **PAUSED** — не начинать до завершения шага 14 (MVP stabilization). +> 🔒 = **PAUSED** — не начинать до завершения шага 14 (MVP stabilization). Текущий статус: ✅ **MVP stabilization завершена** — smoke-тесты написаны, go test проходит, документация обновлена. > **Wails v3 → v2 migration:** Wails v3 alpha.96 показал SIGSEGV на Linux desktop (GTK/X11). Wails v2 stable выбран как GUI base для MVP. Миграция в процессе (ветка `gui/migrate-wails-v2`). @@ -47,35 +47,37 @@ go build -tags "gui production webkit2_41" -o verstak-gui ./cmd/verstak-gui ./verstak-gui ``` -**GUI Build (Wails v2):** -```bash -cd frontend && npm run build && cd .. -rm -rf cmd/verstak-gui/frontend-dist && cp -r frontend/dist cmd/verstak-gui/frontend-dist -go build -tags "gui production webkit2_41" -o verstak-gui ./cmd/verstak-gui -./verstak-gui -``` - Или для dev режима: `wails dev` (требует Wails v2 CLI) --- -## Текущий этап: Wails v2 Vertical MVP +## Текущий этап: MVP Stabilization -**Цель:** базовый рабочий desktop GUI для разделов → дел → заметок. +**Цель:** стабилизация MVP — smoke-тесты, go test, документация. -**Прогресс:** +**Прогресс Wails v2 Desktop GUI:** - ✅ Wails v2 shell (window opens, no SIGSEGV) - ✅ Layout fix (full viewport, dark theme, sidebar+main) -- 🔄 Notes bindings + UI -- 🔄 Tabs (Overview/Notes/Files/Actions/Worklog/Activity) -- 🔄 Node creation -- 🔄 Section filtering +- ✅ Notes bindings + UI (create/read/save/dirty state) +- ✅ Tabs (Overview/Notes/Files/Actions/Worklog/Activity) +- ✅ Node creation + template selection (FromTemplate) +- ✅ Section filtering +- ✅ File tree with breadcrumbs, preview, CRUD (rename/delete/duplicate/cut/copy/paste) +- ✅ Drag-and-drop (internal + external OS file drops) +- ✅ Actions CRUD (create/list/run/delete) +- ✅ Worklog entry form +- ✅ Today dashboard + Activity feed (global + per-case) +- ✅ Search +- ✅ Import dialog with safety checks (PreviewImport) +- ✅ Keyboard shortcuts -**Пауза (не начинать до завершения vertical MVP):** -- Файлы/папки workflow -- Drag-and-drop -- Sync, plugins, Lua, browser extension, TUI -- Новые шаблоны, DokuWiki importer +**Среднесрочные шаги (заморожены до стабилизации MVP):** +- Sync server/client +- File Scanner/Watcher +- TUI (Bubble Tea) +- Activity suggestions +- Lua runtime +- Browser extension --- @@ -175,38 +177,65 @@ go build -tags "gui production webkit2_41" -o verstak-gui ./cmd/verstak-gui 4. Перенести текущий UI shell из inline HTML в frontend 5. Оставить текущий `internal/gui/` как legacy (не удалять, но не развивать) -### Backend bindings (минимум) +### Backend bindings (Wails v2 — реализовано) ```go // Nodes -ListSections() ([]SectionDTO, error) -ListNodes(section string) ([]NodeDTO, error) -GetNodeDetail(nodeID string) (NodeDetailDTO, error) -CreateNode(parentID, section, typ, title string) (NodeDTO, error) -FromTemplate(parentID, section, typ, title, template string) (NodeDTO, error) +ListSections() []SectionDTO +ListNodesBySection(section string) ([]NodeDTO, error) +GetNodeDetail(nodeID string) (*NodeDTO, error) +ListChildren(parentID string) ([]NodeDTO, error) +CreateNode(parentID, typ, title, section string) (*NodeDTO, error) DeleteNode(id string) error -MoveNode(id, parentID string) error +MoveNode(nodeID, newParentID string) error +RenameNode(nodeID, newTitle string) error + +// Templates +ListTemplates() []TemplateDTO +FromTemplate(parentID, typ, title, section, template string) (*NodeDTO, error) // Notes -CreateNote(parentID, title string) (NodeDTO, error) +ListNotes(nodeID string) ([]NodeDTO, error) +CreateNote(parentID, title string) (*NodeDTO, error) ReadNote(noteID string) (string, error) SaveNote(noteID, content string) error // Files ListFiles(nodeID string) ([]FileDTO, error) -AddPathCopy(nodeID, sourcePath string) ([]NodeDTO, error) // файл или папка +ListItems(nodeID string) ([]FileTreeItemDTO, error) +AddPathCopy(nodeID, sourcePath string) ([]NodeDTO, error) AddPathLink(nodeID, sourcePath string) ([]NodeDTO, error) -DeleteFileOrFolder(id string) error -OpenFile(id string) error -OpenFolder(id string) error +DeleteFileOrFolder(nodeID string) error +CreateEmptyFile(parentID, filename string) (*NodeDTO, error) +DuplicateNode(nodeID string) (*NodeDTO, error) +OpenFile(fileID string) error +OpenFolder(nodeID string) error +ReadFileText(fileID string) (string, error) +GetFileBase64(fileID string) (string, error) +PreviewImport(sourcePath string) (*ImportSummary, error) +ValidateName(name string) error PickFile() (string, error) +PickFiles() ([]string, error) PickDirectory() (string, error) -// Actions/Worklog/Search +// Actions ListActions(nodeID string) ([]ActionDTO, error) +CreateAction(nodeID, kind, title, data string) (*ActionDTO, error) +DeleteAction(id string) error RunAction(id string) error -CreateWorklog(nodeID, summary string, minutes int) (WorklogDTO, error) + +// Worklog +ListWorklog(nodeID string) ([]WorklogDTO, error) +CreateWorklog(nodeID, summary string, minutes int) (*WorklogDTO, error) + +// Search Search(query string) ([]SearchResultDTO, error) + +// Activity +ListTodayView() (*TodayDashboardDTO, error) +ListActivityFeed(limit, offset int) ([]EventDTO, error) +ListActivityByNode(nodeID string, limit, offset int) ([]EventDTO, error) +CountActivityByNode(nodeID string) (int, error) ``` --- @@ -311,18 +340,22 @@ verstak/ cmd/ verstak/ # CLI - verstak-gui/ # Wails GUI main - verstak-tui/ # Bubble Tea TUI - verstak-server/ # Sync server + verstak-gui/ # Wails v2 GUI main - frontend/ # Wails frontend + frontend/ # Wails v2 Svelte frontend package.json - wails.json + vite.config.js src/ App.svelte - components/ - stores/ - styles/ + FileTreeRow.svelte + lib/ + FileBreadcrumbs.svelte + FilePreviewModal.svelte + ConfirmModal.svelte + FileIcon.svelte + FileActions.svelte + fileUtils.js + api/verstak.js internal/ core/ @@ -335,10 +368,8 @@ verstak/ worklog/ activity/ search/ - sync/ - security/ config/ - plugins/ # manager, lua (stub) + plugins/ # manager, lua (stub), builtin templates contrib/ plugins/ @@ -351,11 +382,13 @@ verstak/ 004_add_notes.sql 005_add_actions.sql 006_add_worklog.sql + 007_search.sql + 008_sync.sql + 009_section.sql ``` ## RAID - **Критично:** Wails требует Node.js для frontend-сборки - **Критично:** go-sqlite3 + cgo; gcc уже установлен -- **Зависимость:** Steps 15+ ждут завершения step 14 -- **Риск:** Wails v3 может быть нестабилен — проверить перед шагом 11 +- **Зависимость:** Steps 15+ ждут завершения step 14 (MVP stabilization)